total 60
drwxr-xr-x 11 root root 4096 Sep 11 01:22 .
drwxr-xr-x 10 user user 4096 Sep 11 02:08 ..
-rw-------  1 root root   44 Sep 10 22:10 .encryption_key
drwxr-xr-x  3 root root 4096 Sep 10 23:50 .pytest_cache
drwxr-xr-x  4 root root 4096 Sep 10 22:10 alembic
-rw-r--r--  1 root root  620 Sep 10 22:10 alembic.ini
drwxr-xr-x 12 root root 4096 Sep 10 22:15 app
drwxr-xr-x  2 root root 4096 Sep 10 22:07 deploy
drwxr-xr-x  2 root root 4096 Sep 10 22:07 docs
-rw-r--r--  1 root root  843 Sep 10 23:52 requirements.txt
-rw-r--r--  1 root root  339 Sep 10 22:39 restart_api.sh
drwxr-xr-x  2 root root 4096 Sep 10 23:42 scripts
drwxr-xr-x  4 root root 4096 Sep 10 23:34 static
drwxr-xr-x  3 root root 4096 Sep 11 10:31 tests
drwxr-xr-x  5 root root 4096 Sep 10 22:07 uploads
---
# Core framework
fastapi==0.115.6
uvicorn[standard]==0.34.0
gunicorn==23.0.0
python-multipart==0.0.20

# Database
SQLAlchemy==2.0.36
psycopg[binary]==3.2.3
alembic==1.14.0

# Redis / Celery
redis==5.2.1
celery==5.4.0

# Security
pyjwt==2.10.1
bcrypt==4.0.1  # direct bcrypt usage (passlib 1.7.4 incompatible with bcrypt>=4.1)
cryptography==44.0.0
itsdangerous==2.2.0
email-validator==2.2.0

# Google APIs
google-auth==2.37.0
google-auth-oauthlib==1.2.1
google-auth-httplib2==0.2.0
google-api-python-client==2.157.0

# PDF generation
weasyprint==62.3
pydyf==0.11.0  # weasyprint 62.3 incompatible with pydyf 0.12+ ('transform' removed)

# Templates / email
jinja2==3.1.5
beautifulsoup4==4.12.3
lxml==5.3.0
bleach==6.2.0

# HTTP / testing
httpx==0.28.1
pytest==8.3.4
pytest-asyncio==0.25.0

# Utility
python-dateutil==2.9.0.post0
slowapi==0.1.9
---app structure---
app
app/services
app/services/__pycache__
app/templates_email
app/tasks
app/tasks/__pycache__
app/__pycache__
app/worker
app/worker/__pycache__
app/db
app/db/__pycache__
app/core
app/core/__pycache__
app/models
app/models/__pycache__
app/api
app/api/__pycache__
app/api/routers
app/schemas
