Recurra

In development

Personal project — recurring-billing scaffolding for local service businesses. Built as an excuse to learn Nx, AWS CDK, and the boring billing layer end to end.

Role
Solo — backend, web, mobile, infra
Period
Feb 2025 → Present
Stack
  • NestJS
  • React Router 7
  • Expo
  • Kotlin (Clover POS)
  • PostgreSQL
  • Prisma
  • AWS CDK
  • LocalStack
  • Nx monorepo
Links

What it does

Recurra is a recurring-billing platform for local service businesses — repeat business, on repeat. The owner manages services, schedules, and customers from a React admin dashboard or an Expo mobile app. The customer self-serves subscriptions from a hosted portal. Stripe handles the charges. A Clover POS integration written in Kotlin allows in-person checkout that pulls the customer’s active subscription.

Why I built it

Not a product — a personal project. I had been wanting to build something across web + mobile + POS + AWS infrastructure in a single monorepo, partly to learn Nx and CDK properly, partly because subscription-billing for local service businesses is a domain I find genuinely interesting (and consistently underserved).

How it works

Nx monorepo with NPM workspaces. Six apps:

  • backend — NestJS with Prisma against PostgreSQL on RDS, deployed to App Runner.
  • web — React Router 7 SPA in build/client/, hosted on S3 + CloudFront.
  • mobile — Expo.
  • clover-pos — Kotlin Android for Clover Mini.
  • infra — AWS CDK with six stacks: Network, Dns, Database, Backend, Web, Email.
  • backend-e2e — Jest e2e tests.

Shared types and Zod schemas live in @recurra/shared and are imported by every app. The CDK stacks use SSM Parameter Store for secrets and an entrypoint script that builds the database URL from Secrets Manager JSON.

Status

Under active development. The backend, admin web, and infra are in place; the Clover POS app and mobile owner app are next.

Questions

What is Recurra?

Recurra is a recurring-billing platform for local service businesses — the tagline is 'repeat business, on repeat.' It handles recurring appointments, automated charges via Stripe, customer self-serve subscriptions, and a Clover POS integration for in-person checkout.

Why a multi-app monorepo for Recurra?

One business needs three surfaces — owner web admin, owner mobile, customer-facing POS — sharing one backend, one auth model, and one billing system. The Nx monorepo with @recurra/shared keeps types, validation, and business logic in exactly one place across React Router, Expo, and the Kotlin POS client.

← All projects