Blog
engineeringarchitecturedruid-learning-hublive-classroom Druid Learning Hub

How We Built a Live Classroom on a 4GB Server

29 Mar 2026 · Ibukun — Data Druid Tech · Updated 29 Mar 2026

No WebSockets. No Redis. Just Django and 200 bytes per request.

When we decided live tutoring sessions needed to be more than video calls, we had a constraint: everything had to run on a single 4GB ARM VPS already serving four other applications.

Most real-time classroom platforms use WebSockets or Redis pub/sub. We cannot afford that. Our server costs 4 euros a month. So we built something simpler.

The architecture

Our live classroom uses polling. Every 3 seconds, the student's browser asks: "Is there a new activity?" The server responds with about 200 bytes of JSON.

30 students polling every 3 seconds = 10 requests per second. Each takes about 1ms. That is nothing.

How a session works

Daily.co handles video. We handle code activities:

  1. Instructor writes code and clicks "Push to Students"
  2. Code appears on every student's screen within 3 seconds
  3. Students edit and click "Submit"
  4. Instructor sees all responses with the AI summarizing patterns

Why not WebSockets?

WebSockets require persistent connections. Polling is stateless — each request comes in, gets answered, and closes. Nothing to hold in memory. If the server restarts, nothing breaks.

The trade-off is 3 seconds of latency. For a classroom, that is fine. We are teaching Python, not building a game.

It works on 2G

Video quality adjusts via Daily.co. Code activities are just text — a few hundred bytes. Even on 2G, a student can receive a challenge and submit.

— Ibukun Omonijo, Data Druid Tech