FormulaBase è una web app per creare, organizzare e condividere formulari scientifici e cheat sheet. Permette di scrivere contenuti in Markdown e LaTeX, dividerli in capitoli e argomenti, salvarli nel proprio spazio personale, condividerli tramite link o QR code e usare assistenti AI per generare o migliorare appunti.
- Autenticazione Google tramite Firebase
- Sessioni server-side con
iron-session - Database PostgreSQL per utenti, formulari, capitoli, argomenti e preferiti
- Editor Markdown/LaTeX con Monaco Editor
- Anteprima KaTeX e strumenti di formattazione
- Generazione contenuti tramite Gemini e Groq
- Formulari privati, condivisi o pubblici nella community
- Sistema di preferiti, visualizzazioni, ricerca e duplicazione formulari
- Condivisione tramite link e QR code
- Tema chiaro/scuro con UI basata su Radix UI e shadcn/ui
- Next.js 16 (App Router)
- React 19
- TypeScript
- Tailwind CSS 4
- PostgreSQL (
pg) - Firebase Auth + Firebase Admin
- Monaco Editor
- KaTeX, React Markdown e Mermaid
- Gemini API e Groq API
Prima di iniziare assicurati di avere:
- Node.js 20 o superiore
- npm
- Un database PostgreSQL
- Un progetto Firebase con autenticazione Google abilitata
- Una chiave API Gemini e/o Groq per le funzionalità AI
Installa le dipendenze:
npm installCrea il file delle variabili ambiente:
cp .env.example .env.localSu PowerShell:
Copy-Item .env.example .env.localCompila .env.local con le tue credenziali.
Inizializza il database:
psql "$DATABASE_URL" -f sql/create_tables.sqlAvvia il server di sviluppo:
npm run devL'app sarà disponibile su:
http://localhost:3000
| Variabile | Descrizione |
|---|---|
DATABASE_URL |
URL di connessione PostgreSQL |
NEXT_PUBLIC_FIREBASE_API_KEY |
API key Firebase client |
NEXT_PUBLIC_GOOGLE_CLIENT_ID |
Client ID OAuth Google usato anche per Google One Tap |
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN |
Auth domain Firebase |
NEXT_PUBLIC_FIREBASE_PROJECT_ID |
ID del progetto Firebase |
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET |
Storage bucket Firebase |
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID |
Sender ID Firebase |
NEXT_PUBLIC_FIREBASE_APP_ID |
Firebase App ID |
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID |
Firebase Measurement ID |
FIREBASE_PRIVATE_KEY |
Chiave privata del service account Firebase Admin |
FIREBASE_CLIENT_EMAIL |
Email del service account Firebase Admin |
SESSION_SECRET |
Segreto usato da iron-session |
NEXT_PUBLIC_APP_URL |
URL pubblico dell'app |
NEXT_PUBLIC_FORMULARIO_BENVENUTO_ID |
ID del formulario di benvenuto assegnato ai nuovi utenti |
GEMINI_API_KEY |
API key Gemini |
GROQ_API_KEY |
API key Groq |
NEXT_PUBLIC_UMAMI_APP_ID |
ID sito Umami per analytics |
Nota: il codice usa
NEXT_PUBLIC_FORMULARIO_BENVENUTO_ID. Se troviFORMULARIO_BENVENUTO_IDnel file.env.example, rinominala aggiungendo il prefissoNEXT_PUBLIC_.
npm run devAvvia Next.js in modalità sviluppo.
npm run buildGenera la build di produzione.
npm run startAvvia la build di produzione.
npm run lintEsegue ESLint.
npm run format:checkControlla la formattazione con Prettier.
npm run format:fixFormatta automaticamente il progetto con Prettier.
src/
app/ Route, pagine e API Next.js
components/ Componenti UI e componenti di dominio
data/ Dati statici e configurazioni
hooks/ Hook React condivisi
lib/ Configurazioni DB, Firebase, sessioni e utility
styles/ Stili globali ed editor
public/ Asset statici, icone, manifest e video tutorial
sql/ Script SQL per inizializzare il database
Lo schema iniziale si trova in:
sql/create_tables.sql
Lo script crea le seguenti tabelle:
users→ utenti autenticati tramite Firebaseformulari→ formulari creati o duplicati dagli utenticapitoli→ sezioni ordinate dei formulariargomenti→ contenuti Markdown/LaTeX associati ai capitolipreferiti→ relazione tra utenti e formulari salvati
Viene inoltre abilitata l'estensione PostgreSQL pg_trgm, utilizzata per migliorare le ricerche testuali.
-
L'utente accede con Google
-
Il backend verifica l'ID token tramite Firebase Admin
-
L'utente viene creato o aggiornato nel database PostgreSQL
-
I formulari vengono gestiti tramite:
/home/formulario/[formularioId]/capitolo/[capitoloId]/editor/[argomentoId]
-
Le API in
src/app/apigestiscono:- salvataggio contenuti
- struttura formulari
- preferiti
- visibilità
- richieste AI