From 865c208821048015386c0b4ce575142acdd83f9d Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Sun, 28 Jun 2026 01:39:54 +0000 Subject: [PATCH] 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) --- app/web/routes.py | 18 +- app/web/templates/landing.html | 460 +++++++++++++++++++++++++++++++++ tests/test_dashboard_scope.py | 18 +- 3 files changed, 490 insertions(+), 6 deletions(-) create mode 100644 app/web/templates/landing.html diff --git a/app/web/routes.py b/app/web/routes.py index 0cd93a5..052ebbc 100644 --- a/app/web/routes.py +++ b/app/web/routes.py @@ -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: diff --git a/app/web/templates/landing.html b/app/web/templates/landing.html new file mode 100644 index 0000000..52cb349 --- /dev/null +++ b/app/web/templates/landing.html @@ -0,0 +1,460 @@ + + + + + + Gateway RAR AUTOPASS — declară automat la RAR | ROMFAST + + + + + +
+ +
+ Vrei să testezi sau ai un service mic? Este gratuit — până la 100 de prestații/lună, fără card bancar. + Creează cont în 2 minute +
+ + +
+
+ ROMFAST +
+ Cum funcționeazăAPIPreț +
+
+
+ + + +
+
+ + +
+
+
+ + Gratuit pentru testare și service-uri mici · 100 prestații/lună +
+

Declară prestațiile la RAR AUTOPASS, automat

+

Conformitate RAR fără bătaie de cap. Încarci un fișier sau conectezi softul de service — noi trimitem prezentările la RAR în siguranță, conform Legii 142/2023.

+
+ + +
+
+ Conform Legii 142/2023 + · + Datele tale criptate + · + Fără card bancar +
+
+ + +
+
+
+
Trimiteri RAR AUTOPASS
+
Service Auto Vâlcea · 28 iun 2026
+
+
+
Live
+
+
+
+
847
Trimise luna asta
+
12
În coadă
+
2
De corectat
+
+
+
+
WBA8E9...K7F2
Inspecție tehnică · 09:42
+
Trimis
+
+
+
WVWZZZ...3M1
Revizie periodică · 09:38
+
În coadă
+
+
+
VF1RFB...A88
Sistem frânare · 09:31
+
Eroare VIN
+
+
+
ZAR937...C04
Schimb ulei · 09:24
+
Trimis
+
+
+
+
+ + +
+
+
+

Pentru fiecare comandă stai 2–3 minute și tastezi pe rar-autopass.ro

+

VIN, cod prestație, kilometraj, dată, tip operație — câmp cu câmp, comandă cu comandă. La 20 de mașini pe zi pierzi aproape o oră. În fiecare zi.

+

Iar dacă greșești o cifră din VIN, prestația e respinsă și o iei de la capăt — cu risc de amendă pentru raportare incompletă sau întârziată.

+
+
+
rar-autopass.ro · prestație nouă02:34
+
+
+
VIN
U1234567890123456
+
Confirmă Vin
U1234567890123456
+
+
+
Data prestației
2026-06-22
+
Număr Înmatriculare
CT88NOE
+
+
Observații
REVIZIE; SCHIMBARE PLĂCUȚE FRÂNĂ
+
Prestații
×REVIZIE PERIODICĂ×ÎNTREȚINERE
+
Valoarea citită a odometrului
39000
+
+ +
se repetă pentru fiecare comandă · zi de zi
+
+
+
+ + +
+
+
Cât te costă de fapt
+

Fă socoteala. Minutele acelea sunt bani.

+

Mută cursorul la volumul service-ului tău și vezi cât timp și câți bani pleacă pe raportarea manuală.

+
+
+
+
+
Prestații pe lună300
+ +
+
+
Cost manoperă60 lei/h
+ +
+
Estimat la ~2,5 minute de introdus manual pentru fiecare prestație.
+
+
+
Pierdut pe raportare manuală
+
0lei / lună
+
0 ore pe lună · 0 lei pe an · ≈ 0 zile lucrătoare/an doar cu raportarea.
+
+
Cu ROMFAST: câteva secunde pentru tot lotul
+
Recuperezi ~0 lei/lună și timpul îl pui pe mașini, nu pe formulare.
+
+
+
+
+
+
+
Evită riscul amenzilor — transmite automat la RAR Auto-Pass
+

Conform Legii nr. 142/2023 și OMTI nr. 210/2024, service-urile auto autorizate RAR trebuie să transmită, la finalizarea fiecărei prestații, informațiile obligatorii (VIN, kilometraj și, după caz, date privind intervențiile asupra odometrului și reparațiile rezultate din avarii grave). Nerespectarea obligației se sancționează cu amendă între 2.000 și 5.000 lei, iar transmiterea unor informații eronate cu amendă între 1.000 și 2.000 lei.

+
+
+
+ + +
+
+

Încarci o dată. Restul se întâmplă automat.

+

Exporți un fișier CSV/XLSX din programul tău de service și îl imporți în ROMFAST AutoPass — pe tot, cu auto-mapări. Durează până în 5 minute, doar dacă apar operații noi. Sau trimiți direct prin API.

+
+
+
+
1
+

Încarci o dată

+

