Skip to main content
vibld

Template

Lintel Works

A monochrome architecture-firm website that opens on a full-bleed black-and-white building photo with a huge light-weight headline, then presents services, design philosophy with studio stats, a filterable project gallery, a blog with topic filters and a contact section. It supports light and dark modes.

Architecture practice website · Website · Portfolio · 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

Zen Kaku Gothic New has a light, restrained Japanese-modernist grotesk Latin that mirrors minimal architecture.

  • Zen Kaku Gothic NewHeadings: hero 128px at 300 uppercase; regular 64px sections
  • Zen Kaku Gothic NewBody: body 16-18px, 12px uppercase eyebrows

Who it is for

  • Architecture firms and design studios
  • Studios presenting multi-category portfolios
  • Firms seeking residential and commercial clients
  • Practices publishing case studies and insights

Layout

  1. Header: small caps studio name left, centered uppercase links (Work, Services, About, Blog, Contact), theme toggle icon right; translucent over hero
  2. Full-bleed grayscale modernist building hero with centered two-line light uppercase headline, subtitle and vertical 'Scroll' indicator
  3. Services: numbered list (01 Residential, 02 Commercial, 03 Renovation, 04 ...)
  4. About: 'Design Philosophy' heading + two paragraphs left; principles list with left rules and Founded/Projects stats right
  5. Selected work on light gray: 'Our Projects' with category filter and full-width project images with location/area/year/category
  6. Blog with topic filters
  7. Contact: form + details
  8. Footer

Palette

Minimal, serious, calm, precise, monochrome. It feels like a clean architecture monograph.

  • background#ffffff
  • text#000000
  • section gray#f5f5f5
  • accent gray#f2f2f2
  • decorative border#e6e6e6
  • input border (light)#8e8e8e
  • label gray#333333
  • dark mode bg#0a0a0a
  • dark mode muted text#a3a3a3
  • dark mode input border#6b6b6b
  • hero overlay (black 60%)#00000099

Every checked pair, measured again

SampleWhereRatioNeeds
Aalight: body text21.00:14.5:1
Aalight: text on section gray19.26:14.5:1
Aalight: label gray on white12.63:14.5:1
Aalight: label gray on section gray11.59:14.5:1
Aalight: white text on black button21.00:14.5:1
light: input border3.28:13:1
Aadark: body text18.16:14.5:1
Aadark: muted labels7.85:14.5:1
Aadark: muted labels on muted surface7.30:14.5:1
dark: input border3.72:13:1
dark: focus ring18.16:13:1
Aahero text over 60% black overlay on white-worst-case photo5.74:14.5:1
Aalight: text on accent gray18.76:14.5:1

As vibld’s tokens

The palette on the 15+ color tokens vibld styles a project with, each text color 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
System sans light (300) uppercase at 128px with slight negative tracking for hero only (display size); regular weight 64px section titles (the system face is not on Google Fonts; a vibld project loads Zen Kaku Gothic New)
Body
System sans 16-18px at weight 400, line-height 1.6; 12px uppercase medium eyebrows with 0.1em tracking (the system face is not on Google Fonts; a vibld project loads Zen Kaku Gothic New)

Thin, large type and generous whitespace mirror minimal architecture

Spacing and imagery

Very airy; 24px page gutters on full-width layout, two-column about split, large vertical section padding (~120px), 6px radius on controls

Black-and-white photography of concrete modernist buildings, full-bleed hero and large project images

Components

  • Translucent header with theme toggle
  • Full-bleed hero with scroll indicator
  • Numbered services list
  • Philosophy split with principles
  • Stats pair (founded, projects)
  • Project category filter
  • Project card with metadata
  • Project detail page
  • Blog list with topic filter
  • Contact form
  • Footer

Interactions

  • Theme toggle light/dark
  • Header becomes solid white on scroll
  • Category filter updates project grid
  • Hover scale/brighten on project images
  • Scroll indicator animates
  • Form validation with toast

Data

  • Project{slug, title, category, location, area, year, images[], description}
  • Service{number, title, description}
  • Principle{title, description}
  • Post{slug, title, topic, date, excerpt, body}
  • ContactMessage{name, email, message}

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 color 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, labeled 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 a minimal website for a fictional architecture practice called **Lintel Works**. The audience is homeowners, developers and institutions shortlisting architects. The site should communicate restraint and quality through large black-and-white photography and thin type, show services and philosophy, let visitors filter projects by type, publish articles, and take inquiries.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Radix Toggle Group, Select, Form, Toast), lucide-react, React Router, react-hook-form + zod, and next-themes (or a small theme hook) for light and dark mode. Framer Motion is optional, for subtle reveals. Static content in typed files or MDX; the contact form posts to one serverless function.

