← Tutte le idee Marketing e social

Hacker News Trends

Google Trends, ma per i commenti di una comunità online

Cosa fa

Ha indicizzato 18 anni di commenti di Hacker News per mostrare quanto si parla di un argomento nel tempo, come Google Trends.

Come guadagna

Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: report a pagamento per aziende che vogliono sapere cosa pensa la comunità del loro prodotto.

Rendilo tuo

  • Le tendenze di un forum o subreddit italiano di settore.
  • Report mensile venduto alle aziende di quel settore.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Di Cosa si Parla": mostra quanto si parla di un argomento nel tempo in una grande comunità online (si parte da Hacker News, che ha un archivio pubblico), con grafici anno per anno e confronti tra parole, come Google Trends. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con il campo di ricerca e confronti famosi (es. "React contro Vue")
2. Grafico dell'andamento anno per anno, fino a 4 parole a confronto
3. Discussioni più votate per ogni anno, con link all'originale
4. Tendenze del mese: parole in crescita
5. Pagina Pro con avvisi

Stile: da analisi dati: sfondo bianco, arancione #FF6600 come accento, un colore diverso per ogni parola, carattere "Inter", grafico grande e pulito. 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:
- "cache": risultati delle ricerche già fatte (parola, anno, numero di menzioni), per non ripetere le chiamate
- "avvisi": parole seguite dall'utente Pro, con la soglia

Regole di sicurezza obbligatorie:
- la cache è pubblica in lettura e la scrive solo la Edge Function
- ogni utente vede solo i suoi avvisi

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. Conteggio anno per anno

Hacker News ha un'API di ricerca pubblica (Algolia) che dice quanti commenti e post contengono una parola in un intervallo di date. Per ogni anno dal 2007 a oggi la Edge Function chiede il numero di risultati (codice nei Dettagli tecnici) e lo divide per il totale dei commenti di quell'anno: così si confrontano anni con più o meno attività.

I risultati si salvano nella cache: la seconda volta la ricerca è istantanea, e si rispettano i limiti dell'API. Il grafico confronta fino a 4 parole, con valori assoluti o in percentuale.

Per ogni anno, le 5 discussioni più votate con quella parola, con il link alla pagina originale.

4. Tendenze e avvisi

Tendenze del mese: parole che crescono di più rispetto alla media degli ultimi 12 mesi, calcolate su un elenco di tecnologie e temi curato dalla redazione.

Pro: avvisi via email quando una parola seguita supera una soglia, esportazione dei dati in CSV, e confronti fino a 10 parole.

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 9 € una volta sola. Il pagamento sblocca avvisi, esportazione CSV e confronti fino a 10 parole.

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. Limiti: cerca 20 parole di seguito e controlla che le chiamate all'API siano distanziate e che le parole già cercate vengano dalla cache.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Menzioni di una parola anno per anno

Chiede all'API di ricerca di Hacker News quanti commenti contengono la parola in ogni anno, usando il campo nbHits (numero di risultati) senza scaricarli.

const API = "https://hn.algolia.com/api/v1/search_by_date";

async function conta(parola: string | null, dal: number, al: number): Promise<number> {
  const parametri = new URLSearchParams({
    tags: "comment",
    hitsPerPage: "0",                                      // solo il conteggio
    numericFilters: "created_at_i>=" + dal + ",created_at_i<" + al,
  });
  if (parola) parametri.set("query", '"' + parola + '"');  // frase esatta
  const r = await fetch(API + "?" + parametri);
  return (await r.json()).nbHits as number;
}

export async function andamento(parola: string) {
  const anni = [];
  for (let anno = 2007; anno <= new Date().getFullYear(); anno++) {
    const dal = Date.UTC(anno, 0, 1) / 1000, al = Date.UTC(anno + 1, 0, 1) / 1000;
    const [menzioni, totale] = await Promise.all([conta(parola, dal, al), conta(null, dal, al)]);
    anni.push({ anno, menzioni, perMille: totale ? (menzioni / totale) * 1000 : 0 });
    await new Promise((ok) => setTimeout(ok, 250));         // gentili con l'API
  }
  return anni;
}

Cache delle ricerche

I risultati già calcolati restano in una tabella: le ricerche ripetute non chiamano più l'API, tranne l'anno in corso che si aggiorna ogni giorno.

create table cache (
  parola text not null,
  anno int not null,
  menzioni int not null,
  per_mille numeric not null,
  aggiornato_il timestamptz not null default now(),
  primary key (parola, anno)
);
alter table cache enable row level security;
create policy "lettura pubblica" on cache for select using (true);

-- Cosa manca o va aggiornato per una parola
select anno from generate_series(2007, extract(year from now())::int) as anno
where not exists (
  select 1 from cache c where c.parola = 'rust' and c.anno = anno
    and (anno < extract(year from now()) or c.aggiornato_il > now() - interval '1 day'));

Pezzi comuni a tutti i progetti

Glossario

CSV
Un file di testo con i dati separati da virgole, che si apre con Excel.
Cache
Una copia dei risultati già calcolati, per rispondere subito senza rifare il lavoro.