Aplicație React pentru evidența veniturilor și cheltuielilor unui PFA. Datele sunt stocate într-o bază de date Neon Postgres și accesate printr-un backend API minim (Express). localStorage rămâne doar ca fallback temporar, de exemplu când backend-ul nu este pornit.
- Adaugă venituri și cheltuieli cu dată și descriere.
- Sumar rapid: total, luna curentă și profit.
- Grafic comparativ pe ultimele 12 luni.
- Descrieri predefinite pentru PFA (servicii, chirie, utilități etc.).
- Temă deschisă/închisă, salvată local.
- Export CSV (Excel) cu datele tale.
- Atașamente (PDF, imagini) pentru fiecare înregistrare.
- React 18 + TypeScript
- Vite 8
- Express +
@neondatabase/serverless - Neon Postgres
- CSS custom (fără framework UI)
- Vitest + Testing Library pentru teste
- ESLint + Prettier pentru calitatea codului
-
Copiază fișierul de mediu:
cp .env.example .env
-
Completează
DATABASE_URLșiVITE_API_BASE_URLîn.env. Poți obține un connection string de la Neon rulând pașii de mai jos.
Proiectul folosește CLI-ul oficial neonctl pentru a crea și gestiona baza de date.
# 1. Autentificare în Neon
npm run neon:login
# 2. Creează proiectul și baza de date
npm run neon:create
# 3. Obține connection string-ul și actualizează DATABASE_URL în .env
npm run neon:connection-stringDupă autentificare, Neon CLI salvează local un token de acces (nu trebuie să îl copiezi manual).
Copiază textul afișat de neon:connection-string (arată ca postgresql://...) și înlocuiește valoarea lui DATABASE_URL din fișierul .env.
# 4. Rulează migrările pentru a crea tabelele
npm run db:migrateSchema inițială se află în migrations/001_initial.sql și creează tabelele movements și attachments.
Ai nevoie de două procese: backend-ul Express și aplicația Vite.
# Terminal 1 — backend API
npm run server:dev
# Terminal 2 — aplicația React
npm run devÎn dezvoltare, Vite proxy-ează cererile /api către http://localhost:3001.
| Script | Descriere |
|---|---|
npm run dev |
Server de dezvoltare cu hot reload |
npm run server:dev |
Pornește backend-ul Express |
npm run build |
Build de producție (dist/) |
npm run preview |
Previzualizează build-ul de producție |
npm run lint |
Rulează ESLint |
npm run lint:fix |
Rulează ESLint și corectează automat unde poate |
npm run format |
Formatează codul cu Prettier |
npm test |
Rulează testele o singură dată |
npm run test:watch |
Rulează testele în mod watch |
npm run neon:login |
Autentificare în Neon CLI |
npm run neon:create |
Creează proiectul Neon |
npm run neon:connection-string |
Afișează connection string-ul |
npm run db:migrate |
Aplică migrările SQL pe baza de date |
npm run db:migrate |
Aplică migrările SQL pe baza de date |
src/
App.tsx – container principal și stare globală
components/ – componente reutilizabile
hooks/useTheme.ts – gestiunea temei
lib/ – utilități (calcul, formatare, storage, CSV, API)
types.ts – tipurile aplicației
server/
index.ts – aplicația Express și endpoint-urile REST
db.ts – client Neon
scripts/
migrate.ts – runner pentru fișierele SQL din migrations/
migrations/
001_initial.sql – schema inițială
- Connection string-ul către Neon se află în
.env; acest fișier nu este inclus în Git. - API-ul este deschis (fără autentificare) pentru o singură instanță de utilizator. Dacă expui aplicația public, adaugă un strat de autentificare.
- Atașamentele sunt stocate ca base64 în Postgres; pentru fișiere foarte mari, ia în considerare un storage obiect (S3 etc.).
crypto.randomUUID()are fallback pentru contexte non-securizate (HTTP).
Proiect privat.