GuitarVault
L'app per chi colleziona chitarre: inventario, scambi e premi
Cosa fa
Una web app per collezionisti di chitarre: catalogo della propria collezione, scambi tra collezionisti, giochi e premi giornalieri.
Come guadagna
Il progetto è presentato in vetrina su SideProjectors; come guadagna non è indicato pubblicamente.
Rendilo tuo
- La stessa idea per altre collezioni: orologi, vinili, figurine, Lego.
- Valore stimato della collezione nel tempo.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Bacheca Chitarre": una web app per collezionisti di chitarre: catalogo della propria collezione con foto, matricole e valore, bacheca di scambi tra collezionisti e una piccola sfida giornaliera per tornare ogni giorno. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con collezioni in evidenza e il prezzo
2. Registrazione e accesso
3. La mia collezione: schede con marca, modello, anno, matricola, foto, valore stimato
4. Bacheca scambi e vendite tra collezionisti
5. Sfida del giorno: indovina la chitarra dalla foto di un dettaglio
Stile: vintage e caldo: sfondo legno chiaro #F5EBDD, marrone #5C3A21, oro #C59D5F, carattere "Playfair Display" per i titoli e "Inter" per i testi, foto delle chitarre in verticale. Nessuna immagine generica di stock.
Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.
2. Database, account e sicurezza
Collega il progetto a Supabase e attiva la registrazione con email e password.
Crea queste tabelle:
- "chitarre": marca, modello, anno, matricola (privata), colore, condizione, prezzo d'acquisto (privato), valore stimato, foto, pubblica o privata
- "annunci": chitarra, scambio o vendita, prezzo, città
- "sfide": domanda del giorno, foto del dettaglio, risposta
- "risposte_sfida": risposta dell'utente, giusta o no, giorno
Regole di sicurezza obbligatorie:
- matricole e prezzi d'acquisto li vede solo il proprietario
- le collezioni sono private, a meno che l'utente non le renda pubbliche
- si risponde alla sfida del giorno una sola volta
Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.
3. Catalogo della collezione
Ogni chitarra ha una scheda: marca, modello, anno, matricola, colore, condizione, modifiche, storia, foto (fino a 10), prezzo d'acquisto e valore stimato aggiornabile. Valore totale della collezione e grafico dell'andamento nel tempo.
La matricola e il prezzo d'acquisto restano privati anche se la collezione è pubblica (sono in una tabella separata, leggibile solo dal proprietario): utile in caso di furto, ma da non esporre.
Esportazione della collezione in PDF per l'assicurazione, con foto e matricole.
4. Scambi e sfida giornaliera
Bacheca scambi e vendite con filtri per marca, epoca e città, e messaggi interni senza mostrare i contatti.
Sfida del giorno: la foto di un dettaglio (paletta, ponte, intarsio) e quattro risposte. Si risponde una volta al giorno (codice nei Dettagli tecnici), si guadagnano punti e una serie di giorni consecutivi. Classifica settimanale.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di 9,99 € una volta sola. Il pagamento sblocca chitarre illimitate (gratis fino a 5), il PDF per l'assicurazione e gli annunci nella bacheca.
A pagamento riuscito il webhook imposta "piano" a "pro" nella tabella "profili", sulla riga dell'utente indicata in client_reference_id.
Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.
6. Controlli specifici di questo progetto
Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Privacy: con un secondo account apri una collezione pubblica e verifica che matricole e prezzi d'acquisto non arrivino mai al browser.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Dati privati separati e sfida una volta al giorno
Le informazioni sensibili stanno in una tabella leggibile solo dal proprietario; la chiave primaria (utente, giorno) impedisce di rispondere due volte alla sfida.
create table chitarre (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
marca text not null,
modello text not null,
anno int,
condizione text,
valore_stimato int,
pubblica boolean not null default false
);
create table chitarre_private (
chitarra_id uuid primary key references chitarre(id) on delete cascade,
utente_id uuid not null references auth.users(id) on delete cascade,
matricola text,
prezzo_acquisto int
);
alter table chitarre enable row level security;
create policy "pubbliche o mie" on chitarre for select using (pubblica or auth.uid() = utente_id);
create policy "gestisco le mie" on chitarre for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table chitarre_private enable row level security;
create policy "le mie righe" on chitarre_private
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
create table risposte_sfida (
utente_id uuid not null references auth.users(id) on delete cascade,
giorno date not null default current_date,
giusta boolean not null,
primary key (utente_id, giorno) -- una sola risposta al giorno
);
alter table risposte_sfida enable row level security;
create policy "le mie risposte" on risposte_sfida for select using (auth.uid() = utente_id);
-- Giorni consecutivi con risposta giusta fino a oggi
select count(*) as serie from (
select giorno, giorno - (row_number() over (order by giorno))::int as gruppo
from risposte_sfida where utente_id = auth.uid() and giusta
) g
where gruppo = (select giorno - (row_number() over (order by giorno))::int
from risposte_sfida where utente_id = auth.uid() and giusta
order by giorno desc limit 1);
Pezzi comuni a tutti i progetti
Glossario
- Storage
- Lo spazio di Supabase dove si salvano i file, come foto e audio, con le sue regole di accesso.
- Matricola
- Il numero di serie unico di uno strumento: serve a riconoscerlo, per esempio dopo un furto.