01 / Education

RITCanvas

The learning platform my college runs on, built and run by one developer.

Ramco Institute of Technology needed courses, assignments, quizzes, attendance and grades in one place. I designed, built and now run RIT Canvas on my own: the database, the backend, the web app, the Android app and the server it lives on.

Case file

Role
Sole developer: product, backend, web, Android, DevOps
Built
May 2026 to now, all 65 commits
Users
2,139 students and 169 educators
Hosting
Fully self-hosted on our own server
RIT Canvas landing page: every lecture, every deadline, every mark, one place
live at ritcanvas.in

01

The brief

Every lecture, deadline and mark in one workspace

The college wanted courses, assignments, quizzes, attendance and grades in a single workspace for students, teachers, TAs, heads of department and the institution head.

  • Six roles, from student and TA up to HOD and institution head, with course access checked on the server.
  • Only a course's owner can delete it, and HODs get read-only access to their department's courses.
  • Each course gets a 2,000 MB file quota by default, raised with the institution head's approval.

02

What I built

Everything a classroom needs

A course hub with files and announcements, assignments graded against real rubrics, quizzes, attendance and a gradebook that rolls it all up.

  • Departments, HOD dashboards, co-teachers and TAs, each scoped to what they should see.
  • Attendance from real session activity: a class session with no heartbeat for 90 seconds counts as ended.
  • Due-date reminders every hour, looking a day ahead, plus course ZIP export, support tickets and patch notes.
  • Email fails over from Gmail to Brevo to Resend, and a provider that hits its quota rests for 30 minutes.
RIT Canvas feature list: course hub, rubric grading, generated quizzes, live rounds, attendance and gradebook

03

The hard part

Quizzes written from your own slides

Teachers upload a PDF, DOCX or slide deck. Docling turns it into text on our own server, and a language model drafts questions from the document's actual content for the teacher to review before anything is published.

  • Long documents are split by page and grouped into 12,000-character chunks, so no single model call is too big.
  • Each chunk is asked for about 1.8 times the questions it needs. Picks rotate across question types with up to three top-up rounds, and any shortfall is reported, not hidden.
  • The model is a setting: a self-hosted Ollama or a hosted model. Behind the Cloudflare Tunnel, Ollama's context is raised to 32,768 tokens (it silently cuts prompts at 2,048) and answers stream so the tunnel's 100-second idle timeout never fires.
  • Study notes come from a six-pass pipeline (map, fold, outline, section, wrap, diagrams) instead of one huge prompt.
RIT Canvas how-it-works section

04

Real-time

A live quiz arena for a full classroom

Teachers can also run a quiz live in class, with every phone on the same question at the same moment.

  • The server stores each question's end time and a scheduled job closes it, with a 1.5-second grace for late answers.
  • Phones correct their clocks against the server, so every countdown reaches zero together.
  • Scores reward speed, with a streak bonus of up to 50%.
players per live quiz
500players per live quiz
cron jobs
5cron jobs

05

Running it

From Vercel to our own server

RIT Canvas went live on Vercel in June 2026. By late August it ran entirely on our own server: first a self-hosted Convex backend, then Dokploy, then 4 and finally 10 Docker replicas behind Traefik and a Cloudflare Tunnel.

  • The image is a pruned Turborepo with a standalone Next.js build, running as a non-root user on Debian slim, because Alpine's DNS handling caused failed lookups.
  • Server rendering reaches Convex over the internal network, skipping the round trip through Cloudflare.
  • An in-process DNS cache with a stale fallback, and retries only for requests that are safe to repeat.
  • Five cron jobs keep Docling warm, close silent sessions and abandoned quizzes, send reminders and recompute platform stats.
Docker replicas
10Docker replicas
CPU cores on the box
28CPU cores on the box
RIT Canvas live counter: 2,139 students, 169 educators, 319 courses

06

Sign-in

Sessions that behave

Better Auth runs the sign-in, with a few rules on top.

  • Sessions roll for 60 days and are capped at three devices; a new sign-in retires the oldest.
  • The Android app signs in by scanning a QR code on the web: a 32-byte token that works once and expires in 60 seconds.
  • HSTS preload, frame blocking, and rich text sanitised before it renders.

07

My role

Built and maintained on the campus that uses it

I own it end to end: product design, about 54,000 lines of TypeScript across 55 database tables and 302 backend functions, the server it runs on, and a 17-screen Android companion app that students download from ritcanvas.in.

RIT Canvas colophon crediting S.Yogadharshan, Department of Artificial Intelligence and Data Science

Built with

  • Next.js 16
  • TypeScript
  • Convex (self-hosted)
  • Better Auth
  • Docling
  • Ollama
  • Docker
  • Dokploy
  • Traefik
  • Cloudflare Tunnel
  • Turborepo
  • Expo
  • React Native

next case file

RIT ERP

The college's enterprise system, built by a seven-person student team.

Read it