Skedio
A scheduling and CRM platform for appointment-based businesses in Serbia: online booking, a team calendar, client records, and automated WhatsApp reminders. A product I'm building solo, from scratch.
In active developmentThe problem
Salons, clinics, barbers, and gyms across Serbia still run on a paper diary and a ringing phone. Every missed call is a lost booking, every no-show is wasted time, and the foreign scheduling tools that exist ignore how business is actually done here: WhatsApp instead of email that goes unread, and hours and habits that don't match. Skedio is built for this market specifically: appointments are confirmed and reminders arrive over WhatsApp.
What I built
24/7 online booking
A public booking page for each business: clients pick a service, staff member, and time slot and book themselves, day or night, no phone call needed.
Team calendar
Week time-grid and month views of every staff member's appointments, with statuses color-coded and completed or canceled slots greyed out.
Built-in client records
A lightweight CRM: every client's history in one place, deduplicated by normalized phone number so the same person never fragments into two records.
Staff management
Add staff members, set their working hours and services, and give each their own bookable calendar and availability.
Service catalog
Define services with a duration and price; availability and slot lengths are generated from them automatically.
Dashboard & analytics
A home dashboard with the day's appointments and the metrics that matter, computed correctly against the local Belgrade calendar day.
Automated WhatsApp reminders
A scheduled job sends WhatsApp reminders a configurable number of hours before each appointment, each with a one-tap self-cancel link.
Ten-minute onboarding
A first-run wizard takes a non-technical owner from signup to a live, bookable page in about ten minutes. No manual, no training call.
How it's engineered
Supabase + PostgreSQL
Auth, data, and row-level access on Supabase Postgres, with the schema managed through versioned migrations.
Subscriptions
Paid plans and billing handled through Lemon Squeezy, so the product can charge from day one.
WhatsApp via Twilio
Reminders are queued in the database and dispatched by a cron-triggered endpoint through Twilio, with per-message delivery status tracked.
Transactional email & monitoring
Booking and confirmation emails through Resend; runtime errors and performance watched with Sentry and Vercel analytics.
Timezone-correct by design
Every time is stored in UTC and converted to Europe/Belgrade for display and slot math, with no naive server-clock bugs across daylight-saving changes.
Availability engine
Bookable slots are generated with a 15-minute buffer around every appointment, guarded at the database level by an exclusion constraint so two bookings can never overlap.
By the numbers
- ~11.000
- Lines of code
- 17
- App screens
- 8
- API endpoints
- 6
- DB migrations
- 5
- Integrations
Inside the product




Status & what's next
Skedio is in active development and pre-launch: the app is built and running at app.skedio.rs, and the marketing site has been rebuilt on Next.js. Everything now points at a single goal: free-trial signups from owners who want to stop losing time to the paper diary. The near-term roadmap is growing the user base, featured businesses, and polishing reliability and user experience.