Marketing · Community template · Complete page
Studio agency
A complete editorial agency homepage with an oversized serif hero, selected case studies, a service ledger, studio story, approved testimonial and host-owned contact action.
Interactive · 1200px viewport · Scroll inside the preview
Install the complete page
One command installs the page component, its matching blocks, shared helpers, and MIT notices into your configured components directory. Prepare your existing project once, then run the page install command.
Before the first install
- 1.
Open your existing React project
Use React 19+, TypeScript/TSX, and a working Tailwind CSS 4 build. Keep the project's existing router, dependencies, and global stylesheet.
- 2.
Check components.json before installing
Reuse an existing components.json. Its aliases.components must resolve in TypeScript and the bundler, and tailwind.css must point to the stylesheet your app loads. Do not reinitialize an already configured project.
Only if components.json is missing; run inside the existing app and follow its framework setup.
npx shadcn@latest init - 3.
Include the installed sources in Tailwind
Keep the host's standard shadcn theme variables, Tailwind @theme mappings, and base border styles loaded (background, foreground, border, sidebar, and chart tokens). Ensure Tailwind scans the actual installed components directory. Restricted source(none), ignored paths, and monorepos may need an @source path relative to the stylesheet. For theme='dark', use a class-based dark variant in the host CSS.
- 4.
Import through your configured components alias
The @components/ entry is a registry target placeholder, not a JavaScript import. Replace the example's @/components prefix with components.json aliases.components, verify the file printed by the CLI, and mount it in an existing host route.
Missing styles or class-based dark mode?
Merge only the directives your Tailwind CSS 4 stylesheet needs. This source path example assumes src/styles.css and components installed under src/components; adjust it to your actual directory. Keep your host’s existing dark-mode selector and use theme="inherit", or configure this class variant when using theme="dark".
/* Example: src/styles.css */
/* Add only if this directory is outside your existing scan scope. */
@source "./components/uiblocks";
/* Required for the recipe theme="dark" class switch. */
@custom-variant dark (&:where(.dark, .dark *));Setup references: shadcn configuration · Tailwind source scanning · Dark mode
Install this page
npx shadcn@latest add https://uiblocks.org/r/recipe-studio-agency.jsonImport one component
import StudioAgencyRecipe from "@/components/uiblocks/recipe-studio-agency/recipe-studio-agency";
export default function StudioPage() {
return (
<StudioAgencyRecipe
brand="Your studio"
hero={{ title: "Your studio positioning", description: "Your actual services and approach." }}
work={[]}
services={[]}
contact={{ title: "Start a conversation", href: "/contact", actionLabel: "Contact our studio" }}
/>
);
}The import example uses the standard @/components alias. Keep your project’s existing alias and use the installed entry printed by shadcn. Pass your own copy, links, and callbacks through the component options below.
Local interface demo · no upload or conversion
import StudioAgencyRecipe from "@/components/uiblocks/recipe-studio-agency/recipe-studio-agency";
export default function StudioDemo() {
return <StudioAgencyRecipe mode="demo" />;
}Component options and callbacks
- mode, brand, brandMark, brandHref, availability, navigation
- Controlled by default: no sample projects, claims or testimonials. The host owns real brand and destinations. Local default navigation targets existing section IDs; explicit mode="demo" opts into labelled fictional Foundry content.
- hero, primaryAction, secondaryAction, facts, clientIntro, clients
- Supply the actual positioning, primary links, facts and approved client names. Pass null to either hero action to hide it. Empty arrays stay empty in demo mode.
- workHeading, work, servicesHeading, services, servicesNote
- Real projects support an optional host href, a local native detail disclosure, image {src,alt,width,height}, disciplines/year/outcome. Missing images preserve a visible placeholder; no customer picture is fabricated. Services support verified prices/durations/deliverables and optional approved proof.
- studioHeading, studioParagraphs, studioFacts, testimonialEyebrow, testimonial
- Host-owned studio story, verified figures and approved quote. Set testimonial=null to suppress the fictional demo quote.
- contact, contactDetails, onContact
- Controlled mode only: set contact.href to a real host destination, or provide onContact. The handler may return a promise and must explicitly return {status:"sent",message?}; pending, rejection, missing confirmation and retry are represented. No handler/href leaves the action disabled. Demo mode always disables the contact business action, labels it as local/no-send and never invokes onContact, even if supplied; section anchors and case disclosures remain available.
- footerDescription, footerColumns, legalText, legalLink, theme, className
- Set footer content and genuine legal/host links. Theme inherits the host dark class by default; its optional local toggle changes only the recipe wrapper. Explicit light/dark props lock the recipe theme. Scoped CSS and system fonts do not change the host theme or stylesheet.
Template source
Adapted from Foundry by WISE IT LLC.
MIT licensed. The original notice and adaptation record are included in the installable page bundle.
Source revision: cfdc5a64ab378122124d8e2ffc039f60109de3e4
- Adapted the complete homepage composition and original section order to portable React with typed host content, controlled empty defaults and explicitly labelled fictional demo fixtures.
- Replaced next/font and StaticImageData with system serif/sans/mono fonts and native images. Scoped palette/type styles to the recipe root and retained optional local theme controls.
- Embedded four original MIT-generated JPEG case plates as unchanged data URIs in a local TypeScript module; actual projects use host images or a layout-preserving placeholder. No fonts are redistributed.
- Replaced upstream application routes, mailto/phone/legal claims and simulated contact behaviour with valid local section anchors, optional host URLs and a host callback requiring explicit status:"sent" confirmation. Business contact actions are disabled in demo mode while local section anchors and native case disclosures remain usable.
Keep the design intact
- Retain the oversized serif hero, cool paper canvas, coral accent, 1152px measure, thin rules and full section order when adapting the layout.
- Replace all fictional Foundry clients, figures, prices, booking availability and testimonials with verified host content before publication. Controlled mode starts with empty collections.
- Original case JPEG bytes are embedded in a local TypeScript demo module under the upstream MIT grant, and each demo image is labelled as AI-generated. Supply your own image props for real projects; missing controlled images display placeholders.
- System serif, sans and monospace replace the original Fraunces/Archivo/IBM Plex Mono webfonts. No upstream fonts are redistributed, and no Next or router runtime is required.
- In controlled mode, connect contact.href or an authenticated onContact host action. A promise resolution without {status:"sent"} is unconfirmed, and rejected requests can be retried. Demo contact actions are disabled and never call business handlers.
- Native project disclosures, menu Escape/focus return, theme controls and long Chinese copy must be checked at desktop and 390px mobile widths.
Hand this recipe to your AI assistant
Build an agency or studio website using UIBlocks studio-agency, adapted from the MIT Foundry complete homepage. Inspect get_recipe and get_preview, install recipe-studio-agency once, and import StudioAgencyRecipe through the host components alias. Preserve the editorial serif hierarchy, cool blue paper, coral accent, selected-work ledger, services, studio story, testimonial and closing contact section. Default to controlled mode with actual brand, copy, verified work/services/facts, approved testimonials, host image URLs and real navigation. Set contact.href or provide onContact that explicitly returns {status:"sent"} only after the authenticated host service confirms success. Keep empty, pending, rejected, unconfirmed and retry states honest. Explicit mode="demo" shows labelled fictional fixtures and MIT AI-generated case plates. Preserve upstream MIT notice, host routes and aliases; check keyboard, reduced motion, long Chinese copy and mobile layout.
Read the recipe JSON