What it does
I built Tymbo, an appointment-booking app for small service businesses such as barber shops, studios and coaches. Owners set up their team, services and working hours; customers pick a service, a person and a time.
- Customers book a specific team member or “anyone available”, with or without an account.
- Each business gets its own website and booking page, plus a QR code and an embeddable booking widget.
- Owners manage staff, services, weekly hours, time off and appointments. Invited staff see their own schedule.
- Free and paid plans, promo codes and a partner program with tracked commissions.
- Available in English, German, Spanish and Arabic (right-to-left).
Worth mentioning
The database itself prevents double bookings.
A PostgreSQL constraint rejects overlapping appointments for the same person, even when two customers book at the same moment.
Emailed links wait for a real person.
They open a page where the person presses a button, so mail scanners that preload links cannot use up a confirmation or cancel a booking.
Subscription status comes only from Stripe webhooks.
Each one is processed once. Discount and commission rules live in the app's own database.
Tech stack
- Frontend
- Expo, React Native Web, Expo Router, TanStack Query, i18next, Astro
- Backend
- Node.js, Fastify, Zod, TypeScript
- Database
- PostgreSQL, Drizzle ORM
- Mobile
- Expo, React Native (same code as the web app)
- Auth
- Better Auth
- Payments
- Stripe Checkout, Billing and Tax
Infrastructure
- Coolify on Hetzner
- Builds each app from its own Dockerfile. The main branch deploys production, dev a test environment.
- Object storage
- S3-compatible storage holds uploaded logos and photos.
- Brevo
- Transactional email: booking confirmations, invitations, password resets.
- Umami
- Visitor statistics, loaded only after cookie consent.