An offline-first Learning Management System designed for Philippine classrooms. It runs as a single executable that serves content over a local WiFi hotspot — no internet required.
- Go 1.24 or later
- Git
- Make (optional, for convenience targets)
# Install dependencies
go mod tidy
# Run in development mode
make devThe app will:
- Create a
./datadirectory for the database - Find an available port (starting from 8080)
- Detect your local/hotspot IP
- Open the Teacher CMS in your browser
# Build for your current platform (output: dist/offline-lms)
make build
# Cross-compile for all platforms (output: dist/)
make build-all
# Build with a version tag
make build VERSION=1.0.0go build -ldflags "-s -w" -o offline-lms .| Platform | Binary |
|---|---|
| Windows amd64 | dist/offline-lms-windows-amd64.exe |
| Linux amd64 | dist/offline-lms-linux-amd64 |
| Linux arm64 | dist/offline-lms-linux-arm64 |
| macOS amd64 | dist/offline-lms-darwin-amd64 |
| macOS arm64 | dist/offline-lms-darwin-arm64 |
# Using Make
make dev
# Or directly
./dist/offline-lms --dir=./data
# Custom port
./dist/offline-lms --dir=./data --http=0.0.0.0:9090make testRuns all tests with race detection and coverage reporting.
-
Setup Hotspot:
- Windows: Settings > Network & Internet > Mobile Hotspot > Toggle On
- macOS: System Settings > General > Sharing > Internet Sharing
- Linux: Settings > Wi-Fi > Turn On Wi-Fi Hotspot
- Android: Settings > Hotspot & Tethering > Wi-Fi Hotspot
-
Run the app and create your first admin account at the PocketBase admin UI (
http://localhost:<port>/_/). -
Teacher CMS (
/teacher) — log in with admin credentials to create courses, modules, lessons, and upload resources. -
Student Portal (
/) — students connect to the hotspot, scan the QR code from the Teacher Dashboard (or type the URL), and browse courses offline.
If you forget your admin email or password, you can create a new superuser from the command line:
./dist/offline-lms superuser create newadmin@school.edu yourNewPassword --dir=./dataOr, if you need to reset the entire database and start fresh:
rm -rf ./dataThen relaunch the app and create a new admin account at http://localhost:<port>/_/.
main.go Entry point, server config, embedded assets
internal/
network/ IP detection, QR code generation, port finding
pocketbase/ Database schema and collection setup
web/
teacher/ Teacher CMS (Alpine.js)
student/ Student Portal (Vanilla JS)
static/ Shared assets (CSS, JS libraries)
- Backend: Go + PocketBase (embedded)
- Database: SQLite (managed by PocketBase)
- Frontend: Alpine.js (Teacher CMS), Vanilla JS (Student Portal)
- Offline: All assets embedded in the single binary