JuJuBit
Dalle foto a statuine stampate in 3D, da collezionare o regalare
Cosa fa
Si mandano alcune foto (di una persona, di un animale) e si riceve una statuina personalizzata stampata in 3D.
Come guadagna
Startup appena presentata su BetaList, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: vendita delle statuine: prodotto fisico con buon margine, perfetto come regalo.
Rendilo tuo
- Statuine degli animali domestici: un regalo molto richiesto.
- Sposi e cake topper personalizzati per i matrimoni italiani.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Mini Me": si caricano alcune foto di una persona o di un animale e si riceve a casa una statuina personalizzata stampata in 3D, dipinta, alta 10–20 cm. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con esempi di statuine e prezzi
2. Ordine: tipo (persona, coppia, animale), misura, posa, colori, foto
3. Anteprima del modello 3D da approvare prima della stampa
4. I miei ordini con lo stato di lavorazione
5. Pannello del laboratorio
Stile: giocoso e artigianale: sfondo crema #FFF7ED, arancione #F97316, blu #1E40AF, carattere "Fredoka" per i titoli e "Inter" per i testi, foto delle statuine su sfondo colorato. 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:
- "ordini": tipo, misura, posa, note, foto, indirizzo, prezzo, pagato, stato (in attesa di foto, modellazione, da approvare, in stampa, spedito)
- "modelli": file 3D dell'anteprima, versione, commento del cliente
Regole di sicurezza obbligatorie:
- ogni cliente vede solo i suoi ordini, foto e modelli
- le foto stanno in uno spazio privato e si cancellano 30 giorni dopo la spedizione
- prezzo e stato li cambiano solo il laboratorio e il pagamento
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. Ordine, foto e consenso
Il cliente sceglie tipo, misura (10, 15 o 20 cm), posa e colori, e carica da 3 a 8 foto (fronte, lati, figura intera). Il sito controlla che le foto siano abbastanza grandi e dà consigli per scattarle.
Per le statuine di persone c'è una casella obbligatoria: "Le persone ritratte hanno dato il consenso (o sono io)". Per i minori serve il consenso di un genitore.
Il prezzo si calcola dal server in base a tipo e misura; dopo il pagamento l'ordine passa al laboratorio. Gli stati dell'ordine seguono una sequenza fissa che il database fa rispettare (codice nei Dettagli tecnici).
4. Anteprima 3D e laboratorio
Il laboratorio crea il modello 3D (con scansione da foto e ritocco a mano) e lo carica: il cliente lo vede ruotare nel browser e lo approva o chiede modifiche (fino a 2 revisioni incluse). Solo dopo l'approvazione si stampa.
Pannello del laboratorio: ordini per stato, foto in alta qualità, caricamento delle anteprime, numero di spedizione. Il cliente riceve un'email a ogni passaggio.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di da 59 € (10 cm) a 129 € (20 cm), calcolato dal server. Il pagamento conferma l'ordine e avvia la modellazione.
A pagamento riuscito il webhook imposta "pagato" a true nella tabella "ordini", sulla riga del ordine 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. Stati: prova a mandare un ordine in stampa senza approvazione del modello: il database deve rifiutarlo.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Stati dell'ordine in sequenza
Un trigger permette solo i passaggi di stato previsti: per esempio non si può andare in stampa senza che il cliente abbia approvato il modello.
create table ordini (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
tipo text not null check (tipo in ('persona', 'coppia', 'animale')),
misura_cm int not null check (misura_cm in (10, 15, 20)),
posa text not null,
consenso_ritratti boolean not null,
prezzo_centesimi int not null,
pagato boolean not null default false,
stato text not null default 'in_attesa'
check (stato in ('in_attesa', 'modellazione', 'da_approvare', 'approvato', 'in_stampa', 'spedito')),
revisioni int not null default 0,
check (tipo = 'animale' or consenso_ritratti)
);
alter table ordini enable row level security;
create policy "i miei ordini" on ordini for select using (auth.uid() = utente_id);
create function passaggio_valido() returns trigger language plpgsql as $
declare ammessi jsonb := '{
"in_attesa": ["modellazione"],
"modellazione": ["da_approvare"],
"da_approvare": ["approvato", "modellazione"],
"approvato": ["in_stampa"],
"in_stampa": ["spedito"]
}';
begin
if new.stato is distinct from old.stato then
if not (ammessi -> old.stato) ? new.stato then
raise exception 'Passaggio non permesso: % -> %', old.stato, new.stato;
end if;
if new.stato = 'modellazione' and old.stato = 'in_attesa' and not new.pagato then
raise exception 'Ordine non ancora pagato';
end if;
if old.stato = 'da_approvare' and new.stato = 'modellazione' then
new.revisioni := old.revisioni + 1; -- il cliente ha chiesto una modifica
end if;
end if;
return new;
end $;
create trigger ordine_in_sequenza before update on ordini
for each row execute function passaggio_valido();
insert into storage.buckets (id, name, public) values ('statuine', 'statuine', false);
create policy "la mia cartella statuine" on storage.objects for all to authenticated
using (bucket_id = 'statuine' and (storage.foldername(name))[1] = auth.uid()::text)
with check (bucket_id = 'statuine' and (storage.foldername(name))[1] = auth.uid()::text);
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.
- Macchina a stati
- Un insieme di stati con i soli passaggi permessi tra l'uno e l'altro: evita che un ordine salti dei passaggi.