Bengal Cattery · Adelaide Hills
Replaces spreadsheets, paper records, and scattered emails for a registered Bengal breeder with one integrated system covering the full lifecycle from pairing to placement.

Adelhills Bengals is a registered Bengal and Cashmere Bengal breeder in the Adelaide Hills. The platform operates three integrated portals: a public-facing website showcasing cats and taking kitten applications, a buyer portal where approved customers track their kitten's journey, and an admin dashboard where the breeder runs the entire operation — pairings, litters, health records, applications, sales, and finances.
The cattery ran on spreadsheets, paper records, and scattered emails, with no single system tying together breeding planning, health testing, buyer applications, and placement. Prospective buyers had no consistent, credible way to apply or follow their kitten, and the breeder had no operational dashboard.
One codebase had to serve the public, approved buyers, and the breeder/admin — each with different access and needs.
The public site has to convey credibility (pedigrees, health badges, testimonials) to families making a long-term decision.
A solo-maintainable system — a JSON file store with file-locking rather than a database — kept ops overhead low for a single breeder.
A modular three-portal architecture on a shared React frontend and Express backend, with role-based auth protecting the buyer and admin areas. The public site leads with trust signals; the buyer portal gives a personal journey view; the admin dashboard consolidates the full lifecycle into one operational surface.

Shipped three integrated portals on one codebase: a public site, an approved-buyer portal, and a complete cattery operations dashboard.

Decisions, tradeoffs, and what I'd change.
Made a deliberate dev-mode call: get a complete, usable UX in place first and backlog security, auth hardening, and performance — the right sequencing for a pre-launch client tool, with the risks written down rather than hidden.
Chose a file-locked JSON store over a database because the system serves one breeder (~60 cats); SQLite is the documented upgrade path for when it outgrows that.
Three audiences (public, buyer, admin) on one codebase is an information-architecture problem first — role-based auth is scoped as the next build, not a launch blocker.