A web application for tracking your progress through the Learn to Cloud guide.
Note: This project is open source under the MIT License.
- π All 7 phases of the Learn to Cloud curriculum
- β Progress tracking with steps, questions, and hands-on projects
- π Authentication via GitHub OAuth
- π Dashboard with progress visualization
- π GitHub integration for project submissions
| Layer | Technology |
|---|---|
| Backend | Python 3.13+, FastAPI, SQLAlchemy (async), PostgreSQL |
| Frontend | HTMX, Jinja2 templates, Alpine.js, Tailwind CSS v4 |
| Auth | GitHub OAuth (Authlib) |
| Infra | Azure Container Apps, Azure PostgreSQL, Terraform |
| CI/CD | GitHub Actions |
The fastest way to get started on Windows (WSL), macOS, or Linux is with VS Code Dev Containers. Everything β Python, Node, PostgreSQL, uv, pre-commit hooks β is configured automatically.
Prerequisites: Docker Desktop and VS Code with the Dev Containers extension.
Windows users: Install and run Docker Desktop via WSL 2. Clone the repo inside your WSL filesystem for best performance.
- Clone the repo and open it in VS Code
- When prompted "Reopen in Container", click it (or run
Dev Containers: Reopen in Containerfrom the command palette) - Wait for the container to build β this runs automatically:
- Installs Python 3.13, Node 20, uv, Azure CLI, GitHub CLI
- Creates a Python virtual environment and installs all dependencies
- Starts PostgreSQL 16 (port 54320) and runs database migrations
- Installs
prekpre-commit hooks - Copies
.env.exampleβ.envif needed
- Start the API:
cd api && uv run uvicorn main:app --reload --port 8000
| Service | URL |
|---|---|
| App | http://localhost:8000 |
| API Docs | http://localhost:8000/docs (requires DEBUG=true in .env) |
| PostgreSQL | localhost:54320 (user: postgres, password: postgres) |
If you prefer not to use Dev Containers, you can set things up manually.
- Python 3.13+ with uv
- Node.js 20+ (for Tailwind CSS build)
- Docker (for PostgreSQL)
1. Start the database (Docker)
docker compose up -d db2. API setup
cd api
uv venv # Create virtual environment
uv sync # Install Python dependencies
cp .env.example .env # Create environment config (edit if needed)Run database migrations:
# macOS/Linux
.venv/bin/alembic upgrade head
# Windows
.venv\Scripts\alembic upgrade headStart the API:
# macOS/Linux
.venv/bin/python -m uvicorn main:app --reload --port 8000
# Windows
.venv\Scripts\python -m uvicorn main:app --reload --port 8000Or use VS Code's debugger with the "API: FastAPI (uvicorn)" launch configuration.
Notes:
- The API does not start Postgres for you. Run
docker compose up -d dbfirst. - Manage the database with
docker compose start db/docker compose stop db.
| Service | URL |
|---|---|
| App | http://localhost:8000 |
| API Docs | http://localhost:8000/docs (requires DEBUG=true) |
βββ api/ # FastAPI backend (serves HTML + JSON API)
β βββ main.py # App entry point
β βββ models.py # SQLAlchemy models
β βββ schemas.py # Pydantic schemas
β βββ routes/ # API + page endpoints
β βββ services/ # Business logic
β βββ repositories/ # Database queries
β βββ core/ # Config, auth, database
β βββ templates/ # Jinja2 templates (HTMX)
β βββ static/ # CSS, JS, images
β βββ tests/
βββ content/ # Course content (YAML)
β βββ phases/ # Phase and topic definitions
βββ infra/ # Terraform (Azure)
βββ .github/
βββ workflows/ # CI/CD
βββ instructions/ # Copilot custom instructions
βββ skills/ # Copilot agent skills
See the Contributing Guide for linting, testing, the dog-food QA agent, Copilot skills, and architecture conventions.
Push to main triggers automated deployment via GitHub Actions β Terraform β Azure Container Apps.
MIT License. See LICENSE.