Applicazione Next.js per professionisti e organizzazioni che devono leggere bandi complessi: carica documenti o URL, ottieni analisi strutturate (requisiti, scadenze, criteri) e chat contestuale con output leggibile. Include autenticazione, piani di utilizzo e abbonamenti.
MediaMatter · Giorgio Lovecchio
| Area | Contenuto |
|---|---|
| Ingestione | PDF, DOCX, fogli di calcolo, testo, immagini |
| Analisi | Sintesi, requisiti, scadenze, suggerimenti tramite modelli OpenAI / Anthropic |
| Chat | Assistente sul singolo bando, rendering Markdown con formattazione curata |
| Export | Markdown, PDF, calendario (.ics) |
| Business | Clerk (auth), Stripe (checkout abbonamenti), limiti d’uso e piani |
| Layer | Tecnologie |
|---|---|
| App | Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS |
| Auth | Clerk (sessioni, OAuth, middleware) |
| Dati | PostgreSQL, Drizzle ORM |
| Pagamenti | Stripe Billing (Checkout, webhook) |
| AI | OpenAI API, Anthropic API (analisi e chat) |
| Test | Vitest (unit), ESLint |
- Node.js 18+
- Account Clerk, database PostgreSQL (es. Neon, Vercel Postgres)
- Chiavi LLM e opzionalmente Stripe per uso completo in locale/produzione
-
Clona il repository e installa le dipendenze:
git clone <url-del-repository> cd bandi-ai-assistant npm install
-
Variabili d’ambiente: copia
.env.examplein.env.locale imposta i valori reali (solo in.env.local, mai in Git). -
Schema database:
npm run db:push
Alternativa con migrazioni SQL versionate:
npm run db:generateenpm run db:migrate. -
Sviluppo:
npm run dev
npm run build richiede le variabili obbligatorie in fase di build (chiavi Clerk pubbliche, NEXT_PUBLIC_APP_URL dove applicabile).
| Comando | Uso |
|---|---|
npm run dev |
Server di sviluppo |
npm run build / npm run start |
Build e avvio produzione |
npm run lint |
ESLint |
npm run test |
Vitest (unit) |
npm run db:push |
Sincronizza schema Drizzle → DB |
npm run db:generate / db:migrate |
Migrazioni SQL (Drizzle) |
- Non versionare
.env,.env.localné chiavi API. Template:.env.example. - Clerk: chiavi
pk_test_/sk_test_in sviluppo;pk_live_/sk_live_in produzione. AllineareNEXT_PUBLIC_APP_URLe domini nella dashboard Clerk. - Stripe:
STRIPE_SECRET_KEY,STRIPE_WEBHOOK_SECRETsolo server-side; il webhook verifica la firma delle richieste. - Clerk webhooks: endpoint
POST /api/webhooks/clerk, variabileCLERK_WEBHOOK_SIGNING_SECRET(signing secret della dashboard). L’URL in Clerk deve coincidere con il dominio pubblico dell’app. - LLM:
OPENAI_API_KEY,ANTHROPIC_API_KEYsolo su variabili server. - Database: connessione TLS (
sslmode=requiredove richiesto), accesso ristretto per ambiente. - Multi-app:
NEXT_PUBLIC_APP_SLUGper attribuzione deploy (metadata Clerk/Stripe/DB).
Vercel: collegare il repository, impostare le variabili per Production (e Preview se serve). Webhook Stripe: https://<dominio>/api/webhooks/stripe. Webhook Clerk: https://<dominio>/api/webhooks/clerk con lo stesso signing secret di CLERK_WEBHOOK_SIGNING_SECRET. Ridistribuire dopo modifiche alle variabili.
npm run test
npm run lint
npm run buildI test unitari coprono helper (URL, Markdown, identità app). E2E e integrazione con API esterne sono fuori scope.
docs/— note interne (conformità, sicurezza).- Privacy e Cookie policy nell’app.
Codice proprietario. Vedi LICENSE. Uso del servizio hosted e abbonamenti: termini in-app e Stripe Checkout.