Full-stack app for aggregating online course catalogs and analyzing them.
- Frontend: React + TypeScript + Vite + Chakra UI
- API: Node.js + Express + TypeScript + MongoDB
- ML/Analytics: Spark jobs (used via the API)
| Service | URL / Port | Notes |
|---|---|---|
| Frontend (Vite dev server) | http://localhost:5173 | React UI |
| API | http://localhost:3000/api | REST API base |
| API Docs | http://localhost:3000/api-docs | Swagger UI |
| MongoDB | localhost:27017 |
Database |
| Mongo Express | http://localhost:8081 | Admin UI |
| Spark Master UI | http://localhost:8080 | Cluster UI |
| Spark cluster | spark://localhost:7077 |
Internal cluster URL in compose |
- Docker + Docker Compose v2
cp .env.example .envMost setups work with the defaults in .env.example. If you need CORS from a different origin, update CORS_ORIGIN.
# N = number of Spark workers (example: 4)
docker compose up -d --scale spark-worker=NOpen:
- Frontend: http://localhost:5173
- Mongo Express: http://localhost:8081
docker compose ps
docker compose logs -f api
docker compose logs -f frontendapi/Express API (TypeScript)frontend/React UI (Vite)spark-jobs/Spark ML/analytics jobs (Python)mongo-init/MongoDB init scripts
docker compose up -d mongodb apiThis will delete the named volume.
docker compose down -vThis repo is set up for rootless Docker by default and mounts a user-scoped socket in docker-compose.yml.
If your Docker socket is in the standard location, you may need to switch the volume mount to /var/run/docker.sock:/var/run/docker.sock.
The compose service sets VITE_API_URL=http://localhost:3000/api.
If you're running the API on a different host/port, update that environment variable (or your local .env).
This setup is not production ready and is generally configured for local development. As such there may be some dependency to local versions of node/npm depending on configuration.
You may also need to run npm install for api and frontend.