Template
Jantree
A sleek dark marketing site for an all-in-one startup workspace that replaces spreadsheets and email threads with dashboards, collaboration and an AI assistant. The hero shows a full product dashboard to prove substance, and bento vignettes explain the collaboration and speed features before pricing.
Dark startup-productivity landing site with full dashboard mock hero · 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.
Start from this templateRead the build prompt
Typefaces
Plus Jakarta Sans gives bold, tight headlines with a modern geometric edge, and Golos Text is a sturdy UI grotesk that keeps the dashboard mock and muted body clear.
- Plus Jakarta SansHeadings: H1 72px 600, H2 48px, card titles 18px
- Golos TextBody: subline 18px/1.55, card copy 16px/1.5 400-500, mock table text 14px
Patterns
- announcement pill above headline (tag plus link)
- centred bold headline with white pill primary and text-link secondary
- avatar stack with review score
- faint grid-cell glow background
- full app-window dashboard mock below the fold line
- sidebar-plus-stat-cards-plus-table dashboard composition
- logo marquee with edge fade
- teal icon chip eyebrow above section titles
- six-card icon feature grid
- bento feature cards with mini UI vignettes (shortcut keys, live cursors, avatar orbit, sparkline)
- three-tier pricing
- testimonial wall
- integrations grid
States it is designed for
- Mock data table statuses: active (teal), paused (amber), each with text
- Contact form: validation, sending, success, error
- Pricing: custom enterprise tier shows 'Talk to us'
- Integrations page: search with no-results state and a request-integration link
- Changelog: 'new' badge for entries under 14 days old
- Reduced motion: no tilt, sparklines static, orbit static
Who it is for
- early-stage founders
- small product and operations teams
- freelancers running client projects
Layout
- Header: logo mark left, links (pages menu, integrations, blog, pricing) centre, small outlined CTA right; becomes hamburger under 900px
- Hero: announcement pill (teal 'New' tag plus text link), two-line bold H1, grey subline, white pill 'Get started' plus text link with chevron, avatar stack with review count; subtle grid-cell glow background
- Dashboard mock: window chrome, left nav with icons, header with search/bell/avatar, three stat cards with teal sparklines and delta chips, members table with status pills
- Logo marquee
- Feature grid: teal eyebrow chip, centred H2 and subline, 3x2 icon cards
- Bento: wide dashboard card + analytics sparkline card, then three cards (keyboard shortcut keys, live cursors on a checklist, avatar orbit)
- Other features list, workflow section, integrations grid, growth stats, pricing (three tiers), testimonials, FAQ, CTA, footer
- Mobile: dashboard mock scales down as an image-like block with horizontal scroll disabled; bento and grid become single column
Palette
Sleek, focused, modern. A dark app-like site that shows the product rather than describing it.
- canvas
#0f0f0f - card
#161616 - card raised
#1f1f1f - text primary
#fbfbfb - text muted
#9b9ca1 - teal accent / positive
#33c6ab - teal chip background
#112220 - amber paused status
#e29d37 - blue cursor label
#33abd1 - indigo highlight
#6575fb - border / hairline (fixed)
#636363
Every checked pair, measured again
| Sample | Where | Ratio | Needs |
|---|---|---|---|
| Aa | body text | 18.52:1 | 4.5:1 |
| Aa | muted text on canvas | 7.00:1 | 4.5:1 |
| Aa | muted text on card | 6.60:1 | 4.5:1 |
| Aa | primary button label | 18.52:1 | 4.5:1 |
| Aa | teal chip text | 7.70:1 | 4.5:1 |
| Aa | amber paused pill | 7.85:1 | 4.5:1 |
| Aa | indigo highlight text | 4.73:1 | 4.5:1 |
| card border / input border | 3.19:1 | 3:1 | |
| focus ring teal | 8.95: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
- Plus Jakarta Sans 600: H1 72px/1.0, H2 48px/1.0 (use 1.1 when wrapping), card titles 18px
- Body
- Golos Text 400-500, 18px/1.55 subline, 16px/1.5 card copy, table text 14px min in the mock only
Headlines bold and tight; body in muted grey. Status pills 12px medium with an outlined style.
Spacing and imagery
Balanced: 1200px container, 24px grid gaps, 140px section spacing. Radius 24px cards, 16px inner panels, 999px buttons and chips. Borders 1px rgba(255,255,255,0.06) on cards; no drop shadows. Dashboard mock sits in a 16px-radius window frame.
Realistic dashboard UI with teal sparklines; illustrated cartoon avatars; mini UI vignettes (keycaps, cursor name tags, orbiting avatars); grayscale partner wordmarks; line icons in white.
Components
- Announcement pill
- White pill button
- Text link with chevron
- Avatar stack + review score
- Grid-glow backdrop
- App-window frame
- Sidebar nav (mock)
- Stat card with sparkline and delta chip
- Members table with status pill
- Logo marquee
- Eyebrow chip with icon
- Icon feature card
- Bento card with vignette
- Keycap shortcut vignette
- Live cursor vignette
- Avatar orbit
- Pricing card
- Testimonial card
- Integration tile
- Changelog entry
- FAQ accordion
Interactions
- Hero dashboard tilts from 8deg to flat as it scrolls into view
- Sparklines draw on first view
- Keycap vignette presses keys in sequence on hover
- Cursors in the edit-together vignette move along gentle paths
- Avatar orbit rotates slowly; pauses on hover
- Buttons: white pill dims to #e6e6e6 on hover; focus ring 2px teal
- Pricing toggle monthly/yearly
Data
Feature{icon, title, description, group (core|other)}Plan{id, name, price_monthly, price_yearly, features[], cta}Integration{slug, name_generic, category, description, icon}ChangelogEntry{date, title, body, tags[]}Testimonial{quote, name, role, avatar}Post{slug, title, excerpt, category, published_at}
Guardrails
Experience
- Hero dashboard uses invented people and generic project icons, never real app logos
- Keep one white primary button per section; secondary actions are text links
- Eyebrow chips are short (one word) and consistent across sections
- Bento vignettes explain a single feature each, with a two-line caption
- The dashboard mock is visual only; don't make it look clickable
- Pricing tiers limited to three with the middle one highlighted
Accessibility
- Status pills carry text labels; colour is supplementary
- Dashboard mock is a figure with a concise text description; its inner text is aria-hidden
- Animated vignettes pause under reduced motion and on hover
- Muted grey #9b9ca1 is the lowest-contrast text allowed
- Focus ring 2px teal offset 2px on dark surfaces
- Marquee has pause control; logos have generic alt text
Security
- Contact form validates on the server with zod; rate limit and honeypot
- No real email addresses in mock data; use example.com addresses
- Integration requests stored insert-only with RLS; no public read
- Third-party embeds (video, scheduling) loaded only after consent
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 **Jantree**, the marketing site for an all-in-one workspace for young startups: dashboards, collaboration, keyboard-first speed and an AI assistant. The dark design proves substance with a full dashboard mock in the hero, then explains features with bento vignettes before pricing. ### Stack Next.js + TypeScript, Tailwind CSS, shadcn/ui on Radix, lucide-react, Recharts (sparklines), Motion (tilt, draw-on, vignettes), react-hook-form + zod. MDX for blog and changelog. ### Pages & layout 1. **Home**: header (logo mark, links, small outlined CTA). Hero on a faint grid-cell glow with an announcement pill (teal "New" tag and text link), a bold two-line H1, a grey subline, a white pill "Get started", a "Learn more" text link with chevron, and an avatar stack with review score. Dashboard mock in an app window: sidebar (Dashboard, Analytics, Collaboration, Assistant, Automation), header with search, bell and avatar, three stat cards with sparklines and delta chips, and a members table with invented names, roles, generic project icons and status pills. Then a logo marquee; a feature grid (eyebrow chip, H2, subline, 3x2 icon cards); a bento (wide dashboard card, analytics card, keycap card, live-cursor card, avatar-orbit card); other features; integrations; pricing; testimonials; FAQ; CTA; footer. 2. **Pricing**, **Integrations** (searchable grid), **Changelog**, **About**, **Blog** + post, **Contact**, **Terms**. Mobile: headline 40px; the dashboard mock renders as a scaled static block; grids go to one column. ### Design system - Colors: `--canvas: #0f0f0f`, `--card: #161616`, `--card-2: #1f1f1f`, `--text: #fbfbfb`, `--muted: #9b9ca1`, `--teal: #33c6ab`, `--teal-bg: #112220`, `--amber: #e29d37`, `--blue: #33abd1`, `--indigo: #6575fb`, `--border-strong: #636363`, card hairline `rgb(255 255 255 / .06)`. - Fonts: Plus Jakarta Sans 600 for display (H1 72px, H2 48px, line-height 1.05-1.1); Golos Text for body (18px subline, 16px card copy, 1.5 line-height). - Spacing: 8px base, 24px gaps, 140px sections, 1200px container. - Radius: 24px cards, 16px inner panels, pill buttons and chips. - Shadows: none; use hairline borders. - Motion: 600ms tilt-to-flat on scroll, 1.2s sparkline draw, 20s orbit rotation, 200ms hovers. ### Components & interactions AnnouncementPill, PillButton, ChevronLink, ReviewStack, GridGlow (CSS radial masks, aria-hidden), AppWindow, MockSidebar, StatCard (Recharts sparkline, delta chip with arrow), MembersTable (status pill with text), LogoMarquee (pause), EyebrowChip, FeatureCard, BentoCard with vignettes: KeycapShortcut (keys press on hover), LiveCursors (named tags moving along paths), AvatarOrbit, SparklineCard. Also PricingCards with a toggle, TestimonialWall, IntegrationGrid (search, empty state, request link), ChangelogList (new badge), FaqAccordion, ContactForm. ### Data & state Typed JSON: features, plans, integrations and testimonials; MDX: posts and changelog. Mock dashboard data is local JSON with invented people and example.com emails. Integration search and the pricing toggle use URL params. `integration_requests(id, email, integration_name, created_at)` in Supabase. ### Accessibility The dashboard mock is a `figure` with a caption summarising what it shows, and its internals are aria-hidden. Status pills include text. Vignettes and the marquee respect reduced motion and pause on hover. Focus ring: 2px `--teal` with offset. Minimum text is `--muted` on `--card`. Headings follow order, with one H1. Verified contrast: body text: #fbfbfb on #0f0f0f = 18.52:1; muted text on canvas: #9b9ca1 on #0f0f0f = 7.0:1; muted text on card: #9b9ca1 on #161616 = 6.6:1; primary button label: #0f0f0f on #fbfbfb = 18.52:1; teal chip text: #33c6ab on #112220 = 7.7:1; amber paused pill: #e29d37 on #161616 = 7.85:1; indigo highlight text: #6575fb on #161616 = 4.73:1; card border / input border: #636363 on #0f0f0f = 3.19:1; focus ring teal: #33c6ab on #0f0f0f = 8.95:1. ### Security The contact and integration-request forms post to server routes with zod validation, a honeypot and rate limits. `integration_requests` has RLS enabled with insert only through the server and no anon select. Mock data contains no real emails. Embeds wait for consent. ### Performance & SEO Statically generate every page. Render the dashboard mock as HTML/CSS (not a heavy image) with lazy Recharts sparklines. Load Plus Jakarta Sans 600 and Golos Text 400/500. Give pages unique metadata and add SoftwareApplication JSON-LD. The changelog gets an RSS feed. Target LCP under 2s and CLS 0. ### Guardrails - Use original copy and invented names; show no real app logos in the table; logo marquee wordmarks are placeholders. - Keep teal for positive and brand accent only; amber for paused. - Acceptance criteria: (1) the hero mock renders crisply at 390px and 1440px; (2) all vignettes stop under reduced motion; (3) integration search shows an empty state; (4) forms show all states; (5) the listed contrast pairs pass.