A deep dive into building a real estate service marketplace with SvelteKit, Supabase, and Stripe — covering architecture decisions, real-time booking updates, secure payment processing, and the lessons learned from launching a production platform.
Project: Realtor Service Platform
When a client approached me with an idea for a real estate service platform, I saw an opportunity to build something that would genuinely solve problems in the Canadian property market. The challenge: create a modern, responsive platform where property owners could discover and book real estate services, while service providers could manage their bookings and get paid securely. This is the story of how I built Realtor Service Platform from the ground up.
If you are thinking about building a complex marketplace application, this deep dive into my architecture decisions, technology choices, and lessons learned will give you a roadmap for success.
Before I wrote a single line of code, I defined what the platform needed to accomplish:
I made deliberate choices for each layer of the application. Here is what I chose and why:
I chose SvelteKit for the front-end framework. While Next.js is the safe choice, SvelteKit offers several advantages for a marketplace like this:
Tailwind CSS was a natural fit. Building a professional-looking marketplace fast means leaning on a pre-built design system. Tailwind gave us consistent spacing, colors, and component patterns across the entire application without writing custom CSS.
More importantly, Tailwind's utility-first approach meant that non-designers on the team could build new pages and components without needing me to write custom styles. A property owner could see a new feature in production within hours instead of days.
I chose Supabase for both user authentication and the database. Here is why this was a game-changer:
Payment processing is where you do not cut corners. I integrated Stripe for all payment handling. Here is why:
The integration flow is clean: a property owner selects a service, confirms the booking, and goes through Stripe's secure checkout. The provider receives a notification and can start preparing. When the work is complete, the payment is confirmed and the provider gets their cut.
When a service provider accepts a booking, the property owner sees the update instantly. This is powered by Supabase's real-time subscriptions — as soon as a row in the bookings table changes, all connected clients receive the update within milliseconds. No refresh button needed.
Providers can see incoming requests, accept or decline them, track their earnings, and manage their availability calendar. The dashboard shows which services are most popular and which times have the highest demand — giving providers data to help them grow their business.
Property owners can filter services by type (home inspection, staging, photography), price range, availability, and ratings. The search is powered by Supabase's PostgreSQL full-text search, which is fast and flexible enough to handle complex queries without requiring a separate search service like Elasticsearch.
Users receive notifications when:
These notifications are delivered via email and in-app alerts, keeping everyone in sync.
Real estate services span multiple time zones across Canada. A property owner in Vancouver booking a service for a property in Toronto needs the system to handle timezone conversions correctly.
Solution: I stored all timestamps in UTC in the database and converted them to the user's local timezone in the frontend. SvelteKit's load functions made it easy to determine the user's timezone on the server and pass it to the client.
The biggest risk was a "double-booking" scenario: two property owners booking the same service provider for overlapping times. PostgreSQL's constraints would catch this, but only if I designed the schema correctly.
Solution: I created a unique constraint on (provider_id, service_date, service_time_slot). The database would reject any second booking that tried to use the same time slot. This validation happens at the database level, before the Stripe payment is even processed.
Service providers need to verify their credentials and set up their payment information before they can start accepting bookings. This is a multi-step process with several decision points.
Solution: I created an onboarding flow with clear steps: upload verification documents, confirm identity, set service offerings and pricing, connect Stripe account for payouts. Each step is stored in the database, so providers can resume where they left off if they step away.
The platform launched in early 2024 and has grown steadily:
The decision to use Supabase paid dividends. It handled authentication, the database, real-time updates, and even row-level security — all from one account. If I had chosen separate services for each of these, I would have spent weeks integrating them and maintaining API keys and credentials.
Using Stripe added a 2.9% + $0.30 fee per transaction, but it eliminated massive categories of risk and complexity. The time I saved by not building payment processing from scratch was worth 10x the cost.
Once property owners experienced instant booking confirmations, they expected it everywhere. This taught me that modern applications need to feel responsive and alive — no more waiting for page refreshes or checking for updates manually.
I spent more time designing the database schema than writing the application code. That upfront investment paid off because the database constraints prevented bugs before they happened. A well-designed schema is like building with good foundations; everything else becomes easier to build on top.
If I built this again, I would:
If you are building a marketplace or booking platform, here are the key principles that made this project successful:
Building Realtor Service Platform taught me that the best products are not built with the newest technologies — they are built with the right technologies. By choosing tools that solved hard problems well, I was able to focus on what really mattered: creating a platform that solved real problems for real people in the Canadian real estate market.