Skip to content
Back to work
Multi-tenant SaaSJul — Aug 2026

TutorPilot

A platform for running an online tutoring business: each organisation gets its own isolated space for staff, courses, batches, live classes, and files.

Role
Solo · design & build
Architecture
Modular monolith + transactional outbox
Period
Jul — Aug 2026
Category
Multi-tenant SaaS
TENANT_ISOLATION // SAAS_CORE
Per-tenant JWTSchema RBACLiveKit roomsMinIO driveTENANT

OUTBOX: SKIP LOCKED RELAY · DLQ REPLAYABLE

Context

Small coaching businesses stitch together video calls, spreadsheets, and shared drives. I built one system where an organisation signs up, defines its own roles, builds courses, runs them as scheduled batches, and teaches live classes that are recorded automatically.

Approach

The Go backend is split into modules (auth, admin, notification) behind a shared set of internal packages. Anything that must happen after a write, like sending a verification email, is stored as an event in the same Postgres transaction and relayed to Redis Streams afterwards, so the database and the side effects cannot drift apart.

Key decisions

  1. 01

    Transactional outbox instead of dual writes

    Events are inserted in the same transaction as the business data. A relay claims them with FOR UPDATE SKIP LOCKED, so several relays can run without double-publishing.

  2. 02

    Failures are kept, not dropped

    Consumers reclaim stalled messages with XAUTOCLAIM, classify errors for retry, and move poison messages to a dead-letter table that can be inspected and replayed.

  3. 03

    A signing secret per tenant

    Each organisation has its own JWT secret, cached in Redis, so a token issued for one tenant cannot be verified by another.

Implementation

  • 74 REST endpoints with Swagger docs and 14 versioned migrations
  • Schema-driven roles and privileges per organisation
  • Courses, batches, tutor assignment, and student enrolment
  • LiveKit classrooms with server-side recording to MinIO
  • Shared file drive per batch on MinIO object storage

Technologies

  • Go
  • PostgreSQL
  • Redis Streams
  • LiveKit
  • MinIO
  • Next.js

Outcomes

  • 80 Go unit and integration tests, including outbox rollback behaviour

Hiring for backend or platform work?

I'm looking for backend engineering roles in distributed systems, high-throughput pipelines, or security infrastructure, remote or with relocation. I'm also happy to talk about any of the projects here.

I reply personally, usually within 24 hours.

Good to know

  • Currently a full-time SDE at MiniOrange in Pune.
  • Open to remote roles and to relocation.
  • Comfortable in both Java/Spring and Go codebases.