SwissOfferten
Schweizer Lead-Marktplatz für Reinigungsdienstleistungen — production marketplace connecting a growing network of vetted cleaning firms with homeowners across all 26 cantons of Switzerland.
40+
Partners
4
Languages
26
Cantons
100%
RLS Coverage
The Problem
Cleaning customers in Switzerland face a fragmented market. Dozens of one-off company websites, no central price comparison, slow callbacks losing leads to whoever responds first, and language barriers across DE / FR / IT regions. By the time a homeowner has compared three quotes, two of the firms have stopped responding.
Cleaning firms have the inverse problem. They pay for Google Ads they can't measure, get unqualified inbound from generic forms, and have no scalable way to expand into adjacent regions without spinning up new websites or paid campaigns per region.
The Solution
A two-sided marketplace built on Next.js 16 + Supabase. Customers submit a 4-step request (service type → region → property size → contact). The request is validated server-side, honeypot-filtered, rate-limited via Upstash Redis (5/min per IP), and instantly visible to qualified partner firms in that region.
Partners load CHF credit through Stripe and purchase the lead for CHF 30-60. Every transaction is Row Level Security (RLS) protected at the Postgres layer — there is no direct-query bypass path, even from server code. Every form submission is server-action validated with Zod schemas. Every payment is webhook-reconciled.
The result: customers get multiple qualified quotes in minutes instead of days. Firms get leads that match their service area, pre-filtered for intent, with full audit trails of what they purchased and what closed.
Tech Architecture
- Next.js 16 App Router — Server Components by default, client-side rendering only where interactivity demands it
- Supabase — Postgres + Auth + RLS on every table. Zero unprotected query paths.
- Stripe (CHF) — Credit top-ups via Checkout + webhook-driven reconciliation. No race conditions on credit balance.
- Upstash Redis — Distributed rate limiting across edge regions (5/min lead submit, 3/min checkout, 3/5min password reset)
- Resend + React Email — Type-safe transactional templates, multilingual
- Vercel — Edge hosting, automatic preview environments per PR
- Playwright E2E — End-to-end coverage on critical paths (lead submission, partner auth, checkout, navigation)
Coverage
Four languages live: DE, FR, EN, IT — the three federal languages of Switzerland plus English for expat customers. Regional landing pages span 26 cantons with proper i18n routing and locale-specific content.
Every page renders with Schema.org structured data (LocalBusiness, Service, BreadcrumbList) for AI Search and traditional SEO. GA4 analytics is consent-gated through a cookie banner — no tracking before opt-in.
Hardening
Production-grade security baseline: CSP, HSTS, COOP headers on every response. Honeypot fields on all public forms. Server-side validation with Zod on every action. Rate limiting on every state-mutating endpoint. RLS policies tested in CI. Test mode versus live mode separation for Stripe with no cross-contamination paths.
Results
- 40+ cleaning firms onboarded across Swiss cantons, growing weekly
- 4-language coverage (DE / FR / EN / IT) live in production
- 203 canonical SEO landing pages across cantons and service types, curated for quality after a thorough content audit
- 100% RLS coverage on database tables — zero direct-query bypass paths
- Stripe CHF payments live with webhook-driven credit reconciliation, zero unmatched transactions
- Production-hardened: CSP, HSTS, COOP, honeypots, rate limits, server-side validation, automated E2E tests
Need a system like this for your business?
We diagnose, build, and ship full-stack systems in days, not quarters.
Book your strategy call