Check Position
Controlla ogni giorno a che posto è il tuo sito su Google
Incasso mensile: 1700 USD (fonte indicata nella scheda)
Cosa fa
Monitora la posizione di un sito su Google per le parole chiave scelte e mostra come cambia.
Come guadagna
Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.
Rendilo tuo
- Per attività locali: la posizione nella propria città, anche su Google Maps.
- Email settimanale semplice: sei salito o sceso.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Posizione Google": controlla ogni giorno a che posizione compare un sito su Google per le parole chiave scelte, e avvisa quando sale o scende. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con un grafico di esempio e prezzi
2. Registrazione e accesso
3. I miei siti e le parole chiave, con città e dispositivo
4. Andamento di una parola chiave con il grafico
5. Report settimanale
Stile: analitico e ordinato: sfondo bianco, blu #1A73E8, verde #188038 per le salite, rosso #D93025 per le discese, carattere "Inter", tabelle con frecce colorate. 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:
- "siti": dominio, collegati all'utente
- "parole": parola chiave, paese, città, dispositivo, collegate al sito
- "posizioni": posizione trovata (o non trovata nei primi 100), pagina del sito che compare, data
Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi siti, parole e posizioni
- le posizioni le scrive solo la Edge Function
- il piano non si modifica dal browser
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. Controllo quotidiano
L'utente aggiunge il dominio e le parole chiave (anche incollandone molte insieme, una per riga), con paese, città facoltativa e dispositivo (computer o telefono).
Ogni notte una Edge Function chiede le posizioni a un fornitore di dati dei risultati di ricerca con API ufficiali, rispettandone le condizioni, e salva per ogni parola la posizione del dominio e la pagina che compare. Non si controlla Google direttamente.
La tabella principale mostra per ogni parola: posizione di oggi, variazione rispetto a ieri e a 7 giorni fa (con frecce), pagina che compare e un piccolo grafico degli ultimi 30 giorni (query nei Dettagli tecnici).
4. Avvisi e report
Email il mattino dopo solo se ci sono cambiamenti di almeno 3 posizioni, o se una parola entra o esce dalla prima pagina. Report settimanale in PDF con le parole migliorate e peggiorate e la posizione media.
Gruppi di parole chiave con etichette (es. "servizi", "città") e posizione media per gruppo.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 12 € al mese. Gratis l'utente ha: un sito e 10 parole chiave controllate una volta alla settimana. Con il piano Pro sblocca: fino a 5 siti, 300 parole chiave controllate ogni giorno, avvisi e report.
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. Costi: calcola quante richieste al fornitore fa ogni notte il piano più grande e verifica che il prezzo dell'abbonamento le copra con margine.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Tabelle e variazione di posizione
Le posizioni giorno per giorno e la query che calcola la variazione rispetto a ieri e a 7 giorni fa.
create table siti (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
dominio text not null
);
create table parole (
id uuid primary key default gen_random_uuid(),
sito_id uuid not null references siti(id) on delete cascade,
utente_id uuid not null references auth.users(id) on delete cascade,
parola text not null,
paese text not null default 'it',
citta text,
dispositivo text not null default 'telefono' check (dispositivo in ('computer', 'telefono'))
);
create table posizioni (
parola_id uuid not null references parole(id) on delete cascade,
utente_id uuid not null references auth.users(id) on delete cascade,
giorno date not null default current_date,
posizione int, -- null = non nei primi 100
pagina text,
primary key (parola_id, giorno)
);
alter table siti enable row level security;
create policy "le mie righe" on siti
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table parole enable row level security;
create policy "le mie righe" on parole
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table posizioni enable row level security;
create policy "leggo le mie posizioni" on posizioni for select using (auth.uid() = utente_id);
-- Oggi, ieri e 7 giorni fa per ogni parola (lag = valore della riga precedente)
select parola, giorno, posizione,
lag(posizione, 1) over w - posizione as rispetto_a_ieri,
lag(posizione, 7) over w - posizione as rispetto_a_7_giorni
from posizioni po
join parole pa on pa.id = po.parola_id
where pa.sito_id = 'ID-SITO'
window w as (partition by po.parola_id order by giorno)
order by giorno desc, posizione;
Pezzi comuni a tutti i progetti
Glossario
- Cron
- Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
- Parola chiave
- Le parole che le persone scrivono su Google per cercare qualcosa, es. "idraulico Bergamo".