drobek.app — Marketing & Auth Design Brief — HISTORICAL (SUPERSEDED)
⚠️ STATUS: SUPERSEDED 2026-05-21. Design je teď FINÁL ve formě reálných HTML/JSX prototypů vdocs/design/final/. Coding agent NEčte tenhle prompt — implementuje přímo zdocs/design/final/per pravidla vdocs/design/CODING-AGENTS.md.
>
Tenhle dokument je historický artefakt: prompt který se použil pro generaci finálního designu (share https://api.anthropic.com/v1/design/h/dSzUQzB6-IwvT5D593sJWA). Drží se v repu pro:>
- Audit (jak vznikl design + jaké constraints jsme definovali) - Full rebrand workflow: pokud někdy chceme totálně přepsat brand, editujeme tenhle prompt, regenerujeme přes Claude Design, swapneme docs/design/final/>
Pro denní práci: ignoruj. Coding agent:docs/design/CODING-AGENTS.md+docs/design/final/. Per-component / per-page deviation: STOP a zeptej se uživatele.
Original prompt content (historical)
Účel dokumentu: kompletní, copy-paste-ready prompt pro AI design generátor (Claude Design / Stitch /frontend-designskill). Vstupem je tento soubor; výstupem jsou hotové.tsxkomponenty + Tailwind config patch vapps/web/app/.
>
Jak používat: viz sekce „How to run this brief" na konci. Pokud chceš rebrand, edituj sekci Brand DNA a regeneruj — všechno ostatní zůstává.
0. Role & context
Jsi senior product designer + senior frontend engineer. Specializuješ se na minimalistický developer-tooling marketing site (Linear, Vercel, Stripe, Resend, Anthropic, Railway jsou benchmarky). Píšeš production React + Tailwind kód — ne mockupy, ne Figmu, ne placeholdery typu „TODO image".
Stavíš public web pro drobek.app — agent-native planner a knowledge graph pro AI agenty (Claude Code, Cursor, custom agents).
Klíčový product narrative (musí prostupovat copy a vizuálem):
- Jediné write rozhraní je MCP server. Lidi nepíšou tasky ručně, agenti je
navrhují přes MCP volání.
- Lidi mají read-only graph view a approval gates — schvalují plány,
ne psaní jednotlivých tasků.
- GitHub / GitLab = ground truth pro „done". Žádné „mark as done" tlačítko;
task se uzavře, když PR mergeuje a CI prošla.
- Cílová persona: senior dev / tech lead používající ≥ 1 AI coding agenta
v denodenní práci. Není to no-code nástroj.
Hlasový tón (uplatni v každém H1, sub a CTA):
- Direct, confident, technical. „Agents plan. Humans approve." > „We help you…"
- Krátké věty. Aktivum nad pasivem.
- Žádné emoji v UI, žádné „Powered by AI" badge, žádné stock photo lidí.
- Code snippets v copy = vítané, působí kompetentně.
1. Brand DNA
Typografie, hlas, layout a visual motif jsou závazné. Color paletu si navrhuješ sám podle požadavků níže — využij barevnou psychologii pro developer-tooling segment.
1.1 Color palette — TY NAVRHUJEŠ
Nepoužívám předpřipravené hex hodnoty. Tvůj úkol: navrhnout kompletní dark + light paletu, která respektuje níže uvedené principy, a vrátit ji jako tabulku tokenů + zdůvodnění proč.
1.1.1 Brand personality (ze které vycházíš)
- Technical & competent — uživatel je senior dev. Paleta nesmí vypadat
jako consumer SaaS pro non-tech publikum.
- Calm & focused — uživatel kouká na graf práce 30+ minut v kuse. Žádné
křiklavé saturace, žádný „dashboard rainbow".
- Trustworthy & precise — produkt audituje agenty. Paleta musí evokovat
spolehlivost, ne hravost.
- Modern but not trendy — nesmí být „bro-startup" neon glow ani retro.
Cíl: čistá, ale ne sterilní (jako Linear, Vercel, Railway, ne jako Notion AI).
- Quietly premium — nízká vizuální agrese, vysoká kvalita detailů.
„Lehkost" v tom smyslu, že paleta nezavalí pozornost — UI ustupuje obsahu.
1.1.2 Color psychology — co má každý token komunikovat
Navrhni hue / saturation / lightness tak, aby ladily s psychologickou funkcí každého tokenu. Krátké guideposty (ne příkaz, ale rámec):
| Funkce v UI | Psychologie / sentiment | Praktický constraint |
|---|---|---|
| Primary CTA / „ready" stav | Pozvání k akci, klid, důvěra (ne FOMO). | Saturovaný hue (chromatický), ale ne neon. Dobře contrastní vůči bg-base. |
| Secondary / „in progress" stav | Pohyb, pozornost bez paniky, „something is happening". | Warm hue (žlutá/oranžová rodina) — ale ztlumený, ne SaaS-yellow. |
| Error / „needs review" stav | Naléhavost bez agrese. Korektura, ne katastrofa. | Soft red/coral, ne pure red. Musí být rozeznatelný od secondary i pro deuteranopii. |
| Info / link / hover | Klid, neutrálnost, „klikni mě bez závazků". | Buď ladí s primary (analogous), nebo samostatný cool hue. |
| Decorative gradient / illustrace | Hloubka, dimenzionalita, technická estetika. | 2-hue gradient (primary + companion). Companion hue má být analogous nebo split-complement. |
| Background base / elevated | „Pozadí ustupuje, content září." V dark mode komfort při dlouhém čtení. | Velmi nízká chroma. Mírně teplý vs neutrální vs mírně chladný — vyber jedno a drž konzistenci. |
| Text primary / secondary | Hierarchie, čitelnost. | Off-white (ne pure #FFF) v dark mode kvůli komfortu; off-black v light. |
1.1.3 Tvrdé constraints (musí splnit)
- Dark mode = default, light mode = kompletní mirror se stejnými token jmény.
Tokeny definuj jednou; varianty řeší CSS custom properties + .dark class.
- Background v dark mode: NE pure black (
#000) a NE pure white v light.
Pure černá vyvolává oční únavu při dlouhém čtení; off-shade je standardem (Linear, Vercel, Anthropic).
- WCAG AA contrast:
- text-primary na bg-base ≥ 7:1 (AAA) v obou módech - text-secondary na bg-base ≥ 4.5:1 - text-tertiary na bg-base ≥ 3:1 (jen meta/disabled) - CTA button label na CTA background ≥ 4.5:1
- Stavy musí být colorblind-distinct — primary, secondary a error tokeny
rozlišitelné při deuteranopii (most common). Otestuj v simulátoru; pokud blízko, dopni lightness rozdíl nebo ikonografií.
- Saturation ceiling: žádný token nemá
chroma > 70v OKLCH. Cíl je
„premium", ne „arcade".
- Paleta je závodní 5 + 3 — max 5 background/text grade tokenů, max 3
semantic accent tokeny (primary / secondary / error). Plus volitelný decorative companion pro gradient. Žádné „brand-purple, brand-pink, brand-coral".
1.1.4 Co máš vrátit (deliverable pro §1.1)
Když exekuuješ tento brief, začni odpovědí strukturou:
## Návrh palety
**Rationale (3–5 vět):** [proč ses takhle rozhodl — jaký hue family, proč
to ladí s product narrative]
### Dark mode
| Token | OKLCH | Hex | Použití |
| --------- | ---------- | ---- | --------------- |
| `bg-base` | oklch(...) | #... | page background |
| ... (zbytek tokenů, viz seznam níže)
### Light mode
[stejná tabulka]
### Contrast check
| Combo | Ratio | Pass? |
| ------------------------------ | ----- | -------- |
| text-primary on bg-base (dark) | x.x:1 | AAA / AA |
| ... všechny kritické kombinaceToken seznam (oba módy musí mít všechny):
bg-base— page backgroundbg-elevated— cards, surfaces, modalbg-elevated-2— hover / nested elevatedbg-code— code snippet panel (drží dark surface i v light mode kvůli čitelnosti syntaxe)border-subtle— dividers (1px)border-strong— active input, focused outlinetext-primary— headings, primary bodytext-secondary— sub-headings, captionstext-tertiary— disabled, placeholderaccent-primary— primary CTA, „ready" state, primary link hoveraccent-primary-2— hover/active state primaryaccent-secondary— „claimed/in-progress", warningaccent-error— „needs review", failed, error toastaccent-companion— gradient partner pro illustrations (volitelný; pokud
nepoužiješ, vysvětli proč)
Po schválení návrhu palety pokračuj generováním tailwind.config.ts a tokens.css s těmito hodnotami a teprve potom komponentami. Žádné hard-coded hex v komponentách — všechno přes Tailwind tokens.
1.2 Typography
- Headings:
Inter(variable) — weight 500 default, 600 pro H1/H2, 700 jen
pro display hero.
- Body:
Inter(variable) — weight 400 (paragraphs), 500 (UI labels, buttons). - Mono:
JetBrains Mono— všude code snippets, IDs, env vars, file paths.
Žádné jiné fonty. Načítej přes @fontsource (self-hosted, ne Google CDN — privacy).
Scale (Tailwind extend, ne default):
| Token | Size | Line | Použití |
|---|---|---|---|
text-xs | 12px | 16 | meta, captions, badge labels |
text-sm | 14px | 20 | body small, UI labels |
text-base | 16px | 24 | body default |
text-lg | 18px | 28 | lead paragraph, large UI |
text-xl | 22px | 30 | section subhead |
text-2xl | 28px | 36 | card title, H3 |
text-3xl | 36px | 44 | section H2 |
text-4xl | 48px | 56 | page H1 |
text-5xl | 64px | 72 | hero display (homepage only) |
text-6xl | 80px | 88 | NIC — nepoužívej |
Tracking: -0.02em na všech headings ≥ text-3xl. Body default tracking.
1.3 Spacing & layout
- Container max-width:
1200pxpro marketing,1440pxjen pro homepage hero band. - Section vertical rhythm:
py-24desktop,py-16tablet,py-12mobile. - Grid gutters:
gap-8mezi karty,gap-6mezi sub-elementy. - Border radius:
rounded-lg(8px) na karty,rounded-md(6px) na buttony,
rounded-full na badges a avatary. Žádný rounded-2xl futuristic look.
- Shadows: minimal. Karty nemají shadow (border-subtle + bg-elevated stačí).
CTA button dostane shadow-[0_0_0_1px_rgba(61,220,191,0.3)] při hover na primary.
1.4 Visual motif
- DAG / graph illustration — nodes + edges stylized, monoline,
accent-primary → accent-companion gradient stroke (přesné hue dle palety z §1.1). Použij SVG, ne PNG. Subtle pulse animation (CSS, prefers-reduced-motion respected).
- Code-style annotations jako decoration — npř. malé monospace badge
claim_task(task_id) nebo mcp/next_actionable v rohu hero ilustrace.
- Subtle gradient (
accent-primary → accent-companion) na klíčových
akcentech: heading underline na hero, CTA glow on hover, illustration stroke. Gradient používej šetrně — max 2× per stránka. Cíl: poukázat na to důležité, ne vyzdobit.
- NEpoužívej: stock fotografie lidí u laptopu, neon glow, glassmorphism,
3D blob shapes, „abstract AI brain" ilustrace, kruhové foto týmu na About.
1.5 Voice samples (copy library)
Použij přesně tyto formulace tam, kde se hodí; jinak držte tone:
- Hero H1: „Agents plan. Humans approve."
- Hero sub: „Drobek je agent-native planner a knowledge graph. Jediné zapisovací
rozhraní je MCP. Vy schvalujete plány — agenti pracují."
- Sub-claim: „GitHub je pravda. Drobek ji jen sleduje."
- Pricing tagline: „Free do 250 tasks/měsíc. Žádný kreditkový gate."
- Empty-state default: „Nic tu zatím není. Pošli agentovi MCP call a koukni se sem."
- 404: „Tahle route neexistuje. Asi ji nikdo neclaimoval."
2. Information architecture — všechny stránky
Layouty (z task 34):
_marketing.tsx— header (logo, nav, CTA) + footer (4-col link grid + newsletter)_auth.tsx— centered card (max-w-md), bez nav/footer, „Back to drobek.app" odkaz_app.tsx— sidebar + topbar (mimo scope brief, ale generuj Sidebar/Topbar
komponenty samostatně, viz §3)
Public marketing routes:
| # | Route | Soubor | Sekce |
|---|---|---|---|
| 1 | / | _marketing._index.tsx | Hero, How-it-works, Features, Code snippet, Stack, Pricing teaser, Testimonial slot, CTA bar |
| 2 | /pricing | _marketing.pricing.tsx | Hero (small), Plan compare (2 cards), FAQ accordion, CTA |
| 3 | /features | _marketing.features.tsx | Hero, 5 deep-dive sections (text + visual alt), CTA |
| 4 | /faq | _marketing.faq.tsx | Search box, categorized accordion (Pricing, Security, Integrations, Migrating) |
| 5 | /about | _marketing.about.tsx | Story (3 paragraphs), Values (3 cards), Footer |
| 6 | /blog | _marketing.blog._index.tsx | List (date + title + 1-line excerpt), tag filter |
| 7 | /blog/$slug | _marketing.blog.$slug.tsx | Article shell (MDX), TOC sidebar (desktop), share row |
| 8 | /changelog | _marketing.changelog.tsx | Reverse-chrono list, version tag, sections per release |
| 9 | /legal/$slug | _marketing.legal.$slug.tsx | Generic doc layout — viz §2.10 |
Auth routes (`_auth.tsx`):
| # | Route | Soubor | Sekce |
|---|---|---|---|
| A | /login | _auth.login.tsx | Email/password + magic-link CTA + GitHub OAuth |
| B | /register | _auth.register.tsx | Email + password + ToS checkbox |
| C | /magic-link | _auth.magic-link.tsx | Email input + „Check your inbox" success state |
| D | /accept-invite/$tk | _auth.accept-invite.$token.tsx | Org info + accept/decline buttons |
Generuj všech 13 route-level souborů + sdílené komponenty z §3.
2.1 Homepage /
Sekce v pořadí:
- Top nav — logo levo (svg wordmark „drobek" + bullet dot accent), middle
links (Features, Pricing, Docs, Blog, Changelog), right (Sign in ghost + „Start free →" primary). Sticky, blur backdrop on scroll.
- Hero band (
py-32, max-w-1440)
- 2-col grid (60/40 desktop, stack mobile) - Left: eyebrow text mono mcp://drobek.app/v1 → H1 (text-5xl) „Agents plan. Humans approve." → sub (text-lg text-secondary) → CTAs (Start free → primary, How it works ghost) - Right: animated DAG illustration (5–7 nodes, teal→violet edges, 1 node pulses „in_progress")
- How it works — 3-step strip, číslované (
01 / 02 / 03)
- „Agent navrhne plán" → „Vy schválíte" → „Agenti exekuují, GitHub verifikuje" - Každý step: small icon (line, 24px) + label + 1-sentence body
- Feature cards — 3-col grid, equal height
- Card 1: Single write path — „MCP only. Žádné CSV importy, žádný UI bypass." - Card 2: Shared knowledge graph — „pgvector + temporal facts. Agenti čerpají z týmové paměti." - Card 3: GitHub ground truth — „Done = merged + CI green. Žádné fake-done." - Každá karta: 32px icon nahoře, H3, 2-3 sentence body, „Learn more →" link
- Code snippet panel — širokoúhlý card. V dark mode používá
bg-elevated. V light mode drží dark surface kvůli čitelnosti kódu (použij dedikovaný token bg-code = stejný hue jako dark mode bg-base). - Heading: „Agents talk MCP. You read English." - Code block (JetBrains Mono, syntax highlighted in JS-ish style): ``ts await mcp.call('get_next_actionable', { agent_id: 'claude-3.5-sonnet' }); // → { task_id: "T-104", repo: "vercel/next.js", lease_ttl: 600 } `` - Pod codem: 2-3 sentence vysvětlení flow
- Stack row — „Open-source friendly stack"
- Logo strip (mono, desaturated): Postgres, Redis, MCP, Drizzle, OpenAI, GitHub - Tagline: „Self-host friendly. No vendor lock-in on your knowledge."
- Pricing teaser — 2 cards (Free / Pro „Coming soon" badge)
- Free: „250 tasks/month", „Unlimited agents", „1 org" → CTA „Start free" - Pro: opacity-60, badge „Coming soon", waitlist CTA
- Testimonial slot — single quote, large mono quote mark, attribution
placeholder „— Replace post-launch"
- Final CTA band — full-width subtle gradient bg, H2 „Stop tracking agents manually." + button
- Footer — viz §3.2
2.2 Pricing /pricing
- Hero compact (
py-20) — H1 „Pricing", sub „Free během public beta. Pro
až přijde Stripe." (uplatni i CS verzi)
- 2-card compare, side-by-side desktop, stack mobile
- Free card: price 0 Kč/měsíc (display), bullet list features (✓ icons, teal), CTA „Start free →" primary - Pro card: price — Coming soon, opacity-80, ghost CTA „Join waitlist", badge „Coming soon" v header - Compare row pod kartami: tabulka 3 sloupce (Feature, Free, Pro) - Důležité: pricing data čteš z packages/core/src/quota/plans.ts — v generovaném kódu udělej import { PLANS } from "~/lib/plans" placeholder
- FAQ accordion (Billing / Plans / Fair use kategorie, 4-6 otázek total)
- CTA bar — „Questions? hello@drobek.app" + mailto link
2.3 Features /features
- Hero — H1 „Features", sub jednou větou
- 5 deep-dive sections, alternující layout (text vlevo/vpravo)
- Section 1: MCP-first API — kód snippet, link do docs - Section 2: Knowledge graph s vector search — DAG ilustrace, příklad query - Section 3: GitHub & GitLab verification — screenshot mock PR thread - Section 4: Approval gates — UI mock approval modalu - Section 5: Templates & marketplace (Pro) — grid mock template karet
- CTA bar stejně jako pricing
2.4 FAQ /faq
- Hero compact + search box (client-side filter, fuzzy match na otázky)
- Kategorie jako jumplinks na vrcholu (sticky nav): Pricing, Security,
Integrations, Migrating
- Accordion (1 otevřená naráz, URL hash sync
#kategorie-otazka) - CTA: „Otázka chybí? Napiš na hello@drobek.app"
2.5 About /about
- Hero — H1 „Why drobek"
- Story — 3 paragraphs, max 2 sentences each. Bez foto týmu. Bez „founded in".
- Values — 3 cards
- „MCP > UI" — psaní agenty, ne lidé - „GitHub je pravda" — ne self-reported done - „Open by default" — self-host friendly
- Contact — řádek „Built in Prague. hello@drobek.app." (no full address)
- Footer
2.6 Blog /blog
- Hero compact — H1 „Writing", sub „Notes on agents, planning, and the
things that broke."
- Tag filter row (chip-style, scrollable horizontal mobile)
- Post list —
<article>cards, 1-col mobile, 2-col tablet+
- Each: date (mono, text-xs text-tertiary), title (text-2xl), 1-line excerpt (text-secondary), tag chips, „Read →"
- Pagination placeholder (Fáze 0 = 1 page only)
2.7 Blog post /blog/$slug
- Top nav (jako homepage, ne sticky)
- Article header — eyebrow (date + read time), H1 (
text-4xl),
author single-line („Tomáš Grasl"), share row (Twitter, Copy link)
- Body (max-w-prose, ~70ch)
- MDX-rendered, používá @tailwindcss/typography prose prose-invert - Code blocks v JetBrains Mono, syntax theme matching brand - Pull-quotes border-l-4 accent-primary
- TOC sidebar (desktop only,
position: sticky) - Bottom: „Other posts" 2-card row, „Subscribe to changelog" CTA card
2.8 Changelog /changelog
- Hero compact — H1 „Changelog"
- Release entries reverse-chrono
- Each: version tag mono (v0.4.0), date, H3 title, body with sub-sections (Added / Changed / Fixed), prose
- RSS link v header right
2.9 Auth pages (_auth.tsx layout)
Sdílený rám:
- Full-height centered, max-w-md card (
bg-elevated, border-subtle, p-8 rounded-lg) - Top: logo (small, link na
/) - Bottom: „← Back to drobek.app" muted link
Login — H2 „Sign in", email + password inputs, „Forgot?" link, primary button „Sign in", divider „or", secondary buttons „Email magic link" + „GitHub", bottom „New here? Create account →"
Register — H2 „Create account", email + password (s strength indicator), ToS checkbox (links na /legal/terms a /legal/privacy), primary „Create account", bottom „Have an account? Sign in →"
Magic link — 2 stavy
- Default: email input + „Send magic link" button
- Success: ikona ✓ accent-primary 48px + H3 „Check your inbox" + muted text
„Sent to <email>. Link expires in 15 minutes."
Accept invite — H2 „You're invited", body „<inviter> invited you to org <orgName>.", 2 buttons („Accept & sign up" primary, „Decline" ghost)
2.10 Legal pages /legal/$slug (Terms, Privacy, Cookies, DPA)
Doc layout (sdílený, použij na všech 4):
- Top nav (marketing nav)
- Doc header band (
py-12, border-bottom border-subtle)
- Breadcrumb: „Legal / Terms of Service" - H1 (text-4xl) - Meta row: „Last updated: 2026-05-21" mono + language switcher (CS | EN, current bold)
- Two-column body
- Left: sticky TOC (position: sticky top-24) — H2 anchors, current section highlighted - Right: prose content (max-w-prose), @tailwindcss/typography prose prose-invert
- Footer note: „Tento dokument je v souladu s GDPR. Otázky: legal@drobek.app"
- Marketing footer
Cookie banner (globální, mimo route):
- Fixed bottom bar (ne modal), full-width,
bg-elevated border-t border-subtle - Text: „Používáme jen funkční cookies. Pro analytics potřebujeme tvůj souhlas."
- 3 buttony inline: „Accept all" primary, „Reject non-essential" ghost,
„Customize" text link (otevírá small modal s checkboxy per kategorie: Strictly necessary [disabled, ✓], Functional [✓], Analytics [toggle])
- Choices persist localStorage + cookie 12 měsíců
- Banner zmizí po volbě; reappear přes link „Cookie preferences" v footeru
3. Komponenty (apps/web/app/ui/marketing/*.tsx)
Vygeneruj všechny jako samostatné soubory. Žádný runtime CSS-in-JS — jen Tailwind.
3.1 Atomy
| Soubor | Props | |||||
|---|---|---|---|---|---|---|
Button.tsx | `variant: "primary" \ | "ghost" \ | "danger" \ | "link", size: "sm" \ | "md" \ | "lg", asChild?: boolean`, …rest |
Input.tsx | standard input + label, error?, hint? | |||||
Badge.tsx | `tone: "primary" \ | "secondary" \ | "error" \ | "neutral"` | ||
Card.tsx | wrapper bg-elevated border border-subtle rounded-lg p-6 | |||||
CodeBlock.tsx | lang, children, syntax via shiki (server-side), copy button | |||||
Spinner.tsx | size prop, accessible | |||||
EmptyState.tsx | icon, title, body, optional action | |||||
Accordion.tsx | controlled + uncontrolled, URL hash sync optional | |||||
Toast.tsx | tone variants, auto-dismiss 5s, ARIA live region |
3.2 Marketing-specific
| Soubor | Účel | |
|---|---|---|
MarketingNav.tsx | Top nav s sticky + scroll backdrop blur | |
MarketingFooter.tsx | 4-col grid: Product / Resources / Company / Legal + newsletter form | |
Hero.tsx | Konfigurovatelný — H1, sub, primary/secondary CTA, optional illustration slot | |
FeatureCard.tsx | Icon + H3 + body + optional link | |
PricingCard.tsx | Tier name, price display, feature bullets, CTA, optional „Coming soon" badge | |
FaqAccordion.tsx | Categorized, searchable | |
DagIllustration.tsx | SVG, 5–7 nodes parametrized, teal→violet gradient, pulse animation | |
CtaBar.tsx | Full-width gradient band s H2 + button | |
Testimonial.tsx | Quote + attribution + optional avatar (default abstract initials) | |
CookieBanner.tsx | Fixed bottom bar + Customize modal | |
LanguageSwitcher.tsx | CS | EN, cookie persist |
DocLayout.tsx | Sdílený layout pro legal + docs (TOC sidebar + prose body) | |
BlogPostCard.tsx | Card varianta pro /blog list | |
ChangelogEntry.tsx | Version tag + date + sections |
3.3 Auth-specific (apps/web/app/ui/auth/*.tsx)
| Soubor | Účel |
|---|---|
AuthCard.tsx | Centered max-w-md card s logo + slot + bottom link |
OAuthButton.tsx | GitHub button (icon + label, full width) |
PasswordInput.tsx | Input + show/hide toggle + strength meter (register only prop) |
3.4 Sdílené (apps/web/app/ui/*.tsx) — i pro app shell
Vygeneruj minimální verzi (sidebar / topbar) pro _app.tsx shell, aby existoval konzistentní system, ale plný app UI je mimo scope:
| Soubor | Účel |
|---|---|
Logo.tsx | SVG wordmark + dot, prop size (sm/md/lg) |
Sidebar.tsx | Sidebar shell s nav links slot, mobile drawer |
TopBar.tsx | App topbar s org switcher slot + user menu slot |
ThemeToggle.tsx | Dark/light/system, persist localStorage |
4. Technical constraints — MUST FOLLOW
- Framework: React Router v7 (Remix). Generuj route soubory s
export default
komponentou + export const meta (SEO tags) + export const loader kde dává smysl (např. blog list).
- Styling: Tailwind CSS výhradně. Žádné
styled-components, žádné CSS modules,
žádné inline <style>. Tokens definuj v tailwind.config.ts (vygeneruj patch).
- Komponenty: každá v samostatném souboru s named export + default export
(default = ten samý komponent). TypeScript strict.
- No client fetch above the fold — vše SSR. Loaders v route souborech.
- Accessibility: WCAG AA. Contrast ≥ 4.5:1 ověřuj. Focus rings viditelné
(focus-visible:ring-2 ring-accent-primary ring-offset-2 ring-offset-bg-base). Keyboard nav na všech interactive elementech. ARIA labels kde ikony bez textu.
- Responsive breakpoints (mobile-first):
- default = mobile (≥ 390px) - sm: 640 - md: 768 (tablet) - lg: 1024 (laptop) - xl: 1440 (desktop)
- Images:
<picture>s WebP source + PNG fallback.loading="lazy"mimo
hero. Hero image fetchpriority="high". Width/height attrs povinné.
- OG images: route
/og?title=…&page=…— předpokládej že existuje (task 44).
V meta tagy generuj <meta property="og:image" content="/og?title=…&page=…" />.
- Fonts: self-hosted přes
@fontsource/intera@fontsource/jetbrains-mono.
Preload v <head> jen variable font.
- Animations: respect
prefers-reduced-motion. Default animations: subtle,
≤ 300ms, ease-out.
- Lighthouse target: mobile Performance ≥ 90, A11y ≥ 95, SEO 100, Best Practices ≥ 95.
- No emoji v UI. Ikony přes
lucide-react(nebo inline SVG); v marketing
jen line variant, 1.5px stroke.
- Dark default,
<html class="dark">v root. Light přes class toggle (ne media query).
5. Output format — co máš vygenerovat
Když tento brief spustíš v generátoru, očekávám tento pořadový workflow:
- Návrh palety (text-only odpověď v markdown) podle §1.1.4 — rationale +
dark/light tabulka + contrast check. Čekej na schválení uživatelem před krokem 1. Pokud uživatel řekne „upravit" (např. „víc neutrální", „studenější primary"), regeneruj jen §1.1.4 deliverable.
- `tailwind.config.ts` patch — extend
theme.colors(ze schválené palety),
theme.fontFamily, theme.fontSize, theme.borderRadius. Kompletní soubor.
- `apps/web/app/styles/tokens.css` — CSS custom properties pro dark+light
variants (:root { --bg-base: … }, .dark { --bg-base: … }) — hodnoty ze schválené palety.
- Route soubory všech 13 stránek z §2 — kompletní
.tsxsmeta,loader
(kde dává smysl), default komponentou. Naplň finální copy (use library z §1.5 a sekční texty z §2).
- Komponenty ze sekcí §3.1, §3.2, §3.3, §3.4 — všechny soubory.
- `apps/web/app/lib/seo.ts` — helper
buildMeta({ title, description, image, route })
vracející React Router v7 meta array.
- Sample MDX v
apps/web/app/content/blog/2026-05-21-hello-drobek.mdx
(frontmatter + body). Slouží jako reference structure.
- Sample legal MDX v
apps/web/app/content/legal/terms.cs.mdxa.en.mdx
(placeholder outline z task 43, DISCLAIMER komentář nahoře, ne plný text).
- DAG illustration source v
apps/web/app/ui/marketing/DagIllustration.tsx
— inline SVG, parametrized props (nodes, animated).
Žádné stub `// TODO` v production komponentách. Default copy = ten v §1.5 a §2. Když potřebuješ obrázek, který user dodá, vlož <img> se src="/assets/PLACEHOLDER.svg"
- komentář nad ní:
{/* USER: replace with brand asset */}.
6. Co dostaneš od uživatele při běhu
Při exekuci generátor dostane k tomuto briefu navíc:
- Logo / favicon assets (SVG, PNG fallback). Pokud ne, použij default
wordmark „drobek" s teal dot accent.
- Exact text snippets pokud chce change copy. Default = copy v tomto briefu.
- Screenshoty reference sites (Linear/Vercel/Stripe) pokud chce specifický look.
- Custom code snippet pro hero panel (default =
mcp.call("get_next_actionable", …)
z §2.1.5).
- Blog post obsah — task brief generuje jen 1 sample.
- Legal text — task brief generuje jen outline + DISCLAIMER (lawyer review pending).
7. Acceptance criteria (musí splnit po generování)
- [ ] Všech 13 route souborů z §2 existuje a renderuje bez TS chyb
- [ ] Všech komponent z §3 existuje, každá s named + default export
- [ ]
tailwind.config.tsobsahuje všechny tokens z §1.1, §1.2, §1.3 - [ ] Dark + light variant funguje (toggle class
darkna<html>) - [ ] Žádný
console.log, žádnýany, žádnýTODOkomentář v production kódu - [ ] Homepage Lighthouse: Performance ≥ 90 mobile, A11y ≥ 95, SEO 100
- [ ] Všechny interactive elementy mají viditelný focus ring
- [ ] Cookie banner se zobrazí first visit a respektuje volbu
- [ ] Sitemap obsahuje všech 9 marketing routes
- [ ] OG meta tags na každé route (title, description, og:image, twitter:card)
8. How to run this brief — návod pro uživatele
Tento dokument je vstup pro AI design generátor. Tři způsoby jak ho použít:
A) Claude.ai (Projects) — PREFEROVANÁ CESTA
- Vytvoř nový Project v claude.ai s názvem „drobek.app design".
- Nahraj tento
docs/DESIGN.mdjako project knowledge. - Volitelně: přidej screenshoty referenčních stránek (Linear hero, Vercel pricing).
- První prompt — návrh palety:
> _„Přečti brief v project knowledge. Začni krokem 0 z §5: navrhni dark + light > paletu podle §1.1 (psychologie, constraints, contrast check). Vrať jen > markdown deliverable z §1.1.4 — rationale, obě tabulky, contrast check. > Zatím negeneruj kód. Čekáš na moje schválení nebo iteraci."_
- Iterace palety: dej feedback („chladnější primary", „víc neutrální
background", „secondary je moc křiklavý") a nech regenerovat dokud nejsi spokojen. Schválenou paletu uložím do repa jako poznámku v docs/DESIGN.md (řeknu Claude Code „commit schválenou paletu").
- Druhý prompt — kód:
> _„Paletu schvaluji. Pokračuj krokem 1 ze §5: vygeneruj tailwind.config.ts > a tokens.css s těmito hodnotami. Pak postupně atomy z §3.1, marketing > komponenty z §3.2, layout _marketing.tsx, homepage. Jeden soubor za > druhým, čekej na ‚next' před pokračováním."_
- Pro každý soubor: zkopíruj do repa na cestu z briefu (Claude Code ti s tím
pomůže — řekni mu „aplikuj soubory z konverzace").
B) Stitch (Google AI design tool) — přes lokální MCP
V této Claude Code session máš mcp__stitch__* tools. Postup:
# 1) Založit Stitch projekt
mcp__stitch__create_project { name: "drobek.app marketing" }
# 2) Vytvořit design system z briefu
mcp__stitch__create_design_system_from_design_md {
project_id: <id>,
path: "docs/DESIGN.md"
}
# 3) Pro každou stránku vygeneruj screen
mcp__stitch__generate_screen_from_text {
project_id: <id>,
prompt: "Generate homepage per §2.1 of the brief. Apply design system."
}
# 4) Stáhni výsledek a commit do apps/web/app/routes/Jen řekni _„spusť Stitch generování"_ a já provedu kroky 1–4.
C) frontend-design skill (lokálně v této session)
Nejjednodušší pro rychlé iterace:
- V chatu napiš: _„Použij /frontend-design skill na docs/DESIGN.md a vygeneruj
homepage + Nav + Footer + Hero + DagIllustration. Soubory ulož do apps/web/app/routes/_marketing._index.tsx a apps/web/app/ui/marketing/_.tsx."\*
- Skill přečte tento brief, vygeneruje kód přímo do repo.
- Po review řekni _„pokračuj s pricing"_ nebo _„regeneruj hero s méně textu"_.
Pořadí doporučené pro generování (závislosti): 0. Návrh palety (markdown deliverable z §1.1.4) — schválíš nebo iteruješ
tailwind.config.ts+tokens.cssz paletyMarketingNav,MarketingFooter,Logo,Button,Card,Badge(atomy)Hero,FeatureCard,CtaBar,DagIllustration(homepage building blocks)_marketing.tsxlayout +_marketing._index.tsx(homepage)- Pricing → Features → FAQ → About (každá samostatně po review)
DocLayout+ Legal pages (4× MDX placeholder)- Blog list + blog post + sample MDX
- Changelog
_auth.tsxlayout + 4 auth routesCookieBanner,LanguageSwitcher, SEO helper
Tip: Po každé stránce udělej pnpm build + Lighthouse audit (task 50 zavede automatický gate). Když něco vypadne pod target, řekni _„fix lighthouse issues na /pricing"_.
9. Když chceš rebrand
Edituj §1 Brand DNA (palette, typography, voice samples) a regeneruj přes:
"Pomocí aktualizovaného brief regeneruj jen tailwind.config.ts, tokens.css,
DagIllustration.tsx, a Hero.tsx. Ostatní soubory ponech."Komponenty jinak používají Tailwind tokens, takže změna palety propaguje sama.
EOF — happy generating.