Backend (replaces PHP api.php + auth.php): - FastAPI app with routers: jobs, auth, billing - Supabase JWT authentication in deps.py - Celery + Redis job queue (process_pdf_task) - MinIO S3-compatible storage service - PDF checker wrapper (delegates to enterprise_pdf_checker.py) - Stripe billing: checkout, portal, webhook handler Multi-tenancy (Phase 3): - Alembic migration 001: workspaces, workspace_members, jobs, usage_events - Row-Level Security on all tenant tables via app.workspace_id session var - Monthly quota enforcement per workspace (402 on exceeded) - Plan tiers: free(5) / pro(100) / business(unlimited) Config: - pydantic-settings based config.py (no hardcoded values) - docker-compose.yml rewritten: postgres, redis, minio, api, celery Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
1 KiB
TOML
47 lines
1 KiB
TOML
[project]
|
|
name = "pdf-accessibility-saas"
|
|
version = "0.1.0"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"fastapi>=0.115.0",
|
|
"uvicorn[standard]>=0.32.0",
|
|
"gunicorn>=23.0.0",
|
|
"pydantic>=2.9.0",
|
|
"pydantic-settings>=2.6.0",
|
|
"asyncpg>=0.30.0",
|
|
"sqlalchemy[asyncio]>=2.0.36",
|
|
"alembic>=1.14.0",
|
|
"celery[redis]>=5.4.0",
|
|
"redis>=5.2.0",
|
|
"httpx>=0.27.2",
|
|
"structlog>=24.4.0",
|
|
"python-multipart>=0.0.18",
|
|
"boto3>=1.35.0",
|
|
"stripe>=11.3.0",
|
|
"PyJWT>=2.10.0",
|
|
"cryptography>=43.0.0",
|
|
# PDF processing (from original requirements.txt)
|
|
"pypdf>=5.0.0",
|
|
"pdfplumber>=0.11.0",
|
|
"anthropic>=0.40.0",
|
|
"google-cloud-vision>=3.9.0",
|
|
"weasyprint>=62.0",
|
|
"textblob>=0.18.0",
|
|
"Pillow>=11.0.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.3.0",
|
|
"pytest-asyncio>=0.24.0",
|
|
"pytest-cov>=6.0.0",
|
|
"httpx>=0.27.2",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|