Initial commit: SejeteralO water tarification platform

Full-stack app for participatory water pricing using Bezier curves.
- Backend: FastAPI + SQLAlchemy + SQLite with JWT auth
- Frontend: Nuxt 4 + TypeScript with interactive SVG editor
- Math engine: cubic Bezier tarification with Cardano solver
- Admin: commune management, household import, vote monitoring, CMS
- Citizen: interactive curve editor, vote submission
- Docker-compose deployment ready

Includes fixes for:
- Impact table snake_case/camelCase property mismatch
- CMS content backend API + frontend editor (was stub)
- Admin route protection middleware
- Public content display on commune page
- Vote confirmation page link fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-02-21 15:26:02 +01:00
commit b30e54a8f7
67 changed files with 16723 additions and 0 deletions

19
backend/app/config.py Normal file
View File

@@ -0,0 +1,19 @@
from pydantic_settings import BaseSettings
from pathlib import Path
class Settings(BaseSettings):
APP_NAME: str = "SejeteralO"
DEBUG: bool = True
DATABASE_URL: str = "sqlite+aiosqlite:///./sejeteralo.db"
SECRET_KEY: str = "change-me-in-production-with-a-real-secret-key"
ALGORITHM: str = "HS256"
ADMIN_TOKEN_EXPIRE_HOURS: int = 24
CITIZEN_TOKEN_EXPIRE_HOURS: int = 4
BASE_DIR: Path = Path(__file__).resolve().parent.parent
CORS_ORIGINS: list[str] = ["http://localhost:3000", "http://localhost:3001", "http://localhost:3009"]
model_config = {"env_file": ".env", "env_file_encoding": "utf-8"}
settings = Settings()