new-term-radar
Daily radar for new AI terms: names of new models, products and repos, caught on X, Hugging Face, GitHub and sitemaps before keyword tools list them.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Il sito completo di Competia in Next.js (App Router, TypeScript): pagine pubbliche, accesso, workspace /app e /analytics. Segue l'albero delle pagine approvato il 9 ottobre 2026 (fase F1) e il design system ispirato a Notion.
La landing in ../landing/ resta separata: ci lavora il thread Supabase + Resend. Quando si unisce, la home di questo sito la sostituisce.
next build (48 percorsi generati) e provate in un browser (chiaro e scuro, desktop e mobile).lib/demo-data.ts. Nessuna scrittura: i bottoni che salverebbero (nuovo segnale, verifica, inviti, impostazioni) mostrano un avviso che il database non è ancora collegato./app non è protetta. Il banner giallo in cima al workspace lo dice.POST /api/access-request della landing (copiato in app/api/access-request/route.ts), con le stesse variabili SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, RESEND_API_KEY, RESEND_FROM./analytics legge Umami lato server ed è chiusa da HTTP Basic auth. Senza password impostata risponde 503.app/(sito)/contatti/page.tsx (ora [email protected])./b/[token], impostazioni Notifiche e Fatturazione.Il repository GitHub ricciandrea2004-wq/ricciiandrea è collegato al progetto Vercel competia-work: ogni push su main pubblica il sito in produzione su www.competia.work; gli altri rami creano un'anteprima.
npm install
npm run dev
Verifica: npm run typecheck e npm run build.
| Variabile | Serve a |
|---|---|
SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY | salvare le richieste di accesso |
RESEND_API_KEY, RESEND_FROM | email di conferma della richiesta e tutte le email di lib/email/ |
EMAIL_SENDING | off (predefinito: nessun invio), interno (solo agli indirizzi del team), on (a tutti) |
EMAIL_INTERNAL_TO | indirizzi del team, separati da virgola (predefinito [email protected]) |
CRON_SECRET | chiude le rotte /api/cron/*; Vercel Cron lo manda da solo |
EMAIL_EVENTS_SECRET | chiude POST /api/email/evento |
SEND_EMAIL_HOOK_SECRET | firma dell'hook "Send Email" di Supabase Auth (v1,whsec_…) |
EMAIL_SOGLIA_DA_VERIFICARE_GIORNI | giorni prima dell'avviso sui segnali fermi (predefinito 3) |
ANALYTICS_USER, ANALYTICS_PASSWORD | aprire /analytics |
UMAMI_API_URL, UMAMI_WEBSITE_ID | dati di Umami |
UMAMI_API_KEY (Umami Cloud) oppure UMAMI_API_TOKEN (self-hosted) | autenticazione verso Umami |
COMPETIA_API_TOKEN, CRON_SECRET | API /api/v1 e controllo giornaliero delle fonti |
COMPETIA_STORE, SUPABASE_SERVICE_ROLE_KEY, COMPETIA_ORGANIZATION_ID | dati dell'API su Supabase invece dei dati di esempio |
/api/v1 legge le pagine dei competitor (rispettando robots.txt), salva una copia del testo e crea un segnale quando qualcosa cambia. Vercel Cron la avvia una volta al giorno. Endpoint, esempi e cosa manca per il database vero: docs/api.md. Prova: npm run test:scraper.
app/
layout.tsx, tokens.css, globals.css radice, token del design system, stili
(sito)/ pagine pubbliche con header e footer
(accesso)/ accedi, controlla l'email, invito
app/ workspace con sidebar (segnali, fonti, competitor, briefing, impostazioni)
analytics/ dashboard interna Umami
auth/callback/ ritorno dal link di accesso (per ora solo redirect)
api/access-request/ endpoint del modulo di accesso
api/v1/ API: competitor, fonti, segnali, controllo
api/cron/scrape/ controllo giornaliero (Vercel Cron)
api/email/ invii a evento (evento) e hook di Supabase Auth (auth-hook)
api/cron/ riepilogo settimanale, segnali fermi, controllo del sito (orari in vercel.json)
not-found.tsx, error.tsx, global-error.tsx, robots.ts, sitemap.ts
components/ componenti condivisi; workspace/ per la shell del workspace
components/motion/ animazioni (motion e Lottie)
lib/
domain.ts tipi ed etichette in italiano
demo-data.ts dati di esempio del workspace
nav.ts voci di navigazione
umami.ts lettura delle statistiche
scraper/ lettura delle pagine: robots.txt, testo, confronto, segnali
store/ dati dell'API: in memoria (demo) o Supabase
supabase/migrations/ schema SQL (da applicare con l'OK di Andrea)
docs/api.md documentazione dell'API
email/ template e invio delle email (vedi "Email")
middleware.ts password su /analytics
public/lottie/ animazioni Lottie (generate da scripts/lottie/build.mjs)
public/email/ GIF e PNG delle email (generate da scripts/email/build-assets.mjs)
app/tokens.css è una copia di ../design-system/tokens.css: se cambia uno, va aggiornato l'altro.
Due librerie, usate solo nelle pagine che ne hanno bisogno (le altre non le scaricano):
components/motion/): il segnale d'esempio in home e in /prodotto/segnali (il valore "prima" si barra, il "dopo" conta fino al nuovo prezzo, lo stato passa da "Da verificare" a "Verificato"), lo stesso prima/dopo nel dettaglio di un segnale, i numeri della Panoramica, il toast e il bottone "Copia link" del workspace.components/motion/LottieAnimation.tsx): disegni che si animano una volta quando entrano in vista. Il motore Lottie si scarica solo quando il disegno sta per comparire.File in public/lottie/ | Origine | Dove |
|---|---|---|
fonte, verifica, briefing | disegnati in codice | tre passi in home e in /prodotto |
richiesta | disegnato in codice | /richiedi-accesso/grazie |
email, bussola, nessun-risultato, avviso | useAnimations (MIT) | controlla l'email, 404, filtri senza risultati, errore |
logo | disegnato in codice, lettere di Inter 700 vettorializzate | header (all'apertura della pagina) e footer (quando entra in vista) |
Animazioni che si ripetono (poche, lente, ferme quando la pagina non è visibile o con il movimento ridotto):
components/motion/StatusCycle.tsx);StatusTag live); non nello storico né nell'attività.I JSON si rigenerano con node scripts/lottie/build.mjs. I colori non sono fissati nei file: ogni livello ha una classe (c-ink, c-accent…) che app/globals.css collega ai token, così i disegni seguono il tema chiaro e scuro. Le fonti e la licenza dei file presi da useAnimations sono in scripts/lottie/useanimations/README.md.
Con prefers-reduced-motion nessun movimento: i disegni compaiono già finiti e i valori sono subito quelli finali.
Il logo animato (components/motion/AnimatedLogo.tsx) dura 1,2 secondi e parte una volta: compare il simbolo "c.", si scrivono le lettere, poi i due punti blu cadono al loro posto. Il logo statico (components/Logo.tsx) resta sotto e tiene lo spazio: è quello che si vede senza JavaScript, con il movimento ridotto e dopo una navigazione interna. Le lettere del wordmark sono i contorni di Inter 700, presi una volta con scripts/lottie/outline-wordmark.mjs e salvati in scripts/lottie/wordmark.json.
Il simbolo usa i token --logo-tile, --logo-glyph e --logo-dot: scuro nel tema chiaro, chiaro nel tema scuro. public/favicon.svg fa lo stesso con prefers-color-scheme, così resta leggibile anche nelle schede scure; deve restare un SVG pulito, senza metadati. favicon.ico, apple-touch-icon.png e app/opengraph-image.png si rigenerano con scripts/brand/render.mjs.
Tutte le email stanno in lib/email/ e usano lo stesso motore grafico del sito: lib/email/tokens.ts è generato da app/tokens.css (npm run email:tokens, oppure node scripts/email/sync-tokens.mjs --check per verificare), con Inter e la catena di font di Notion, i neutri caldi, l'accento blu e i colori dei tag con lo stesso significato del workspace. Ogni email ha la versione HTML e quella in solo testo.
| Template | Quando parte | Chi lo chiama |
|---|---|---|
richiesta-ricevuta | qualcuno chiede l'accesso | POST /api/email/evento; la rotta /api/access-request manda ancora la sua conferma in testo (è di un altro thread, si collega quando la si tocca) |
accesso-approvato | si apre un posto o un membro invita un collega | POST /api/email/evento, oppure l'hook di Supabase per gli inviti (invite) |
link-accesso | accesso con link via email, con il codice a 6 cifre | hook "Send Email" di Supabase Auth → /api/email/auth-hook |
benvenuto | primo accesso | POST /api/email/evento (da un webhook di Supabase o da /auth/callback quando l'accesso sarà collegato) |
riepilogo-settimanale | ogni lunedì alle 7:00 UTC | Vercel Cron → /api/cron/riepilogo-settimanale |
segnali-da-verificare | un segnale resta "Da verificare" oltre la soglia (una volta per segnale) | Vercel Cron ogni mattina → /api/cron/segnali-da-verificare |
sito-non-risponde | una pagina pubblica non risponde 200 | Vercel Cron ogni mattina → /api/cron/controllo-sito, solo al team |
Interruttore: niente parte finché EMAIL_SENDING non è interno o on. Con off le email vengono preparate e scritte nei log, ma non inviate. Il riepilogo e l'avviso sui segnali fermi leggono i dati da lib/email/data.ts, che oggi restituisce zero destinatari perché il workspace usa ancora dati di esempio: quando arriva lo schema del database si sostituiscono le due funzioni con le query.
I cron sono una volta al giorno al massimo perché il piano Hobby di Vercel non ne permette di più frequenti. Il controllo del sito gira su Vercel stesso: vede pagine e deploy rotti, non un'interruzione completa di Vercel.
Animazioni: le email non eseguono JavaScript e quasi nessuna animazione CSS, quindi il movimento arriva con GIF generate dagli stessi file Lottie del sito e con gli stessi token (NODE_PATH=$(npm root -g) node scripts/email/build-assets.mjs, serve Playwright e ffmpeg). Il logo si disegna una volta come nell'header, ogni email ha il suo disegno (richiesta, verifica, email, fonte, briefing, avviso) e il tag "Da verificare" ha il punto che respira come nel workspace. Outlook su Windows riceve il PNG fermo (mostrerebbe solo il primo fotogramma), così come chi ha attivo il movimento ridotto; Apple Mail e iOS Mail ricevono la versione scura con il tema scuro.
Anteprime: npm run email:anteprime (con NODE_PATH=$(npm root -g) se Playwright è installato globalmente) scrive in scripts/email/anteprime/ l'HTML, il testo e gli screenshot chiaro e scuro di ogni template, con i dati di lib/email/esempi.ts.
Per accendere:
EMAIL_SENDING=interno su Vercel: arrivano solo a [email protected] (serve che la casella esista).https://www.competia.work/api/email/auth-hook; il segreto generato va in SEND_EMAIL_HOOK_SECRET.EMAIL_EVENTS_SECRET, lo stesso nel webhook che chiama /api/email/evento.EMAIL_SENDING=on.⌘K / Ctrl K: cerca segnali, fonti, competitor e pagine.⌘\ / Ctrl \: chiude e riapre la barra laterale./app.lib/demo-data.ts.