Products we're proud of.
Platforms, webshops, iOS apps, and the networks they run on. Here's what that looks like.
BK9 Hoopers
A full competition management platform for dog sport, with a native iOS companion app – built from scratch, not configured from a template.
BK9 Hoopers is a production-grade SaaS platform managing the complete lifecycle of dog agility competitions – from entry registration through real-time scoring, payment processing, and online courses. Built on a modular Rails monolith spanning six subdomain applications, with a native SwiftUI iOS app for following competitions live.
Real-time scoring
Action Cable + GraphQL subscriptions push live run results to spectators as they happen.
Native iOS app
SwiftUI and Swift 6. Live run tracking over WebSockets, PKCE OAuth sign-in, tokens in the Keychain.
Scored in a field with no signal
A full competition scored ringside on a phone with no reception, live to spectators – the offline-first PWA queues every entry and syncs the moment a bar of signal returns.
Multi-tenant SaaS
Six subdomain applications from one modular codebase. Auth, admin, members, results, API, CMS.
Payment processing
Full Stripe integration with refunds, credit system, revenue splits, and webhook handling.
Passkey auth
WebAuthn + OAuth2 + PKCE. Production-grade authentication.
Domain complexity note
The domain complexity here is significant – multi-level dog progression rules, real-time slot management, multi-org RBAC, and an offline-first PWA for ringside scoring. 312 test files and 42,000+ lines of test code keep it honest.
Canine Sports Club
A multi-subdomain platform for competitive dog sports clubs – memberships, events, results, and a CMS the club runs itself.
Canine Sports Club runs as four applications from one modular monolith – public site, authentication, admin panel, and member portal – with enforced boundaries between domains. It acts as its own OAuth2 identity provider, built PKCE-first so the companion iOS app authenticates against the same accounts as the web portal.
Modular monolith
Seven packs with enforced dependency boundaries, checked in CI. One codebase, no spaghetti.
Own identity provider
Doorkeeper OAuth2 with PKCE enforced. One account across web, admin, portal, and the iOS app.
Fine-grained RBAC
Every mutating action gates on an explicit permission key, scoped per organisation.
Self-serve CMS
Editors change public pages without a deploy – safely, behind CMS-specific permissions.
Full audit trail
Every change versioned, nothing hard-deleted. You can always answer "who changed this, and when?"
100% coverage, enforced
Line and branch coverage gates in CI, zero Brakeman warnings. Not aspirational – enforced.
Domain complexity note
Multi-organisation permissions, an OAuth2 provider with PKCE, and a CMS non-technical editors can safely use – all in one Rails codebase, behind a CI pipeline that refuses anything below 100% line and branch coverage.
The Gentleman's Groom Room
A complete Spree Commerce webshop for a men's grooming business – storefront, admin, and payments, replacing a legacy Rails build.
Built on Spree Commerce 5 – storefront, admin dashboard, and API – with a bespoke theme and custom page sections for the brand. Payments run through both Stripe and PayPal Checkout, and the shop replaces a Rails 5-era storefront that had reached the end of its life.
Spree 5 platform
Full storefront, admin dashboard, and API on the current major release – not a five-year-old fork.
Two payment rails
Stripe and PayPal Checkout side by side, so customers pay however they prefer.
Bespoke storefront theme
A custom Spree theme and page sections built for the brand, not a stock template with a new logo.
Legacy replacement
Superseded a Rails 5-era Spree build that had fallen years behind on upgrades.
Order management
Inventory, fulfilment workflows, and stock control through the Spree admin.
Containerised deploys
Docker-based and reproducible, from development through to production.
Domain complexity note
E-commerce edge cases live in checkout and payments – refunds, failed captures, webhook retries. Running two payment providers side by side means handling both sets of failure modes properly.
Working on something like this?
Tell us what you're building. A Code Bunny will tell you honestly how we'd approach it.
Let's talk