Skip to main content
~/edar
back to projects

$ cd ~/projects/anotherschedulr

$ cat README.md[BETA]2025–2026

AnotherSchedulr

Multi-tenant booking platform for service businesses: white-labeled booking pages, deposits, no-show protection and intake forms.

  • Next.js
  • Prisma
  • PostgreSQL
  • Square

A full booking product for solo operators and small service businesses. Each tenant gets a branded booking page on their own subdomain, a calendar with real availability rules, deposits or saved-card no-show protection, intake forms, reminders and reports. One flat plan instead of per-seat pricing.

Problem

The problem

Lash techs, salons, coaches and consultants need a booking page, a calendar, deposits and no-show protection, and they end up paying per-seat prices for tools like Acuity to get it. Most of them are one person. They need the whole flow to work without a setup consultant.

Solution

The solution

A Next.js App Router monolith over PostgreSQL with Prisma. A middleware layer rewrites tenant subdomains to the public booking route, applies a per-request-nonce Content Security Policy and rate-limits traffic. Two surfaces share the codebase: a sessionless public booking flow (service, add-ons, availability, intake form, payment) and an authenticated dashboard for calendar, services, clients, email templates and reports. Reminders and follow-ups run on scheduled jobs.

Highlights

Interesting details

  • Processor-agnostic payment layer with three modes: percentage or fixed deposit, full payment, or save-card, where the card is vaulted at booking and a capped no-show fee can be charged later. Connected-processor tokens are encrypted at rest, keeping PCI scope at SAQ A.
  • Availability engine built around practitioners as calendars, with rule and override models and a strict wall-clock versus timezone separation so slots render correctly in the visitor's zone.
  • Test pyramid: Vitest unit and integration projects (integration refuses to run without an explicit test database flag) plus 17 Playwright end-to-end specs including axe accessibility and Lighthouse checks.
  • Defense in depth: 34 Prisma models scoped by owner on every query, row-level security enabled on every public table, nonce plus strict-dynamic CSP in production and distributed rate limiting.
  • Scheduled reminders driven by Postgres cron posting to a secret-protected route, transactional email through AWS SES with a rich-text template editor.
  • Private intake file uploads through signed URLs with server-side object verification and an orphan sweep.

Tech stack

Built with

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS v4
  • Prisma 7
  • PostgreSQL / Supabase
  • NextAuth
  • Square SDK
  • Stripe Connect
  • AWS SES
  • Upstash Redis
  • Sentry
  • Vitest
  • Playwright
  • Vercel