JSON/Markdown data-driven agency website with Splitting.js text animations and ScrollOut scroll effects

The agency site had a specific content profile: service descriptions, case studies, team copy, and a handful of page sections that change infrequently. Deploying a CMS for this would have added infrastructure overhead — a hosted service, an API to maintain, a build pipeline dependency — for content that a developer can update in a text file.
The alternative was to treat JSON and Markdown as the content layer. All service descriptions live in JSON files. Case study body copy lives in Markdown with YAML frontmatter. gray-matter parses the frontmatter at build time; remark converts the Markdown body to HTML. getStaticProps reads everything from the filesystem and passes it to the page as props. No CMS dependency, no API calls at build time, no third-party service to authenticate against.
The tradeoff is that a non-developer updating the content needs to edit files and trigger a redeploy. For an agency where the developer is also the person updating content, that trade is correct: one less system to log into, one less API key to rotate, one less service that can go down.
Marketing sites at this price point compete on visual quality. The Splitting.js integration handles character-level animation on headline text — each letter is wrapped in a span at init time, allowing CSS transitions to fire per-character rather than on the entire text node. ScrollOut triggers these animations as each section scrolls into the viewport, so the page feels alive during the scroll without any autoplay that competes with the reader's attention.
Swiper powers the testimonial and case-study carousels. Formik handles the contact form with formsubmit.co as the backend — a form endpoint service that forwards submissions to an email address without requiring a server. Tawk.to provides the live-chat widget, the same tool I used on the first personal blog ten years earlier, still the right call for a simple contact surface.
15,500 lines of code, delivered as a production marketing site for my brother's digital agency. The design is fully custom — no template, no component library — with SCSS handling all styling. The combination of filesystem content, character-level animation, and scroll-triggered effects produces a site that reads as professionally produced and maintains easily because all the content is plain text files in the repository.
SEO-optimised healthcare marketing site with Schema.org structured data and perfect Core Web Vitals
Next.js blog with Hygraph GraphQL, a hand-rolled AST renderer, and AdSense monetisation
Personal blog with Sanity CMS, SWR infinite pagination, and Bootstrap 4 styling
Did this resonate?