!DOCTYPE html> Full-Stack EdTech Platform — Ramsud Technologies
Active Development — Features Shipping Continuously
Case Study · EdTech · SaaS

Full-Stack EdTech Platform
Built from the Ground Up

A production-grade, fully branded education platform — live payments, in-browser creative tools, microservices architecture, and zero lost enrolments. Here's exactly how we built it.

Custom Software EdTech SaaS Microservices DDD
Get in Touch View Our Work

The client needed a platform no SaaS product could offer — complete ownership, custom branding, and a payment system they could trust with real revenue.

Core platform architecture complete
Payments & enrolment live
In-browser creative suite shipped
Analytics dashboard — in progress
Mobile apps — planned
AI content features — planned

Off-the-Shelf Wasn't
Good Enough

A growing education company had outgrown every generic LMS on the market. Teachable, Thinkific, Moodle — none of them could support a vision where teachers record professional lessons, build interactive mind maps, publish content to social media, conduct live whiteboard sessions, and sell courses and tool subscriptions — all under one roof, fully owned, fully branded.

They came to us with one clear requirement: build something that scales, doesn't break when payments happen, and is secure enough for real money. No compromises. No vendor lock-in. No half-measures.

What Off-the-Shelf Couldn't Deliver

  • In-browser video recording & editing
  • Live whiteboard sessions with PDF annotation
  • AI-adapted social media publishing
  • Separate tool subscription billing
  • Full platform ownership & branding
  • Tamper-proof payment verification

One Platform. Three User Roles.
Zero Compromises.

A production-grade, multi-service education platform serving teachers, students, and administrators with live payments, automated lifecycle emails, fuzzy course search, personalised recommendations, and a full in-browser creative suite.

Students

  • Browse and purchase courses via Razorpay
  • Auto-enrolled on payment confirmation
  • Track progress lesson-by-lesson
  • Personalised "Continue Learning" feed

Teachers

  • Build courses: chapters → modules → resources
  • Record and edit video lessons in-browser
  • Draw on a live whiteboard
  • Publish AI-adapted content to 5 social platforms

Administrators

  • Approve and publish courses
  • Manage tool subscription pricing
  • Issue coupons and process refunds
  • Full course lifecycle oversight

7 Independent Microservices —
Nothing Shares a Database

Every service owns its domain, its database, and its deployment lifecycle. Cross-service communication is fully asynchronous via Apache ActiveMQ — a slow recommendation engine can never cause a payment to fail.

Ramsud Technologies — EdTech Platform System Architecture with Course Embeddings

Full system architecture — React SPA · Spring Cloud Gateway · 7 microservices · Apache ActiveMQ · pgvector · AWS S3 / SES

Service Responsibilities

Service Responsibility
API Gateway JWT validation, rate limiting (20 RPS / 40 burst), CORS, routing to all downstream services
User Service Registration, login, JWT minting, password reset, email verification
Course Service Course CRUD, chapters / modules / resources, ratings, pg_trgm fuzzy search
Learning Platform Enrolment, per-lesson progress tracking, completion signals via ActiveMQ
Commerce Service Cart, orders, Razorpay payments, tool subscriptions, coupons, HMAC verify
Media Service File upload to S3, transactional email via AWS SES, lifecycle notifications
Recommendation Service Personalised course recommendations, "Continue Learning" feed, vector similarity

Domain-Driven Design —
Applied, Not Just Named

This isn't a naming convention — it's a hard boundary between business logic and infrastructure that paid off when we swapped the mock payment gateway for live Razorpay: zero domain code changed. One adapter file.

Aggregates

Enforce all business rules. ToolSubscription is a state machine — PAYMENT_PENDING → ACTIVE → EXPIRED / CANCELLED / PAYMENT_FAILED. No invalid state is representable in code.

Repository Ports

Defined in the application layer, implemented in infrastructure. The domain has zero dependency on JPA, Spring, or any framework. Swap PostgreSQL for MongoDB — domain stays untouched.

Application Services

Orchestrate use cases. They never reach into persistence or HTTP directly. BookAppointmentUseCase, EnrolStudentUseCase — each owns one workflow, nothing more.

Infrastructure Adapters

Handle JPA entities, S3 uploads, JMS publishing, and Razorpay calls — fully replaceable without touching business logic. Hexagonal architecture enforced from day one.

The Transactional Outbox —
No Ghost Enrolments, Ever

The most important architectural decision in the entire project. When a payment succeeds, two things must happen atomically: save the payment and trigger enrolment. If the message broker goes down between those two steps, the payment is recorded but the student is never enrolled. We solved this completely.

