ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
4,000년 경계 인터랙티브 지도·국가·제국 끌어 실제 크기 확인·기원전 2000년부터 현재까지 역사 탐색·특정 위치 통치자 찾기
An interactive map of 4,000 years of borders. Drag countries and empires anywhere on Earth to see their real size, step through history from 2000 BCE to today, and find out who ruled any spot on the p
교육TypeScript · JavaScriptGitHub @AnthonyTFM온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기True-size world map with a timeline from 1 BC to today. Drag countries and empires to see how big they really were.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Drag any country or empire across a world map and see its real size, travel through 4,000 years of borders (2000 BCE → today), click any land to see who ruled it in every era, and play a daily "which is bigger?" challenge with a public leaderboard.
Built with Next.js 16 (App Router), TypeScript and Tailwind CSS 4. No map tiles or API keys. Live at https://scale-shift.vercel.app.
Owners: Anthony and Evan. How we work (branches, pull requests, "ship it") is in CLAUDE.md; goals, decisions and setup status are in docs/PROJECT.md.
git clone https://github.com/AnthonyTFM/scale-shift.git
cd scale-shift
npm install
npm run dev, then open http://localhost:3000. Press Ctrl + C to stop.Before every change: git switch main && git pull. Windows notes (PowerShell, line endings) are in CLAUDE.md.
main deploys to https://scale-shift.vercel.app automatically on Vercel. Never push to main directly:
build: lint, typecheck, build, data check) and Vercel posts a preview link on the PR, so the other owner can click around before it's merged.Settings on Vercel (Project → Settings → Environment Variables; all are listed in .env.example):
NEXT_PUBLIC_SITE_URL: the live address (set).SUBMISSIONS_WEBHOOK_URL, or RESEND_API_KEY + NOTIFY_EMAIL_TO: also forward form messages. They're always kept in the Redis list fb:inbox when the Upstash settings are set (npm run leads prints them).NEXT_PUBLIC_GA4_ID: optional Google Analytics.All copy lives in src/content/, so no code knowledge is needed:
| File | What it controls |
|---|---|
site.ts | Brand name (rename the site here), tagline, menu, contact email, map panel copy |
events.ts | The 104 territorial events (taken vs. made official) |
disputes.ts | Present-day disputed territories |
presets.ts | The map's Comparisons tab (surprising and controversial) |
era-intros.ts | Intro paragraphs on era pages |
lineages.ts | Links one state's names over time (e.g. Muscovy → Russian Empire → USSR → Russia) |
data-corrections.json | Every name, ruler and shape fix to the source data (applied by npm run data, listed on /about) |
corrections.ts | Known limitations shown on /about |
Colours and fonts are design tokens at the top of src/app/globals.css.
Five "which is bigger?" questions a day, the same for everyone on the same date, changing at the player's local midnight.
scripts/build-daily.mjs builds a pool of 226 shapes (countries, large US states and 50 well-known empires). The list of empires is at the top of that script. The question rules are in src/lib/daily.ts.LAUNCH in src/lib/daily.ts. Change it to your launch date before going live.Players sign up with an email (kept private, one player per inbox) and a nickname after finishing the daily challenge. The server re-checks every answer, so scores can't be faked by editing the page, and only the first try each day counts.
data/leaderboard.json.KV_REST_API_URL and KV_REST_API_TOKEN for you.UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN in Vercel → Settings → Environment Variables.src/content/removed-players.json (hidden from every board on the next deploy). To delete it for good, open the Redis console and remove the player's ID from lb2:names, or edit data/leaderboard.json locally.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY + CLERK_SECRET_KEY set (Vercel → Marketplace → Clerk), players sign in with an email code or Google before their score posts, so only the owner of an email can play under it, with the same nickname on every device. Clerk only proves the email; players, nicknames and scores stay in our Redis (src/lib/account.ts). Without the keys the old email box is used.lb2:reminders; reminderRecipients() in src/lib/leaderboard.ts lists who agreed. Every email must include the one-click link /api/leaderboard/unsubscribe?p=<id>&t=<unsubscribeToken(id)>. Set UNSUBSCRIBE_SECRET in Vercel (any long random string) to sign those links. Sending isn't built yet: it needs a real domain and Resend.src/lib/name-filter.ts. It catches disguised spellings (n1gg3r, niqqer, f4g0t). The boards also hide any saved name that fails it, so adding a word there takes a bad name down on the next deploy.Processed map files ship in public/data/, so you don't need to do anything. To rebuild them (for example after adding a fix to src/content/data-corrections.json), run npm run data. It downloads the historical source files automatically.
public/data/LICENSE.txt) laid over it, and HistoGIS (CC BY 4.0) in Europe from 1815 to 1914. No historical-basemaps data. CC BY needs the credit kept: footer, /about and public/data/LICENSE.txt.docs/PROJECT.md).BEFORE_1800 in scripts/build-data.mjs), and on the 1783 map Rupert's Land, the Spanish viceroyalties of South America and the Guianas follow OpenHistoricalMap's. The GPL allows any use, commercial included. If we redistribute the data (and we do: the processed files in public/data/eras/ are downloaded by every visitor), those files must stay under GPL-3.0 with the credit kept, and their source must be available (it is: this public repo, the build scripts and public/data/LICENSE.txt).| Command | Does |
|---|---|
npm run dev | Start the dev server on port 3000 |
npm run build / npm start | Production build / serve |
npm run lint / npm run typecheck | Code checks |
npm run data | Rebuild the map data files and the daily challenge pool |
npm run data:stats | Rebuild only the era statistics from the era files (no downloads) |
npm run leads | Print feedback messages (from Redis if the Upstash settings are in .env.local, else data/submissions.json) |