A full-stack appointment booking system for a Denver beauty business, with user authentication, SMS/email notifications, and an admin portal—migrated from Rails API to a single Next.js app.
A website and appointment booking system for Avante Cosmetic, a beauty business in Denver, Colorado. The system enables clients to book appointments online while giving the owner an admin portal to manage appointments, clients, and content.
What I built
- Full-stack appointment system with Next.js and React Server Components
- User authentication and client management system
- Multi-channel notifications for booking, confirmation, and reminders via Twilio (SMS) and Postmark (email)
- Admin portal for appointment and client management
- Content management integration with Contentful
- Migration from microservices to single full-stack application
Key Features
Client Experience
- Online appointment scheduling with real-time availability
- User authentication and profile management
- Appointment confirmations and reminders
- Mobile-responsive booking interface
Admin Experience
- Appointment management dashboard
- Client database with booking history
- Automated notification workflows
- Content management through Contentful
Technical Implementation
- Next.js with React Server Components to render booking data on the server
- TRPC integration for type-safe full-stack development
- Daily cron tasks for notification scheduling
- Vercel deployment for simplified DevOps
Migration & Modernization
Challenge: Version 1.0 consisted of separate Rails API and Next.js frontend with complex Ansible deployments that were finicky and problematic.
Solution: Migrated to a unified Next.js application using TRPC, removing the separate Rails API and Ansible deploys.
Results:
- Simplified development workflow
- Reliable deployments on Vercel
- Faster feature development
- Reduced operational overhead
Notifications Architecture
The most complex component is the multi-channel notification system:
- Appointment lifecycle notifications: submission, confirmation, reminders
- Multi-channel delivery: SMS via Twilio, email via Postmark
- Scheduled processing: Daily cron tasks instead of job schedulers
- Automated workflows: Reduces manual communication overhead
Tech Stack
- Frontend: Next.js, React, TypeScript
- Backend: Next.js API routes, TRPC
- Database: PostgreSQL
- CMS: Contentful
- Notifications: Twilio (SMS), Postmark (email)
- Deployment: Vercel
Outcome
- Clients book and reschedule online instead of calling, cutting back-and-forth phone scheduling
- Confirmation and reminder messages send automatically on a daily cron instead of by hand
- The owner manages appointments, clients, and site content from one admin portal


