
Overview
AiDotKaam is an online AI school making practical AI and digital skills affordable for complete beginners in Pakistan, taught in a mix of Urdu and English. Develune was the end-to-end engineering partner: domain model, backend, front-end design system, admin portal, test suite, and production infrastructure.
The platform is a server-rendered Rails 8 application using Hotwire rather than a separate front-end framework — a deliberate choice for a mobile-first audience on constrained connections, where shipping a large JavaScript bundle would have cost more than it returned. Courses are structured as Course → Chapters → Lectures with a quiz gating completion and an automatically issued certificate.
The Challenge
Off-the-shelf course platforms are built around international card payments and English-first, self-serve onboarding — neither of which fits learners in Pakistan. The platform also had to protect paid video content without pushing learners onto slow, heavy players, and give a non-technical team full control of courses, enrolments, and payment verification without an engineer in the loop.
The Solution
Develune designed and built the platform end to end on Rails 8 with Hotwire: a paywalled course catalogue with free preview lectures, sequential lecture unlocking with resume-from-position playback, quiz grading, automatically issued certificates with a public verification URL and PDF download, and an enrolment flow built around the payment rails the audience actually uses. Everything the team touches day to day is handled through an ActiveAdmin portal, and the whole application ships as a Docker image deployed with Kamal.
Key Contributions
Course, Paywall and Progress Model
Designed the domain around Course → Chapters → Lectures with a quiz gating completion, and put the access rules in the model layer so every surface enforces them identically.
- Free preview lectures that sell the course without exposing paid content
- Sequential unlocking — a lecture opens only once the previous one is done
- Resume-from-position playback so learners return to exactly where they stopped
Locally-Payable Enrolment Flow
Built enrolment around the payment methods the audience actually has access to: the learner submits proof of payment in-app, an admin reviews and approves or rejects it with a reason, and approval unlocks the course immediately.
- Free courses enrol instantly; paid courses go through review
- Rejections carry a reason and the learner can resubmit
- Every submission and decision is recorded for the client's own audit trail
Verifiable Certificates
Completion automatically issues a certificate addressed by a non-guessable code rather than a sequential ID, shareable at a public URL and downloadable as a PDF rendered from the same markup as the web view — so the download can never drift from the design.
Self-Serve Admin Portal
An ActiveAdmin portal on its own authentication scope covering courses, chapters, lectures, quizzes, questions, enrolments, certificates, blog posts and users — plus persisted error logging and an activity feed, so the client can run the platform without engineering support.
Production Hardening and Deployment
Rate limiting on sign-in, sign-up and password reset; session timeouts; email confirmation; a containerised deploy with Kamal to a private database and automatic SSL; and a CI pipeline that blocks a merge on a failing test, lint or security scan.
Tech Stack
Backend
Front-end
Auth & security
Quality
Infrastructure
Challenges
No practical international card gateway for the audience, so enrolment was designed around local payment rails with an auditable in-app review and approval step instead of a hosted checkout
Protecting paid video without a third-party DRM service — solved with authenticated range-request streaming behind request-origin checks rather than public Active Storage URLs
Serving a mobile-first audience on constrained bandwidth, which ruled out a heavy SPA and drove the server-rendered Hotwire architecture
Making Bootstrap, Tailwind and custom SCSS coexist in one asset pipeline without either framework's base styles breaking the other
The Outcome
- Delivered a complete learning platform — catalogue, player, quizzes, certificates, payments and admin — from first commit to live domain in under four weeks
- Enrolment moved from an engineering task to a self-serve flow the client's own team reviews and approves in the admin portal
- Paid video is served through authenticated byte-range streaming, so course URLs cannot be shared or hotlinked outside the platform
- Certificates are independently verifiable at a public, non-guessable URL and download as a PDF that matches the on-screen design exactly
- Shipped with a full quality gate — RSpec suite, RuboCop, erb_lint, Brakeman and bundler-audit, all enforced in GitHub Actions on every pull request
Key Takeaways
- Building for a market means building for its payment rails — a checkout that assumes an international card is a product failure, not a technical one
- Server-rendered Hotwire delivers app-like interaction on low-end devices and slow connections at a fraction of an SPA's payload
- Putting access rules in the model, not the controller, is what keeps a paywall from leaking as surfaces multiply
- An admin portal is a feature, not overhead — it is what lets a non-technical client actually operate the product you hand over