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

View File

@@ -0,0 +1,46 @@
<template>
<div style="max-width: 500px; margin: 2rem auto;">
<div class="page-header" style="text-align: center;">
<h1>Connexion</h1>
<p style="color: var(--color-text-muted);">Choisissez votre espace.</p>
</div>
<div class="grid grid-2">
<NuxtLink to="/login/commune" class="card login-choice">
<h3>Commune</h3>
<p>Gérer les données et la tarification de votre commune.</p>
</NuxtLink>
<NuxtLink to="/login/admin" class="card login-choice">
<h3>Super Admin</h3>
<p>Gestion globale des communes et administrateurs.</p>
</NuxtLink>
</div>
<p style="text-align: center; margin-top: 1.5rem;">
<NuxtLink to="/">&larr; Retour à l'accueil</NuxtLink>
</p>
</div>
</template>
<style scoped>
.login-choice {
text-align: center;
cursor: pointer;
transition: box-shadow 0.15s;
}
.login-choice:hover {
box-shadow: var(--shadow-md);
text-decoration: none;
}
.login-choice h3 {
color: var(--color-primary);
margin-bottom: 0.5rem;
}
.login-choice p {
font-size: 0.8rem;
color: var(--color-text-muted);
}
</style>