# Pinned runtime dependencies; dev and CI tooling lives in requirements-dev.txt.
# Keep this file pure ASCII: pip 24.x decodes a BOM-less requirements file with
# the locale codec (cp936 on Chinese Windows), so a non-ASCII comment here makes
# `pip install -r requirements.txt` abort with UnicodeDecodeError before it
# reads a single pin.
fastapi==0.141.1
starlette==1.6.0
# Multipart form parsing for the referral note-image upload endpoint.
python-multipart==0.0.20
uvicorn[standard]==0.34.0
sqlalchemy==2.0.40
pydantic==2.11.3
pydantic-settings==2.9.1
httpx==0.28.1
jinja2==3.1.6
alembic==1.19.1
# Uploaded documents and images are decoded locally: pypdf reads PDF text,
# Pillow converts formats no model accepts (bmp/tiff) into PNG. Both are pure
# or wheel-published, so the first-run installer stays build-tool free.
pillow==12.3.0
pypdf==6.18.1
# Server-side PDF export: fpdf2 embeds a system CJK font so the resume PDF can be
# downloaded directly. fonttools is its font-parsing backend; pinning it keeps
# the first-run install reproducible.
fpdf2==2.8.4
fonttools==4.65.0
# Browser automation for the apply center: the CDP client talks to a user's real
# Chrome/Edge over the DevTools WebSocket. Pure Python (no compiler, has wheels),
# and the HTTP side reuses the existing httpx dependency.
websocket-client==1.8.0
# Word (.docx) export (R-16): pure-Python with wheels, no build toolchain, so the
# first-run installer stays compiler-free. Layout reuses ResumeLayout instead of
# introducing a second layout engine.
python-docx==1.1.2
