BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
A free daily puzzle site: more than 80 word, number and logic puzzles, crosswords, sudoku and chess, new every day. Plus 2207+ timed quizzes across films, music, geography, sports, and brands, from na
GamesJavaScript · HTMLGitHub @consensusgurusOnlineOwner 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
A free daily puzzle site: more than 80 word, number and logic puzzles, crosswords, sudoku and chess, new every day. Plus 2207+ timed quizzes across films, music, geography, sports, and brands, from name-them-all and matching to map and multiple-choice. Then browse consensus Top 10 Lists where 683 experts and aggregators agree.
Taken from the repository README
Loading the full README.
Read the full README ↗Top ten lists from every angle. Consensus, named publications, and reader votes.
Next.js 14 + Supabase. Runs on Vercel's hobby tier and Supabase's free tier.
/adminnode --version. Install from nodejs.org if needed.cd source-of-truths
npm install
source-of-truths, set a strong database password (save it), pick a region, click Create new project. Wait about 2 minutes.supabase/schema.sql from this project, copy all of it, paste into the SQL editor, click Run. You should see "Success. No rows returned."Supabase reorganized their dashboard in 2025. The keys live in a different place than older tutorials describe. Here is the current path:
Step A: Get your Project URL
Click the Connect button at the top of your project page. A dialog opens showing your project URL (looks like https://abcxyz.supabase.co). Copy it.
You can also find it under Project Settings → Data API → "Project URL".
Step B: Get your two keys
In the left sidebar click Project Settings (the gear icon), then API Keys.
You will see two tabs. What you copy depends on which tab has keys for you:
sb_publishable_...). Then copy the Secret key (starts with sb_secret_...). You may need to click "Reveal" to see the Secret key.eyJ...). The service_role needs to be revealed.Either set of keys works with this project. Newer Supabase accounts get the publishable/secret system; older ones still have the legacy keys. They behave identically for our purposes.
In .env.local:
anon key) into NEXT_PUBLIC_SUPABASE_ANON_KEY.service_role key) into SUPABASE_SERVICE_ROLE_KEY.The env var names in our code don't change — only the values you paste in.
Copy the example file:
cp .env.local.example .env.local
Open .env.local and fill in:
NEXT_PUBLIC_SUPABASE_URL=https://abcxyz.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
ADMIN_PASSWORD=some-long-random-string
Generate a strong admin password with:
openssl rand -base64 32
npm run dev
Visit http://localhost:3000. Vote on something, refresh, see that it persists.
Visit http://localhost:3000/admin to see the editor's desk. Sign in with the ADMIN_PASSWORD you set.
/submit and create a test list./admin, sign in, and you'll see your submission in the Pending tab.That's the moderation loop. Use the Unpublish button to pull a list back, or Delete to remove it entirely.
source-of-truths. Don't initialize with a README.git init
git add .
git commit -m "initial commit"
git branch -M main
git remote add origin https://github.com/YOUR-USERNAME/source-of-truths.git
git push -u origin main
source-of-truths repo.NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYADMIN_PASSWORDcgurus-20 in lib/data.js with your real tracking ID if it differs (or leave it if Amazon kept the same ID).The affiliate disclosure footer and /disclosure page already contain the required Amazon language.
The privacy, terms, and disclosure pages have placeholders you should edit before going live:
app/privacy/page.js — replace [email protected] with your real contact emailapp/terms/page.js — replace [your state or country] with your jurisdiction, and update the contact emailapp/disclosure/page.js — update the contact emailThen commit and push. Vercel rebuilds automatically.
/admin/login with your ADMIN_PASSWORDThe admin URL is noindex,nofollow so it won't appear in search engines, but pick a strong password regardless.
source-of-truths/
├── app/
│ ├── layout.js # Root layout with fonts and meta
│ ├── globals.css # Base CSS
│ ├── Grain.jsx # Shared SVG grain texture
│ ├── Footer.jsx # Shared footer with affiliate disclosure + legal links
│ ├── LegalLayout.jsx # Shared layout for legal pages
│ ├── page.js # Home (server)
│ ├── HomeClient.jsx # Home interactivity
│ ├── list/[id]/
│ │ ├── page.js # Detail page server with metadata
│ │ └── DetailClient.jsx # Detail interactivity
│ ├── submit/
│ │ ├── page.js
│ │ ├── SubmitClient.jsx
│ │ └── thanks/page.js # "Submitted, awaiting review"
│ ├── admin/
│ │ ├── page.js # Admin dashboard (server, checks cookie)
│ │ ├── AdminClient.jsx
│ │ └── login/
│ │ ├── page.js
│ │ └── LoginClient.jsx
│ ├── privacy/page.js
│ ├── terms/page.js
│ ├── disclosure/page.js
│ └── api/
│ ├── bootstrap/route.js # Returns published data
│ ├── votes/route.js
│ ├── views/route.js
│ ├── extras/route.js
│ ├── lists/route.js # Inserts as published=false
│ └── admin/
│ ├── login/route.js
│ ├── logout/route.js
│ ├── approve/route.js
│ ├── unpublish/route.js
│ └── reject/route.js
├── lib/
│ ├── data.js # LISTS, TYPES, COLORS, affiliate config
│ ├── helpers.js # buildItemLink, getSources, voteKey
│ ├── supabase.js # Anon client (used everywhere)
│ ├── supabase-server.js # Service-role client (admin only)
│ ├── admin-auth.js # Cookie validation
│ └── api.js # Browser-side fetch wrappers
├── supabase/
│ ├── schema.sql # Fresh install schema (includes moderation)
│ └── migrations/
│ └── 01_add_moderation.sql # Run only if you deployed earlier without moderation
├── package.json
├── next.config.js
├── jsconfig.json
└── .env.local.example
In lib/data.js, copy an existing entry in the LISTS array and edit:
id — short slug, no spaces ('headphones-overear')publishedDate / publishedAt — use the actual current timestamp (e.g. date -u +"%Y-%m-%dT%H:%M:%SZ"), not a rounded or guessed time. The home page sorts newest-first by publishedAt, so a timestamp earlier than an existing list will make a brand-new list appear behind it.titlecategory — short tagtype — one of: food, stores, travel, entertainment, tech, product, otherlinkType — one of: amazon, imdb, mapsCity, maps, booking, tripadvisor, steam, goodreads, wiki, searchblurb — one-line descriptionsources — at least an ai source with itemsvote.items — starting order of the vote tabFor mode: 'scores' chain lists (e.g. Cava, McDonald's, Sweetgreen), the ai source is the composite ranking and the platform sources (google, yelp) appear as chips. Rule: when only ONE platform backs the composite (Google or Yelp, not both), the composite and that platform are identical data, so the UI shows a single chip instead of two redundant ones. Provide both google and yelp only when you actually have two distinct rankings to blend.
links (optional) — map of 'Item Name': 'https://url' for per-item overridesCommit and push. Vercel rebuilds automatically.
Admin login redirects in a loop: Your ADMIN_PASSWORD env var isn't set in Vercel. Add it under Settings → Environment Variables and redeploy.
Pending submissions don't appear in admin: Confirm SUPABASE_SERVICE_ROLE_KEY is set in Vercel (no NEXT_PUBLIC_ prefix). The dashboard uses this key to read all rows including unpublished ones.
Approved lists don't appear on home: Check the bootstrap response in DevTools Network tab. If userLists is empty, the published flag isn't being filtered correctly. Confirm the schema was applied (published column exists on user_lists).
Votes don't save: Open DevTools → Network, vote on something, look for POST /api/votes. 500 = Supabase project is down or the RPC isn't installed. 400 = validation error in the response body.
"Module not found" locally: Run npm install again.