Vasyo is appointment scheduling for small service businesses and freelancers: salons, clinics, studios, anyone who books people into time slots.
The dashboard
The business side is a Next.js dashboard. An owner sets up the business through an onboarding flow, then manages employees, services, customers and business hours. Appointments show in day, week, list and resource-timeline calendar views built on FullCalendar, with filtering and a customer detail page. Bookings made at least an hour ahead get two WhatsApp messages from scheduled jobs on Quirrel: a confirmation with the appointment’s details as soon as it’s booked, and a reminder one hour before it starts. Business hours and location settings use Google Maps, and a discover page is the start of a public side where customers find businesses.
Parts: Business owner (staff · services), Dashboard (Next.js · Prisma), Postgres (appointments), Scheduled jobs (Quirrel queues), Email (React Email · Resend), WhatsApp (to customers).
- Business owner to Dashboard
- Dashboard to Postgres
- Dashboard to Scheduled jobs (schedule)
- Dashboard to Email
- Scheduled jobs to WhatsApp (message)
- Business owner to Server action: create appointment
- Server action to Postgres: insert the appointment
- Server action: start minus 1 h in the future?
- Server action to Quirrel: enqueue confirmation now
- Server action to Quirrel: enqueue reminder, runAt start − 1 h
- Quirrel to WhatsApp: booking confirmed + details link
- Quirrel: wait until runAt
- Quirrel to Postgres: load appointment + customer
- Quirrel to WhatsApp: one hour to go + link
The API
Alongside the dashboard sits a NestJS and Prisma REST API with Swagger docs, versioned routes, cookie-based authentication with guards, and transactional email through React Email and Resend. It defines the core model (businesses with categories, employees, services, customers and appointments) and ships as a Docker image.
