Personal website — blog platform and resume. Built with FastAPI, Jinja2, PostgreSQL.
- Python 3.14+
- uv
- Docker (for PostgreSQL)
Development (includes linting tools):
uv syncProduction (runtime dependencies only):
uv sync --no-devcp config.yaml.example config.yamlEdit config.yaml and fill in the required values. Generate secrets with:
# secret_key and ip_salt
python -c "import secrets; print(secrets.token_hex(32))"
# admin_password_hash
python -c "import bcrypt; print(bcrypt.hashpw(b'yourpassword', bcrypt.gensalt()).decode())"docker compose up -duv run alembic upgrade headuv run uvicorn app.main:app --reloadThe site will be available at http://localhost:8000. Admin panel: http://localhost:8000/admin.
Seed the database with a test post:
uv run python scripts/insert.pyLint and format:
uv run ruff check
uv run ruff format