Pui fișierul CSV/XLSX sau conectezi softul prin API — o singură acțiune pentru tot lotul.

+
+ +
+
2
+

Mapare automată

+

Potrivim coloanele automat și îți sugerăm prestațiile. Confirmi o dată, ținem minte data viitoare.

+
+ +
+
3
+

Trimitem și urmărești

+

Validăm, eliminăm duplicatele și trimitem la RAR. Tu vezi starea live a fiecărei prestații.

+
+
+
+ 2–3 minute de tastat pentru fiecare comandă  →  câteva secunde pentru tot lotul. +
+
+ + +
+
+
+
Pentru service-uri cu soft propriu · ROAAUTO
+

Ai deja un soft de service? Conectează-l automat

+

Softul tău se poate conecta și direct la API-ul RAR Auto-Pass. Cu ROMFAST primești în plus asistență la maparea automată a operațiilor tale (prin mai multe metode) și salvarea mapărilor pentru trimiterile viitoare — totul printr-un singur apel, cu cheie API per cont.

+ +
+
+
+ + request.sh +
+
POST /v1/prezentari
+Authorization: rfak_••••••••
+Content-Type: application/json
+
+{
+  "vin": "WBA8E9C5...",
+  "cod_prestatie": "ITP-01",
+  "odometru": 142500
+}
+
+
+
+ + +
+
+
Preț
+

Pentru un service mic, nu costă nimic

+

Crearea contului este gratuită, la orice plan. Fără card bancar.

+
+
+ +
+
Testare și firme mici
+
Gratuit
+
0 lei/lună
+
Fără card bancar
+
+
Până la 100 de prestații/lună
+
Sugestii automate de prestații RAR (din mii)
+
Mapare manuală coloane, cu salvare
+
Validare și anti-duplicat
+
Suport contact/email în 48h
+
Fără import API
+ +
+ +
+ +
+
Standard
+
39 lei/lună
+
Volum nelimitat, fără API
+
+
Tot din Gratuit
+
Prestații nelimitate
+
Suport contact/email în 48h
+
Fără import API
+ +
+ +
+ +
+
Cel mai ales
+
Pro
+
59 lei/lună
+
Cu acces API
+
+
Tot din Standard
+
Import prin API + cheie API per cont
+
Suport pe email în 24h
+
Categorisire automată, cu confirmare la operațiile incerte
+ +
+ +
+ +
+
Premium
+
La cerere
+
Soluție personalizată
+
+
Tot din Pro
+
Opțiune de integrare în softul tău
+
Suport telefonic și online
+
Asistență și onboarding dedicate
+
+ +
+
+
+ + +
+
+
+
Creează cont
+

Creează cont în 2 minute și declară azi la RAR

+

Te înregistrezi gratuit, fără card bancar. Imediat poți încărca primul fișier sau conecta softul de service.

+
+
Gratuit până la 100 de prestații/lună
+
Fără card bancar la înscriere
+
Conform Legii 142/2023 și OMTI 210/2024
+
Datele cu caracter personal criptate (GDPR)
+
+
+
+
+ + +
+
+ + + + + + + + +
Ai deja cont? Autentifică-te
+
+
+ + + + + + +
+
+
+
+ + +
+
+

Începe să declari la RAR în câteva minute

+

Gratuit până la 100 de prezentări pe lună. Fără card bancar.

+
+ + +
+
+
+ + +
+
ROMFAST
+
+ TermeniConfidențialitate / GDPRDocumentație APIContact +
+
© 2026 ROMFAST
+
+
+ + + diff --git a/tests/test_dashboard_scope.py b/tests/test_dashboard_scope.py index ffb73cb..ab93dfe 100644 --- a/tests/test_dashboard_scope.py +++ b/tests/test_dashboard_scope.py @@ -93,8 +93,13 @@ def test_submissions_fragment_scoped(env, monkeypatch): assert f'id="trimitere-row-{sub_a}"' not in r.text -def test_nelogat_redirect(monkeypatch): - """web_auth_required=True + fara sesiune -> 303 redirect /login.""" +def test_nelogat_landing(monkeypatch): + """web_auth_required=True + fara sesiune -> landing comercial (200) la /. + + "/" e suprafata publica: vizitatorul vede landing-ul cu formularele de + inregistrare/autentificare (post la /signup, /login). Rutele protejate + (fragmente, POST-uri) raman redirect /login. + """ tmp = tempfile.mkdtemp() monkeypatch.setenv("AUTOPASS_DB_PATH", os.path.join(tmp, "t_auth.db")) monkeypatch.setenv("AUTOPASS_WEB_AUTH_REQUIRED", "true") @@ -103,8 +108,13 @@ def test_nelogat_redirect(monkeypatch): from app.main import app with TestClient(app, follow_redirects=False) as c: r = c.get("/") - assert r.status_code == 303 - assert "/login" in r.headers.get("location", "") + assert r.status_code == 200 + assert 'action="/signup"' in r.text + assert 'action="/login"' in r.text + # ruta protejata fara sesiune -> tot redirect /login + r2 = c.get("/_fragments/submissions") + assert r2.status_code == 303 + assert "/login" in r2.headers.get("location", "") get_settings.cache_clear()