Repository online di programmi Java con sistema di ruoli, revisione admin e anti-spam.
Live: tpsit-demo-lab.vercel.app
Repo: github.com/CosmoUniverso/TpsitDemoLab
- 🔐 Login con GitHub OAuth
- 📤 Carica programmi
.jar— messi in coda per revisione admin - ✅ Admin panel — approva/rifiuta programmi e nuovi utenti
- 🛡️ Anti-spam basato su GitHub (non sull'IP, non aggirabile con VPN):
- Account GitHub deve avere ≥ 5 giorni
- Almeno 1 repository pubblico
- Max 1 progetto in attesa di revisione alla volta
- 📊 Monitor storage con avviso automatico al raggiungimento dei limiti
- 📱 Responsive — ottimizzato per mobile e desktop
| Ruolo | Come si ottiene | Progetti approvati | In attesa |
|---|---|---|---|
pending |
Al primo login | 0 | — |
active |
Approvato dall'admin | max 2 | max 1 |
whitelisted |
Promosso dall'admin | max 5 | illimitati |
admin |
Promosso dal superadmin | illimitati | illimitati |
superadmin |
CosmoUniverso (fisso) | illimitati | illimitati |
banned |
Bannato dall'admin | 0 | — |
I nuovi account ricevono un popup di benvenuto che spiega che devono attendere l'approvazione admin prima di poter caricare.
- Max 40 utenti totali (esclusi i bannati)
- Storage: blocco automatico con margine di sicurezza a 850MB su 1GB gratuito
- Superadmin (
CosmoUniverso) non può essere modificato, degradato o bannato da nessuno - Solo il superadmin può promuovere/degradare altri admin
| Servizio | Cosa fa | Limite piano free |
|---|---|---|
| Vercel | Frontend + API serverless | Illimitato |
| Supabase | PostgreSQL + Storage .jar | 500MB DB · 1GB Storage |
| GitHub OAuth | Autenticazione | Illimitato |
Costo totale: 0€
- Crea progetto su supabase.com
- SQL Editor → incolla
supabase-schema.sql→ Run - Storage → New bucket → nome
jars→ NON spuntare Public - Copia URL,
anon keyeservice_role key
- github.com/settings/developers → New OAuth App
- Homepage URL:
https://tpsit-demo-lab.vercel.app - Callback URL:
https://tpsit-demo-lab.vercel.app/api/auth/callback - Copia Client ID e Client Secret
npm i -g vercel
cd jarstore-online
vercelVariabili d'ambiente da impostare su Vercel:
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
JWT_SECRET=stringa_random_32_caratteri
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_SERVICE_KEY=eyJ...
APP_URL=https://tpsit-demo-lab.vercel.app
VITE_SUPABASE_URL=https://xxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJ...
VITE_APP_URL=https://tpsit-demo-lab.vercel.appjarstore-online/
├── api/
│ ├── _utils.js ← helpers condivisi
│ ├── me.js ← GET profilo utente
│ ├── upload-url.js ← POST presigned URL upload
│ ├── auth/
│ │ ├── github.js ← redirect OAuth
│ │ └── callback.js ← callback → JWT + limite utenti
│ ├── programs/
│ │ ├── index.js ← GET programmi approvati
│ │ ├── submit.js ← POST submission con tutti i controlli
│ │ └── download.js ← GET URL firmato download
│ └── admin/
│ ├── queue.js ← GET coda programmi + utenti pending
│ ├── review.js ← POST approva/rifiuta programma
│ ├── users.js ← GET/PATCH gestione utenti
│ ├── stats.js ← GET statistiche + storage
│ └── contributors.js ← GET lista admin pubblica
└── src/
├── pages/
│ ├── Login.jsx ← login con messaggi errore dettagliati
│ ├── Home.jsx ← lista programmi + popup benvenuto
│ ├── Submit.jsx ← upload diretto a Supabase + campo collaboratori
│ ├── Admin.jsx ← coda unificata + utenti + stats storage
│ ├── Contributors.jsx ← contributori + admin live da DB
│ └── AuthCallback.jsx
└── components/
├── Navbar.jsx ← responsive mobile
└── ProgramCard.jsx ← mostra uploader e collaboratori
| Username | Ruolo | |
|---|---|---|
| @CosmoUniverso | Lead Developer & Superadmin | |
| @gabrielerada07 | Collaboratore |