Payment PAID

Razorpay confirms. Commerce service writes to outbox atomically with payment record.

Outbox Poll

Scheduled poller reads undelivered events from the outbox table.

Forward to MQ

Event forwarded to ActiveMQ. Marked delivered only on successful publish.

Student Enrolled

Learning platform consumes event and auto-enrolls the student.

If the broker goes down, the outbox accumulates. When it comes back, every event is delivered in order — exactly as written. Zero ghost enrolments since launch.

Every event listener is idempotent. A student receiving the same CoursePurchasedEvent twice is enrolled exactly once — no duplicates, no side effects.

Razorpay with HMAC Verification —
Tamper-Proof by Design

Card data never touches our servers. Every payment callback is cryptographically verified server-side before any access is granted. Browser manipulation cannot bypass subscription checks.

01

Create Order

POST /checkout — Commerce Service creates an Order + Payment record, calls Razorpay Orders API, returns razorpayKeyId + gatewayOrderId.

02

Client Checkout

Razorpay Checkout modal opens in the browser. No card data ever touches our servers — PCI scope eliminated entirely.

03

Verify Signature

Frontend calls POST /payments/verify. Backend computes HMAC-SHA256(keySecret, orderId|paymentId).

04

Grant Access

If signature matches, payment marked confirmed and outbox event fires. If it doesn't match, access is denied — regardless of what the frontend claims.

Four Professional Tools —
No Desktop App Required

Built entirely in the browser. Every tool is purpose-built for education — from live whiteboard sessions to multi-platform social publishing.

Whiteboard

Annotation over uploaded PDFs, image overlays, voice recording during sessions, and one-click export to PNG or course resource library.

Recording Studio

MediaRecorder-based screen + webcam compositor. Records PiP simultaneously using off-DOM canvas. Non-destructive trim, subtitle tracks, and direct S3 upload.

Mind Map

Keyboard-first (Tab, Enter, F2), auto-save every 30s, import/export JSON, and PNG export.

Content Publisher

Platform-specific character counting and draft adaptation for LinkedIn, Facebook, Instagram, X, and Threads. One-click multi-platform publish with OAuth expiry detection.

Hybrid Similarity Engine —
Vector + Fuzzy Search

The recommendation service uses a hybrid approach — vector cosine similarity via pgvector as the primary engine, with pg_trgm similarity as a fallback for keyword and tag matching. Both layers combine with full-text search and business filters.

  • Sentence-Transformers model
  • HNSW index with cosine_ops via pgvector
  • Inbox pattern — events written to recommenddb first, then processed by scheduled batch
  • Ingests CatalogEvents, RatingEvents, CommerceEvents, LearningEvents, GatewayEvents
  • Produces personalised lists + in-progress courses feed
Course recommendation engine

Production Metrics
That Matter

Every architectural decision was made to protect revenue, reduce operational overhead, and deliver a platform the client's team can own and extend independently.

0
Payment-enrolment mismatches since launch
<100ms
Course search latency via pg_trgm — no Elasticsearch needed
8
Automated email types per subscription lifecycle
7
Independent microservices, each with its own database

Full Course Lifecycle

Draft → Teacher submission → Admin approval → Published, with rejection reasons and resubmission flow built in.

Subscription Revenue Secured

Server-side access checks on every tool page. Browser manipulation cannot bypass a paywall — only a valid DB row grants access.

Scheduled Maintenance — Automated

Expired subscriptions at 01:00 UTC, reminder emails at 02:00, orphaned payments at 03:00, outbox cleanup at 03:30. Zero manual intervention.

This Platform is
Still Growing

This is an ongoing engagement — the core platform is built and stable. New features are being designed and shipped continuously. Here's where things stand today.

Shipped

Core Platform

  • 7 microservices, full DDD, hexagonal architecture
  • Razorpay payments with HMAC verification
  • Transactional outbox — zero ghost enrolments
  • In-browser creative suite (4 tools)
  • AI-powered course recommendations
  • Automated subscription lifecycle emails
  • Fuzzy search via pg_trgm
In Progress

Analytics Dashboard

  • Teacher revenue & enrolment analytics
  • Student progress heatmaps per course
  • Admin platform-wide revenue reporting
  • Subscription churn and renewal tracking
  • Course performance benchmarking
Planned

Next Features

  • AI quiz & assessment generation from course content
  • Live session scheduling & calendar integration
  • Mobile apps (iOS & Android)
  • Certificates of completion
  • Multi-tenant white-label support

Built on a Stack
That Scales

