# Deploy Eventor.ro pe cPanel fara SSH

1. Verifica in cPanel daca exista `Application Manager` sau `Setup Node.js App`.
2. Creeaza baza de date MySQL/MariaDB.
3. Creeaza userul DB.
4. Leaga userul la DB si acorda permisiuni pentru baza de date.
5. Poti importa manual `database/schema.sql` in phpMyAdmin sau poti folosi installerul web de la `/install`.
6. Optional, importa `database/seed.sql` pentru date demo.
7. Uploadeaza proiectul prin FTP/File Manager in `/home/username/eventor`.
8. Creeaza aplicatia Node:
   - Application root: `eventor`
   - Application URL: `https://eventor.ro`
   - Startup file: `app.js`
   - Environment: `production`
9. Seteaza environment variables din `.env.example` in cPanel, creeaza fisier `.env` in application root sau foloseste installerul `/install`.
10. Ruleaza `Enable Dependencies` / `Run NPM Install` daca interfata cPanel ofera optiunea.
11. Porneste sau reporneste aplicatia.
12. Deschide `/install` daca DB-ul nu este inca importat, apoi verifica homepage-ul.
13. Activeaza SSL pentru domeniu din cPanel si seteaza `APP_URL=https://eventor.ro`.
14. Verifica loginul cu un cont demo daca ai importat seed-ul.
15. Schimba parolele demo.
16. Sterge sau dezactiveaza datele demo inainte de productie.

## Fara installer npm in cPanel

Daca hostingul nu permite `Run NPM Install`:

1. Ruleaza local `npm install`.
2. Uploadeaza proiectul impreuna cu `node_modules`.
3. Alege pe server aceeasi versiune majora de Node, preferabil Node 18+.

Nu este necesar SSH, `npm run build`, Docker, PM2, Prisma generate sau migrations CLI.

## Installer web

Installerul este disponibil la `/install` inainte de finalizarea instalarii. El poate:

- verifica fisierele aplicatiei;
- testa conexiunea MySQL/MariaDB;
- scrie `.env`, daca application root permite scriere;
- importa `database/schema.sql`;
- importa automat fisierele din `database/migrations`;
- importa optional `database/seed.sql`;
- marca instalarea ca finalizata prin `storage/private/installed.json`.

Dupa finalizare, installerul este blocat. Pentru redeschidere temporara seteaza `INSTALLER_ENABLED=true` sau foloseste un `INSTALLER_TOKEN`.

## Cron jobs

Scripturile din `cron/` sunt pregatite pentru cPanel daca providerul permite rulare Node:

- `cron/cleanupReservations.js`
- `cron/expireTransfers.js`
- `cron/sendReminders.js`

Daca Node cron nu este disponibil, pasii urmatori ai aplicatiei trebuie sa pastreze fallback lazy: curatare rezervari la checkout, verificare status la scanare si expirare transferuri la accesarea fluxului de transfer.
