← Tutte le idee Strumenti online

Changelogfy

Raccogli le richieste dei clienti e mostra le novità del tuo prodotto

Incasso mensile: 3900 USD (fonte indicata nella scheda)

Cosa fa

Per chi ha un software: raccoglie i suggerimenti degli utenti, permette di votarli e pubblica l'elenco delle novità rilasciate.

Come guadagna

Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.

Rendilo tuo

  • Per negozi e ristoranti, non solo software: "cosa vorreste nel menù?".
  • Riquadro da inserire nel sito con un solo copia-incolla.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Bacheca Idee": per chi ha un software o un servizio online: una bacheca pubblica dove i clienti propongono e votano le funzioni che vorrebbero, e una pagina delle novità rilasciate. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con un esempio di bacheca e prezzi
2. Registrazione e creazione della bacheca del proprio prodotto
3. Bacheca pubblica /b/:slug con le proposte ordinate per voti
4. Pagina delle novità /b/:slug/novita
5. Pannello del proprietario: proposte, stati, novità

Stile: pulito e collaborativo: sfondo bianco, indaco #4F46E5, giallo #FACC15 per i voti, carattere "Inter", card delle proposte con il contatore dei voti grande a sinistra. 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:
- "bacheche": nome del prodotto, slug, logo, collegate al proprietario
- "proposte": titolo, descrizione, stato (nuova, pianificata, in lavorazione, fatta), collegate alla bacheca e a chi l'ha scritta
- "voti": un voto per utente per proposta
- "novita": titolo, testo, data, proposte collegate

Regole di sicurezza obbligatorie:
- bacheche, proposte e novità sono pubbliche
- per proporre e votare serve un account (anche con link via email)
- ogni utente vota una sola volta per proposta
- solo il proprietario cambia lo stato delle proposte e scrive le novità

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. Proposte e voti

Crea la bacheca pubblica: proposte ordinate per voti (o per più recenti), filtro per stato, e ricerca. Mentre si scrive una nuova proposta, mostra quelle simili già esistenti ("Forse cercavi...") per evitare doppioni.

Il voto è un pulsante con il contatore: un clic vota, un altro toglie il voto. Il database impedisce i voti doppi (codice nei Dettagli tecnici). Per votare basta un accesso con link via email, senza password.

Quando lo stato di una proposta cambia, tutti quelli che l'hanno votata ricevono un'email ("La funzione che hai votato è in lavorazione").

4. Novità e widget

Il proprietario scrive le novità (titolo, testo, immagine) e le collega alle proposte realizzate, che passano a "fatta". La pagina novità è pubblica e ha un feed RSS.

Crea un widget da incollare nel proprio software: un pulsante "Novità" con il pallino rosso se ci sono annunci non letti, che apre l'elenco in un pannello laterale.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 19 € al mese. Gratis l'utente ha: una bacheca, 50 proposte e il marchio "Fatto con Bacheca Idee". Con il piano Pro sblocca: proposte illimitate, dominio personale, widget delle novità ed email ai votanti.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

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. Voti: prova a votare due volte la stessa proposta, anche con due schede aperte: il conteggio deve aumentare di uno solo.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Proposte e voti senza doppioni

La chiave primaria su (proposta, utente) rende impossibile votare due volte. Il conteggio si legge da una vista.

create table bacheche (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  slug text not null unique,
  nome text not null
);

create table proposte (
  id uuid primary key default gen_random_uuid(),
  bacheca_id uuid not null references bacheche(id) on delete cascade,
  autore_id uuid not null references auth.users(id) on delete cascade,
  titolo text not null check (length(titolo) between 5 and 120),
  descrizione text not null default '',
  stato text not null default 'nuova'
    check (stato in ('nuova', 'pianificata', 'in_lavorazione', 'fatta')),
  creato_il timestamptz not null default now()
);

create table voti (
  proposta_id uuid not null references proposte(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  primary key (proposta_id, utente_id)    -- un voto a testa
);

alter table bacheche enable row level security;
alter table proposte enable row level security;
alter table voti enable row level security;

create policy "bacheche pubbliche" on bacheche for select using (true);
create policy "la mia bacheca" on bacheche for all
  using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

create policy "proposte pubbliche" on proposte for select using (true);
create policy "propongo" on proposte for insert to authenticated
  with check (auth.uid() = autore_id and stato = 'nuova');
create policy "il proprietario cambia lo stato" on proposte for update using (exists (
  select 1 from bacheche b where b.id = bacheca_id and b.utente_id = auth.uid()));

create policy "voti pubblici" on voti for select using (true);
create policy "voto io" on voti for insert to authenticated with check (auth.uid() = utente_id);
create policy "tolgo il mio voto" on voti for delete using (auth.uid() = utente_id);

create view proposte_con_voti with (security_invoker = true) as
  select p.*, count(v.utente_id) as voti
  from proposte p left join voti v on v.proposta_id = p.id
  group by p.id;

Pezzi comuni a tutti i progetti

Glossario

Slug
La parte finale e leggibile dell'indirizzo di una pagina, es. /pizzeria-da-mario.
Magic link
Un accesso senza password: arriva un link via email e cliccandolo si entra.
RSS
Un formato che permette di seguire le novità di un sito con un'app di lettura, senza visitarlo.