Hoperfy
White-label hotel booking and multi-platform ticketing built for event teams. Sell more, manage less.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗"Pensierino" è un nome provvisorio: si cambia in un solo punto,
src/config/sito.ts.
Sito che sceglie il regalo al posto tuo. Descrivi il destinatario (relazione, età, occasione, budget, gusti, cosa non gli piace) e un motore AI propone 4 idee regalo concrete, con i link per cercarle su Amazon e Google Shopping nel paese di consegna.
/it, /en), lingua dedotta dal browser.Scopo, fasi, struttura del database e decisioni tecniche sono in PROGETTO.md.
Tutte le chiavi vanno nelle variabili d'ambiente (mai nel codice). L'elenco completo, con
spiegazioni, è nel file .env.example.
ANTHROPIC_API_KEY)sk-ant-). Viene mostrata una sola volta.Costo indicativo: con claude-sonnet-5-5 una generazione costa circa 2–4 centesimi di dollaro
(il costo esatto stimato di ognuna viene salvato nel database, colonna costo_stimato_usd).
DATABASE_URL)6543)
e copia la stringa, che ha questa forma:
postgresql://postgres.abcdefghijkl:[YOUR-PASSWORD]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres
[YOUR-PASSWORD] con la password del database: questa è la tua DATABASE_URL.Usa proprio il Transaction pooler: la connessione "diretta" non funziona da Vercel. Se hai dimenticato la password: Project Settings → Database → Reset database password.
Se partecipi al Programma di Affiliazione Amazon, ogni marketplace ha il suo tag (es. mionegozio-21):
impostalo nella variabile corrispondente (AMAZON_TAG_IT, AMAZON_TAG_UK, AMAZON_TAG_DE,
AMAZON_TAG_FR, AMAZON_TAG_ES, AMAZON_TAG_US). Quando un tag è presente, i link Amazon di quel
paese lo includono e sotto le idee compare l'avviso di affiliazione richiesto da Amazon.
Senza tag i link funzionano normalmente.
Verifica nelle regole del programma di ogni marketplace il testo esatto dell'avviso richiesto (i testi si cambiano in
messages/it.jsonemessages/en.json, chiaveidee.affiliazione).
supabase/fase1.sql, copia tutto il contenuto e incollalo.generazioni, idee, limiti_richieste
e la vista riepilogo_giorni.Il file si può rieseguire senza rischi: crea solo ciò che manca e non cancella dati.
Le tabelle hanno la Row Level Security attiva e nessuna regola: l'API pubblica di Supabase
non può leggerle; il sito vi accede solo dal server con la DATABASE_URL.
# 1. Scarica il progetto e installa le dipendenze
git clone <indirizzo-del-repository>
cd sito-regali
npm install
# 2. Crea il file con le chiavi e compilalo
cp .env.example .env.local
# apri .env.local e inserisci almeno ANTHROPIC_API_KEY e DATABASE_URL
# 3. Avvia
npm run dev
Apri http://localhost:3000: verrai portato su /it o /en in base alla lingua del browser.
Provare senza chiavi: in .env.local scrivi MOTORE_FINTO=1 e lascia vuota DATABASE_URL.
Il sito funziona con idee finte (c'è un avviso ben visibile) e senza salvare nulla.
Non usare mai MOTORE_FINTO=1 sul sito pubblicato.
Altri comandi utili:
| comando | a cosa serve |
|---|---|
npm test | test automatici della logica (controlli su budget e filtri, link, ecc.) |
npm run lint | controllo dello stile del codice |
npm run build | prepara la versione da pubblicare (la stessa che fa Vercel) |
npm start | avvia la versione preparata con build |
.env.example:
ANTHROPIC_API_KEY (obbligatoria)DATABASE_URL (obbligatoria: senza database il sito pubblicato non genera idee)SEGRETO_HASH_IP: una stringa lunga e casuale (consigliata)ANTHROPIC_MODEL, ANTHROPIC_EFFORT, MOTORE_PROMPT, AMAZON_TAG_…, LIMITE_…Da quel momento ogni modifica salvata su GitHub (branch principale) viene pubblicata da sola. Se cambi una variabile d'ambiente: Settings → Environment Variables, poi Deployments → Redeploy perché la modifica abbia effetto.
Una generazione dura di solito 10–30 secondi. La funzione
/api/generapuò durare fino a 300 secondi, il massimo del piano gratuito con Fluid Compute (attivo di default sui progetti nuovi).
| voglio… | dove |
|---|---|
| cambiare il nome del sito | src/config/sito.ts |
| completare la pagina privacy (titolare, email) | src/config/sito.ts; i testi in messages/*.json → privacy |
| cambiare un testo del sito | messages/it.json, messages/en.json |
| aggiungere una lingua (es. francese) | copia messages/en.json in messages/fr.json e traduci i testi. Nient'altro: il sito avrà /fr alla pubblicazione successiva. Le frasi non tradotte restano in inglese. |
| aggiungere un paese | aggiungi una voce in src/config/paesi.ts (valuta, dominio Amazon, Google) |
| cambiare colori o caratteri | src/app/globals.css (sezione @theme) |
| provare un nuovo prompt | crea prompts/motore-v2.md e imposta MOTORE_PROMPT=motore-v2 |
| cambiare modello o effort | variabili ANTHROPIC_MODEL, ANTHROPIC_EFFORT |
| cambiare i limiti di richieste | variabili LIMITE_ORA, LIMITE_GIORNO, LIMITE_GLOBALE_GIORNO |
Note:
{sito}, {valuta}, {numero}) vanno lasciate
così; evita l'apostrofo dritto subito prima di una graffa (usa ’).amico/a, natale)
sono in src/config/opzioni.ts e non vanno tradotti: si traducono solo le etichette.src/motore/schema.ts, altrimenti le risposte verranno scartate.prompt_versione).Tabelle su Supabase (dettagli in PROGETTO.md):
generazioni: ogni richiesta al motore (dati del modulo in forma anonima, risposta,
versione del prompt, modello, token, costo stimato, durata, eventuali errori e tentativi).idee: ogni idea mostrata, con 👍/👎 (voto) e click (click_amazon, click_google).riepilogo_giorni: numeri e costi per giorno, pronti da consultare.Qualche interrogazione utile (SQL Editor):
-- Gradimento per versione del prompt
select g.prompt_versione,
count(*) filter (where i.voto = 1) as pollici_su,
count(*) filter (where i.voto = -1) as pollici_giu,
sum(i.click_amazon + i.click_google) as click
from idee i join generazioni g on g.id = i.generazione_id
group by 1 order by 1;
-- Spesa API degli ultimi 7 giorni
select giorno, generazioni, costo_usd from riepilogo_giorni
where giorno > current_date - 7 order by giorno desc;
L'area del team (/valutazione), con l'importazione del CSV dei 100 scenari, arriva con la
fase 2: questa sezione verrà completata allora. Formato previsto (separatore ;):
id;relazione;eta_destinatario;occasione;budget_euro;profilo_utente;difficolta
più le colonne facoltative set, lingua e paese.
| sintomo | causa probabile |
|---|---|
| "Il servizio non è ancora configurato" | manca ANTHROPIC_API_KEY o, su Vercel, DATABASE_URL. Controlla le variabili e rifai il deploy. Nei log di Vercel (Logs) c'è il dettaglio. |
| "Hai chiesto molte idee in poco tempo" | è scattato il limite per IP (default 10 all'ora, 40 al giorno). |
| errori di connessione al database | la DATABASE_URL deve essere quella del Transaction pooler (porta 6543) con la password giusta. |
| le idee non arrivano mai | controlla credito e chiave su platform.claude.com e i log di Vercel. |
| "Modalità demo" sul sito pubblicato | è rimasta impostata MOTORE_FINTO=1: toglila. |