Mini app Farcaster a tema ristorante per servire segnali Hyperliquid come piatti: coin, lato long/short, entry, target, invalidation, punteggi e note di rischio.
npm run make:assets
npm startPoi apri http://localhost:5173.
Su Windows puoi anche avviare tutto con:
.\start_rektaurant.batNon aprire public/index.html direttamente se vuoi usarla come mini app completa: Farcaster, manifest e API funzionano correttamente via server locale. Il file diretto ora carica comunque grafica e prova a usare http://localhost:5173/api/menu, ma il server deve essere acceso.
La app usa come default:
MCC_API_BASE=https://important-bullet-sam-affiliates.trycloudflare.com
In questo ambiente Node non valida sempre la catena TLS dei tunnel Cloudflare. Il server locale quindi usa TLS permissivo di default; in produzione puoi forzare la verifica con:
$env:REKTAURANT_STRICT_TLS="true"In produzione l'URL MCC va configurato dal backend di Vercel, non dai browser degli utenti:
MCC_API_BASE=https://il-tuo-tunnel.trycloudflare.com
Quando cambi tunnel perche il Rektaurant fisico era spento, aggiorna MCC_API_BASE nelle variabili ambiente del progetto Vercel e redeploya. La mini app leggerà /api/config dal backend e usera quel valore.
Il deploy Vercel usa api/[...path].js come funzione serverless e vercel.json per servire dinamicamente la homepage e /.well-known/farcaster.json, cosi i meta tag Farcaster e la config backend usano sempre il dominio reale.
Modo rapido da questo progetto:
.\scripts\update-vercel-api-url.ps1 https://nuovo-tunnel.trycloudflare.comLo script aggiorna MCC_API_BASE in produzione e fa subito redeploy.
Da CMD o doppio click puoi usare anche:
update_rektaurant_api_url.batTi chiedera di incollare la nuova URL, per esempio https://waiver-heath-merely-plane.trycloudflare.com/.
Su Vercel l'override da UI e spento di default. Se vuoi riabilitarlo volutamente:
REKTAURANT_ALLOW_CLIENT_API_OVERRIDE=true
In locale, invece, l'override da UI resta acceso per comodita:
il valore viene salvato nel browser con localStorage, quindi quando riapri la mini app usa l'ultimo tunnel inserito.
Prima della tip viene fatto un health check su /api/health della MCC API. Se non risponde, la app non mostra il pagamento: appare il cartello Rektaurant is closed. In produzione il cartello usa il valore Vercel di MCC_API_BASE; in locale puoi incollare un tunnel nuovo dalla UI.
Puoi cambiarlo cosi:
$env:MCC_API_BASE="https://important-bullet-sam-affiliates.trycloudflare.com"
npm startRektaurant include:
- meta tag
fc:miniappefc:frame - manifest dinamico su
/.well-known/farcaster.json - chiamata
sdk.actions.ready() - azioni
sendToken,composeCasteaddMiniAppquando aperta dentro Farcaster - tip gate: 0.50/1/3 USDC su Base verso
pappardelle.eth, poi sessione locale di 10 minuti - wallet gate: bottone
Connect walletpiu tip USDC su Base, con fallback al wallet nativo Farcaster mobile - notifiche Farcaster tramite
webhookUrl, token salvati su Redis/KV e script per inviareopen,closed,closing,happy-hour - proxy same-origin
/api/menu, cosi il client non dipende da CORS esterni
Il manifest espone:
https://rektaurant.vercel.app/api/webhook
Per notifiche persistenti in produzione collega un database Redis/KV al progetto Vercel e imposta queste env:
UPSTASH_REDIS_REST_URL=...
UPSTASH_REDIS_REST_TOKEN=...
REKTAURANT_NOTIFY_SECRET=...
Se hai usato il prefisso UPSTASH_REDIS nel Marketplace Vercel, vanno bene anche le env create come UPSTASH_REDIS_KV_REST_API_URL e UPSTASH_REDIS_KV_REST_API_TOKEN.
Poi gli utenti devono salvare la mini app in Farcaster: il webhook ricevera i token. Per inviare una notifica:
.\scripts\send-rektaurant-notification.ps1 open
.\scripts\send-rektaurant-notification.ps1 closed
.\scripts\send-rektaurant-notification.ps1 closing
.\scripts\send-rektaurant-notification.ps1 happy-hourPer vedere esempi casuali senza inviarli:
.\scripts\send-rektaurant-notification.ps1 previewDa CMD/doppio click puoi usare:
send_rektaurant_notification.batPer pubblicarla, deploya su un dominio stabile HTTPS e genera l'accountAssociation dal Farcaster Developer Tool per quel dominio esatto. Poi passa l'oggetto firmato come variabile:
$env:REKTAURANT_ACCOUNT_ASSOCIATION='{"header":"...","payload":"...","signature":"..."}'Nota: Rektaurant e MCC sono read-only. Non inviano ordini, firme, approvazioni o transazioni.
La tip usa REKTAURANT_TIP_ADDRESS se vuoi sovrascrivere il destinatario; il default e pappardelle.eth risolto come 0x5D69C42A3a481d0CCFd88CFA8a2a08e2BF456134. In produzione conviene verificare server-side le transazioni se vuoi un paywall non aggirabile da devtools.