TrademarkTrademark
Ctrl k
Search docs...
Guides
Surfaces

Agency

A studio site with case studies read from the filesystem and a mailto for every call to action.
The agency surface is a studio site: a hero, the engagement process, a services rail, featured work, pricing, an FAQ and an about block. It requires no slices. The case studies are MDX files and every call to action is a mailto:, so a studio-only project runs on zero environment variables. It owns three paths, listed in composition/surfaces/agency.json:
  • src/app/(agency) — the layout, the components and the routes.
  • src/lib/agency — the case-study engine.
  • src/content/agency — the copy and the case studies themselves.
  • /studio — the studio page.
  • /studio/work — every case study.
  • /studio/work/<slug> — one case study, with a previous/next pager.
The surface serves /studio rather than / because this repo is the union of every surface and landing owns /. The manifest's rootRedirect is /studio: when a composition has no surface that serves /, the scaffolder writes a redirect from / into next.config.mjs. If several chosen surfaces declare one, the first named on the command line wins. Everything on the studio page apart from the case studies comes from src/content/agency/agency.js: the studio's name, tagline, intro and email, then services, processSteps, studioPlans, studioFaq and studioTestimonial. Each service has a card, which is what a visitor scans in the rail, and a modal, which is what they read after clicking it. One MDX file per case study under src/content/agency/work/. The filename is the slug. Studies sort by order, then by title. The studio page shows up to three studies marked featured. If none are marked, it shows the first three, so the page is never empty. A missing title falls back to the slug. There is no contact form. The header, the about block, each pricing plan and the end of every case study link to mailto: with agency.email. The pricing links also fill in the subject line, for example "Sprint enquiry". To use a form, replace those buttons. The surface has nothing else to connect.
Last updated October 18, 2026
Edit this page on GitHub