Aplicație web PWA (Progressive Web App) pentru gestionarea documentelor auto și personale ale șoferilor de ridesharing (Uber, Bolt etc.).
Folosește aplicația direct din browser sau instaleaz-o pe telefon pentru acces rapid, notificări pentru expirări și funcționare offline.
- Adăugare, editare și ștergere documente (RCA, ITP, licență, certificat, etc.)
- Notificări pentru documente care expiră
- Temă întunecată / deschisă
- Funcționare offline ca aplicație instalabilă (PWA)
- Interfață optimizată pentru mobil
- Conturi de utilizator cu autentificare securizată (Supabase Auth)
- Date sincronizate în cloud (PostgreSQL + Row Level Security), fiecare utilizator vede doar documentele proprii
- Atașare scan / poză pentru fiecare document (Supabase Storage, bucket privat)
- Vite
- React
- TypeScript
- Tailwind CSS
- vite-plugin-pwa
- Supabase — autentificare, PostgreSQL cu Row Level Security, storage pentru scanuri
| Comandă | Descriere |
|---|---|
npm install |
Instalează dependențele |
npm run dev |
Pornește serverul de dezvoltare |
npm run build |
Compilează aplicația pentru producție (tsc && vite build) |
npm run preview |
Previzualizează build-ul de producție local |
- Intră pe github.com/new.
- Completează numele depozitului, de exemplu
driver-documents. - Lasă-l Public (sau Private, dacă preferi).
- Nu bifa „Initialize this repository with a README".
- Apasă Create repository.
Rulează comenzile de mai jos în terminal, în folderul proiectului:
# Adaugă remote-ul GitHub (înlocuiește USERNAME cu numele tău de utilizator)
git remote add origin https://github.com/USERNAME/driver-documents.git
# Trimite codul pe GitHub
git branch -M main
git push -u origin mainDupă git push, codul sursă va fi disponibil pe GitHub.
Aplicația folosește Supabase pentru autentificare, baza de date și stocarea scanurilor. Pașii de configurare:
- Intră pe supabase.com → New project.
- Alege organizația, numele (ex.
driver-documents) și o regiune apropiată (ex.Central EU (Frankfurt)). - Salvează parola bazei de date într-un loc sigur — o vei folosi la pasul următor.
Rulezi migration-urile din supabase/migrations pe proiect. Există două opțiuni:
Opțiunea A — SQL Editor (recomandată pentru început):
- Din dashboard → SQL Editor, deschide fișierul
supabase/migrations/20260808210000_init.sqlși execută tot conținutul. - Deschide apoi
supabase/migrations/20260808220000_document_user_id_trigger.sqlși execută-l. - Deschide
supabase/migrations/20260808230000_realtime.sqlși execută-l — activează sincronizarea în timp real a documentelor între dispozitive. - Opțional, în Storage → Buckets (sau din același editor SQL) verifică bucketul
document-scanscreat cu acces privat.
Opțiunea B — CLI:
supabase link --project-ref REFERINȚA_PROIECTULUI
supabase db pushÎn Authentication → Providers → Email, asigură-te că providerul Email este activat. Pentru testare poți dezactiva „Confirm email" dacă vrei conturi create instant (nu recomandat în producție).
-
Google Cloud Console — intră pe console.cloud.google.com:
- Creează un proiect (sau selectează unul existent).
- Activează Google Auth Platform → OAuth consent screen (tip External).
- Mergi la Clients → Create Client → tip Web application.
- La Authorized redirect URIs adaugă:
(unde
https://REFERINȚA_PROIECTULUI.supabase.co/auth/v1/callbackREFERINȚA_PROIECTULUIeste referința proiectului Supabase — o găsești în dashboard-ul Supabase sau în URL:https://supabase.com/dashboard/project/REFERINȚA_PROIECTULUI) - Copiază Client ID și Client Secret.
-
Supabase Dashboard → Authentication → Providers → Google:
- Activează providerul Google.
- Lipește Client ID și Client Secret de la pasul 1.
- Salvează.
-
Supabase → Authentication → URL Configuration — asigură-te că adresa site-ului (ex.
https://driver-documents-USERNAME.vercel.app) este listată la Redirect URLs.
Notă: dacă un utilizator are deja cont cu email + parolă și se autentifică cu același email Google, Supabase le conectează automat — documentele rămân intacte.
Creează un fișier .env (nu se expediază pe GitHub) cu:
VITE_SUPABASE_URL=https://REFERINȚA_PROIECTULUI.supabase.co
VITE_SUPABASE_ANON_KEY=cheia_anon
VITE_SUPABASE_URLșiVITE_SUPABASE_ANON_KEYse găsesc în dashboard → Project Settings → API.- Important: folosește cheia anon/public, nu
service_role(care are acces total și nu trebuie expusă în client).
Adaugă aceleași două variabile (VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY) în Environment Variables ale proiectului de hosting, apoi redeploy.
- Intră pe vercel.com și autentifică-te cu contul GitHub.
- Apasă Add New… → Project.
- Selectează depozitul
driver-documentsși apasă Import. - Adaugă variabilele de mediu
VITE_SUPABASE_URLșiVITE_SUPABASE_ANON_KEY. - Lasă setările implicite:
- Framework Preset: Vite
- Build Command:
npm run build - Output Directory:
dist
- Apasă Deploy.
În câteva secunde vei primi un link public de forma:
https://driver-documents-USERNAME.vercel.app
Aplicația este acum live și accesibilă de pe orice telefon sau browser.
- Intră pe app.netlify.com și autentifică-te.
- Apasă Add new site → Import an existing project.
- Alege GitHub și selectează depozitul
driver-documents. - Configurează:
- Build command:
npm run build - Publish directory:
dist
- Build command:
- Apasă Deploy site.
Netlify va genera un link public, de exemplu:
https://driver-documents-123456.netlify.app
- Deschide link-ul public al aplicației în Chrome.
- Așteaptă să apară bannerul „Adaugă pe ecranul de start" sau apasă ⋮ → Adaugă pe ecranul de start.
- Confirmă și aplicația va apărea ca o pictogramă normală în launcher.
- Deschide link-ul public al aplicației în Safari.
- Apasă butonul Partajează (pătratul cu săgeată în sus).
- Selectează Adaugă pe ecranul principal.
- Confirmă cu Adaugă.
După instalare, aplicația se deschide în modul standalone, fără bara de adrese, și funcționează offline pentru vizualizarea datelor deja încărcate.
driver-documents/
├── public/ # Resurse statice (iconițe, manifest)
├── src/
│ ├── components/ # Componente React
│ ├── contexts/ # Contexte React (temă, etc.)
│ ├── hooks/ # Hook-uri React
│ ├── types/ # Tipuri TypeScript
│ ├── utils/ # Funcții utilitare
│ ├── App.tsx # Componenta principală
│ ├── index.css # Stiluri globale
│ └── main.tsx # Punct de intrare
├── .gitignore
├── index.html
├── package.json
├── tailwind.config.js
├── tsconfig.json
├── vercel.json # Configurare deploy Vercel + rute SPA
└── vite.config.ts # Configurare Vite + PWA
Supabase pauzează automat proiectele de pe planul Free după 7 zile de inactivitate. În acest repo există un workflow GitHub Actions (.github/workflows/keep-alive.yml) care face un request zilnic către baza de date, astfel încât proiectul să nu mai fie pauzat niciodată.
Workflow-ul are nevoie de două variabile secrete în repo:
-
Supabase Dashboard → Project Settings → API:
- copiază Project URL (ex.
https://xxxx.supabase.co) - copiază cheia anon public (nu
service_role!)
- copiază Project URL (ex.
-
GitHub → repo-ul
driver-documents→ Settings → Secrets and variables → Actions → New repository secret:- adaugă secretul
SUPABASE_URLcu valoarea Project URL - adaugă secretul
SUPABASE_ANON_KEYcu valoarea cheii anon
- adaugă secretul
- Rulează zilnic la 06:00 UTC (
cron: '0 6 * * *') - Face un
GETcătre{SUPABASE_URL}/rest/v1/documents?select=id&limit=1folosind cheia anon (aceeași cheie pe care o folosește aplicația — fără privilegii în plus) - Poți rula și manual: GitHub → Actions → Supabase Keep-Alive → Run workflow
- Dacă request-ul eșuează, workflow-ul apare ca failed și primești notificare pe email — verifici apoi în loguri ce s-a întâmplat
Proiect privat / uz personal. Modifică și distribuie conform nevoilor tale.