feat(landing): pagina comerciala la / pentru vizitatori neautentificati

Importa design-ul "Gateway RAR AUTOPASS Landing" din claude.ai/design si il
implementeaza ca pagina responsiva single-page (app/web/templates/landing.html):
hero + mockup dashboard, problema, calculator interactiv, avertisment legal
(L.142/2023, OMTI 210/2024), pasi, integrare API, preturi (4 planuri), formular
inregistrare/autentificare cu tab-uri, CTA final, footer. 4 teme comutabile
(Grafit/Cobalt/Cupru/Hartie) persistate in localStorage, fonturi self-hostate,
logo /static/romfast_logo.png (fara CDN extern).

"/" serveste landing-ul pentru vizitatorul neautentificat (except LoginRequired)
si dashboard-ul pentru cel logat; formularele posteaza real la /signup si /login
cu token CSRF. Rutele protejate raman redirect /login.

test_dashboard_scope: anonim pe / -> landing 200 (nu redirect); ruta protejata
ramane 303 /login.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-06-28 01:39:54 +00:00
parent 670019361c
commit 865c208821
3 changed files with 490 additions and 6 deletions

View File

@@ -39,7 +39,7 @@ from .labels import (
nota_umana_preview,
parse_erori,
)
from ..web.session import require_login
from ..web.session import LoginRequired, require_login
from ..api.v1.import_router import (
_already_sent_lookup,
_build_idempotency_key,
@@ -441,8 +441,22 @@ def dashboard(request: Request, tab: str = "acasa", status: str | None = None) -
server-side la full load (fara palpaiere la refresh, degradare gratiosa fara JS).
Tab invalid -> fallback la 'acasa'. `?status=` pre-filtreaza lista Trimiteri de
pe Acasa (deep-link din banner-ul "Necesita atentia ta").
Vizitator neautentificat -> landing-ul comercial (in loc de redirect la /login),
cu formularele de inregistrare/autentificare care posteaza la /signup si /login.
"""
account_id = require_login(request)
try:
account_id = require_login(request)
except LoginRequired:
return templates.TemplateResponse(
"landing.html",
{
"request": request,
"rar_env": get_settings().rar_env,
"version": __version__,
"csrf_token": get_csrf_token(request),
},
)
active_tab = tab if tab in _TABS_VALIDE else "acasa"
conn = get_connection()
try: