An AI Programmer Who Writes Sensibly Within an Architecture

Be sure to watch the video; it is embedded directly in this article: in it, I show with a live example how we develop complex web systems using AI, why ordinary vibe coding is suitable only for small things, and what a mature approach looks like, where architecture, business logic, screens, and integrations are designed first, and only then AI accelerates development, making prototypes, charts, CRM modules, and events cheaper and faster =)

An AI Programmer Who Writes Sensibly Within an Architecture
INGELLO / BUSINESS1943
Contact us
The Fractal generator: SFL code of a bus transport schema on the left, a relationship diagram of 25 business objects and generation buttons on the right
A real screen of the Fractal generator: the SFL description of bus transport on the left, the relationship diagram the generator built from it on the right. 25 business objects, not a single line of SQL typed by hand.

This case is about how our AI developer actually works. Spoiler: it does not write a whole project from scratch after hearing "build me a CRM". It writes a description of the system in three small, strict languages, and the code, database, API and admin panel are built from that description by Fractal, our generator. It builds them the same way on every run, with no inspiration and no hallucinations.

Right now the market looks a bit like a noisy bazaar. On one side everyone shouts that artificial intelligence is about to replace programmers. On the other side businesses keep losing money on clumsy integrations, manual work, frozen spreadsheets and systems that break at the worst possible moment. Dictating "build me a CRM, an ERP and a client portal" to a chat sounds lovely, but in a real business such tricks work exactly until the first normal complication.

In the video I show it on a live example: a simple CRM prototype with a client, a card, a table, filters, statuses and events. Below we look under the hood: how the ISFL, SFL and IFL languages work, what exactly Fractal generates, where AI sits in this chain and where it is deliberately absent.

Why vibe coding is only good for small things

Let's skip the holy wars. Vibe coding, no-code and low-code are not evil. A small screen, a form, a filter, a table, a landing page with some logic: modern tools really do speed this up, and arguing with that is silly.

But a complex system is no longer a stool made of three boards. It is a city with roads, crossroads, utilities and traffic rules. It is home to the business rules the company actually runs on, to integrations where one system has to talk to another properly instead of exchanging tantrums, and to state scenarios where a screen behaves differently depending on the role, status, date and a dozen details that surface after the client's first phone call.

AI can quickly draw a beautiful shop window, but it does not always understand where the load-bearing walls are. And oddly enough, the business cares about the walls more. So we split the work: the walls are described formally and built by the generator, and AI helps where it is genuinely strong.

Fractal in two paragraphs

Fractal is an automated development technology we have been building for more than eight years. You do not type a system in it, you describe it: which entities and relations exist, which screens, which components on those screens and where links lead. The generator takes the description, checks it with a validator and produces the MySQL schema, migrations, models, a CRUD admin panel, a REST API with documentation, interface screens, fake data and tests. The project base (Yii2, Docker setup, authentication, files, translations) comes from a prototype that is copied for every new system.

Roughly speaking, it is a constructor that builds constructors. The history, architecture and valuation of the platform are covered in a separate case, FRACTAL: automation of programming and software development. Here we look at the mechanics.

How it works: description, generation, system

The Fractal pipeline: requirements, ISFL, SFL and IFL, generator, SQL, admin panel, API, screens, tests
  1. Requirements. A spec, a brief or just a conversation with the client.
  2. ISFL. Requirements are laid out as a map of screens: which screens exist, which pattern each one uses, which models take part and where you can go from it.
  3. SFL and IFL. Two models are derived from the map: a data model in SFL and an interface model in IFL.
  4. Validation. The generator checks both descriptions against strict rules: names, types, relations, whether linked screens exist. An error is highlighted right in the editor.
  5. Generation. SQL, migrations, models, CRUD, API, screens, menus and fake data are built from the validated description. Running it again with the same description gives the same result.
  6. Manual work. Whatever makes the client's business special is written by hand or with CodeGen in dedicated places.

The three Fractal languages

The languages are small and boring on purpose. A boring language is easy for a person to read, easy for a model to write and impossible to read two ways.

ISFL: a map of screens and the flow

ISFL describes the application from above. One screen is a block of exactly seven lines: technical name, title, pattern, description, events, links to other screens and models. Blocks are separated by an empty line.

orders_param
Заказы
list-table
Список заказов пользователя
Просмотр, фильтрация
order_param,profile_param
order,user

