DiDi Website (Next.js)
Componenta frontend a platformei DiDi - website public + dashboard client. Construit cu Next.js 16, integrat cu ERPNext (ERP/CRM), Stripe (plati), Keycloak (SSO) si platforma DiDi (analize AI).
Cuprins
Arhitectura
Browser (client)
|
v
+-----------------------------+
| Website Next.js :3000 |
| (SSR + API routes) |
+-----+-------+-------+-------+
| | |
+-------+--+ +--+----+ +-+--------+
| ERPNext | |Stripe | | Keycloak |
| :8080 | | API | | :28080 |
| (REST) | | | | (OIDC) |
+----+-----+ +-------+ +----------+
|
(factura, customer, CRM)
|
DiDi platform API
(analize text/image/audio/video)
Stack tehnic
| Componenta |
Versiune |
| Next.js |
16.2.1 (App Router) |
| React |
19.2.4 |
| TypeScript |
5.x |
| Tailwind CSS |
4.x |
| NextAuth (Auth.js) |
5.0 beta |
| Stripe |
21.0 |
| Node.js |
20 (in container) |
Structura folder
website/
├── README.md # Acest fisier
├── INSTALL.md # Build + deployment
├── OPERATIONS.md # Operare, log-uri, troubleshooting
├── CONFIGURATION.md # Env vars, integrari, credentiale
├── Dockerfile # Multi-stage: dev / builder / prod
├── docker-compose.yml # Stack de productie
├── .env.production # Configurare prod (NU se commiteaza)
├── package.json
├── tsconfig.json
├── next.config.ts
├── eslint.config.mjs
├── postcss.config.mjs
├── public/ # Static assets (clossersLogo2.png etc.)
├── src/
│ ├── app/ # App Router (Next.js 16)
│ │ ├── (public)/ # Pagini publice fara auth
│ │ │ ├── page.tsx # Homepage
│ │ │ ├── about/
│ │ │ ├── services/
│ │ │ ├── pricing/
│ │ │ ├── contact/
│ │ │ ├── privacy/
│ │ │ ├── terms/
│ │ │ └── layout.tsx # Navbar + Footer + Cookie consent
│ │ ├── (auth)/ # Login / Register
│ │ │ ├── login/
│ │ │ └── register/
│ │ ├── (dashboard)/dashboard/# Zona client autentificat
│ │ │ ├── page.tsx # Overview
│ │ │ ├── analiza/ # Run analiza
│ │ │ ├── analize/ # Istoric analize + rapoarte PDF
│ │ │ ├── achizitioneaza/ # Cumparare servicii
│ │ │ ├── checkout/success/ # Stripe success callback
│ │ │ ├── credits/ # Credite + consum (real-time)
│ │ │ ├── invoices/ # Facturi cu download PDF
│ │ │ ├── profile/ # Profil + GDPR (export, delete)
│ │ │ └── subscription/ # Abonament + upgrade/downgrade
│ │ ├── api/ # API routes (server-side)
│ │ │ ├── auth/[...nextauth]/ # Auth.js handler
│ │ │ ├── analyze/ # Analiza pipeline
│ │ │ ├── analysis-reports/
│ │ │ ├── analysis-report-pdf/
│ │ │ ├── checkout/ # Stripe Checkout Session
│ │ │ ├── subscribe/ # Stripe Subscription
│ │ │ ├── subscription/manage/ # Upgrade/downgrade/cancel
│ │ │ ├── customer/me/ # Get current user customer
│ │ │ ├── credits/ # Credite + history
│ │ │ ├── erp/[...path]/ # Proxy ERPNext
│ │ │ ├── invoice-pdf/ # Download factura PDF
│ │ │ ├── leads/ # Lead creation (contact form)
│ │ │ ├── webhooks/stripe/ # Stripe webhook handler
│ │ │ └── gdpr/ # Export + delete account
│ │ │ ├── export/
│ │ │ └── delete/
│ │ ├── layout.tsx # Root layout
│ │ ├── sitemap.ts
│ │ └── robots.ts
│ ├── components/ # React components
│ │ ├── layout/ # Navbar, Footer, DashboardSidebar
│ │ ├── forms/ # ContactForm
│ │ ├── providers/ # SessionProvider
│ │ └── ui/ # CookieConsent, SignOutButton
│ ├── i18n/ # Traduceri ro.json + en.json
│ ├── lib/ # Helpers server-side
│ │ ├── auth.ts # Auth.js config (Keycloak)
│ │ ├── erpnext.ts # ERPNext REST client
│ │ ├── stripe.ts # Stripe config + price map
│ │ ├── stripe-fulfillment.ts # Webhook fulfillment logic
│ │ ├── api.ts # Client API (browser)
│ │ ├── analysis-display.ts # Format rezultate analize
│ │ ├── analysis-report-pdf.ts# Generare PDF (jsPDF)
│ │ └── analysis-report-store.ts # Salvare PDF in ERPNext
│ ├── middleware.ts # Auth middleware (/dashboard/*)
│ └── types/ # TypeScript types
└── scripts/
└── archive/ # Scripturi generare doc-uri (one-off)
Documentatia de proiect (arhitectura, documentatia API, manuale, caiet de
sarcini) se livreaza separat, in dosarul de livrare — nu face parte din repo.
Quickstart
Cere docker + docker compose v2 si reteaua didi-network:
docker network create didi-network 2>/dev/null || true
Build + start:
cd ~/website
cp .env.production.example .env.production # (daca exista, sau editeaza .env.production existent)
docker compose up -d --build
Acceseaza: http://localhost:3000
Pentru detalii, vezi INSTALL.md.
Pagini
Pagini publice (fara login)
| Ruta |
Descriere |
/ |
Homepage (continut din ERPNext CMS) |
/services |
Module AI DiDi (6 servicii) |
/about |
Despre Clossers + DiDi |
/pricing |
14 servicii one-time + 4 abonamente recurente |
/contact |
Formular contact (creeaza Lead in ERPNext) |
/privacy |
Politica de confidentialitate (GDPR) |
/terms |
Termeni si conditii |
Pagini auth
| Ruta |
Descriere |
/login |
Redirect la Keycloak SSO |
/register |
Redirect la Keycloak registration |
Pagini dashboard (auth obligatoriu)
| Ruta |
Descriere |
/dashboard |
Overview - facturi recente, credite, achizitii |
/dashboard/analiza |
Selecteaza factura + ruleaza analiza |
/dashboard/analize |
Istoric analize + descarcare rapoarte PDF |
/dashboard/invoices |
Facturi emise + download PDF |
/dashboard/credits |
Credite disponibile + istoric consum |
/dashboard/achizitioneaza |
Servicii one-time + abonamente |
/dashboard/subscription |
Plan curent + upgrade/downgrade/cancel |
/dashboard/profile |
Profil + GDPR (export, delete) |
/dashboard/checkout/success |
Callback post-Stripe |
API routes
Public
| Endpoint |
Metoda |
Descriere |
/api/leads |
POST |
Creeaza Lead in ERPNext din formular contact |
/api/webhooks/stripe |
POST |
Webhook Stripe (events) |
Autentificate
| Endpoint |
Metoda |
Descriere |
/api/auth/[...nextauth] |
GET/POST |
Auth.js handler |
/api/analyze |
GET, POST |
Lista analize + run + polling |
/api/checkout |
POST |
Creeaza Stripe Checkout (one-time) |
/api/subscribe |
POST |
Creeaza Stripe Subscription |
/api/subscription/manage |
POST |
Upgrade/downgrade/cancel |
/api/customer/me |
GET |
Datele Customer din ERPNext |
/api/credits |
GET |
Credite + istoric |
/api/erp/[...path] |
* |
Proxy autentificat catre ERPNext |
/api/invoice-pdf |
GET |
Download factura PDF |
/api/analysis-reports |
GET, POST |
List + salvare rapoarte |
/api/analysis-report-pdf |
GET |
Download raport analiza PDF |
/api/gdpr/export |
GET |
Export date utilizator (JSON) |
/api/gdpr/delete |
POST |
Cerere stergere cont |
Integrari
| Sistem |
Protocol |
Scop |
| ERPNext |
REST API (token auth) |
Facturi, customeri, lead-uri, CMS |
| Stripe |
API + webhook |
Plati one-time + recurente |
| Keycloak |
OIDC |
SSO (autentificare clienti) |
| DiDi platform |
REST API (Bearer JWT) |
Analize text/image/audio/video |
| SendGrid |
(indirect prin ERPNext SMTP) |
Email tranzactional |
Functionalitati cheie
- Design responsive (desktop/tablet/mobile), WCAG 2.1 AA
- SEO (sitemap.xml, robots.txt, Open Graph)
- GDPR: cookie consent, export date, dreptul la stergere
- i18n RO + EN cu language switcher
- PDF generation (facturi + rapoarte analize)
- Webhook idempotency (Payment Log cu stripe_session_id unique)
Documentatie detaliata
Test user
Pentru testare:
- Email:
test@didi.local
- Parola:
Test1234!
- (creat in Keycloak local, realm
didi-clients — acelasi nume ca pe platforma reala)
Suport
Pentru intrebari tehnice: office@clossers.com