Skip to content

Agency Studio

Terracotta on warm paper, with no blue in it anywhere. Full-bleed hero, client list, the actual team, a journal and a careers page — and no pricing, on purpose.

5 routes5 pages · 15 blocks31 files · 3,191 lineslucide-reactAdded 2 Sept 2026

What's included

  • app/blog/[slug]/page.tsx
  • app/blog/page.tsx
  • app/careers/page.tsx
  • app/globals.css
  • app/layout.tsx
  • app/not-found.tsx
  • and 9 more files
  • 5 pages it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab init agency-studio ./my-app

Or over MCP, from your editor's agent — no account needed.

License

Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.

Was this useful?

Every screen

Design studio — London and Lisbon

We design the parts nobody screenshots.

Onboarding, settings, empty states, the error a customer hits at 2am. The unglamorous surfaces where products are actually kept or abandoned.

Fourteen years, sixty-odd products, a handful of them yours

NorthwindContosoLumonInitechGlobexUmbrellaVandelaySoylent

Outcomes

Four numbers from projects we can name, with the sample attached

Studios quote their best case and call it a result. These are medians across every engagement of the last three years, including two that were cancelled — which is why they are less flattering than the figures on most studio sites, and why we will show you the working.

Read a full case study
+41%
activation, median across 9 onboarding projects
Client analytics, 90 days post-launch
−63%
support tickets about the thing we redesigned
Six engagements with before/after data
11 weeks
median engagement, start to handover
All 34 projects since 2023
7 of 10
clients come back within two years
Excludes the four companies that no longer exist

Three ways we work

Shapes of engagement rather than a capability list. Pick the one that matches where you are, or tell us we have the wrong three.

2 weeks

Teardown

We use your product the way a new customer does, then hand back a prioritised list of what is costing you activation and what it would take to fix each one. Fixed fee. Roughly a third of these end with us telling you not to hire us.

  • Annotated walkthrough of the real flows
  • Ranked by cost to you, not effort to us
  • Yours to hand to any studio, including not us

8–12 weeks

Product design

The main engagement. We take one surface — onboarding, the settings area, the billing flow — from research through to built components your engineers can ship, working inside your repo and your design system rather than beside them.

  • Research, interface design and front-end build
  • We write the components, not a spec of them
  • Weekly demo against your staging, not a Figma review

Ongoing

Embedded

Two or three days a week inside your team for six months or more, for companies at the point where the design work is continuous but a full-time hire is a year away. Same people every week, in your standups.

  • Named designers, not a rotating bench
  • Three-month minimum, one-month notice
  • We help you hire your replacement for us

The people who would actually do the work

Fieldwork is six people and stays six people. You meet everyone in week one, and the person in the pitch is the person on the project — a sentence every studio writes and this is the size at which it is true.

  • Priya Raghavan

    Co-founder & CEO

    Previously led platform at a payments unicorn; still reviews PRs.

  • Marcus Okafor

    Co-founder & CTO

    Wrote the first commit in March 2023 and the incident runbook the week after.

  • Elena Sokolova

    Head of Design

    Believes every empty state deserves as much care as the dashboard.

  • Tom Whitfield

    Staff Engineer

    Owns the sync engine; measures success in p99s, not features.

  • Aisha Diallo

    Product Manager

    Turns forty support tickets a week into a roadmap the team believes in.

  • Daniel Kim

    Developer Advocate

    If you found us through a conference talk in 2026, it was probably his.

“They spent the first fortnight telling us our onboarding problem was actually a pricing problem. Nobody we had paid before was willing to lose the next phase of work by saying that.”

Marisol HerreraChief Product Officer, Contoso
onboarding rebuild
11 weeks
onboarding rebuild
trial-to-paid conversion
+52%
trial-to-paid conversion
tried it before us
2 studios
tried it before us

Trusted by support teams at

  • Meridian
  • Coastline Health
  • Fieldstone

Tell us what is not working

