You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
EduBuilder is a small, local-first product built around one consistent domain: **learning plans**.
3
+
EduBuilder is a small, local-first product built around one consistent domain: **learning plans**. The same domain is reused through EX1, EX2, and EX3 so the repository can be graded as one incremental product.
4
4
5
-
The repository is organized so you can present the project as three incremental exercises:
5
+
## Quick setup
6
6
7
-
-**EX1** — a clean FastAPI CRUD backend with in-memory storage
8
-
-**EX2** — a lightweight Streamlit frontend that reuses the EX1 API as-is
9
-
-**EX3** — a fuller local stack with SQLite/SQLModel persistence, JWT auth, Redis-backed rate limiting, a background worker, tests, Docker Compose, and runbooks
7
+
### Create the `uv` environment
10
8
11
-
> Older experimental files can remain as non-grading extras.
12
-
> For grading, use the files listed below.
9
+
```bash
10
+
uv venv
11
+
source .venv/bin/activate
12
+
uv pip install -r requirements.txt
13
+
```
13
14
14
-
---
15
+
On Windows PowerShell:
15
16
16
-
## Assignment mapping
17
+
```powershell
18
+
uv venv
19
+
.\.venv\Scripts\Activate.ps1
20
+
uv pip install -r requirements.txt
21
+
```
17
22
18
-
### EX1 – FastAPI Foundations
19
-
Use these files for the EX1 grading scope:
23
+
## Exercise map
24
+
25
+
### EX1 - FastAPI Foundations
26
+
27
+
Main files:
20
28
21
29
-`poseai_backend/main_ex1.py`
22
30
-`tests/test_ex1_api.py`
23
31
-`docs/EX1-notes.md`
24
32
25
-
What EX1 includes:
33
+
Run EX1:
34
+
35
+
```bash
36
+
uv run uvicorn poseai_backend.main_ex1:app --reload
37
+
uv run pytest tests/test_ex1_api.py -q
38
+
```
39
+
40
+
EX1 delivers:
26
41
27
-
- FastAPI backend
28
-
- one core resource: `Plan`
42
+
- FastAPI CRUD for one core resource: `Plan`
29
43
- in-memory data layer
30
-
- CRUD endpoints
31
44
- Pydantic validation
32
-
- pytest coverage using FastAPI `TestClient`
33
-
- no authentication
34
-
- local run instructions for the API and tests
45
+
- pytest coverage with FastAPI `TestClient`
46
+
- clear local run instructions
35
47
36
-
EX1 scope does **not** include authentication, JWT protection, role checks, token-expiry handling, or scope validation. Those capabilities are introduced in EX3 as part of the final multi-service project.
48
+
### EX2 - Friendly Interface
37
49
38
-
### EX2 – Friendly Interface
39
-
Use these files for the EX2 grading scope:
50
+
Main files:
40
51
41
52
-`frontend/app_ex2.py`
42
53
-`poseai_backend/main_ex1.py`
43
54
-`docs/EX2-notes.md`
55
+
-`tests/test_ex2_ui.py`
44
56
45
-
What EX2 includes:
57
+
Run EX2:
46
58
47
-
- Streamlit interface
48
-
- talks to the EX1 backend as-is
49
-
- lists existing plans immediately
50
-
- allows adding a new plan in one screen
59
+
```bash
60
+
uv run uvicorn poseai_backend.main_ex1:app --reload
61
+
uv run streamlit run frontend/app_ex2.py
62
+
```
63
+
64
+
EX2 delivers:
65
+
66
+
- Streamlit interface over the EX1 `/plans` API
51
67
- no authentication or security prompts
52
-
- one small extra: summary metrics + CSV export
68
+
- list existing entries immediately
69
+
- add a new entry through a lightweight chat-style flow
70
+
- one small extra: summary metrics and CSV export
71
+
- automated EX2 coverage for the prompt-to-plan flow and CSV export
72
+
73
+
### EX3 - Full-Stack Microservices Final Project
53
74
54
-
### EX3 – Full-Stack Microservices Final Project
55
-
Use these files for the EX3 grading scope:
75
+
Main files:
56
76
57
77
-`poseai_backend/main.py`
58
78
-`poseai_backend/auth.py`
@@ -73,41 +93,50 @@ Use these files for the EX3 grading scope:
73
93
-`tests/test_openapi.py`
74
94
-`.github/workflows/ci.yml`
75
95
76
-
What EX3 includes:
96
+
Run EX3 locally:
97
+
98
+
```bash
99
+
uv run python -m scripts.migrate
100
+
uv run python -m scripts.seed
101
+
uv run uvicorn poseai_backend.main:app --reload
102
+
uv run streamlit run frontend/app.py
103
+
```
104
+
105
+
Run EX3 with Docker Compose:
106
+
107
+
```bash
108
+
docker compose up --build
109
+
```
110
+
111
+
EX3 delivers:
77
112
78
113
- FastAPI backend with SQLite persistence through SQLModel
79
114
- Alembic migrations and seed script
80
-
- Streamlit interface
115
+
- Streamlit interface with chat-style course creation, My Courses, Shared Courses, and Admin Panel
81
116
- Redis-backed rate limiting
82
-
- async refresh worker with retries + idempotency
117
+
- async refresh worker with retries and idempotency
83
118
- JWT authentication and admin role checks
84
-
- automated tests including worker and OpenAPI checks
85
-
- Docker Compose orchestration for API + frontend + Redis + worker
86
-
- a small enhancement: weekly learning-plan digest generation
87
-
88
-
> Before the final submission, replace the placeholder trace block in `docs/EX3-notes.md` with a real excerpt captured locally.
89
-
90
-
---
119
+
- automated tests including worker and OpenAPI coverage
120
+
- Docker Compose orchestration for API, frontend, Redis, and worker
121
+
- one enhancement: weekly learning-plan digest generation
91
122
92
123
## Domain model
93
124
94
-
The core product resource is a **learning plan**.
125
+
The core resource is a **learning plan**.
95
126
96
-
A plan contains:
97
-
- title
98
-
- goal
99
-
- cues
100
-
- difficulty level
101
-
- visibility (`is_public`)
127
+
Core fields:
102
128
103
-
In EX3 each plan also stores:
104
-
- owner
105
-
- optional weekly digest generated by the background worker
129
+
-`title`
130
+
-`goal`
131
+
-`cues`
132
+
-`level`
133
+
-`is_public`
106
134
107
-
This keeps the domain narrow and consistent through EX1–EX3.
135
+
EX3 adds:
108
136
109
-
---
137
+
-`owner`
138
+
-`weekly_digest`
110
139
111
140
## AI Assistance
112
141
113
-
AI tools were used as pair-programming aids for structure, tests, and documentation. All outputs were reviewed and verified locally before submission.
142
+
AI tools were used as pair-programming aids for code structure, debugging, tests, and documentation. Outputs were reviewed, edited, and verified locally before submission.
0 commit comments