Applicazione Next.js per professionisti e organizzazioni che devono leggere bandi complessi: carica i documenti del bando e, se serve, la visura del soggetto, ottieni analisi strutturate (requisiti, scadenze, criteri), una verifica di aderenza e chat contestuale. I bandi si raggruppano in cartelle. Include autenticazione, consenso all’uso dei modelli, piani di utilizzo e abbonamenti.
MediaMatter · Giorgio Lovecchio
Funzionalità principali
| Area | Contenuto |
|---|---|
| Ingestione | PDF, DOCX, fogli di calcolo, testo, immagini (bando, profilo/visura, moduli) |
| Organizzazione | Cartelle, rinomina, trascinamento dei bandi, cancellazione dalla dashboard |
| Analisi | Sintesi, requisiti, scadenze, criteri; verbosità della risposta a scelta |
| Aderenza | Confronto tra visura (e altri documenti di profilo) e requisiti del bando |
| Moduli | Compilazione di un modulo a partire dai documenti già caricati |
| Suggerimenti | Insight e grafici solo con i numeri presenti nei documenti |
| Chat | Assistente sul singolo bando, su tutti gli allegati; export della chat in PDF e DOCX |
| Export | Markdown, PDF, DOCX e calendario (.ics) di analisi e scadenze |
| Business | Clerk (auth), consenso AI, Stripe (checkout abbonamenti), limiti d’uso e piani |
Stack tecnico
| 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 | Anthropic Claude Opus 5.5 (default, ANTHROPIC_MODEL), OpenAI come fallback |
| Test | Vitest (unit), ESLint |
Requisiti
- Node.js 18+
- Account Clerk, database PostgreSQL (es. Neon, Vercel Postgres)
- Chiavi LLM e opzionalmente Stripe per uso completo in locale/produzione
Avvio in locale
-
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:pushAlternativa 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).
Script npm
| 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) |
Sicurezza e segreti
- 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. Il checkout accetta solo i prezzi Pro e Unlimited e indirizzi di ritorno sullo stesso sito. - 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).
Deploy
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.
Verifica locale
npm run test
npm run lint
npm run build
I test unitari coprono helper (URL, Markdown, identità app). E2E e integrazione con API esterne sono fuori scope.
Documentazione aggiuntiva
Privacy, cookie, cancellazione dati e resi sono pagine dell’app (/privacy, /cookie-policy, /cancellazione-dati, /resi-rimborsi).
Licenza
Codice proprietario. Vedi LICENSE. Uso del servizio hosted e abbonamenti: termini in-app e Stripe Checkout.
