parkingmate
a full-stack, multi-tenant SaaS platform that automates parking lot operations end-to-end
parkingmate replaces manual parking enforcement with an automated pipeline driven by ALPR cameras. when a vehicle enters a managed lot, cameras stream plate-detection events to the api, which creates and tracks a parking session against per-spot rules. on exit, the system closes the session, calculates duration, and applies penalties. unauthorized or overstayed vehicles flow into a violation pipeline that generates legally-formatted PDF notices. the platform serves admins, registered customers, and unauthenticated guests through three dedicated portals.
team

key features
- automatic license-plate recognition (ALPR) pipeline
- multi-tenant architecture scoped by organization
- three coexisting auth flows (admin, customer OTP, guest)
- automated violation detection and PDF notice generation
- admin, customer, and self-service guest portals
- full multi-language support via i18next
- spec-first API with auto-generated typed client
- multi-environment CI/CD across dev, test, and production
tech stack
frontend
react
typescript
vite
react router v7
tailwind css v4
radix ui
@tanstack/query
zustand
react-hook-form
zod
i18next
@react-pdf/renderer
backend
fastify 5
typescript
drizzle orm
postgresql
zod
jwt
openapi
swagger
infrastructure
azure app service
azure static web apps
azure postgresql flexible server
azure communication services
azure blob storage
bicep
github actions
tooling
pnpm
turborepo
biome
vitest
husky
react testing library
challenges
- coordinating three distinct auth flows in a single codebase
- keeping frontend and backend contracts in sync across a monorepo
- ingesting real-time webhook events from ALPR cameras reliably
- generating legally-formatted PDF notices from the same component model as the UI
- orchestrating sequential deployments across dev, test, and production environments
solutions
- adopted openapi as the single source of truth, generating types consumed by the frontend on every build
- enforced service-layer purity so business logic stays testable without mocking fastify
- scoped every entity through the organization boundary for clean multi-tenant isolation
- rendered pdf notices with @react-pdf/renderer to keep legal templates versioned alongside application code