The pattern comes from a closed list: crud, list-table, form, model-profile, calendar, chat, google-map and about fifteen more. A link to a screen that does not exist is a validation error, not a surprise during the demo. Five system screens (layout, home, login, registration, profile) are added automatically, so nobody can forget them, even with real effort.

ISFL Builder in Fractal: project name, business requirements text and the decomposition button
ISFL Builder: you paste the spec here and the model breaks it down into screens and data. The design is honestly engineering-grade.

SFL: the data schema

SFL describes the database. The first line of a block is the table, the rest are fields. A human-readable label goes before the vertical bar, the technical name after it. An exclamation mark makes a field required. A field ending in _id becomes a foreign key. Here is a real fragment of a CRM schema from our registry (the labels are in Russian, as in the original):

Проект|project
Название|name !
Описание|description ? text
Клиент|client_id !
Дата_начала|start_date date
Статус|status !

Задача|task
Название|name !
Проект|project_id !
Ответственный|user_id !
Дата_создания|created_at

The generator infers half of the types from the field name: *_at becomes a timestamp, description and *_text become text, *_price and *_cost become money, is_* becomes a boolean. You do not write the id field or the user table, they always exist. Labels before the bar go into UI captions and SQL column comments. Standard names such as email, phone_number or latitude are recognised by the fake data generator and filled plausibly, so the prototype looks alive from the first run instead of being a pile of "test1, test2".

SFL: how description code becomes the project, client and task tables and the relations between them
The SFL editor in Fractal with the CRM schema and the resulting project, client, task, user relationship diagram
The same fragment in the generator: SFL on the left, the relationship diagram on the right. Three business objects, three arrows, no magic.

The article cover shows the same mechanics at scale: a bus transport schema with 25 business objects, trips, route segments, bookings, promo codes and recalculations. Our transport systems grew on this base.

IFL: screens on top of models

IFL describes the interface and relies on SFL. A screen is a block, and the grid is set with lines: a dash opens a new row, a number from 1 to 12 sets the column width. A component is a single line of three parts: the model, the component type and the fields separated by slashes.

client_management_param
-
12
Мои_объекты title 1
9
client list:2 company_name/contact_person/email/city/
    screen_client_detail_param_id
3
client form company_name/contact_person/email/city/
    screen_save_id

There are three meaningful lines here: a full-width title, a list of clients as cards in two columns taking 9 of 12 columns on the left, and a form for the same model taking 3 columns on the right. screen_client_detail_param_id turns into a link to the client card, and dot notation such as project.client.city pulls a field through a relation. There are about twenty component types: forms, filters, tables, sliders, cards, media, hero blocks and custom components when the standard ones are not enough.

IFL: screen code lines and how they become a title, a list of cards and a form

A special point of pride is business logic directives. Lines such as event:order:before_update, action:order:recalculate or method:order:build_pdf written right in the screen description are registered in the documentation and become method stubs in the model's service. Logic does not get lost between the screen and the code, it is written down where it was invented.

IFL description of CRM screens in the Fractal editor: dashboard, project overview, client management
IFL for CRM screens in the Fractal editor. The editor is shared by both languages, so the wavy lines here are a check against SFL rules. IFL is checked by its own validator when the interface is generated. Yes, we see the irony.
IFL in the Fractal generator: screen code with syntax highlighting on the left, design components in the middle, design variables and CSS on the right
IFL in the Fractal generator: screen code with syntax highlighting on the left, design components in the middle, design variables and CSS on the right
Design panel: colours, gradients, spacing, shadows and fonts become :root CSS variables shared by every generated screen
Design panel: colours, gradients, spacing, shadows and fonts become :root CSS variables shared by every generated screen

What Fractal generates

  • SQL and migrations. Tables, types, required fields, foreign keys, column comments.
  • Models and a CRUD admin panel. Admin sections for every entity, menus, filters, sorting, pagination.
  • REST API with documentation. List, view, create, update and delete endpoints for every model, plus Swagger that lets a frontend or a mobile app connect without oral tradition.
  • Interface screens. Pages and components from IFL, layout, menus, links between screens.
  • Fake data. Based on field names, and where a name says nothing, a model picks values that make sense for the domain. The demo looks like a working system, not an empty database.
  • Tests. Checks of the generator itself against reference schemas and generation of Playwright E2E scenarios for the generated screens.
  • Draft documents. The "Generate spec" button and its neighbours assemble a draft specification and a system description from the schema for discussion with the client.
