Independent studio website (Ferrow)
A complete React + TypeScript website for a small studio: home, filterable work index, six chaptered case studies, about and an honest contact page. Typed content and design tokens make rebranding a data change. Automated axe, end-to-end and speed checks pass in Chromium only.
Sign in (or create a free account; no card), then find it in your library.
- Version
- 1.0.0
- Platforms
- Website
- Framework
- vite-react
- Archive
- 6.0 MB 244 files
Screens from the build
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)What it does
- discover work by kind (URL-backed filter)
- read a chaptered case study
- learn who the studio is (about, people, history, credits)
- contact the studio (direct channels + validated enquiry form with an honest delivery boundary)
- navigate on mobile (modal menu with focus management)
- rebrand by editing content files and design tokens
Routes and screens
homeSplit photographic hero, kinds-of-work index, statement and prices, selected work, process, print band, closing call to actionworkWork index with ?type= filter, live result count, lead project and ruled numbered indexcase-studyCase study: credits, cover, summary, named chapters with contents rail, details and credits, next project (6 included)aboutPosition, origin, people, principles, kit, dated history, photo creditscontactDirect channels with response times and a front-end-only enquiry formnot-foundPage not found with a suggestion for mistyped case-study addresses and top destinations
States covered
- Loading
- Error
- Empty
- No results
- Validation
- Not configured
- Submitting
- Reduced motion
- Menu open
- Not found
Stack and versions
| vite | 8.3.1 |
|---|---|
| react | 19.3.0 |
| react-dom | 19.3.0 |
| react-router | 8.4.0 |
| typescript | 7.0.2 |
| vitest | 5.0.2 |
| @testing-library/react | 16.3.3 |
| @playwright/test | 1.56.0 |
| @axe-core/playwright | 4.13.0 |
Commands:
| install | npm ci |
|---|---|
| dev | npm run dev |
| test | npm test |
| typecheck | npm run typecheck |
| build | npm run build |
| preview | npm run preview |
| e2e | npm run build && npm run e2e |
| screenshots | npm run build && npm run evidence:screenshots |
| adaptation_demo | npm run demo:adaptation |
Tested
| Check | Platform | Tool | Result | Date |
|---|---|---|---|---|
| type-check + production build | Node | tsc 7.0.2 + vite 8.3.1 (Node 22.22.2) | Pass | 2026-09-26 |
| unit and component tests (45) | Node | vitest 5.0.2 + Testing Library (jsdom) | Pass | 2026-09-26 |
| e2e: routes, keyboard, mobile menu, states, reduced motion, performance budget | Website | Playwright 1.56.0, Chromium 141 | Pass | 2026-09-26 |
| axe WCAG 2.0–2.2 A/AA + best practice, every route and key state at 360 and 1280 px | Website | @axe-core/playwright 4.13.0 | Pass | 2026-09-26 |
| lab LCP (median of 3), CLS and critical-path bytes on a throttled Lighthouse-style phone profile | Website | Playwright 1.56.0 + Chromium CDP throttling | Pass | 2026-09-26 |
| screenshots 360/768/1280/1600, reduced motion and states | Website | Playwright 1.56.0, Chromium 141 | Pass | 2026-09-26 |
| content replacement (rebrand to a different studio via content + tokens only) | Website | scripts/adaptation-demo.mjs + tests/unit/adaptation.test.tsx | Pass | 2026-09-26 |
| fresh install from the packaged archive: npm ci, build, test (+ e2e routes/keyboard/states) | Node | npm 10.9.7, Node 22.22.2 | Pass | 2026-09-26 |
| Safari and Firefox | Website | not run | PendingNot run yet | — |
1 check still pending. Pending means it hasn't been run yet, not that it passed.
Not included
- Contact form sends nothing until VITE_CONTACT_ENDPOINT is configured; success is shown only after an HTTP 2xx (docs/INTEGRATION-BOUNDARIES.md)
- No CMS: content is typed TypeScript data in src/content
- No prerendered page bodies: static HTML per route carries the head (title, description, canonical, Open Graph) only
- No analytics, cookies, booking, payments, newsletter or search
- 404 status depends on the host serving dist/404.html (no catch-all rewrite)
Each boundary comes with instructions for adding it in docs/INTEGRATION-BOUNDARIES.md.
Known limitations
- Sample studio, people, clients and places are fictional; photographs are CC0 stock and do not depict them; technical captions are illustrative
- Photographs are at most 960 px wide; very large crops are slightly upscaled until replaced with larger originals
- Light theme only
- Automated checks ran in Chromium only (Safari and Firefox not verified)
- Lab performance was measured with emulated throttling on a shared machine, not with field data
Licence
Use in unlimited end products incl. client/commercial; no resale/redistribution as a template, kit or dataset; no ML training. Survives cancellation for delivered versions.
Full terms: Motif template licence. Open-source parts keep their own licences (licenses.json, id lic-free-website-studio-1-0-0).
Ask your agent
Use Motif to activate the free-website-studio template and download it. Then adapt it for a neighbourhood bakery: replace the content and imagery, keep the design tokens and every state in docs/STATE-MATRIX.md, and run check_design_contract before you finish.Motif guides applied
web-site-type-portfolio-studio · web-work-index-page · web-case-study-page · web-about-page-structure · web-contact-page-and-honest-submission · web-form-labels-and-layout · web-inline-validation-and-error-recovery · web-mobile-navigation · web-not-found-page · web-breadcrumbs-and-page-contents · web-hero-split-photo-and-type · web-asymmetric-lead-item-gallery · web-anti-generic-card-wall · web-card-budget-policy · web-warm-paper-ink-palette · web-single-accent-allocation-map · web-serif-display-sans-pairing · web-mono-micro-label-layer · web-type-scale-and-measure · web-responsive-images-and-formats · web-cls-prevention · web-lcp-optimization · web-font-loading-without-shift · web-skip-links-and-landmarks · web-focus-indicators-and-keyboard · web-reduced-motion-for-marketing-sites · web-seo-semantic-structure-and-metadata · web-anti-slop-rubric-scored · web-hard-fail-signatures-self-lint · motion-duration-easing-scale · motion-reduced-motion-strategy · motion-anti-pattern-fade-up-everything · sys-content-code-separation-for-authored-surfaces · sys-dtcg-token-file-format
Archive
SHA-256 33cfd2622604152d8da6a73b53c2267c6b896d4c1e5f0ef547d4cfbb04c5bf10