Template
Brieflane
A shared operations workspace for marketing teams that keeps every campaign's brief, budget, launch checklist and results in one place. It enforces tracking discipline with a taxonomy-checked UTM builder and name generator, and closes the loop with a funnel dashboard that paces leads against monthly targets.
Marketing campaign operations hub · App · Small tools and apps · full-stack app (auth + DB)
A mock-up of the homepage, drawn from this design’s layout, palette and typefaces. A build follows the full prompt below.
Start from this templateRead the build prompt
Typefaces
Sora keeps the geometric display voice; Albert Sans is a clean, slightly humanist body that stays readable in light grey on black.
- SoraHeadings: hero ~64px 700; eyebrows 600 uppercase, 0.28em
- Albert SansBody: body 17px, light grey on black
Who it is for
- Marketing managers juggling multi-channel campaigns
- Demand-gen leads tracking MQL/SQO pacing
- Agencies running repeatable client launches
- Small startup teams without a marketing stack
Layout
- Minimal top bar: logo mark + wordmark left, outlined pill 'Sign in' right
- Centered hero: letter-spaced uppercase eyebrow, huge bold product title, 3-line subcopy, filled periwinkle pill CTA + ghost pill secondary
- 'What's inside' eyebrow followed by a 5-up row of tall rounded dark cards, each with a tinted circular icon, title and one-line description
- Hairline divider and centered copyright footer with a faint radial glow
- Behind auth: sidebar app with Campaigns list, Campaign workspace (brief/timeline/budget/checklist/results tabs), UTM builder + All UTMs table, Name generator, Calendar month view, Funnel dashboard, Leads table, Requests inbox, Settings (stages, taxonomy, team)
Palette
Dark, sleek, quiet, premium, focused. It feels like a night-mode SaaS console where colour is reserved for small glowing icon chips and one bright call to action.
- background
#000103 - card surface
#04080d - muted surface
#171b22 - text
#f2f6f8 - secondary text / eyebrow
#a5abb5 - primary (periwinkle)
#8394ff - secondary accent (pink)
#ff85db
Every checked pair, measured again
| Sample | Where | Ratio | Needs |
|---|---|---|---|
| Aa | body text on page background | 19.20:1 | 4.5:1 |
| Aa | body text on card | 18.44:1 | 4.5:1 |
| Aa | secondary text / eyebrow on page background | 9.04:1 | 4.5:1 |
| Aa | secondary text on muted surface | 7.48:1 | 4.5:1 |
| Aa | button text on primary periwinkle | 7.26:1 | 4.5:1 |
| Aa | primary as link text / focus ring on background | 7.60:1 | 4.5:1 |
| secondary pink accent as icon/indicator on background | 9.58:1 | 3:1 | |
| Aa | accent lilac text on card | 10.59:1 | 4.5:1 |
| input border on page background | 3.41:1 | 3:1 |
As vibld’s tokens
The palette on the fifteen colour tokens vibld styles a project with, each text colour on the fill it is read on. Marked tokens are solved from the palette, because no swatch held that role at 4.5:1.
- background
- card
- muted
- primary
- secondary
- accent
- destructive *
Type scale
- Display
- Sora 700, ~64px hero with tight negative tracking (-1.6px); section eyebrows Sora 600 12-13px uppercase with very wide 0.28em tracking
- Body
- Albert Sans 400 at 17px, light grey on black
Geometric display face paired with a humanist-geometric body sans; hierarchy comes from size contrast and spaced-out micro-labels rather than colour. Accessibility: body copy 16px or larger at 1.5+ line height with a ~70ch max measure; no text below 12px; weights under 400 only at 32px+; uppercase reserved for short labels with 0.05em+ tracking.
Spacing and imagery
Airy, centered single-column hero (~620px text measure) inside a ~1160px container; 5-column card grid with 16-20px gaps; large 16px+ radius on cards and fully rounded pill buttons; generous 120px+ vertical rhythm.
No photography. Only small line icons (lucide-style) sitting in dark tinted circles (green, indigo, amber, teal, red) and a subtle radial gradient glow at the page bottom.
Components
- Pill navbar button
- Hero eyebrow label
- Primary pill CTA with arrow
- Feature cards with tinted icon chips
- Campaign workspace tabs
- Numbered launch checklist
- UTM builder form with validated dropdowns
- All UTMs searchable table with copy action
- Campaign name generator
- Animated funnel chart with conversion chips
- Target pacing bars
- Leads table with inline stage select
- Month calendar with channel filters
- Public request intake form
Interactions
- Hover lift and border brighten on feature cards
- Copy-to-clipboard toast for UTM links
- Inline stage change in leads table with optimistic update
- Funnel bars animate in and highlight the biggest drop
- Drag to reorder checklist items and campaign stages
- Calendar channel filter toggles
- Accept / decline / promote actions on requests with confirmation
- Period filter switching on dashboards
Data
Team{id, name}Membership{team_id, user_id, role: owner|editor|viewer}Campaign{id, team_id, name, owner_id, stage_id, channel, budget, start, end, brief}ChecklistItem{campaign_id, position, label, done}Stage{team_id, name, color, position}TaxonomyValue{team_id, kind: channel|source|medium|format, value}UtmLink{campaign_id, url, source, medium, campaign, content, term, created_by}Lead{team_id, name, email, company, stage, campaign_id}FunnelTarget{team_id, month, mql_target, sqo_target, campaign_id?}CampaignRequest{team_id, requester_name, email, summary, due_date, status}
Build prompt
The baseline every prompt in the catalog assumes, then this design’s own ten sections, from goal to guardrails.
The baseline
### How to use these prompts Paste a template's build prompt into your coding agent as the first message. Each prompt names its own stack, tokens and acceptance criteria; the rules below apply to all of them and can be prepended once per project. ### Engineering baseline - TypeScript strict mode, no `any`, small typed components, feature folders, and one source of truth for design tokens (CSS variables consumed by Tailwind). - Validate every input with a shared zod schema on the client and again on the server or edge function. Never trust client-side checks alone. - Show loading, empty and error states for every async view. Surface errors in plain language with a retry, and log details to the console in development only. - Keep secrets out of the bundle. Only publishable keys (for example a Supabase anon key) belong in client code; service-role keys, API keys and webhooks live in server or edge-function environment variables. ### Data and auth baseline (full-stack templates) - Enable Row Level Security on every table before inserting data. Default-deny, then add owner-scoped policies (`auth.uid() = user_id`) and explicit role checks for admin views. - Store roles in a separate table checked by a security-definer function, never in a user-editable profile field. - Upload files to private storage buckets with size and MIME limits, and serve them through signed URLs. - Rate-limit public endpoints (forms, auth, AI calls) and add a honeypot field or captcha to anonymous forms. - Take payments through a hosted checkout and verify webhooks by signature. Never handle raw card data. ### Accessibility and UX baseline - Target WCAG 2.2 AA: 4.5:1 contrast for normal text and 3:1 for large text, input borders, focus rings and meaningful icons or chart lines. Every palette in this catalog lists its verified pairs; re-check with a contrast tool after any colour change. - Keep body text at 16px or larger with 1.5 line height, nothing below 12px, no light weights under 24px, and uppercase only for short labels. - Give every interactive element a visible focus ring, full keyboard support, semantic landmarks, labelled form fields, and alt text on meaningful images. - Respect `prefers-reduced-motion` for every animation. Give drag-and-drop and carousels keyboard and button alternatives. - Build mobile-first and test at 375px, 768px and 1280px. ### Content guardrails - Use original copy, fictional sample data and placeholder or licensed imagery. Do not reuse another product's name, logo, screenshots or marketing text. - Label demo testimonials and metrics as samples. Collect the minimum personal data the feature needs.
### Goal Build **Brieflane**, a campaign operations workspace for small marketing teams and agencies. Each campaign gets its own hub (brief, dates, budget, owner, ordered launch checklist, results), tracking links are generated from a team-controlled naming taxonomy so reports stay clean, and a funnel dashboard shows how leads convert stage to stage against monthly MQL and SQO targets. Colleagues outside marketing can submit campaign requests through a public form. ### Stack React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Radix), lucide-react. Add TanStack Query (server state), react-hook-form + zod (UTM builder, request form), date-fns (calendar), Recharts (funnel, pacing), Framer Motion (funnel entrance) and dnd-kit (reordering checklists and stages). Use Supabase for Postgres, Auth (email + magic link), and an Edge Function that accepts public request submissions. ### Pages & layout 1. **Landing**: slim top bar; centered hero with spaced uppercase eyebrow, oversized product name, subcopy, filled + ghost pill CTAs; a row of five tall dark feature cards with coloured icon chips; minimal footer. 2. **Auth**: sign up creates a team seeded with sample, clearly labelled demo data. 3. **App shell**: left sidebar for each module and a team switcher. 4. **Campaign workspace**: header with stage badge and owner; tabs for Brief, Checklist, Budget, Links, Results. 5. **UTM builder**: dropdowns fed by taxonomy, live URL preview, save as template; **All UTMs** table with search and copy. 6. **Funnel**: animated horizontal funnel, conversion chips between stages, biggest-drop callout, target pacing bars, period filter. 7. **Leads**: sortable table, stage filter, inline stage select, detail drawer; CSV import with dedupe preview. 8. **Calendar**: month grid of launches, sends and request due dates, filterable by channel. 9. **Settings**: stages (rename, recolour, reorder), taxonomy values, members and roles. ### Design system Dark-first. Tokens: `--background: #000103`, `--card: #05080e`, `--muted: #171b22`, `--foreground: #f2f6f8`, `--muted-foreground: #a5abb5`, `--primary: #8394ff` (text on it `#060815`), `--secondary: #ff85db`, `--accent: #dca8ff`, `--border: rgb(255 255 255 / 0.06)`. Fonts: Sora (700 display, 600 uppercase eyebrows with 0.28em tracking) and Albert Sans (400/500 body at 16-17px). Type scale 12/14/16/20/28/40/64. Spacing on a 4px base; sections 96-128px apart. Radius 16px for cards, full pills for buttons. Prefer 1px translucent borders over shadows. Motion 150ms ease-out for hover, 400ms spring for funnel bars. Add `--input-border: #5b6270` for form fields and checkbox outlines (the 6% border is decorative only). ### Components & interactions Buttons (primary pill, ghost pill, icon) with hover brighten, visible focus ring in primary at 55% alpha, disabled at 40% opacity, and spinner loading state. Checklist rows are draggable with a handle and keyboard reordering. UTM builder shows inline validation and disables Save until valid. Tables show skeletons, an empty state with a create CTA, and an error banner with retry. Copy actions toast. ### Data & state Entities: Team, Membership(role), Campaign, ChecklistItem(position), Stage, TaxonomyValue, UtmLink, Lead, FunnelTarget, CampaignRequest. Server state lives in Supabase via TanStack Query; UI filters sit in URL search params. Seed one sample campaign, six stages, a starter taxonomy and ~40 fictional leads, all marked `is_sample`. ### Accessibility Check that light grey body text (#a5abb5) on near-black passes 4.5:1 and that dark text is used on the periwinkle button. dnd-kit must use its keyboard sensor with announcements. Give the funnel chart a visually hidden table of stage counts and rates. Respect `prefers-reduced-motion` by skipping funnel animation. Label every form field. Type: body 16px+, line height 1.5+, max ~70ch, nothing under 12px. Verified contrast: body text #f2f6f8 on #000103 = 19.2:1; body text #f2f6f8 on #05080e = 18.44:1; secondary text / eyebrow #a5abb5 on #000103 = 9.04:1; secondary text #a5abb5 on #171b22 = 7.48:1. ### Security Enable RLS on every table: rows are readable only by members of the owning team; writes require editor or owner role; role changes are owner-only. The public request form posts to an Edge Function that validates with zod, applies a honeypot field and per-IP rate limit, then inserts using a service key kept in function env. Validate UTM values against taxonomy on client and in a Postgres check or trigger. Encode URL parameters, never build links via string concatenation of raw input. Cap CSV imports at 5 MB. ### Performance & SEO Code-split charts and calendar; paginate leads server-side. Landing gets title, meta description and OG image; app routes are `noindex`. Target Lighthouse 90+. ### Guardrails - Use original copy and generic icons only; no third-party logos or trademarked names. - Sample data must be fictional and labelled as sample; no fake testimonials. - Keep components small and typed; no `any`; surface errors visibly. - Done when: a new user signs up and sees a seeded team; a UTM link can be generated, validated and copied; leads can change stage inline and the funnel updates; a public request can be submitted and promoted into a campaign; a viewer role cannot edit anything.