$ cd ~/projects/streamline-performance-garage
$ cat README.md[PRE-LAUNCH]2026
Streamline Performance Garage
Static marketing and lead-gen site for a Subaru, Nissan and Honda specialist shop in Concord, NC.
- Next.js
- Tailwind
- JSON-LD
- Vitest
A fully static, fully prerendered site for an independent Japanese-import repair shop serving the Charlotte metro. Built for local search first: one physical-location page with structured data, separate service-area pages, and a clear path from search result to phone call or contact form.
Problem
The problem
The shop's old domain redirected somewhere else, so it had no web presence it owned. It needed to rank for searches like "Subaru mechanic Concord NC" and turn those visits into calls and leads, with a site the owner would not have to babysit.
Solution
The solution
Next.js App Router with every one of its 39 routes prerendered. All business identity (name, address, hours, socials, geo) flows from a single typed config into both the rendered markup and JSON-LD, so nothing drifts. Page content lives as typed arrays that pages map over, and leads post to a webhook through a validated server action.
Highlights
Interesting details
- Typed routes everywhere: every internal link is checked by the TypeScript compiler, and raw Link usage is banned in favor of a typed wrapper.
- Accessibility as a test gate: strict jsx-a11y linting plus five axe-core test suites covering the carousel, layout, gallery, sections and contact form. Definition of done is Lighthouse mobile Performance 95+, Accessibility 100, SEO 95+.
- SEO rules enforced by unit tests, including sitemap correctness, and JSON-LD produced only from typed schema builders (AutoRepair, Service, ImageGallery).
- Instagram feed without a third-party widget: server-side fetch, Zod validation, hourly ISR cache, and a graceful follow card when no token is configured. A script refreshes the long-lived token in place.
- Gallery import pipeline that optimizes and strips EXIF from source photos, appends to a typed manifest, and fails tests on missing alt text.
- Fail-fast environment validation at boot, so a missing lead webhook surfaces as an error instead of a silently dropped lead.
Tech stack
Built with
- Next.js 16
- React 19
- TypeScript (strict)
- Tailwind CSS v4
- Zod
- schema-dts
- Vitest + Testing Library
- axe-core
- Instagram Graph API
- Vercel