Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Guida turistica personale: luoghi, storie e mappa, anche senza rete.
Translation pending
LifestyleTypeScript · PLpgSQLGitHub @StefanoBorghiniLatest connection check failedOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Piattaforma per guide turistiche AI territoriali: una guida che accompagna il visitatore a piedi e racconta il territorio con storytelling basato su conoscenza verificata e collegata (grafo territoriale), audio-first e offline.
Portovenere è il primo territorio e il laboratorio reale; l'engine non contiene nulla di specifico per un territorio.
| Documento | Contenuto |
|---|---|
| v0.2 · Strategia di prodotto e architettura | Documento di riferimento. Analisi dei concorrenti, differenziazione, Territorial Knowledge Graph, Verified Knowledge, storytelling componibile, Tour Context Engine, Territory Pack, multi-territorio, CMS e curatela, MVP Portovenere, roadmap, KPI, modelli di business, rischi |
| v0.1 · Architettura iniziale | Primo passaggio (superato in parte dalla v0.2): GPS, geofencing, audio, offline, privacy, API |
| v0.1 · Schema database | Schema Supabase/PostgreSQL della v0.1 (da rivedere secondo il modello dati v0.2) |
| v0.1 · Tool AI | Definizioni dei tool della guida AI |
apps/guide app Next.js: walk mode, voce, simulatore di camminata, GPS (PWA, poi Capacitor)
packages/domain identificativi, vocabolari, ontologia, schemi del Territory Pack
packages/territory-pack caricamento, validazione, CLI guide-pack
packages/context-engine posizione, geofence, movimento, pianificazione con ancora, monitor del tempo
packages/narrative-planner scelta delle unità narrative per tappa, prerequisiti, richiami, memoria del tour
packages/bundle compilazione e lettura dei bundle scaricabili (offline), CLI guide-bundle
territories/ Territory Pack (_synthetic/: territori inventati per i test;
it.liguria.sp.portovenere: primo territorio reale, in fase di ricerca)
supabase/migrations/ schema del database v0.2
Requisiti: Node 22 o superiore.
npm install
npm run ci # typecheck, test, validazione dei pack, controllo territori
npm run packs:validate # valida i Territory Pack
npm run dev # app in locale
npm run photos --workspace @guide/territory-pack -- <cartella-foto> --territories territories --pack <id>
# coordinate, quota e data dalle foto JPEG, con il luogo più vicino
npm run field --workspace @guide/territory-pack -- <rilievi.json> --territories territories
# revisione dei rilievi esportati dall'app (debug): proposte, nessuna modifica al pack
Le immagini stanno in <pack>/media/files/ e sono descritte in <pack>/media/media.yaml: soggetti, testo
alternativo, fonte (own_photo, institution, archive, web, other), autore, licenza, attribuzione,
originalUrl. Il validatore pretende l'attribuzione quando la licenza la richiede e l'indirizzo originale per le
immagini prese dal web. Nei bundle entrano solo immagini con licenza utilizzabile: mai "tutti i diritti riservati",
le non commerciali solo se il territorio lo ammette (config.media.allowNonCommercial).
Fase 0 (fondazioni) in corso:
guide-pack/api/guide/ask): risponde prima con le affermazioni verificate del bundle, le cita; risposte
con citazioni inesistenti o numeri non presenti nelle fonti vengono scartate. Richiede ANTHROPIC_API_KEY
nelle variabili d'ambiente del progetto (senza, l'app funziona ma non risponde alle domande)territories/it.liguria.sp.portovenere/README.md)Pipeline di /api/guide/ask (codice in apps/guide/lib/ask.ts, ask-web.ts, ask-server.ts):
web_search_20260318 (filtraggio dinamico dei
risultati, nessun costo aggiuntivo per l'esecuzione del codice), con un numero massimo di ricerche e i domini
esclusi. Le pagine trovate sono trattate come dati, mai come istruzioni.Le risposte con ricerca non diventano conoscenza verificata: compaiono nei log (event: "web_answer", con le fonti)
perché la redazione le valuti e, se reggono, le porti nel Territory Pack.
Variabili d'ambiente (tutte facoltative tranne la chiave):
| Variabile | Default | Effetto |
|---|---|---|
ANTHROPIC_API_KEY | — | obbligatoria per le domande (solo lato server) |
ASK_WEB_ENABLED | 1 | 0 spegne la ricerca web (resta la base locale) |
ASK_WEB_MAX_USES | 3 | ricerche massime per domanda (1–10) |
ASK_WEB_MODEL | claude-opus-5-5 | modello della risposta con ricerca (es. claude-sonnet-5-5 per spendere meno) |
ASK_WEB_EFFORT | medium | low / medium / high |
ASK_WEB_PER_IP | 6 | domande con ricerca per indirizzo ogni 10 minuti (per istanza) |
ASK_WEB_DAILY_LIMIT | 300 | domande con ricerca al giorno per istanza del server |
ASK_WEB_BLOCKED_DOMAINS | recensioni e social | domini esclusi, separati da virgole (vuoto = nessuno) |
ASK_CACHE_TTL_HOURS | 24 | durata della cache delle risposte (0 = niente cache) |
ASK_WEB_TIMEOUT_MS | 50000 | tempo massimo della risposta con ricerca |
I limiti per indirizzo e per giorno valgono per singola istanza del server: sono argini, non quote globali.
Il tetto di spesa mensile affidabile si imposta nella Console Anthropic (limite di spesa del workspace a cui
appartiene la chiave). GET /api/guide/ask dice se la ricerca è attiva e se il modello la supporta (Models API).
Prove di qualità: npm run ask:eval -w @guide/app -- --file ../../territories/<id>/ASK-EVAL.json --out rapporto.md
(chiama davvero l'API: serve la chiave e ha un costo; --dry mostra solo cosa sa la base locale). Prima di ogni
domanda tiene libera una riserva prudente e non parte se supererebbe --max-usd; --no-web per la sola base,
--web-model per scegliere il modello della ricerca, --json per salvare i risultati e confrontare due esecuzioni
con npm run ask:compare -w @guide/app -- a.json b.json --out confronto.md (nessun costo).
?debug=1): GPS, geofence, stati redazionali, rilievo delle posizioni