### Pages & layout
1. Header: small uppercase studio name left, centered uppercase links, theme toggle right; translucent gray over the hero, solid after scrolling.
2. Hero: full-bleed grayscale building photo with a 60% black overlay, a two-line light-weight uppercase headline, a one-line subtitle and a vertical "Scroll" line indicator.
3. Services: eyebrow plus heading, then a numbered list of four disciplines with short descriptions.
4. About: large "Design philosophy" heading and two paragraphs on the left; on the right, three principles with left rules and a two-stat row (founded year, project count).
5. Work (light gray band): heading, category filter (All, Residential, Commercial, Cultural, Renovation), and large project cards with location, area, year and category.
6. Project detail: hero image, metadata grid, narrative, gallery.
7. Journal: post list with topic chips; article page.
8. Contact: form and studio details; footer.

### Design system
Light tokens: `--background: #ffffff; --foreground: #000000; --muted: #f5f5f5; --accent: #f2f2f2; --border: #e6e6e6 (decorative); --input-border: #8e8e8e; --label: #333333`. Dark tokens: `--background: #0a0a0a; --foreground: #f5f5f5; --muted: #141414; --border: #262626 (decorative); --input-border: #6b6b6b; --label: #a3a3a3`. Font: Zen Kaku Gothic New 300/400/500. Scale: clamp(56px, 10vw, 128px) hero at 300 weight; 64 / 32 / 20 / 16 / 12px (the 300 weight only at 32px and above; body 16–18px at weight 400, line-height 1.6, max 70ch); eyebrows 12px uppercase, weight 500, with 0.1em tracking. Spacing: 24px gutters, 120px section padding, 64px column gap. Radius 6px on inputs and buttons, 0 on images. No shadows. Motion: 300ms fades; image hover scale 1.03 over 700ms.

### Components & interactions
- Filter: toggle group with an active underline; the URL param updates; empty state "No projects in this category yet".
- Project card: hover scale and caption brighten; focus ring; lazy image with blurred placeholder.
- Theme toggle: labeled button, respects system preference first, persists choice.
- Contact form: name, email, project type select, budget range, message; inline errors; loading; success and error toasts.

### Data & state
`Project{slug,title,category,location,areaSqm,year,cover,images[],summary,body}`, `Service{n,title,text}`, `Principle{title,text}`, `Post{slug,title,topic,date,excerpt,body}`. Filter state lives in URL params. Seed eight invented projects with plausible but fictional locations.

### Accessibility
White hero text sits on a 60% black overlay, which holds 5.7:1 for the subtitle even over a white-worst-case photo. Eyebrow text #333 on white passes easily; in dark mode labels use #a3a3a3. Inputs use #8e8e8e (light) and #6b6b6b (dark) borders so the field edges reach 3:1. The scroll indicator is decorative. The filter uses `aria-pressed`, and the result count is announced. Images need alt text describing the building. Check both themes for focus ring visibility. Verified contrast: light: body text: #000000 on #ffffff = 21.0:1; light: label gray on white: #333333 on #ffffff = 12.63:1; light: input border: #8e8e8e on #ffffff = 3.28:1; dark: muted labels: #a3a3a3 on #0a0a0a = 7.85:1; hero text over 60% black overlay on white-worst-case photo: #ffffff on #666666 = 5.74:1.

### Security
Validate the contact form with zod on the client and in the function, add a honeypot and rate limit, and never expose email-service keys. Sanitize any Markdown-rendered journal content (DOMPurify if HTML is allowed). External links use `rel="noopener noreferrer"`.

### Performance & SEO
Serve grayscale AVIF images with `srcset`; preload the hero. Code-split project and journal routes. Unique titles and descriptions, OG images per project, Organization and Article JSON-LD, sitemap. Target Lighthouse 95+ in both themes.

### Guardrails
- Use original copy and placeholder or generated architecture photos; no real firm names or buildings claimed as your work.
- Present no fabricated client testimonials as real.
- Store only inquiry fields needed.
- Keep components small and typed, never use `any`, and show errors visibly.
- Done when: the filter deep-links and shows an empty state; both themes pass AA; project pages resolve by slug; the contact form validates and blocks bots; the header stays readable over the hero and after scroll.

Open the builderAll templatesThis palette on its own