Case Study

Pristupio Platform

A scalable SaaS platform built for long-term product growth — designed with Vue 3, Pinia, and Supabase from the ground up.

ResultScalable architecture enabling rapid feature iteration

The product needed a foundation that could scale with new features without accumulating technical debt. Early architectural choices in state management, data fetching, and component design would determine how fast the team could ship six months later. Getting it wrong early meant expensive refactors under deadline pressure.

Rather than building fast and refactoring later, I prioritised architecture first. Each product domain — auth, content, billing — was isolated into its own composable and Pinia store. UI components were designed to be context-unaware: purely presentational, driven by props. This separation kept individual pieces testable and replaceable.

  • Frontend: Vue 3 with Composition API and TypeScript
  • State: Pinia with typed store modules per domain
  • Backend: Supabase (PostgreSQL, Auth, Realtime)
  • API layer: Composables abstracting all Supabase queries
  • Routing: Nuxt 3 with middleware-based auth guards

Pinia over Vuex

Pinia's modular design and TypeScript-first API eliminated boilerplate and made stores testable in isolation. Vuex would have added complexity with no real benefit for this scale.

Supabase over a custom backend

For an early-stage product, building a custom API server significantly increased development time. Supabase provided auth, real-time subscriptions, and a relational database out of the box — freeing capacity for product work.

Composables as the backend boundary

All Supabase queries live inside composables, not components. Swapping or extending the backend later means touching one layer, not dozens of files scattered across the codebase.

No premature optimisation

Skipped virtualisation and lazy stores until there was evidence the app needed them. Keeping complexity low in the early stage made onboarding faster and debugging simpler.

The platform shipped on schedule with a clean, navigable codebase. New features take significantly less time because the architecture anticipates change. No major refactors were required after initial release - a direct result of upfront design decisions.

Vue 3Nuxt 3TypeScriptPiniaSupabaseSCSS
  • Add Playwright end-to-end tests for critical user flows
  • Introduce a feature flag system for safer incremental deploys
  • Extract the component library into a standalone package for reuse across products

Like what you see?

Let's build something together.

Get in touch