Skip to content
All work

raava.au: a site built as a system

Raava's public site on Next.js and Payload CMS: editable content, a reusable page system and a motion layer that respects reduced motion.

Status
Status: In development
Role
Founder, design and engineering
When
May 2026 to present
Credit
Raava, my own company
Stack
  • Next.js
  • React
  • Payload
  • PostgreSQL
  • Tailwind CSS
  • Motion
  • GSAP
  • Playwright
  • Vitest
  • Vercel

Raava is my company, and it needed a public site that explains its services and products, can be edited without touching code, and keeps its look as pages are added. I built it as a system rather than a set of pages: content in a CMS, a design system underneath, and a motion layer with clear rules. It is live, and it is still being built.

My role: founder and sole engineer. I design and build the site, its design system and its content model.

How a page gets made

Content pipeline

Content is edited in the CMS and rendered into pages on deploy.Select a step to see what it does.

Connections: Editor to Payload CMS; Payload CMS to Postgres; Postgres to Next.js build; Next.js build to Live site.

Payload became the canonical content source on 23 May 2026, three weeks after the first commit. Before that, content lived in files in the repository. For the cutover I ran both sources behind a flag, with Playwright parity tests comparing the two, and deleted the file path once the CMS matched it.

The services index on ai.raava.au: the heading Six practices, one studio, above six service cards.
Services index, built from the section kit.
A section of the document processing page: a paragraph on how the pipeline is built beside a five-step diagram from intake to sync.
A service page section: copy beside a step diagram.

Four layers, one direction

The system, bottom to top

  1. 1TokensColour, type, spacing and motion values, defined once.
  2. 2ComponentsShared building blocks that take their values only from tokens.
  3. 3SectionsReusable page bands assembled from components. The release 4 work turns these into a kit.
  4. 4PagesMostly compositions of sections. A new product page reuses one shared template instead of starting over.
The ai.raava.au home page in the light theme: the headline Practical AI for Australian SMEs above three service cards.
ai.raava.au home, light theme.
The same home page in the dark theme, with the same layout and violet accents.
The same page in the dark theme: one token set, two modes.

Motion with rules

The site moves, but under rules I enforced in code and in tests in October 2026:

  • One ease-out curve across the source, so nothing moves on its own timing.
  • The first paint is the resting state. Nothing autoplays, and animated counters render their final figure on the server.
  • Reduced motion gets a designed still, not a broken half-animation. A site-wide motion switch drives the same still for anyone who wants it.
  • Accessibility scans run against the still, so the checks see what a reduced-motion visitor sees.
The brand board's motion identity page, listing five rules: accent as glow, floating-card UI, resolve to stillness, word-stack kinetic type, and a locked dark field.
The motion rules every animation follows, from the brand board.

From git

Milestones

Dates from the repository history.

Show as table
PhaseWhenNote
First commit: Next.js 16 shell on VercelMay 2026 to May 2026
Payload CMS added, then made the content sourceMay 2026 to May 2026
Reusable product pages and animation registryJun 2026 to Jun 2026Build checkpoint dated 2 June 2026.
Services section from the new section kit goes liveSep 2026 to Sep 202616 September 2026.
Motion lab, then the motion foundation, mergedOct 2026 to Oct 20263 and 5 October 2026.
commits to the site
436
On main, 1 May to 5 October 2026
Source: git log
static pages in one green build
55
A dated checkpoint from 2 June 2026, not a current count
Source: Build report, 2 June 2026
product pages from one template
3
Same checkpoint, with nine bespoke animations
Source: Build report, 2 June 2026
What this page leaves out

There are no traffic, lead or conversion figures here because none are recorded. Raava's product names and any CMS screens with real entries are also left out.

What I'd do next

  • Finish the next version of the design system before adding more pages.
  • Ship the remaining section-kit releases, starting with products.
  • Recount pages and components so the numbers on this page can be current rather than dated.
  • Status: Shipped

    A phone-first scoring and live leaderboard app for a Sri Lankan New Year community event on 18 April 2026, built in two days.

    Evidence: 237 commits over 17 and 18 April 2026, the last on event day.

    Stack: Next.js · Supabase · TanStack Query · Tailwind CSS

  • Status: In developmentRaava's own product

    An offline-first app for small Sri Lankan pharmacies: invoice-photo receiving, price-guarded billing and batch stock. Phase 1 is built and in testing.

    Evidence: Phase 1 built; user acceptance testing pending; no pilot yet.

    Stack: React · Vite · TypeScript · Tailwind CSS