01Why this, why now
Two things happened in the same day.
In our morning calls we agreed that the Superapp UI is unstructured: every tool sits at the same level, nothing tells the user where to look first. You two now own the UI. That is the right call. Tayfun uses the tool most, and Enes had the better ideas for it.
In the afternoon Anton showed how he builds websites with Claude today. He built a "Website Factory" skill for an agency in two to three hours. With that skill he relaunched the Digital X Results website in 45 minutes, from start to live, without touching the content. Everyone who saw it said the site feels much more valuable now. Same model as before. What changed: every decision had already been made before the AI started building.
Omni1 sells webdesign as part of Profit Marketing. We want to serve hundreds of clients at some point. That only works if a team member, or an agent, can ship a good website without Dominik reviewing every step. A factory skill is how we get there.
02What a factory skill is, and what it is not
Anton sorts skills into three kinds.
Generic skills
"How to write a Facebook creative." Mostly pointless. The model already knows this, and every new model generation makes such skills more obsolete. Throw them out regularly and test whether it works better without them.
Context skills
"Here is where the data lives, here are the API keys, here is how to pull a Loom transcript." Cheap to build, very useful. No step-by-step guide, just the context the task needs.
Factory skills
Context engineering: a fixed sequence of decision gates that build on each other, so that by the time the AI starts producing, it can deliver 95 percent of the desired result on its own.
Every important decision is made before the page is built, at the point where changing it costs one sentence instead of a rebuild.
The name comes from the division of labour. The human makes the relevant decisions, the AI executes. AI is excellent at execution. It has no way of knowing what you want. A normal chat session ("build me a landing page, I'll give feedback") makes hundreds of micro-decisions silently, and you spend your time correcting the wrong ones after the fact. The factory pulls those decisions forward and makes them explicit. It takes real thinking to design the factory once. After that, the work is systematic and can be handed to anyone on the team.
03The six gates
This is the website factory as Dominik wants it for Omni1. Anton's version has five gates. We name animation explicitly in Gate 3, because that was the open question in the call.
| Gate | Input | What the AI produces | What gets decided | File |
|---|---|---|---|---|
| 0 · Context drop | Brand book, Figma selection, who the client is and what the page must achieve, current homepage, booking or contact path, facts (address, hours, team, ratings, prices) | A completeness check and a list of what is missing | Mode: Website or Landing Page. Whether this is a project at all or a quick fix. Nothing moves on until the list is complete | 00-status.md |
| 1 · Design | Context from Gate 0 | A token set (colours, fonts, accent mechanic, section rhythm) and a design probe: one HTML file with two or three sections (hero, one light content section, one dark poster section) | "Yes, this is the look." CI assets are mandatory here: fonts as woff2, logo as SVG. No silent fallback to similar fonts | 01-design.md plus the probe |
| 2 · Structure and copy | Approved design, the structure canon, client vocabulary (transcripts, briefs, old site) | Page tree, section selection, copy written directly into the page in the approved design, images as marked placeholders | Structure from the canon, deviations only with a reason. Formal or informal address, decided once (Omni1 rule: formal before the first call, informal after). One CTA wording per page | 02-structure.md |
| 3 · Graphics, features, animation, images | Approved page with placeholders | Graphics from the building-block library, never from zero. Features chosen per project. Animations planned here (proven ones live in the library, new ones are decided here). Real images only. Conversion wired: every CTA to the booking tool, tel and WhatsApp links | Which blocks are fix (dress in tokens only) and which are variable (reinterpret per CI). Which features this client gets. A shot list for missing photos. Gate 3 can be approved with documented gaps, launch cannot | shot list in 00-status.md |
| 4 · Mobile | Complete first page | A dedicated mobile pass at about 390 px and 768 px: no horizontal scroll, touch targets, headline breaks, hero crops, table and marquee behaviour, image weight. Screenshots of both viewports, plus a real phone test on staging | Mobile-specific blocks (sticky CTA, mobile navigation) | screenshots |
| 5 · Build plan | One page that is finished end to end | A plan of everything still missing, one line per slice, in build order | The order, and the go for the plan. Then slice by slice: show it, tick it off, ask "next slice or change course?" Going live gets its own, separate go | 05-build-plan.md |
At every gate the question is the same: "Approve Gate N, or what should be different?" A clear yes is approval. Anything else means rework and ask again.
04The approval protocol
The same six steps at every gate. This is what makes the factory safe to hand to someone else.
- Write the gate document to disk, or update the page. Nothing important lives only in the chat.
- Summarise in the chat for a marketing person without dev knowledge. Marketing terms (hero, CTA, conversion) are fine, code jargon is not. Two to four small headings, about a dozen sentences, plus the path to the file.
- Ask, in these words: "Approve Gate N, or what should be different?"
- A clear yes is approval. Anything else means rework, then ask again.
- On approval, set the gate to APPROVED in the status file and move on.
- Backwards is allowed. If a later insight overturns an earlier decision: stop, change the earlier document, set that gate back to "in progress", get it approved again.
The status file
It lives in the client folder and is the first thing a new session reads.
# Status: <client>
Mode: Website | Landing Page
Booking tool: <name and URL>
- Gate 0 — Context drop: open | complete <date>
- Gate 1 — Design: open | in progress | APPROVED <date>
- Gate 2 — Structure and copy: open | in progress | APPROVED <date>
- Gate 3 — Graphics, features, animation, images: open | in progress | APPROVED <date>
- Gate 4 — Mobile: open | in progress | APPROVED <date>
- Gate 5 — Build plan: open | in progress | APPROVED <date>
## Slices
- [ ] Slice 1 — <one line>
## Open photo gaps (shot list)
<or "none">
## Notes for a new session
<everything decided in chat that a new session must know>
Resume rule: if a status file exists for this client, read every document in the folder first, then continue at the first open gate or slice. Never reopen an approved gate unless the user asks or a later gate has overturned it. At the end of every gate and every slice, tell the user this is a safe point to start a fresh session.
05The build plan, explained
This was the confusing part in the call, so here it is slowly.
By the time you reach Gate 5, the first page is already finished end to end.
It has the approved design, the approved copy, the graphics and features, and it has passed the mobile check. For a landing page that means the product is basically done.
The build plan is the list of everything that is still missing around that page. Typical slices for a website:
- one sub-page per slice, built from the approved blocks and the copy approved in Gate 2
- legal pages (Impressum, Datenschutz) from our templates, merged with the client's existing statements
- tracking, cookie banner
- meta and SEO pass: title, description, Open Graph, JSON-LD, favicon
- closing the shot list gaps (mandatory before launch)
- QA against the launch checklist
- staging deploy, real phone test, then live
You write the plan first, one line per slice, and get the plan approved like a gate. Then you build slice by slice. After every slice: show it in the browser, tick it off in the status file, ask "next slice, or change course?" For a landing page the plan is usually empty. For a funnel with several pages, this is where those pages get planned.
Two rules around it. Staging deploys are free. Going live needs an explicit, separate go in that moment. A gate approval is no launch approval.
06Anatomy of the skill folder, and what we build ourselves
Anton's folder looks like this (the screenshot is in the repo folder):
website-factory/
SKILL.md the workflow: gates, approval protocol, standing rules
references/
design-prinzipien.md what premium looks like for this agency, and what is forbidden
copy-system.md tone, vocabulary, CTA rules, banned phrases
master-kanon.md the proven page structure and standard page tree
phasen-baukasten.md the agency's service phases as reusable content blocks
launch-checkliste.md everything checked before go-live
tech-stack.md the fixed stack and the deploy path
assets/
starter.html the template every new site starts from
bausteine.html the library of proven building blocks, FIX and VARIABLE
impressum-vorlage.md
datenschutz-vorlage.md
deploy-inline.py bundles CSS and JS into one file when the host needs it
We only have the SKILL.md. The references and assets are the agency's own work, and that is the part that makes a factory good. So we build ours, from material we already have.
| File in the factory | Omni1 source to build it from | Owner |
|---|---|---|
references/ | Webdev/omni1_website/DESIGN-REQUIREMENTS.md, the design skills we already use (design-taste-frontend, high-end-visual-design), Dominik's review notes on dominikkayser.com V4 ("typical AI stuff, delete") | Enes with Dominik |
references/ | brand-strategy.md from the copy base, the address rule (formal before the first call, informal after), the AI-tells catalogue | Tayfun |
references/ | website-konzept.md, the page trees of omni1.ch, ai-kayser.com and dominikkayser.com, the Flow B competitor survey | Tayfun with Enes |
references/ | Omni1's own phases: K.R.A.F.T. analysis, System, Results Centre | Dominik |
references/ | Nuxt 4 static build, Hostinger deploy (omni1_website/DEPLOY.md), Vercel for the Astro sites | Enes |
references/ | the visual-check rule (look at the rendered page yourself before calling it done), SEO basics from the website ownership brief, noindex for internal tools | Tayfun (SEO), Enes (tech) |
assets/, assets/ | Enes' block designs project is this file | Enes |
assets/, assets/ | the legal texts in omni1_website/site (AGB 20 Aug, privacy 22 Aug) | Enes |
| deploy script | the two-door deploy and the rclone ritual we already use | Enes |
The skill itself goes into omni1-projects/.claude/skills/website-factory/. Claude Code only loads skills from the repo it is running in, so it has to live in the shared repo. A private workspace would make it invisible to your sessions.
07Where Flow A, Flow B and block designs fit
Nothing you built is wasted. It slots into the gates.
Flow B
AI lists 20 competitor sites, you say what you like and dislike and why, AI writes a PRD and builds. That is a fast way through Gate 0 and Gate 1. The later gates still run, because Flow B decides nothing about copy, blocks, mobile or the build plan.
Flow A
Stitch for the visual, 21st.dev for the code, our agent orchestrating. A tool used inside a gate, mostly Gate 1 and Gate 3.
Block designs
The future assets/blocks.html. Keep going with it. Label each block FIX or VARIABLE.
Enes said it himself on 18 August: "the initial design was bad because our project description was bad." Gate 0 exists for that problem. The factory makes the lesson permanent.
08Part two: a light UI factory for the Superapp
Dominik asked Anton the same question you would ask: does this work for app UI, not just websites? Anton's answer for software has three parts.
- One design system. Reusable components, so the AI does not reinvent a date picker or a button state every time. For his own product this took a designer a month and a half. We do not need that. We need to write down the components the Superapp already has and treat them as the system.
- A mockup step. Before any feature is built, all relevant screens with all relevant states are mocked up inside the design system, and you fine-tune the mockups, not the code.
- A UX flow challenge. You tell the AI what you want to build, and it first thinks the user flow through and challenges it with you, before anything is built.
Anton added one caveat: for a website you do not need this depth. For the Superapp we keep it light too.
What we already decided this morning
- Enes' rollout order stays: Radar redesign first, then the sidebar and the Today's page, then the same pattern on Scout, Writer and the rest.
- Treat these as approved gates: mockup D1 without the status boxes; table rows with action buttons instead of cards; five sidebar categories (Clients, Content, Discover, Sales, Insights); Today's page is a summary at one glance, the six tiles Enes posted are enough; Writer stays, Writing gets a new name (production or pipeline).
- Design principle from Dominik: simplify, reduce cognitive load, a new hire must understand the tool without a walkthrough.
Suggested light gate sequence per UI iteration
Tuesday 8 September is the first review. Dominik's words: "iterate the tool until it's at a functional and nice working level and then I'm fine."
09Standing rules, in every gate
Anti-slop is mandatory. No stock photos, no AI images, no icon-library grids, no generic AI sections, no phrases from the banned list. The system is fixed, the expression per client is unique.
Premium means: real photography, one consistent accent-word system, a warm token palette, custom SVGs, radically short copy, calm motion. More effects make it cheaper, not better.
Images come from the asset library or from the client. The AI never sources images itself.
Report honestly. What has not been checked is not reported as done. Placeholders and gaps are always named.
Context hygiene. Every project folder gets an archive sub-folder. Old drafts and rejected versions go there, so they are not lost, but the AI does not pull them as context for new work. Larger context makes outputs worse, not better. Keep the CLAUDE.md of every repo short and current, it is loaded into every session.
Skills stay few. Before adding a skill, ask whether the model does it better without one.
10What we ask of you
Enes
- Create
omni1-projects/.claude/skills/website-factory/. Start withSKILL.md(gates, approval protocol, status template, standing rules) and the status file template. Anton's file shows the form. - Then fill
tech-stack.md,design-principles.md(with Dominik), and turn block designs intostarter.htmlandblocks.html. - Keep the Superapp UI plan as agreed. Radar first.
Tayfun
- Write
copy-system.mdandmaster-canon.md(with Enes). - Own the SEO part of
launch-checklist.md.
Together
- Pick the first pilot for the factory. Candidates: dominikkayser.com V4 (already in progress), ai-kayser.com, or the next client site.
- Bring the skill draft and the Radar redesign to the Tuesday review on 8 September.
Open questions for Dominik
- Which pilot first?
- Formal or informal address as the default for client sites?
- Who approves gates on client projects when Dominik is not available?
Let's jump on a call as soon as you have read this.