# Recurra

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.

- Status: archived
- 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: [Live](https://recurra.app) · [Repo](https://github.com/feRpicoral/recurra)
- Canonical: https://picoral.me/projects/recurra

## 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.