Frontend

React SPA

React 19TypeScriptReact Router v7 tldrawmind-elixirRazorpay Checkout JS CSS Modules
Backend

Spring Boot Microservices

Spring Boot 3Spring Cloud Gateway Spring Data JPASpring JMSPython (Embeddings)
Database

PostgreSQL 16

PostgreSQL 166 isolated schemas pg_trgmpgvectorHNSW index
Messaging

Apache ActiveMQ Classic

ActiveMQ ClassicTransactional Outbox Idempotent ConsumersJMS
Cloud

AWS + Razorpay

AWS S3AWS SESRazorpay HMAC-SHA256
Architecture Patterns

Production-Grade Design

MicroservicesDDDHexagonal Architecture Outbox PatternRepository PatternEvent-Driven

From Keyword Matching to
Semantic Recommendations

Traditional recommendation systems rely heavily on tags and keyword overlap — this often misses deeper contextual relationships between learning content. Here's how we thought differently.

The Problem

Tag and keyword-based matching surfaces courses that share labels — not courses that share meaning. A student interested in "neural networks" gets courses tagged "AI" but not the foundational "linear algebra" course they actually need next.

Our Approach

Semantic embeddings via Sentence Transformers + pgvector in PostgreSQL with cosine similarity search. Embeddings capture contextual meaning — not just surface keywords. Combined with event-driven ingestion pipelines for continuous freshness.

Why PostgreSQL — Not a Vector DB

We optimised for operational simplicity, scalability, and cost efficiency without prematurely introducing unnecessary infrastructure complexity. pgvector with HNSW index delivers sub-100ms similarity search at our scale — no separate vector database needed.

Result

The platform delivers more relevant recommendations, contextual learning discovery, and improved personalisation — through a scalable pipeline that evolves responsibly with scale. Good architecture isn't about using the most technologies. It's about building systems that grow cleanly.

The Stack Behind
Semantic Search

  • Python Embedding Service
  • PostgreSQL pgvector — HNSW index with cosine_ops
  • Event-driven ingestion — CatalogEvents, RatingEvents, CommerceEvents
  • Inbox pattern — events batched then processed by scheduled job
System Architecture Diagram

Good architecture is not about using the most technologies. It's about building systems that evolve responsibly with scale.

Distributed Video Processing
with Redis

As the platform evolved with browser-based recording, clip editing, timeline stitching and async exports, traditional in-memory processing using ConcurrentHashMap became a hard limit on horizontal scaling. Here's how we redesigned the architecture around Redis-based distributed coordination.

The Problem

In-memory job state breaks the moment you run more than one server instance. Two workers can simultaneously pick the same job, a server restart loses all in-flight processing, and a client on instance A can't see the state of a job running on instance B.

Our Approach

Distributed coordination via Redis: LPUSH/BRPOP for job queues, atomic SET NX EX for distributed locking, HSET/HGETALL for shared job state, and Pub/Sub channels for real-time progress to clients via WebSocket.

Why Redis — Not a Message Broker

Redis gave us sub-millisecond performance, atomic operations, TTL-based auto-cleanup, and Pub/Sub — all in a single lightweight infrastructure component. No Kafka or ActiveMQ overhead at this scale. Stateless workers mean we add instances with zero configuration change.

Result

Multiple video worker instances run safely across servers without race conditions or duplicate processing. Clients receive live progress updates without polling. Lock TTL auto-expires on crash — jobs re-enter the queue automatically. Horizontally scalable from day one.

The Redis Layer Behind
Distributed Processing

  • Job Queue — LPUSH / BRPOP video:jobs
  • Distributed Lock — SET lock:{videoId} NX EX 30
  • Job Status — HSET job:{id} status progress
  • Rate Limiting — INCR ratelimit:{userId} EX 60
  • Pub/Sub — real-time progress → WebSocket → client
Distributed Video Processing with Redis — full system architecture showing client, API gateway, video service, Redis coordination layer, stateless worker pool, S3 storage, and notification pipeline

Build lean initially. Design for scale from day one.

Looking for something similar?

We build custom software for education companies, SaaS startups, and businesses that need more than a template can offer. Check out our full range of services to see how we can help.

Get in Touch See More Case Studies

Learning Platforms

Built for your exact workflow — not a generic LMS with your logo on it.

Payment Systems

Tamper-proof, transactionally safe, and verified server-side. No lost transactions.

Microservices Architecture

Designed for independent deployment, owned by your team, built to scale.

Embedded Creative Suites

In-browser tools — whiteboard, recorder, publisher — integrated into your product.