A paragraph is enough to start. If we are the wrong studio for it we will say so in the reply, and usually name a better one.

  • A person replies, usually within a day
  • No proposal deck, no discovery invoice
  • Booked to about eight weeks out

Live components in your current theme — switch routes, or the phone icon to check the mobile layout. Colours are this template’s Sandstone palette, which ships in app/globals.css. Terracotta on warm paper neutrals, tight corners. The one palette here with no blue in it anywhere — which is most of why it reads as a studio rather than a product.

Get it

31 files · .zip · nothing to configure · Pro

then

cd agency-studio
npm install
npm run dev

The archive contains the whole project — routes, blocks, theme tokens, Tailwind and PostCSS config, tsconfig and a .gitignore. One runtime dependency, and no Hoverlab dependency at all: it is your code from the moment it unzips.

For AI

The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.

See the prompt

Routes

PathPageFile
/Agency Landing Pageapp/page.tsx
/blogBlog Indexapp/blog/page.tsx
/blog/[slug]Article Pageapp/blog/[slug]/page.tsx
/careersCareers Pageapp/careers/page.tsx
404404 Pageapp/not-found.tsx

What you get

project root(8 files)

  • GETTING-STARTED.md
  • gitignore
  • next.config.ts
  • package.json
  • postcss.config.mjs
  • README.md
  • tailwind.config.ts
  • tsconfig.json

app/(7 files)

  • blog/[slug]/page.tsx
  • blog/page.tsx
  • careers/page.tsx
  • globals.css
  • layout.tsx
  • not-found.tsx
  • page.tsx

components/(16 files)

  • article-header.tsx
  • blog-post-grid.tsx
  • cta-split-panel.tsx
  • faq-accordion.tsx
  • feature-rows.tsx
  • footer-minimal.tsx
  • hero-media-overlay.tsx
  • job-listing-board.tsx
  • logo-cloud.tsx
  • navbar-simple.tsx
  • newsletter-signup.tsx
  • not-found-404.tsx
  • stats-narrative.tsx
  • team-grid.tsx
  • testimonial-spotlight.tsx
  • theme-provider.tsx

Every file is listed. The 15 files in components/ are the blocks the pages import — each one has its own page if you want to read it on its own.

Project files

Everything except the blocks. Opens on app/globals.css — the file that makes the rest look right, since every block styles itself with bg-card and text-muted-foreground rather than literal colours.

app/globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;

/**
 * Design tokens — the Sandstone palette.
 *
 * Terracotta on warm paper neutrals, tight corners. The one palette here with no blue in it anywhere — which is most of why it reads as a studio rather than a product.
 *
 * This file is the reason a pasted block looks right. Every block and page
 * styles itself with semantic classes — `bg-card`, `text-muted-foreground`,
 * `border-border` — rather than literal colours, so they inherit whatever
 * you define here instead of fighting it. Change a value below and every
 * section in the project moves with it. Change the hue on `--primary` and
 * `--ring` together and you have rebranded the site.
 *
 * Values are bare HSL channels, not `hsl(...)` calls. That is what lets
 * Tailwind compose them with an alpha suffix: `bg-primary/10` expands to
 * `hsl(var(--primary) / 0.1)`, which is impossible if the variable already
 * carries its own function wrapper.
 *
 * Every foreground/background pair below clears WCAG AA (4.5:1) in both
 * themes. If you retune one, check the pair rather than trusting the eye —
 * mid-lightness accents are the ones that fail.
 */

