ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An iPad web app for primary students. A student picks their year level, photographs
their handwritten writing or picks photos of it from the iPad's photo album (up to two
pages; a page snapped sideways or upside down is turned upright automatically before it
is read), checks the typed-out version (both pages
together in one box) by tapping any word to fix it, and gets specific, improvement-first
feedback matched to the Australian Curriculum (ACARA v9) expectations for their year.
Nothing is ever stored.README 전문 보기 ↗An iPad web app for primary students. A student picks their year level, photographs their handwritten writing or picks photos of it from the iPad's photo album (up to two pages; a page snapped sideways or upside down is turned upright automatically before it is read), checks the typed-out version (both pages together in one box) by tapping any word to fix it, and gets specific, improvement-first feedback matched to the Australian Curriculum (ACARA v9) expectations for their year. Nothing is ever stored.
The feedback comes as four slides, named to fit the superhero theme: What you did well, Power-ups, Word lab and Mission complete. Back, Next and Finish sit in a bar fixed to the bottom of the screen. Coaching instructions are pitched at the child's year; worked examples demonstrate ambitious, attainable writing: Years 1 and 2 get picture-book sentences, Years 3 and 4 plain words with a hint for any term, Years 5 and 6 the proper names of strategies.
The app is student-only for now: there is no teacher settings screen, students choose their own year level, and the check-up and Listen buttons are always on.
The area names follow the national writing assessment criteria; the descriptions used in
the prompt and the app are written in our own words (the marking guides themselves are
not reproduced here). The writing strategies follow the approach of The Writing Revolution (the
Hochman Method), which the school uses for writing instruction; "strategies" is the book's own
word for them, the names are theirs, the explanations and examples are ours, and none of their
materials are reproduced. See
docs/research/writing-revolution-brief.md and docs/research/twr-section-i.md. The supplied
TWR 2.0 sentences section is distilled in api/_twr.js and used by generation and review;
the book itself is not uploaded, reproduced, or used to retrain a model.
The approach follows what the feedback research says works: answer "where to next?", stay specific to the task, show the improvement rather than just naming it, and leave the child something to do.
Two separate steps, so each has one job:
The extra image check is bounded to 25 seconds. Feedback generation has 30 seconds. The independent teaching review (up to 100 seconds) and the editing audit (up to 90 seconds, low reasoning) then run side by side, all within a 170-second server budget under the client's 180-second limit. The audit is a separate call on purpose: when it lived inside the review, real two-page writing made the reviewer reason past its time and token limits and the child saw an error instead of feedback. The reviewer uses medium reasoning and the complete output schema, and checks the student's existing skills and surrounding sentences before choosing targets. Provider retries share the same time budget. The optional editing recheck gets at most 25 seconds from whatever budget remains; it adds no extra call when the original audit is valid. Each stage logs a one-line reason to the server log when it fails (never the child's writing). These checks add model cost and latency; they reduce failure modes but cannot guarantee perfect handwriting or feedback.
Photos are cleaned up on the iPad first (uneven lighting flattened so the page reads white and the ink dark, like a phone's document scan) and sent at up to 2000 pixels.
Double-click start-app.bat. A browser opens with the app in practice mode:
the feedback is a canned example, but every screen works.
.env.example to a new file called .env..env file stays on this computer; it is ignored by version control and never shared.Feedback and the reading step both default to gpt-6.1-terra (switched on 2026-10-27). For
feedback, a side-by-side run on 27 invented pieces had it deliver 26 (gpt-5.6-terra 17), in a
median 20 seconds instead of 95, for about half the cost. For reading, on 9 real scanned pages read
three times each, it got 4 or 5 of 20 hand-checked hard words wrong where gpt-6-sol got 10 or 11,
mostly because it kept children's misspellings as written. It was also faster and half the price. OPENAI_MODEL changes the feedback model and OPENAI_TRANSCRIBE_MODEL the reading
step. The independent teaching/editing reviewer follows the feedback default; OPENAI_REVIEW_MODEL
overrides it. Any model you pick must accept reasoning_effort: "none" (gpt-6.1-sol and
gpt-6-astra do not). The Listen buttons no longer use OpenAI: they use the iPad's own voice.
The old paid voice (api/speak.js, gpt-4o-mini-tts with marin) is switched off; set
SPEAK_ENABLED=1 in Vercel to turn it back on (OPENAI_TTS_MODEL and OPENAI_TTS_VOICE then
apply), and the app would need changing to call it again.
Two things keep the cost down (measured 2026-10-01: about 3c per piece in a class, down from 9c):
flex service tier. When OpenAI is busy it answers 429 at once (free) and the request
goes again at the normal price. Set OPENAI_FLEX=off in Vercel if feedback ever gets slow, or
if you switch to a model that does not offer the flex tier. Server logs say "flex lane busy"
each time a request is bounced.Share this link: https://wesdlpteam.github.io/writing-sidekick/
The page is hosted by GitHub Pages straight from the main branch of this repo, so
every push to main updates the live site within a minute or two.
GitHub Pages only serves files, so the one server function (api/feedback.js, the part
that talks to OpenAI) runs on Vercel at https://writing-sidekick.vercel.app and accepts
browser calls only from the GitHub Pages address. Vercel also redeploys on every push.
The OpenAI key and model names live as environment variables in the Vercel project
settings, using the same variable names as .env.example. They are never in the repo.
On an iPad, open the site in Safari and use Share, then Add to Home Screen, so it looks and launches like a normal app.
privacy.html (linked from the app as "For adults") is a
draft explanation for parents and staff; the school must confirm the retention arrangement
on its OpenAI account and the processing regions, then approve the wording.api/_safety.js): narrow
local rules for plain first-person disclosures, then OpenAI's moderation check. A flagged
piece gets a trusted-adult screen with a note for the teacher instead of feedback, and the
feedback model is never asked about it. The wording is a draft for the school's safeguarding
lead to approve. Phone numbers, emails and street addresses are blanked before ordinary
writing goes to the feedback model.APP_PAUSED=1 switches every AI call off;
ALLOWED_ORIGINS adds extra allowed sites; OPENAI_BASE_URL can point at an approved
regional endpoint; OPENAI_MODERATION_MODEL changes the safety check's model.index.html, css/, js/: the app the student seesart/: the Writing Sidekick hero artworkapi/feedback.js: the server function that talks to OpenAI (both steps)api/speak.js: the old paid read-aloud function (off unless SPEAK_ENABLED=1; the app uses the iPad's voice, js/speech.js); api/_cors.js (the request gate)
and api/_provider.js (provider address and timeouts) are shared by bothapi/_safety.js: the safeguarding check and the trusted-adult responseprivacy.html: the adult-facing explanation of where writing goes (draft)api/_curriculum.js: per-year writing expectations, distilled from
curriculum/english-curriculum-f-6-v9.md (ACARA v9, © ACARA 2022)tests/: run with npm testdocs/superpowers/: design and build plan documentsCost depends on the models, input length, image detail and review reasoning. Earlier two-call estimates no longer apply to the image verification and deeper teaching review. Check actual usage in the provider account. A cheaper draft model does not remove the independent review cost. The September age/attainment matrix took about 45–67 seconds per feedback request; these are observations, not a latency guarantee.
Age controls coaching readability and curriculum expectations. Demonstrated sentence control, idea development and organisation control the next teaching step and worked model. Strong younger writers should receive a worthwhile refinement; older foundational writers should receive a manageable scaffold. A concise persuasive topic sentence stays concise, and its support follows in separate sentences. Genuine strength ratings can receive stretch tasks.
The invented fixtures in tests/fixtures/quality-samples.mjs pair three writing levels with
Years 1–6. tests/fixtures/quality-holdouts.mjs adds new topics, genres and edge cases.
Run npm run quality:live for the matrix, or npm run quality:live -- output/quality-holdouts holdouts
for the holdouts. These commands load local API configuration, send invented text to the
configured provider, incur usage charges and save results locally. They do not send student
photos. Inspect the output against docs/audits/2026-09-10-age-attainment-quality.md;
HTTP success does not establish teaching quality. Ordinary npm test uses no live provider.