LearnLocal

What inspired us

We built LearnLocal to directly address the digital divide in education. We realized that most modern educational tools assume high-speed, always-on internet, leaving institutions in low connectivity environments behind. We wanted to create a comprehensive, robust platform that can be deployed entirely on premise, giving teachers and students access to world class learning tools, progress tracking, and coding environments regardless of their internet infrastructure.

How we built it

The platform is a full stack web application powered by Node.js and Express. We designed it to be offline first and highly portable using Docker. Key features include:

  • Role-Based Workflows: Distinct, secure dashboards for Admins, Teachers, and Students with multi-factor authentication.
  • Secure Web IDE (Coding Workbench): A built in code editor that securely compiles, executes, and auto-grades student code against predefined test cases entirely locally.
  • Advanced Assessment & Analytics: Tools for teachers to create MCQ tests, track real-time session progress, and view deep completion analytics.
  • Bulk Media Management: We engineered a custom file-handling pipeline capable of processing massive mixed media uploads so educators can sync entire courses at once.

The challenges we faced

  • Secure Sandboxing: Building and testing an isolated local code runner that could safely execute untrusted student submissions without risking the host server was technically complex.
  • Handling Massive Synchronizations: Teachers in low bandwidth areas need to upload materials in bulk when they have a connection window. We had to override default server file limits (like Multer's tight constraints) to safely parse, sort, and store up to 200 mixed-media files simultaneously without degrading performance.
  • Offline-First QA: Testing a system meant for on premise deployment without massive cloud dependencies is tough. We ended up engineering a massive, rigorous automated testing suite using Jest and custom PowerShell end to end loops verifying over 90+ API routes to guarantee 100% reliability before any release.
  • Multi-Architecture Deployments: Ensuring the Dockerized environment works seamlessly across different on-premise hardware (like local amd64 machines and edge devices) required tweaking our GitHub Actions and Alpine Linux configurations extensively.

What we learned

Building this taught us how to design truly resilient architecture that doesn’t take the cloud for granted. We deepened our knowledge in containerization, secure stream processing for massive file uploads, and creating air-gapped sandboxes for code execution.

Built With

Share this project:

Updates