Architect layer

Design

The name, addresses, meta and appearance of this project. Saved settings are read at runtime — a change shows on the next page load, with no rebuild.

Blocks

Every block this project can build a page from, drawn by the real renderer. Grouped by what the block is for.

A block is the unit a page is made of. A page here is not a laid-out file — it is a LIST OF BLOCKS. The renderers are already compiled; the page says which kinds stand on it, in what order and with what text. That is why every page in the project looks like one product rather than like the work of five different people.

workspace01workspace · без верхнего ряда

A working screen rather than a page to read: a menu on the left, content on the right. Dashboards and project tools are built from this — the layout is taken from the architect layer that already runs on it, not invented here. On a phone the left column becomes a drawer that opens to 90% of the width and closes on any click. Menu entries are links only when they carry an address; without one they are plain marks, because a dead link in a catalogue is worse than no link.

Languages

Which languages the site speaks. Enabling one later is a setting, not a rebuild of the way the site works.

Add one language at a time

Each language is its own set of prerendered pages. Adding them one by one keeps a build failure attributable to a single change.

A language costs pages, not speed

Serving a prerendered page is the same work regardless of how many languages exist beside it — but every language multiplies what has to be generated.

Saving is not applying

The language set lives in the environment file and is baked in at build time. Until the project is rebuilt, the site keeps serving the previous set.

Enabled languages

This is the part a project fills with whatever it needs: fields, a table, an island. The block gives the frame and the rules; the content is yours.

  • English — the base language
  • Russian — the owner’s translation
workspace02workspace · с верхним рядом

The same kind with the optional top row of sections — the second case, and it is a FIELD rather than a second kind. The drawing is identical; only `tabs` appears. Two kinds would have drifted apart on the first theme change, exactly as a quote with a lead would have.

Blocks

The catalogue of what pages are built from. The type answers what to put here; the kind answers what draws it.

The catalogue is closed

A kind not declared in the set does not exist for the application, and the build refuses. That is the whole reason two pages of one site cannot drift apart.

Below the row goes whatever the section is about — here a catalogue, on a dashboard a chart, in a tool its own controls.

chat01

A run of messages as a section of the page: the feed of the project chat tool, without an input field. Take it to show a conversation — with a person, with an assistant, with a bot. Six kinds of attachment fit under a message: audio, image, video and document, which the library recognises by media type, plus a place and a calendar event, which are ours. A working chat is put in place by a consumer that owns the state.

Chat

One implementation of a conversation for the whole project — and everything a message can carry.

@roma · 10:14

Sending the voice note and the photo from the site.

voice-note.m4a
development-loop-2026.jpg
development-loop-2026.jpg
assistant · 10:14

Got both. The photo is shown as a preview, the voice note as a row — the library decides that by media type, not by us.

@roma · 10:21

Here is the walkthrough and the offer.

walkthrough.mp4
offer.pdf
@roma · 10:26

And this is where we meet.

Fatih, Istanbul
41.01380, 28.94970
Walkthrough of the first build
Tue, 3 Sep, 18:00 · one hour, at the office
assistant · 10:26

The place and the event are ours: the library has neither, and both are drawn in the same row shape so a message keeps one list of attachments rather than two.

@roma · 10:31 · Forwarded from @julia

Forwarded messages keep the line above the text — who wrote it, when, and where it came from.

Powered by Fractera