Skip to main content
vibld

Template

Etchlight

A dark, terminal-flavoured marketing site for a developer framework with AI assistance, analytics and security features. Code windows, monospace labels and a lime signal colour speak directly to engineers, while bento cards explain security, integrations and performance.

Developer-framework and SaaS landing site with terminal styling · Website · SaaS landing page · static site

A mock-up of the homepage, drawn from this design’s layout, palette and typefaces. A build follows the full prompt below.

Add app screens

Pick up to 6 screens, such as a dashboard, settings or an empty state. Each is built in this design’s own palette and typefaces, with its states and guardrails.

Account setup
Add edit
Analytics
Appearance
Calendar
Chat
Checklist
Checkout
Confirmation
Dashboard
Delete account
Details
Discovery questions
Empty state
Flowchart
Import export
Inbox
Integrations
Invite team
Loading
Login
Onboarding
Plans
Playground
Product tour
Referral
Search
Settings
Share
Sign up
Success
Table
Team members
Text editor
Upgrade
Usage
Verification
Welcome

Start from this templateRead the build prompt

Typefaces

All three named faces are kept: Archivo's grotesk headings, Roboto's neutral body and Roboto Mono's terminal labels already form a set no other template uses.

  • ArchivoHeadings: H1 64px / 36px 500, H2 48px / 30px
  • RobotoBody: body 16px/1.6 400
  • Roboto MonoFigures and code: buttons 14px uppercase +0.06em, feature titles 15px 600, labels and code 13-14px

Patterns

  • split hero with tabbed code window
  • typewriter rotating word in headline
  • monospace uppercase buttons
  • logo marquee
  • 3x2 icon feature grid
  • bento feature cards with code, radar, cipher and fingerprint visuals
  • server status panel
  • analytics showcase
  • integration icon grid
  • green bottom glow

States it is designed for

  • copy to clipboard denied: show 'Press Ctrl+C to copy' fallback
  • status panel shows operational / degraded / outage states with text
  • newsletter or contact form: validation, sending, success, error
  • long code lines scroll horizontally inside the window, never the page

Who it is for

  • front-end and full-stack developers
  • startup CTOs
  • platform teams
  • indie hackers

Layout

  1. top bar: small mark + monospace wordmark, hamburger menu button (full-screen menu with Pages, Integrations, Pricing, Blog)
  2. hero: left column with lime 'Watch our event' link, H1 whose last word types and rotates (e.g. startups, teams, agencies), lede, lime 'Get started' + text 'Learn more'; right column code window with framework tabs, line numbers and a 'Documentation' footer with copy button
  3. trusted-by marquee (monospace uppercase label) over a green glow
  4. features intro: lime eyebrow, H2, lede, outline 'Explore features' button; 3x2 grid of icon + monospace title + body
  5. bento: code sample card (wide), threat radar, cipher token, integration icon grid, fingerprint access
  6. server status and analytics showcase sections, integrations, pricing, changelog teaser, FAQ, footer with legal links

Palette

Terminal-native, confident, nocturnal: teal-black canvas, crisp white type and a lime cursor colour.

  • canvas#060f11
  • surface#141d1f
  • text#ffffff
  • muted text#b5bdc5
  • lime primary#adff85
  • label on lime#1b2e0f
  • border#4d6c73
  • hairline (decorative)#212e31
  • info blue#3b82ff

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text19.37:14.5:1
Aamuted text on surface9.02:14.5:1
Aalime button label12.06:14.5:1
Aalime text/links14.22:14.5:1
input border3.03:13:1
info blue status5.37:13: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
Archivo 500, 64px desktop / 36px mobile, line-height 1.2
Body
Roboto 400, 16px, line-height 1.6; Roboto Mono 500 for labels, buttons and code (14px)

H2 48/30px Archivo 500; feature titles Roboto Mono 15px/600; buttons Roboto Mono 14px uppercase +0.06em; code 13-14px with line numbers in muted.

Spacing and imagery

Density: balanced; 120px section padding, 24px card gaps Grid: 12-column; feature grid 3x2; bento 8/4 then 4/4/4 Container: 1200px max, 32px padding (20px mobile) Radius: cards 14px, code window 12px, buttons 14px Shadows: none; green radial glow at section bottoms and inside cards

Code windows with syntax colouring, radar sweep, binary-rain behind a token chip, circuit lines around a fingerprint, grid of monochrome integration glyphs; green radial glows; no photography.

Components

  • top bar with menu button
  • full-screen menu
  • lime button
  • text link with chevron
  • tabbed code window with copy button
  • typewriter headline word
  • logo marquee
  • icon feature item
  • bento card
  • radar visual
  • status panel
  • analytics chart
  • integration glyph grid
  • pricing card
  • footer

Interactions

  • headline word types, pauses, deletes and cycles; static first word under reduced motion
  • code tabs switch snippets; copy button shows 'Copied' for 2s
  • radar sweep rotates; binary rain drifts (both disabled under reduced motion)
  • buttons: lime brightens and chevron nudges 2px on hover
  • menu overlay opens with fade and traps focus

Data

  • CodeSample{framework, language, code}
  • Feature{icon, title, body}
  • Integration{name, glyph}
  • Plan{name, price, features[]}
  • ServiceStatus{name, state (operational|degraded|outage), uptime}
  • ChangelogEntry{version, date, items[]}

Guardrails

Experience

  • Code samples must be original and actually runnable.
  • The typewriter word must not change the H1's accessible name; expose a static full sentence.
  • Status states always include text, not just a coloured dot.
  • Keep uppercase monospace for short buttons and labels only.
  • Legal links (terms, privacy) are always in the footer.

