Skip to content
<Rojit />
Active Users· 2025

ServiceLink Marketplace

Home repair marketplace with Django REST Framework backend, React Native Expo mobile app, offline-first sync, text-to-speech accessibility, and Stripe payment integration with WCAG compliance.

Technical case study by Rojit Pokharel — Full-Stack Web Developer & System Architect, Kathmandu, Nepal

DjangoDRFReact NativeExpoStripePostgreSQL

Stack diagram

Frontend
React NativeExpo
Application
DjangoDRF
Payments
Stripe
Data
PostgreSQL
Client / Problem
$
  • Customers had no trusted way to find and book home repair professionals; providers had no pipeline of qualified leads.
  • Field conditions meant poor connectivity — the mobile app could not depend on a live API connection.
  • The product needed to serve users with accessibility needs, including low-vision users who rely on screen readers.
  • Payments between customers and providers had to be handled securely and simply.

Client: Home services startup connecting customers with vetted local repair professionals

My Role
$
  • Full-stack developer — Django REST Framework backend, React Native Expo mobile app, offline sync engine, accessibility layer, and Stripe payment integration.
  • Designed the marketplace data model and the offline-first synchronization protocol.
Architecture
$
  • Django REST Framework API serving the React Native Expo client.
  • Offline-first mobile architecture: local-first writes with a background sync engine that reconciles when connectivity returns.
  • Stripe payment integration for marketplace transactions.
  • Text-to-speech and screen-reader-friendly UI for accessibility compliance.
Database Design
$
  • Marketplace schema: services, providers, bookings, reviews, payments, and messages.
  • PostgreSQL with foreign keys across bookings → providers and payments → bookings.
  • Sync-friendly design — client-generated IDs and updated-at timestamps so offline changes merge without conflicts.
API Architecture
$
  • DRF view sets for services, providers, bookings, and reviews with serializer validation.
  • Sync endpoint that exchanges incremental changes between device and server based on updated_at watermarks.
  • Idempotent booking and payment endpoints so retried requests do not double-create records.
Authentication
$
  • Token-based auth for mobile clients with role separation between customers and providers.
  • JWT with refresh rotation for long-lived mobile sessions.
  • Stripe Connect-style flow to route marketplace payouts to the correct provider.
Payment Architecture
$
  • Stripe integration for secure marketplace payments and provider payouts.
  • Idempotency keys prevent duplicate charges on retried requests over flaky mobile networks.
Deployment
$
  • Django app behind Nginx with SSL, PostgreSQL for the primary store.
  • Environment-based configuration across development, staging, and production API.
Performance Optimization
$
  • Offline-first sync reduced API round-trips and made the app usable in low-connectivity areas.
  • Incremental sync rather than full payload transfer kept mobile data usage low.
  • Indexed updated_at columns keep the sync watermark query fast as data grows.
Problems Encountered
$
  • Users on construction sites and rural areas lost connectivity mid-booking.
  • Accessibility requirements demanded full screen-reader and text-to-speech support, not an afterthought.
  • Payment retries over unreliable networks risked duplicate charges.
How I Solved Them
$
  • Built a local-first data layer with a background sync engine and conflict resolution based on timestamps.
  • Implemented WCAG-compliant components with text-to-speech output and screen-reader labels tested against assistive tech.
  • Used idempotency keys on payment endpoints so retries are safe and clients can resume interrupted flows.
Results
$
  • Live marketplace with an offline-capable mobile app for both customers and providers.
  • WCAG compliance and text-to-speech accessibility made the platform usable by a wider audience.
  • Secure Stripe payments with reliable behavior on poor connections.
Lessons Learned
$
  • Offline-first is a data-model decision, not a client-layer afterthought.
  • Accessibility wins users and differentiates a marketplace in a crowded space.
  • Idempotency on payment endpoints is the difference between a retry and a chargeback.

Want a production system like this?

I build production web applications end-to-end. Let's discuss your project.

Get in Touch