ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Interval — spaced reps for coding interviews. A free spaced-repetition trainer for the Blind 75 / NeetCode 150 / 250.
翻译准备中
正在加载完整 README。
查看完整 README ↗Spaced reps for coding interviews — a local-first spaced-repetition trainer for the Pareto 49, Blind 75, NeetCode 150, and NeetCode 250, built on spacing-effect and retrieval-practice research.
Use it here → intervalreps.vercel.app
No account or install required. Your log starts in your browser; optional sync works with a pairing link alone, while Google sign-in makes that link recoverable.
Grinding the list front-to-back optimizes for finishing, not retaining. This app schedules each problem back into your queue right around when you'd otherwise forget it, so every rep is a real retrieval attempt instead of a warm re-read.
The Method tab in the app explains the research behind each rule.
The entire app is one static index.html — no framework, build step, or bundled client dependencies. State lives in localStorage. The page contains list metadata (names, categories, difficulty, and links) plus your own attempt log, Recall cards, and kata schedule; it never stores problem statements or solutions.
Cross-device sync is entirely optional. You can turn it on with a secret pairing link and no account, or sign in with Google. Both routes use the same random 128-bit sync key; Google only associates your account with that key so you can recover the log on a new device or after clearing browser storage. It is not a separate account-based data path.
The server (Convex, in backend/) stores the merged state under that key. Attempts have stable IDs, deletions stick via tombstones, and the newest deck edit wins, making merges commutative and idempotent. Devices can log offline and converge on the next successful round-trip. Anyone with a pairing link can access its log, so treat it like a password; if it leaks, rotate it in the sync panel to carry the state to a new key and revoke the old one.
Recall exercises run locally in the browser where supported, and recap text and images are generated locally without an upload.
The checked-in catalog is generated at maintenance time, never fetched by the app:
node scripts/update-neetcode-data.mjs
node scripts/update-neetcode-data.mjs --emit
The script reads NeetCode's current public bundle, preserves IDs 1–150 by LeetCode slug,
and validates list nesting, category and difficulty totals, slugs, IDs, order, and all
required fields before it emits the PROBLEMS declaration. The Pareto 49 is not part of
that nesting: TIER_INFO[49].ids lists its problem IDs (all within 1–150) in the order
the original PDF gives them.
The problem lists are curated by NeetCode / Navdeep Singh. NeetCode's videos, courses, and Pro membership support the original work. The Pareto 49 is Aman Manazir's Pareto Problem Set, a shorter ordered subset of the NeetCode 150. The seeded Katas follow ThePrimeagen's algorithms course and are inspired by the kata-machine workflow. Interval schedules the forms; the public kata-typescript harness runs them in a real editor and test runner. This repository does not bundle kata-machine code or tests.
Not affiliated with NeetCode or LeetCode.
Use Node 24. From a fresh checkout:
npm ci
npm run setup
npm run doctor
npm run dev
The server prints its URL and uses an available localhost port. Stop it with
Ctrl-C. It reloads index.html on each request, disables sync/Google by default,
and never changes the production configuration on disk. Use PORT=8000 npm run dev
for a stable browser-storage origin, or give each worktree its own port.
npm run verify # merge + rotation + TypeScript + browser checks
npm run test:e2e # desktop/mobile Chromium smoke tests
npm run test:report # inspect results; failures retain traces/screenshots
npm run worktree -- feature/my-change ../interval-my-change
Worktree creation starts from committed HEAD and installs dependencies; uncommitted
changes are not copied. Run npm run dev inside the new directory. Stop its server
before removing it with git worktree remove ../interval-my-change.
On a minimal Linux host, browser setup may also require
npx playwright install --with-deps chromium. CI runs the same verification gate
and retains browser reports for seven days.
For optional backend QA, set INTERVAL_SYNC_URL to your disposable deployment's
full /sync URL. INTERVAL_GOOGLE_CLIENT_ID enables real Google recovery; its
origin must also be configured in Google and the backend. The default smoke suite
uses an intercepted sync transport, so it does not establish real Convex or OAuth
correctness. See AGENTS.md for isolation, debugging, and coverage limits.
The static page works from any file host — or just open index.html locally. To self-host sync:
cd backend
npm install
npx convex dev # creates your own Convex deployment
Then point SYNC_URL in index.html at your deployment's .convex.site URL.
Pairing-link sync needs no account or OAuth setup. To offer optional Google recovery,
replace GOOGLE_CLIENT_ID in index.html, set the matching GOOGLE_CLIENT_ID in your
Convex environment, and add your site origin to RECOVER_ORIGINS in
backend/convex/http.ts.
After the development setup above, run the merge and key-rotation checks from the repository root:
node scripts/check-state-merge.mjs
node scripts/check-key-rotation.mjs
Interval is free, and staying that way. Sync runs on a small hosted backend; if the app is earning its keep, you can buy me a coffee ☕