WallpaperMachine
The wallpapers you love. A new home on your Mac.
Gather around good food: RSVP to a supper, share what you’re bringing, and keep the recipes worth remembering.
LifestyleTypeScript · CSSGitHub @iznopixelOnlineOwner 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
Gather friends for potlucks and parties, then let everyone share recipes and photos.
Taken from the repository README
Loading the full README.
Read the full README ↗A small community potluck site: gatherings and their themes, the dishes guests bring, and a shared recipe box. Styled as a vintage neighborhood cookbook / hand-printed potluck poster.
Stack: React 19 + Next.js (App Router) · Tailwind v4 + shadcn (Base UI) · Phosphor Icons · Supabase (Postgres, Auth, Storage)
pnpm install
cp .env.example .env.local # publishable key only
pnpm dev
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY are required. The VITE_SUPABASE_* names from the brief are accepted too (see next.config.mjs).
Browser ──fetch──▶ Next.js /api/* route handlers ──▶ Supabase (PostgREST + Storage)
│ ▲ forwards the guest's bearer token, so RLS sees auth.uid()
└─ supabase-js: guest session only (signInAnonymously on startup)
| Route | |
|---|---|
GET /api/events, GET /api/events/[slug] | events → dishes → recipes |
GET /api/recipes?search&category&tag&contributor&event&limit | search uses search_vector |
GET /api/recipes/facets, GET /api/recipes/[slug] | |
POST /api/recipes, PATCH/DELETE /api/recipes/[id] | auth required, owner via RLS |
GET/POST /api/dishes, PATCH/DELETE /api/dishes/[id] | |
POST /api/events, PATCH/DELETE /api/events/[id] | hosts only (see below), own events via RLS |
GET/POST /api/host/me | host status (none/pending/approved); POST requests access |
POST /api/uploads | image → forklore-media/<user-id>/<file>; returns the object path |
owner_user_id and slugs are never sent; the database fills them. Only the publishable key is used.
To protect guest sign-in from bots, create a Cloudflare Turnstile widget, put its secret key in Supabase (Auth → Attack Protection → Enable Captcha, provider Turnstile) and set NEXT_PUBLIC_TURNSTILE_SITE_KEY to the site key. It stays invisible unless Cloudflare wants a challenge. If Supabase captcha is on but the site key is missing, anonymous sign-in will fail.
supabase/seed.sql adds a few example events (admin-run, bypasses RLS).supabase/hosts.sql once. Anyone can go to /host, sign in with an emailed link (Auth → Email must be enabled; add your site URL + /host to Auth → URL Configuration redirect URLs) and request host access. Requests land as pending; approve with update public.hosts set status = 'approved' where email = '...'; (list pending ones with select * from public.hosts where status = 'pending'). Approved hosts can create, edit and delete their own gatherings, including a cover photo. Guests stay anonymous and can't touch events.Layout: src/app (routes + API), src/server (Supabase helpers), src/views (page UIs), src/components/cookbook (poster, cards, ornaments), src/components/ui (shadcn).