job-ops
Cercare lavoro con metodo: una pipeline per tracciare e analizzare le candidature
Cosa fa
Un sistema da installare sul proprio server per tracciare, analizzare e farsi aiutare nelle candidature di lavoro, con lo stesso metodo che si usa per gestire i progetti.
Come guadagna
Progetto open source su GitHub con oltre 4.000 stelle, che non dichiara incassi. Ha licenza non chiara: prendi spunto dall'idea, ma non riusare il codice senza chiedere agli autori. Idee nostre per guadagnare: versione online in abbonamento per chi cerca lavoro.
Rendilo tuo
- Statistiche che motivano: quante candidature servono per un colloquio nel tuo settore.
- Per i centri per l'impiego e le scuole di formazione.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Ricerca come un Progetto": tratta la ricerca di lavoro come un progetto di vendita: candidature come trattative, fonti tracciate, tassi di conversione a ogni fase, e numeri chiari su cosa funziona. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con il metodo e il prezzo
2. Pipeline: candidature a colonne per fase
3. Fonti: da dove arrivano le opportunità (portali, contatti, candidature spontanee)
4. Numeri: tassi di conversione per fase e per fonte
5. Attività della settimana: obiettivi e promemoria
Stile: da cruscotto di vendita: sfondo bianco, indaco #4338CA, verde #16A34A, grigio per le chiuse, carattere "Inter", grafico a imbuto in evidenza. 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:
- "candidature": azienda, ruolo, fonte, fase attuale, retribuzione indicata, note
- "passaggi": ogni cambio di fase con data, per calcolare tempi e conversioni
- "obiettivi": candidature e contatti da fare a settimana
Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi dati
- 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. L'imbuto delle candidature
Ogni candidatura passa per le fasi: inviata → risposta → primo colloquio → secondo colloquio → offerta → accettata (oppure "chiusa" in qualsiasi momento, con il motivo). Ogni passaggio si registra con la data.
Dai passaggi si calcola l'imbuto (codice nei Dettagli tecnici): su 100 candidature, quante hanno risposta, quante arrivano al colloquio, quante a un'offerta; e lo stesso per ogni fonte. Così si vede, per esempio, che le candidature tramite contatti personali hanno il 30% di colloqui e quelle dai portali il 4%.
Tempo medio tra una fase e l'altra, per sapere quando sollecitare.
4. Obiettivi della settimana
L'utente si dà obiettivi settimanali di attività (candidature mirate, messaggi a contatti, eventi): il sito mostra l'avanzamento e un riepilogo il venerdì.
Esportazione dei dati in CSV e promemoria per i solleciti dopo 7 giorni senza risposta.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 5 € al mese. Gratis l'utente ha: 20 candidature e niente statistiche per fonte. Con il piano Pro sblocca: candidature illimitate, imbuto per fonte, tempi tra le fasi, obiettivi e promemoria.
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. Numeri: inserisci 10 candidature di prova con fasi diverse e controlla a mano le percentuali dell'imbuto.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Imbuto per fonte
Per ogni fonte conta quante candidature hanno raggiunto ogni fase almeno una volta, e calcola la percentuale rispetto alle inviate.
create table candidature (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
azienda text not null,
ruolo text not null,
fonte text not null, -- es. 'portale', 'contatto', 'spontanea', 'recruiter'
fase text not null default 'inviata'
);
create table passaggi (
candidatura_id uuid not null references candidature(id) on delete cascade,
utente_id uuid not null references auth.users(id) on delete cascade,
fase text not null check (fase in ('inviata', 'risposta', 'colloquio_1', 'colloquio_2', 'offerta', 'accettata', 'chiusa')),
data timestamptz not null default now(),
primary key (candidatura_id, fase)
);
alter table candidature enable row level security;
create policy "le mie righe" on candidature
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table passaggi enable row level security;
create policy "le mie righe" on passaggi
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
select c.fonte,
count(distinct c.id) as inviate,
round(100.0 * count(distinct p.candidatura_id) filter (where p.fase = 'risposta') / count(distinct c.id), 1) as perc_risposta,
round(100.0 * count(distinct p.candidatura_id) filter (where p.fase = 'colloquio_1') / count(distinct c.id), 1) as perc_colloquio,
round(100.0 * count(distinct p.candidatura_id) filter (where p.fase = 'offerta') / count(distinct c.id), 1) as perc_offerta
from candidature c left join passaggi p on p.candidatura_id = c.id
where c.utente_id = auth.uid()
group by c.fonte
order by perc_colloquio desc;
Pezzi comuni a tutti i progetti
Glossario
- CSV
- Un file di testo con i dati separati da virgole, che si apre con Excel.
- Imbuto (funnel)
- Lo schema delle fasi da attraversare: a ogni fase qualcuno si ferma, e si misura quanti passano.
- Tasso di conversione
- La percentuale di candidature che passa da una fase alla successiva.