Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證ListinoRapido
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Il listino servizi su codice QR per estetiste, parrucchieri e professionisti. Sito statico multi-pagina (HTML + Tailwind + JS vanilla), pronto per GitHub → Vercel, con Supabase per account e dati. 1. Crea un repository su GitHub e carica la cartella (git init && git add . && git commit -m "ListinoRapido" && git push). 2. Su vercel.com → Add New → Project → importa il repository. 3. Framework preset: Other. Nessun build command, output directory: la radice. Premi Deploy.檢視完整 README ↗
Il listino servizi su codice QR per estetiste, parrucchieri e professionisti. Sito statico multi-pagina (HTML + Tailwind + JS vanilla), pronto per GitHub → Vercel, con Supabase per account e dati.
| File | Cosa contiene |
|---|---|
index.html | Landing: navbar, hero con splash e telefono scrollabile, scritte che scorrono, problema/soluzione, come funziona, esempio live (QR), prezzi, footer |
listino.html | Pagina pubblica del listino (solo il listino, a schermo intero): è ciò che apre il QR. Il link pubblico è /listino?s=nome-attivita (funziona anche /s/nome-attivita). ?demo=1 / ?demo=pro per gli esempi |
dashboard.html | Dashboard: categorie, servizi, prezzi, anteprima, QR e link, profilo (nome, WhatsApp, link), statistiche (PRO). Dati di prova senza Supabase, dati reali con Supabase |
demo-pro.html | Demo del piano Professionale: telefono scrollabile senza logo piattaforma, lingue IT/EN/FR, statistiche che reagiscono ai click |
accedi.html | Accesso / registrazione (demo oppure Supabase Auth reale) |
note-legali.html | Privacy, termini, cookie (bozza da completare) |
assets/store.js | Livello dati della dashboard: localStorage (demo) oppure Supabase |
assets/data.js | Dati di prova + funzione che disegna il listino (usata da landing, dashboard e demo) |
assets/config.js | URL e anon key di Supabase |
supabase/schema.sql | Tabelle, limite 10 servizi del Free, policy RLS, bucket immagini |
python3 -m http.server 8080 # oppure: npx serve .
# apri http://localhost:8080
git init && git add . && git commit -m "ListinoRapido" && git push).vercel.json attiva gli URL puliti (/dashboard invece di /dashboard.html) e alcuni header di sicurezza.
supabase/schema.sql.https://tuo-dominio.vercel.app/dashboard sia https://tuo-dominio.vercel.app/accedi (serve al link "Password dimenticata?").assets/config.js.
La anon key è pubblica per design: la sicurezza è garantita dalle policy RLS dello schema. Non mettere mai la service_role key nel sito.Con config.js vuoto tutto funziona in modalità demo (accesso finto, dati nel localStorage del browser).
accedi.html: registrazione e login reali con Supabase Auth.dashboard.html: al primo accesso crea la tua attività (piano Free) e salva categorie, servizi e profilo nelle tabelle.listino.html / /s/<link>: legge il listino da Supabase (lettura pubblica) e registra visite e click WhatsApp in page_views.service-images già predisposto nello schema, manca il pulsante di upload).venues.plan può essere cambiato solo dal backend (service_role, es. webhook Stripe), mai dal browser.Per provare il piano PRO prima di avere i pagamenti, esegui nel SQL Editor di Supabase:
update public.venues set plan = 'pro' where slug = 'il-tuo-link';
Il QR usa
/listino?s=<link>, che funziona ovunque (anche in locale conlistino.html?s=<link>). La scorciatoia/s/<link>usa una riscrittura di Vercel (vercel.json).
Le foto sono hotlink da Unsplash (hero, listino, esempi). Se un'immagine non si carica, la grafica ripiega su un fondo sfumato verde, senza spazi rotti.
Per un sito in produzione scarica le foto che vuoi usare, mettile in assets/img/ e cambia gli URL in index.html e assets/data.js.
note-legali.html con i dati reali (ora ci sono segnaposto).npx tailwindcss -o assets/tailwind.css --minify) e togliere lo script CDN.assets/data.js.service-images (richiede supabase/schema.sql; facoltativo: supabase/storage-limits.sql per limitare peso e formato).waitlist (supabase/waitlist.sql, già in schema.sql). Le leggi da Supabase → Table Editor → waitlist.supabase/about.sql (colonna venues.about).supabase/hours-promo.sql.I link /listino?s=<link>[&servizio=<id>] e /s/<link> passano da api/listino.js, che restituisce la pagina listino con i meta tag Open Graph:
con servizio l'anteprima mostra foto, nome e prezzo (con promo) del servizio; senza, nome e cover del listino. Usa solo la anon key pubblica
(da SUPABASE_URL/SUPABASE_ANON_KEY su Vercel, oppure da assets/config.js). WhatsApp mette in cache le anteprime: prova con un link mai condiviso prima.
locandina.html, dalla dashboard: QR code e link → Stampa locandina): locandina A4 o 4 cartellini A6 da ritagliare, tema chiaro/scuro, testi modificabili, "Stampa / Salva PDF". Il QR usa il link breve /<link>.assets/templates.js): parrucchiere, estetista, nail artist, barbiere, massaggi. Dalla dashboard: Parti da un modello. Rispetta il limite di 10 servizi del Free; prezzi e durate sono esempi.supabase/promo-scadenza.sql (colonna services.promo_until). Con la data impostata compare "Ancora N giorni"; dal giorno dopo il servizio torna al prezzo pieno da solo (listino, dashboard, messaggio di condivisione e anteprima WhatsApp).Il listino è raggiungibile su https://<dominio>/<link> (es. /auroraestetic), con ?servizio=<id> per un singolo servizio. Restano validi i vecchi /s/<link> e /listino?s=<link>.
Funziona con una rewrite in vercel.json (le pagine vere, come /dashboard, hanno la precedenza). I nomi riservati sono bloccati in dashboard e, con supabase/slug-riservati.sql, anche nel database.
/admin (file admin.html, non linkata da nessuna parte): elenco di tutti gli account (email, conferma, attività, link, piano, servizi, visite, click WhatsApp, date di registrazione e ultimo accesso), filtri, ricerca, ordinamento, export CSV e lista d'attesa PRO.
Attivazione: esegui supabase/admin.sql e aggiungi la tua email alla tabella admins (istruzione in fondo al file). L'accesso è controllato dal database: chi non è in admins riceve "forbidden".
Tre palette per la pagina pubblica del listino: Rosa cipria, Oro nero, Oceano (la base resta lo smeraldo).
supabase/temi.sql nello SQL Editor (dopo admin.sql)./listino?demo=pro&tema=rose (oppure gold, ocean).
I colori sono definiti in assets/style.css (blocco "Temi colore") e i nomi in LR.THEMES (assets/data.js): per aggiungere una palette bastano questi due punti, più il valore nel check di temi.sql.assets/consent.js mostra un popup con pulsante "Accetto" e salva data e versione nel browser (lr_consent).
Finestra bloccante su accesso e dashboard (con casella da spuntare), riquadro in basso su landing e demo. Non compare sul listino pubblico.terms_accepted_at, terms_version).VERSION in consent.js (e terms_version in accedi.html): il popup ricompare a tutti.assets/legal.js (oggi [email protected]). Se il campo resta vuoto, in note-legali.html compare un avviso.assets/consent.js (VERSION) e in accedi.html (terms_version).created_at in waitlist) è la prova.supabase/elimina-account.sql. Cancella le foto e poi, a cascata, listino, servizi, statistiche e l'email in lista d'attesa.Font Inter e Sora (assets/fonts/), supabase-js e qrcode (assets/vendor/) e il CSS Tailwind compilato (assets/tailwind.css). Dopo aver usato nuove classi Tailwind in un .html o .js:
cd tools && npm install && npm run build:css, poi commit di assets/tailwind.css. L'unico servizio esterno rimasto sono le foto di esempio di Unsplash (landing e demo).
Quando un utente crea il proprio listino, Supabase chiama api/notify-signup.js, che invia un'email tramite Resend.
RESEND_API_KEY, NOTIFY_WEBHOOK_SECRET (una stringa lunga a caso) e ADMIN_NOTIFY_EMAIL (chi riceve; più indirizzi separati da virgola). Poi Redeploy.supabase/notifica-admin.sql, sostituisci INCOLLA-QUI-IL-SEGRETO con lo stesso valore di NOTIFY_WEBHOOK_SECRET ed eseguilo nello SQL Editor di Supabase.ADMIN_NOTIFY_EMAIL su Vercel e fai Redeploy. Nessun file da toccare. Senza dominio verificato in Resend, il destinatario può essere solo l'email con cui hai creato l'account Resend; per scrivere ad altri indirizzi verifica listinorapido.it in Resend e imposta NOTIFY_FROM (es. ListinoRapido <[email protected]>).notifica-admin.sql e rieseguilo.Il sito inoltra le richieste di Supabase anche da /sb/... (regola in vercel.json, con l'indirizzo del progetto Supabase). Se una richiesta diretta fallisce, assets/store.js la ripete una volta da lì, senza limiti di CORS; per i metodi che falliscono ricorda la scelta per la sessione. Se cambi progetto Supabase, aggiorna l'indirizzo anche in vercel.json.
admin.html ha una colonna Azioni con il pulsante Elimina per ogni account (non per il tuo né per altri admin). Chiede di scrivere ELIMINA, poi cancella le foto dall'archivio e chiama la funzione admin_delete_user. Dall'account partono a cascata listino, servizi e statistiche; viene tolta anche l'iscrizione alla lista d'attesa con la stessa email.
Prima di usarla esegui una volta supabase/admin-elimina.sql nello SQL Editor di Supabase (richiede admin.sql già eseguito).
supabase/moderazione.sql. Nel pannello admin ogni account con listino ha il pulsante Sospendi / Riattiva (filtro "Sospesi" per vederli). Un listino sospeso sparisce dal sito pubblico e dall'API pubblica (anche categorie e servizi); i dati restano. Il proprietario vede un avviso rosso nella dashboard e non può riattivarlo.api/report.js (usa RESEND_API_KEY, ADMIN_NOTIFY_EMAIL, NOTIFY_FROM; nessuna variabile nuova). Difese: campo trappola, lunghezze massime, max 5 segnalazioni/ora per IP.