Skip to content

Case studyLive

Postgradia

A coaching platform where coaches, students and parents work from the same weekly plan.

Role
Co-founder & CTO — backend & DevOps lead
When
2024 → now
  • Backend
  • DevOps
  • Full-stack

The source is private — happy to walk through the code and the pipeline in an interview.

Postgradia home page: “the smart, easy way to follow student progress”, with a dashboard preview.
The public home page (postgradia.com).

Who it’s for

  • Education coaches and teachers who plan weekly homework for dozens of students — and were doing it in spreadsheets and chat groups.
  • Students who need one clear list of what to do this week, on the web or on their phone.
  • Parents who want to see progress without chasing the coach, and institutions that run many coaches under one account.

What I built

  • I co-founded Bitnodia and lead engineering as CTO in a three-person founding team. I own the backend and the delivery platform; the product is a team effort.
  • On the NestJS API: the student module, notifications and push, the partner & referral programme, authentication, i18n, config validation, e-mail templates and the bulk-homework planner.
  • On the platform: the API’s Docker image, the Jenkins pipeline end to end and the GitHub Actions deploys to Azure.
  • Hands-on in the React web app and the Expo mobile app wherever the API work needed it.

How it works

  1. 1Set up students

    A coach (or an institution) adds students and parents to the organisation and starts on a card-less free trial.

  2. 2Plan the week

    Homework goes onto a drag-and-drop weekly planner — from templates, for one student or a whole group at once.

  3. 3Students work

    Students see their week on the web or in the mobile app, get reminders, and tick tasks off as they go.

  4. 4Track exams & goals

    Practice-exam results, books and goals roll up into per-student analytics the coach can act on.

  5. 5Parents follow

    A parent view shows progress; notifications go out by push, SMS or e-mail.

Key decisions

  1. 01

    A modular monolith, not microservices

    Instead of: A service per domain (students, homework, billing…).

    Why: A three-person team ships faster with one deployable, one database and one transaction boundary. NestJS modules keep the seams in place, so a part can move out later if it ever earns it.

  2. 02

    Authorisation as policy, scoped to the organisation

    Instead of: Role checks scattered through controllers.

    Why: Coaches, students, parents and institution admins see different slices of the same data. CASL policies in global guards make multi-tenancy a rule the API enforces, not a convention every endpoint has to remember — and they are testable.

  3. 03

    Billing webhooks that are idempotent and order-safe

    Instead of: Trust the latest webhook that arrives.

    Why: Subscription webhooks arrive twice and out of order. A small state machine (trial, active, past-due grace, paused, paywall) that remembers which events it has applied means a retry never downgrades a paying coach.

  4. 04

    Kubernetes with Helm, secrets outside Git

    Instead of: A single VM running containers by hand.

    Why: The API runs on AKS behind ingress-nginx and cert-manager; one chart with staging and production values, secrets pulled from a key vault by External Secrets. Rollouts are repeatable and no credential lives in the repo or in CI variables.

Architecture

CLIENTSWeb appReact Router 7 SPAMobile appExpo · React NativeLanding & blogNext.js · MDXHTTPS · JSONEDGEIngressingress-nginx · cert-managerAPPLICATIONNestJS APImodular monolith · CASLJobs & eventscron · event emitterDATAPostgreSQLMikroORM · migrationsObject storageS3 · presigned uploadsSecretsKey Vault → ExternalSecretsOUTSIDEBillingsubscription webhooksMessagingpush · SMS · e-mailErrorsSentry↑ ships everything aboveDELIVERYGitHub Actionsbuild · testJenkinspipelineRegistryACR imagesHelm → AKSstaging · prodPR previewsStatic Web Apps

Redrawn and simplified — no hostnames or IDs. Highlighted boxes are the parts I built or own.

Numbers

teachers using it (postgradia.com)
1,000+
apps: API, web, mobile, landing, docs
5
domain entities in the API
40+
API test files — unit + e2e on a seeded DB
≈ 45

Tech stack

Backend

  • NestJS
  • TypeScript
  • MikroORM
  • PostgreSQL
  • CASL
  • Passport · JWT
  • Swagger
  • React Email

Clients

  • React Router 7
  • TanStack Query
  • shadcn/ui
  • Expo
  • React Native
  • Next.js

Platform

  • Azure AKS
  • Helm
  • ingress-nginx
  • cert-manager
  • External Secrets
  • Static Web Apps
  • GitHub Actions
  • Jenkins
  • Docker

Integrations

  • LemonSqueezy
  • AWS S3
  • Expo push
  • SMS & e-mail providers
  • Sentry

Want the longer version — the code, the pipeline, the trade-offs?

Email me
Next case study3dfilamentciAn e-commerce platform for 3D printers, filament, resin and spare parts — built from scratch for a specialist shop.