ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An Aotearoa nature quest that teaches maths to children aged 5 to 8, built as a native macOS app that also runs in any browser. The content covers all six strands of the New Zealand Curriculum (Te Mātaiaho: Mathematics and Statistics) for Years 1 to 4: Number, Algebra, Measurement, Geometry, Statistics and Probability.README 전문 보기 ↗
An Aotearoa nature quest that teaches maths to children aged 5 to 8, built as a native macOS app that also runs in any browser. The content covers all six strands of the New Zealand Curriculum (Te Mātaiaho: Mathematics and Statistics) for Years 1 to 4: Number, Algebra, Measurement, Geometry, Statistics and Probability.
Explorers travel through four regions, one per year level: Golden Beach (Te Tāhuna), Kauri Forest (Te Wao Nui), the Southern Alps (Kā Tiritiri o te Moana) and the Starry Skies (Te Rangi Whetū). Each region has ten trails (topics) with Bronze, Silver and Gold rounds that get progressively harder, and ends with a creature rescue: a mixed challenge that frees a native animal (kororā, kiwi, kea, kākāpō) and opens the next region. Correct answers earn feathers to spend in the backpack on hats, gear and trail buddies.
localStorage in the browser).Everything below lives behind the parent PIN, in Parents & teachers → Settings, and applies to the explorer selected at the top of the dashboard.
The app is a Tauri 2 shell around a TypeScript web UI.
Prerequisites on the Mac:
xcode-select --installcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shThen:
npm install
npm run app:dev # run the app with live reload
npm run app:build # produce Nature Maths.app and a .dmg
Bundles are written to src-tauri/target/release/bundle/macos/ and src-tauri/target/release/bundle/dmg/.
The GitHub Actions workflow in .github/workflows/build.yml also builds a universal (Apple Silicon and Intel) .dmg on every push and attaches it to the run as an artifact, so you can download a build without setting up the toolchain. The app is unsigned, so the first launch needs a right-click, Open.
npm install
npm run dev # http://localhost:1420
.github/workflows/deploy-pages.yml publishes the browser version to GitHub Pages on every push to main. Enable Pages with Source set to GitHub Actions in the repository settings if it is not already.
By default progress stays on the device. Optional cloud sync lets a family continue on any device or browser. It uses a free Supabase project that you own, so the data is yours.
Two ways to link devices, chosen in the parent area under Cloud:
kiwi-fern-river-mist-123456; enter it on another device to link them. Anyone with the code can see and change the progress, and a lost code cannot be recovered, so treat it like a password.Sync is offline-first. Saves stay local and are merged with the cloud copy on start-up, after each round, and when you press Sync now. Stars, best scores, feathers and gear are combined so nothing earned is lost when two devices disagree; other settings take the newer copy.
One device, more than one family: the device remembers which account or family code its explorers belong to. Sign out uploads the latest progress, then removes the explorer profiles and the parent PIN from the device, so the next parent to sign in on a shared or handed-on device sees only their own children. Signing in again brings everything back from the account. If that last upload fails the explorers stay put rather than risk losing unsaved progress, and the device still refuses to merge them into a different account. Unlink this device (family codes) always leaves the explorers on the device, because a lost family code cannot be recovered.
supabase/schema.sql. This creates the tables, row-level security and the two family-code functions..env file as VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY. Every build (local, GitHub Pages and the macOS app) reads them from there. To point a CI build at a different project without editing the file, set repository Variables named SUPABASE_URL and SUPABASE_ANON_KEY, which take precedence..env.example to .env.local; that file is ignored by git.The publishable (anon) key is safe to commit: it is embedded in the browser build anyway, and row-level security decides what it can read. Never commit the service-role key. Builds without any values still work; the Cloud tab just explains that sync is not set up.
What is stored in the cloud: each explorer's first name, age, avatar, settings and progress, plus the parent PIN so it applies on every device. Nothing else.
Every screen has a small Report a problem button in the bottom corner. It opens a dialog where a parent types what went wrong; the app attaches the context a bug needs and sends it off. Before sending, Show what is sent with this report displays the exact text that will be filed.
Attached automatically: the screen the problem happened on and the last few screens before it, the explorer's age and whether unlock-everything is on, how many explorers are on the device, the app version and build, the cloud sync mode and last sync error, the browser, screen size, language and time zone, and any errors the app caught (message, file, line and stack).
Never attached: explorer names, parent emails, family codes, the parent PIN, or anybody's progress. src/app/diagnostics.ts builds the payload field by field, and tests/report.test.ts fails if any of those leak into a report.
Where reports go:
reports table using the public anon key. Row-level security allows inserts and nothing else, so a report can never be used to read other reports..github/workflows/bug-reports.yml runs hourly, reads new rows with the service-role key and opens one issue per report, labelled bug and from-app, then marks the row filed so it is never opened twice. It files at most 10 per run, and parks a row that GitHub rejects rather than letting it block the queue.To turn on step 2, add one repository Secret under Settings → Secrets and variables → Actions → Secrets:
| Secret | Where to find it |
|---|---|
SUPABASE_SERVICE_ROLE_KEY | Project Settings → API → service_role. It bypasses row-level security, so it belongs in a Secret — never in a Variable, a VITE_ value or a commit. |
The project URL is read from the committed .env, so there is nothing else to set. With the secret unset the workflow exits quietly, so forks do nothing; with the secret set but no URL to be found it fails loudly rather than reporting success while reports sit unfiled. Run it by hand from the Actions tab to test it. Reports are written with the public anon key, so anyone who has the app can insert one; if that is ever abused, drop the insert policy on public.reports in the SQL editor and the button falls back to the GitHub link.
npm test # generator, progression, timer, migration, account-switching and bug-report tests
npm run typecheck
npm run build && npm run screenshots # headless walkthrough, images in ./screenshots
# Multi-device cloud sync check against a mocked Supabase (no project needed):
VITE_SUPABASE_URL=https://mock.supabase.co VITE_SUPABASE_ANON_KEY=mock-anon-key-0123456789abcdef npm run build
npm run cloud:check
src/curriculum/ question generators per region, curriculum metadata, scoring rules
src/app/ state model, persistence, progression, daily timer, speech, shop, sound
src/screens/ profile picker, map, region, play, backpack, parent dashboard, time-up
src/ui/ HTML helper, SVG art (creatures, explorers, regions, shapes), visual renderer
src/styles/ stylesheet
src-tauri/ Rust shell, Tauri config, icons
tests/ vitest suites
scripts/ Playwright screenshot walkthrough
docs/ generated curriculum map
MIT