Get a quote

System Architecture · Izmir

System Architecture for Izmir businesses

On a system already in service, the first constraint on an architectural decision is permission to close it. A brand selling into export markets has a catalogue that gets read overnight, and any work has to happen while that reading continues. So the question stops being whether to rewrite and becomes which layer is carrying the load. On the KGM SsangYong corporate site we took those load-bearing places one at a time.

System Architecture — Izmir

When production and retail in Izmir work to export orders, a brand keeps its catalogue open overnight as well. If a brand's own catalogue is the first door in front of a sale, maintenance has to happen without shutting that door. The second constraint is who keeps the system afterwards. When the team carrying it forward sits on the brand's side, the architecture is not allowed to add a dependency. The work closest to this province's sector profile is the KGM SsangYong corporate site. Where it does not overlap: this is an automotive corporate site, and we have nothing to show on export paperwork, customs processes or dealer network management. The stack stayed where it was, Laravel with Tailwind and jQuery, while Redis took the read load and MySQL entered only when data changed.

  • Catalogue reads are served from a Redis cache, so the same query does not run from scratch for every visitor and MySQL is reached only when the data behind it changes.
  • Vehicle images were moved into one naming and folder order, so which model uses which file can be seen without reading code and adding a model stops being a file hunt.
  • The decision was made for whoever maintains it next: we stayed inside the Laravel, Tailwind and jQuery set already in place, and the cache layer was the one addition to the stack.

Why Algoriel

  • The parts read one source

    At Tahlil.com the site, the admin panel and the mobile app read the same information instead of behaving as three systems.

  • Where each job is solved comes first

    Which layer handles which job is decided before code, because work that has to move later is expensive to move.

  • The summary recomputes itself

    As the Günlük Hava Durumu archive grows, the climate summary recomputes from it; nobody maintains a monthly table by hand.

  • One rule for file layout

    On the KGM SsangYong site, where a file is written and under what name now follows one rule the upload code obeys.

  • Where the data divides

    When several institutions share one system, each enters through its own domain and student, guardian and payment records stay inside that institution's boundary. This arrangement is what the term multi-tenant describes.

  • What a record attaches to

    Whether service history is written against a person, an address or a device is settled before the schema exists. Reversing that later means re-attaching everything already recorded.

  • Permission held in the data model

    A teacher, a guardian and an institution administrator reach the same timetable record at their own level of access. Permission is part of how the record is defined, not a view switched off on a screen.

  • Splitting the read path

    Which screens are served from a held copy and which go to the database is settled before the first record exists. On Vipkurum a frequently opened screen comes from the copy, and only a read with no copy reaches the database.

  • Interfaces on a single system

    Tahlil.com hangs three interfaces off one system: the patient site, the physician panel and the mobile app read the same record, and no second data model is written per interface.

  • Storage laid out on day one

    The naming and folder scheme files will live under is fixed at the start; a layout imposed afterwards turns into a migration.

Work like this

System Architecture · Case study

KGM SsangYong corporate site — load-bearing layers, a stack that did not grow

Two decisions shaped the work on a Laravel corporate site we inherited. The first was the read path: catalogue reads now come from a Redis cache, so the same query stops falling to MySQL on every page open. The second was storage order: vehicle images moved into a single naming and folder scheme, which makes it visible without reading code which model uses which file. On model pages we went through image sizes and the requests jQuery was making. The work stayed inside the places carrying page load, and so did the stack: Laravel, Tailwind and jQuery, with nothing added.

Read the case study →

Working with Izmir teams, remotely

We have no office, so work for this city runs remotely and we do not offer on-site support. What was done, and why it was done that way, stays in writing. The project pages mark which builds came out of a partnership.

  • The first release ships as a working piece; extras follow later.
  • Every client we know of is in Turkey.
  • Decisions stay in writing; progress shows in working screens.

Frequently asked

  • The system is live and we cannot take it down. Where do you start?

    With whatever is carrying the load. On the SsangYong corporate site that was two places: a catalogue query running from scratch for every visitor, and an image folder where file ownership was unclear. Both could be handled without pausing the site.

  • Would a rewrite not be cleaner?

    Not necessarily. Rewriting parts that already work means creating risk where there is no load. We changed the read path and the storage order, and left the rest in place.

  • Our own team will maintain it afterwards. Does the stack grow?

    It did not. We stayed inside the Laravel, Tailwind and jQuery set and added no dependency, so the tools the maintaining team knows stayed the same. An architectural decision lasts about as long as the tools the team after you recognises.

  • Why does the read path matter so much for an export-facing catalogue?

    A buyer meets you on that page, and the page opens many times a day. If the same catalogue query falls to the database on each open, load rises with visitor count. Served from cache, the number of reads stops driving the load.

Let us settle where your data divides before any code is written.