@layer base {
  :root {
    --background: 40 35% 98%;
    --foreground: 25 25% 12%;
    --card: 40 40% 99%;
    --card-foreground: 25 25% 12%;
    --popover: 40 40% 99%;
    --popover-foreground: 25 25% 12%;
    --primary: 18 72% 38%;
    --primary-foreground: 40 40% 99%;
    --secondary: 38 30% 93%;
    --secondary-foreground: 25 30% 20%;
    --muted: 38 25% 94%;
    --muted-foreground: 28 12% 40%;
    --accent: 30 50% 92%;
    --accent-foreground: 22 45% 22%;
    --destructive: 0 70% 45%;
    --destructive-foreground: 0 0% 100%;
    --border: 36 22% 88%;
    --input: 36 22% 88%;
    --ring: 18 72% 38%;

    --radius: 0.375rem;
  }

  .dark {
    --background: 25 25% 6%;
    --foreground: 40 20% 96%;
    --card: 25 22% 9%;
    --card-foreground: 40 20% 96%;
    --popover: 25 22% 9%;
    --popover-foreground: 40 20% 96%;
    --primary: 20 80% 62%;
    --primary-foreground: 25 35% 8%;
    --secondary: 28 16% 16%;
    --secondary-foreground: 40 20% 96%;
    --muted: 28 16% 16%;
    --muted-foreground: 34 12% 66%;
    --accent: 30 25% 18%;
    --accent-foreground: 32 45% 86%;
    --destructive: 0 62% 52%;
    --destructive-foreground: 0 0% 100%;
    --border: 28 15% 19%;
    --input: 28 15% 19%;
    --ring: 20 80% 62%;
  }
}

@layer base {
  * {
    @apply border-border;
  }

  body {
    @apply bg-background text-foreground antialiased;
  }

  /**
   * Global motion opt-out.
   *
   * Blocks guard their own animations with Tailwind's `motion-safe:`, but
   * third-party CSS and anything you add later will not. This is the
   * backstop: it neutralises every animation and transition on the page
   * for users who have asked the OS for reduced motion, rather than
   * relying on each author to remember.
   */
  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: 0.01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.01ms !important;
      scroll-behavior: auto !important;
    }
  }
}

More Landing Pages

Open the full page for this template

Startup Waitlist

The waitlist hero with the count on it

A pre-launch site in violet: one email field, a blog to keep the list warm, and no pricing to be held to. The smallest honest thing to put in front of a product that does not exist yet.

4 routes4 pages13 blocksUltraviolet
Pro
Open the full page for this template

Developer Tool

The terminal hero, typing the install

Near-black buttons, square corners and a terminal-green accent. Install command above the fold, real code before any prose, docs and changelog behind it.

5 routes5 pages17 blocksGraphite
Pro
Open the full page for this template

Mobile App

The store-badge download hero

Emerald and 16px corners, built around one conversion: the store install. Badges and the App Store rating above the fold, a single price, and an account area for the subscription.

5 routes5 pages18 blocksSignal
Pro
Open the full page for this template

Local Service

Hours, address and phone above the fold

Deep teal, for a business people let into their house. A booking widget above the fold, every price published, and a compliance footer with the registrations a regulated trade has to show.

4 routes4 pages14 blocksHarbour
Pro
Open the full page for this template

Marketplace

Both sides of the market on one page

Dark olive on warm off-white, built for two audiences at once: search and real listings for buyers, the seller economics below the fold, and a browse route behind it.

5 routes5 pages19 blocksMoss
Pro
Open the full page for this template

Enterprise

The security posture band

Burgundy and square corners — the register of things bought in a boardroom. Numbers in the hero, a comparison table that concedes rows, and published prices instead of a sales wall.

5 routes5 pages18 blocksClaret
Pro
Open the full page for this template

Integration Platform

The integration grid, sorted by depth

High-chroma blue. The connector names in the hero, a catalogue with honest live/beta/planned status, four SDK languages and a dated roadmap for everyone who is not on the list.

4 routes4 pages14 blocksCobalt
Pro
Open the full page for this template

Creator Course

The curriculum, module by module

Magenta-plum with the softest corners in the set, for one person selling one thing. A student testimonial as the hero, a long instructor section, one price and the refund policy on the page.

5 routes5 pages15 blocksPlum
Open the full page for this template

Newsletter

The archive, above the testimonials

One decision, made from the archive: a hero with the field in it, the back issues as the actual argument, and the three worries about handing over an address answered as content.

6 routes6 pages22 blocksTideline