
Private Learn is an online learning platform built with Python + Frappe. It helps instructors upload and manage courses, reach learners, and monetize content. The backend supports course/catalog management, interaction (forums + messaging), and extensible flows for certificates and progress tracking.
My Role
Backend Developer
Duration
Oct 2025
Context
EdTech Platform
Outcome
Course publishing backend · discussion + messaging foundations · scalable content workflows
Stack
Context
Tutors and instructors need a simple way to publish learning content, engage learners, and earn from their expertise — without wrestling with complex tooling.
The Pain
Without solid backend workflows (uploading content, organizing lessons, managing users, and handling interaction), learning platforms become hard to operate and frustrating for creators and learners.
Why It Mattered
Creators need a reliable platform to manage content and engagement. Learners need a smooth experience that supports interaction and progression.
Technical Goals
Constraints
A Python + Frappe backend (monolith) with modular DocTypes and server-side logic for courses, learning flows, user interaction, and operational tooling. Redis supports caching/background tasks, with MariaDB as the primary datastore.

Scroll horizontally on smaller screens to view full diagram
Frappe App
Core backend: APIs, workflows, permissions, and admin tooling.
Course + Catalog Module
Courses, lessons, uploads, categories, and publishing workflow.
Learning + Progress
Enrollments, lesson completion, and progress tracking.
Interaction
Forums/discussions, Q&A, and direct messaging.
Certificates
Completion certificates and achievement badges (extensible).
MariaDB
Primary relational datastore.
Redis
Caching and background task support.
Nginx
Web server/reverse proxy for production.
→Use Frappe for rapid backend workflows
Frappe provides fast iteration with strong data modeling (DocTypes), permissions, and admin UX — ideal for content-heavy platforms.
→Design modules around learning domain
Separating course/catalog, progress, and interaction keeps the system maintainable as features grow (Udemy-style evolution).
Built the platform around clear DocTypes and workflows for course publishing and learner progression.
Designed interaction primitives (forums and messaging) to support Q&A and community learning.
A scalable backend layout that can evolve from a monolith into dedicated services as traffic grows.
flowchart LR
U["Learner / Creator"] --> WEB["Web UI"]
WEB --> API["Frappe Backend"]
subgraph Domain["Core Modules"]
COURSES["Courses & Catalog"]
LEARN["Enrollments & Progress"]
INTERACT["Forums & Messaging"]
CERTS["Certificates & Badges"]
end
API --> COURSES
API --> LEARN
API --> INTERACT
API --> CERTS
DB["MariaDB"]
CACHE["Redis"]
COURSES --> DB
LEARN --> DB
INTERACT --> DB
CERTS --> DB
API --> CACHEThe Problem
Course creators need easy upload/publish flows without complex settings.
The Fix
Used Frappe workflows and permissions to guide content publishing with a clean admin experience.
The Problem
Messaging and discussions often require async delivery and integration hooks.
The Fix
Designed interaction events to be webhook-ready and compatible with background processing for notifications.
A backend foundation for a Ghana-focused learning platform that supports course publishing, learner interaction, and extensible credentialing features.
Before → After
Course publishing workflow
Learner interaction
Extensibility
Business Outcome
Tutors can publish and monetize courses more easily, while learners get a consistent experience with interaction and progress tracking.
Would Do Differently
Key Takeaways
Next Project
Backend Engineering
