An education platform for course applications, event registrations, learning communities, student projects, and certificates — the software behind edu.opencampus.sh.
EduHub centralizes educational offerings: learners discover courses and events, apply or register, work on projects, and receive certificates. Organizations manage programs, courses, sessions, experts, and enrollments from a single admin area.
- Courses & applications — catalog, application/enrollment flows with admission decisions, sessions, attendance, and course content pages
- Events & registrations — event registrations with confirmation and reminder emails
- Projects — proposal → publication workflow with documentation templates (manual)
- Certificates & degrees — achievement and attendance certificates from configurable HTML templates (manual)
- Payments — Stripe checkout for paid courses and job postings (docs)
- Surveys — Formbricks integration for questionnaires and pricing add-ons (docs)
- Chat — Matrix/Element spaces and rooms created per program and course
- Automated emails — registration mails and session reminders (setup)
- Distribution — embeddable widgets (courses, projects, jobs) and a MOOCHub feed
- Multi-portal & i18n — host-based portal resolution with per-portal branding, German/English UI
- Install Docker.
- Clone this repository.
- Create your local env file (optional for a basic setup; required for
Stripe/Formbricks/Matrix/Ghost integrations):
cp .env.example .env # fill in only the integrations you need — see comments in .env.example - Run
docker compose up(first start builds images and applies migrations and seeds; give it a few minutes). - Open
http://localhost:5000and log in as admin@example.com / dev.
Local services:
| Service | URL | Notes |
|---|---|---|
| EduHub frontend | http://localhost:5000 | Next.js dev server, hot reload |
| StuJo frontend | http://localhost:5001 | job board portal, same backend |
| Hasura | http://localhost:8080 | GraphQL endpoint at /v1/graphql, admin secret myadminsecretkey |
| Keycloak | http://localhost:28080 | admin console, admin / admin |
| File storage emulator | http://localhost:4001 | serves /emulated-bucket |
| Serverless functions | ports 42000–42026 |
Node 42000–42024, Python 42025–42026 |
Note: See the Development Guide for environment variables, seeds, ports, and naming conventions.
| Path | Contents |
|---|---|
frontend-nx/ |
Yarn-workspace monorepo of Next.js apps: apps/edu-hub (main app), apps/stujo (job board) |
backend/ |
Hasura metadata, SQL migrations, and seeds |
functions/ |
Node and Python serverless functions (guide) |
keycloak/ |
Keycloak realm imports, themes, and custom listeners |
infrastructure/ |
Terraform for the Google Cloud staging/production environments |
docs/ |
Feature documentation, user manuals, and ADRs (docs/adr/) |
.github/workflows/ |
CI: code checks, image builds, releases, infrastructure deploys |
- Frontend — Next.js 16 (Pages Router) with React 19, TypeScript, Tailwind, MUI, Apollo Client, and next-intl
- API & data — Hasura GraphQL over PostgreSQL
- Auth — Keycloak with
NextAuth.js; roles
admin,instructor,user,anonymous - Serverless — Node.js and Python functions (Google Cloud Functions in staging/production)
- Infrastructure — Terraform, Google Cloud Run, GitHub Actions, semantic-release
We welcome contributions from everyone. Please read the Contributing Guide for:
- Branch structure (
develop→staging→production) and release flow - Conventional Commits guidelines
- Pull request and automated release process
- Code style and testing requirements
Frontend commands (from frontend-nx/, Node 22 and Yarn 3.4.1):
yarn install
yarn lint # ESLint, matches CI
yarn test # Jest + React Testing Library
yarn type-check # tsc --noEmit
yarn apollo # regenerate GraphQL types after query/schema changesSchema changes must be applied as Hasura migrations in backend/migrations/
with matching metadata — see the Development Guide.
This project is licensed under the AGPLv3 License.
