Astra est une plateforme visant à modéliser, explorer et expliquer les relations d'ordre, de dépendance et d'équivalence entre les cours et les programmes offerts par les établissements d'enseignement supérieur. Elle vise à rendre explicites les structures de connaissance propres à chaque institution afin d'éclairer les parcours d'études et de soutenir une mobilité académique plus fluide et informée.
api/ FastAPI backend — REST endpoints + Neo4j queries
etl/ ETL pipelines — one subfolder per university
udem/
uqam/
mcgill/
concordia/
poly/
web/ React frontend (Vite)
See SCHEMA.md for the full Neo4j graph schema.
git clone https://github.com/ceduni/astra.git
cd astraCopy the example env file and fill in your Neo4j credentials:
cp .env.example .envEdit .env:
NEO4J_URI=bolt://localhost:7687 # or your Aura URI (neo4j+s://...)
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_password
Option A — Local (Neo4j Desktop)
- Download Neo4j Desktop
- Create a new project and database
- Start the database and set a password
- Update
.envwithbolt://localhost:7687and your password
Option B — Neo4j Aura (cloud, free tier)
- Go to console.neo4j.io and create a free instance
- Copy the connection URI (starts with
neo4j+s://) - Update
.envwith the Aura URI, username, and password
pip install -r requirements.txtEach university has its own ETL pipeline. Run them in order — transform.py produces a canonical_courses.json, then load_neo4j.py loads it into the graph.
# UdeM
python etl/udem/transform.py && python etl/udem/load_neo4j.py
# UQAM
python etl/uqam/transform.py && python etl/uqam/load_neo4j.py
# McGill
python etl/mcgill/transform.py && python etl/mcgill/load_neo4j.py
# Concordia
python etl/concordia/transform.py && python etl/concordia/load_neo4j.py
# Poly
python etl/poly/transform.py && python etl/poly/load_neo4j.pyThe raw data files (
raw_courses.json) are already committed. You do not need to re-run the fetch scripts unless you want to refresh the data from the university APIs.
python -m uvicorn api.main:app --reload --port 8001API is available at http://localhost:8001. Interactive docs at http://localhost:8001/docs.
cd web
npm install
npm run devFrontend is available at http://localhost:5173.
| Method | Endpoint | Description |
|---|---|---|
GET |
/health |
Check Neo4j connectivity |
GET |
/universities |
List universities with course counts |
GET |
/courses |
List courses (filters: universite, niveau, hors_perimetre) |
GET |
/courses/{sigle} |
Course details |
GET |
/courses/{sigle}/prerequisite-chain |
Full prerequisite graph for visualization |
GET |
/courses/{sigle}/prerequisites |
Structured prerequisite tree (AND/OR) |
POST |
/courses/eligible |
Courses accessible given a list of completed course sigles |
GET |
/search?q= |
Full-text search across sigle, title, and description |
Sigles with spaces (McGill, Concordia) must be URL-encoded:
COMP%20251