Swagger documentation of an API generated by Fractal: index, view, create, update, delete endpoints for Organization
Generated API documentation: each model gets its own set of endpoints. None of them was written by hand.
An interface generated by Fractal: PWA home screen with a plan, registration, login and counters on demo data
This is what a generated interface looks like on the demo stand. The numbers and the plan are demo data, so there is no need to buy the "Standard for 120000 UAH".

Where the AI developer fits in

Put simply, AI is good wherever an engineer used to work as a very expensive photocopier. In Fractal it got exactly that kind of work, and here is how it is organised.

  • AI writes descriptions, not code. ISFL Builder sends the spec to a model and gets back a map of screens in a strict format. In the next step the model writes SFL and IFL from the requirements and the ISFL. Everything it writes goes through the same validators as a human's code. A wrong type or a link to a missing screen, and the description is rejected.
  • The generator is deterministic. The code is built by Fractal, not by the model. The same description always gives the same SQL, the same models and the same screens. This is the main safety net: the model may fantasise in a draft, but not in production code.
  • CodeGen for targeted work. When a screen needs non-standard logic, the CodeGen button builds a separate prompt for Codex for each screen: the screen's IFL block, the SFL schema, the directives and a short list of files it is allowed to touch. Custom components carry a marker, and without it the model does not write to the file. Every run, its tokens and errors go to a log.
  • A person owns the idea. The architect reads the description, not thousands of lines of generated code. The CRM description above fits on one screen, and you can argue about it with the client on substance.

This is the very approach I talk about in the video: first a person builds the skeleton and the nervous system, and only then AI helps grow the muscles and skin quickly. You can do it the other way round, but then you first inflate a beautiful rubber mannequin and then try to work out how to attach a spine to it.

Limitations we mention up front

  • The stack is fixed. The output is PHP, Yii2, MySQL, Docker. If a project needs a different stack, Fractal helps design the data and screens but will not generate the code.
  • Unique business logic is written by hand. Fractal builds the database, API and admin panel, while whatever makes transport transport and a clinic a clinic (seat calculation by route segment, money, roles, integrations) is written by engineers. The generator saves routine, it does not think for us.
  • IFL is meant for typical screens. Forms, lists, cards, tables, filters. Non-standard design goes into custom components, and IFL has a separate type for them.
  • Discipline is mandatory. One SFL line is one column, the IFL field list has no spaces, and hand-written code lives in services and components, not in generated files. Otherwise the next regeneration will erase it neatly and without malice.
  • The generator is a working tool, not a product. Its interface is engineering-grade, there is no onboarding, and we show it on a call rather than sell it by subscription.

What came out of it

Fractal does not live apart from projects, it lives inside them. A few systems that grew on this base and have detailed cases:

  • Bus Ticket: an admin system for selling bus tickets. The data schema, the API with documentation and the base admin panel were generated, routes, seats, prices and bookings were written by hand.
  • Bus booking: a system for a carrier, from the website to the owner's panel, built on the Fractal bus transport schema.
  • Svit BUS: an app, a website and a ticket booking back office.
  • NorthWest: a CRM for a logistics consulting company, where SFL and deterministic generation made it possible to fit noticeably more into the budget than usually fits into an MVP.
  • Corporate software for a German holding: SFL was used to describe entities, the database, the API and part of the documentation.

Why the architect matters more now, not less

The faster you can produce something, the more dangerous a mistake in the idea becomes. A wrong idea used to be implemented slowly and expensively, and the business had a chance to spot trouble early. Now a bad idea can be implemented surprisingly fast. In other words, poor decisions scale faster too. Progress, you have to admit =)

Waiting for everything to start writing itself is like buying a jet engine and hoping it will build the plane on its own. First you need aerodynamics, a structure, calculations and a person who understands why the plane is flying there in the first place. A strong architect today does not sit on a throne of UML diagrams forbidding everyone to live. They turn the chaos of requirements into a description from which a system can be assembled quickly and predictably. Fractal is exactly that for us: small things really can be done faster now, and big things can be done faster without losing your head.

Where to see it

The Fractal generator lives on our stand and is shown on a call: we open the editor together, write a piece of SFL for your task and see what comes out. There is no public link: the generator holds the schemas of live projects.

Need a system, not another digital attraction?

If you need a complex web system, a CRM with integrations, a quick SaaS prototype or a gradual replacement of a zoo of programs with a coherent platform, come to Ingello Systems. We start with a free consultation: we go through the process and the data, show which part of the system fits the generator and which needs manual work, and only after that we name a price.

Technology stack and approaches

SaaS architecture Microservices Cloud computing Software scalability API integrations DevOps processes High-load systems Solution cybersecurity