Accessibility

  • Lime buttons use dark #1b2e0f labels (12:1).
  • Code window tabs are a tablist; code blocks have aria-label naming the language.
  • Copy button announces success via aria-live.
  • Focus ring: 2px #adff85 with 2px offset.
  • Borders on inputs use #4d6c73 (3:1+) on canvas and surface.

Security

  • Contact/newsletter endpoints validated with zod, rate-limited, honeypot.
  • No secrets or real API keys in code samples; use obvious placeholders.
  • External integration links use rel='noopener noreferrer'.
  • Security headers: CSP, HSTS, frame-ancestors 'none'.

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 an entry'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 entries)
- 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.

### SaaS screen baseline
- Design every screen for its full set of states: first-run empty, loading skeleton, partial data, error with retry, permission-denied, and success feedback. Each entry lists the states its screen needs.
- Keep destructive actions (delete, revoke, downgrade, remove member) behind a confirmation that names the object, and prefer undo over a second dialog where the action is reversible.
- Enforce authorisation on the server for every action a screen exposes. Hiding a button is not access control; check the role again in the API or RLS policy.
- Never show secrets (API keys, tokens) in full after creation. Show them once, then mask them, and offer rotate and revoke.
- Keep the app shell (navigation, workspace switcher, account menu) consistent across screens, and preserve filters, sort and scroll position when the user navigates back.
### Goal
Build **Etchlight**, a terminal-flavoured marketing site for a developer framework that bundles AI assistance, analytics, integrations and security features. Engineers should immediately see real code, understand the feature set through a bento grid, and click 'Get started' into the docs.

### Stack
Astro + TypeScript, Tailwind CSS, shadcn/ui (Radix Tabs, Dialog for the full-screen menu, Accordion), lucide-react, Motion for the typewriter, radar and reveals, zod for forms. Code highlighting at build time with a static syntax highlighter.

### Pages & layout
1. **Home**: top bar → split hero (event link, typewriter H1, lede, 'Get started' + 'Learn more'; tabbed code window) → trusted-by marquee with green glow → feature intro + 3x2 grid → bento (code sample, threat radar, encryption token, integrations grid, fingerprint access) → server status → analytics showcase → integrations → pricing → FAQ → footer.
2. **Integrations**, **Pricing**, **Changelog**, **Blog**, **About**, **Contact**, **Terms**, **Privacy**, link to **Docs**.
3. Breakpoints: hero stacks with code window below CTAs under 1024px; bento to 1 column under 768px; menu is always an overlay.

### Design system
- Colors: `--canvas: #060f11`, `--surface: #141d1f`, `--text: #ffffff`, `--muted: #b5bdc5`, `--lime: #adff85`, `--on-lime: #1b2e0f`, `--border: #4d6c73`, `--hairline: #212e31`, `--info: #3b82ff`.
- Fonts: Archivo 500 for H1 64/36px and H2 48/30px; Roboto 400 body 16px/1.6; Roboto Mono 500 for buttons (14px uppercase +0.06em), labels and code.
- Spacing: 8px base; 120px sections; 24px gaps; 28px card padding.
- Radius: 14px cards and buttons, 12px code window.
- Glow: `radial-gradient(50% 60% at 50% 100%, rgba(173,255,133,.18), transparent)`.
- Syntax colours: keywords --lime, strings #d6e2e8, comments --muted.
- Motion: typewriter 70ms/char with 1.8s hold; radar 4s rotation; 200ms hovers.

### Components & interactions
TopBar, MenuOverlay, Button (lime, text with chevron, outline), TypewriterWord, CodeWindow (Tabs, line numbers, footer link, CopyButton), LogoMarquee, FeatureItem, BentoCard, RadarSweep, CipherToken, IntegrationGlyphGrid, FingerprintTile, StatusPanel, AnalyticsChart, PricingCard, FaqAccordion, Footer with legal links.

### Data & state
Typed data files for code samples (per framework tab), features, integrations, plans, statuses (static placeholder), changelog entries. Tab and menu state local. Contact form posts to a server endpoint with zod validation and forwards via a transactional email service.

### Accessibility
H1 contains a stable sentence ('Build new products for teams') with the rotating word in an aria-hidden span and a visually hidden fixed word. Tabs via Radix. Menu overlay traps focus and returns it. Reduced motion stops typewriter, radar and marquee. Code blocks are scrollable regions with tabindex=0 and labels.
Verified contrast: body text: #ffffff on #060f11 = 19.37:1; muted text on surface: #b5bdc5 on #141d1f = 9.02:1; lime button label: #1b2e0f on #adff85 = 12.06:1; lime text/links: #adff85 on #141d1f = 14.22:1; input border: #4d6c73 on #141d1f = 3.03:1; info blue status: #3b82ff on #060f11 = 5.37:1.

### Security
Validate and rate-limit forms; honeypot; keep email-service credentials server-side. Code samples use placeholder tokens like `YOUR_API_KEY`. Strict CSP and HSTS.

### Performance & SEO
Static HTML; highlight code at build; SVG visuals inline and lightweight. Title, description, OG, SoftwareSourceCode/SoftwareApplication JSON-LD. Lighthouse 95+.

### Guardrails
- Invent all logos in the marquee and integration glyphs; no real brand marks.
- Code samples are original and generic (no copied snippets).
- Don't make security certifications claims in sample copy.
- Keep lime as the only accent besides status colours.

**Acceptance criteria**
- [ ] Code tabs switch and copy works with fallback
- [ ] H1 reads as a stable sentence to screen readers
- [ ] Menu overlay is keyboard accessible
- [ ] No horizontal page scroll at 390px
- [ ] Recorded contrast pairs pass

Open the builderAll templatesThis palette on its own