ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A study planner for students: classes, assignments, calendar, grades, GPA, flashcards, a focus timer, and import from Google Classroom and Schoology. It is a single static HTML file with no build step, and it saves everything in the browser (localStorage).
main redeploys in about a minute)main)The two sites keep separate saved data, because browser storage belongs to one web address. To move data between them, use Settings → Backup, then Restore on the other site.
| Area | State |
|---|---|
App at the site root (index.html) | Live on both sites |
| Dashboard, My Classes, Assignments, Calendar, Study Planner | Done |
| Grade tracker: category weights, grade calculator (add/delete), GPA out of 4 (plus/minus or simple scale) | Done |
| Due-soon alert on the dashboard | Done |
| Flashcards, focus timer (on/off in Settings), color editing | Done |
| Save everything, Backup / Restore / Reset in Settings | Done |
| Secret Room (hidden: click the "Features" heading 5 times, then turn it on in Settings) with Cookie Clicker, Math Sprint, Wordle, Typing Speed | Done |
| Graduation-hat logo goes back to the Dashboard | Done |
| Google Classroom sync (classes, assignments, due dates, returned grades; read-only; token in sessionStorage only) | Done, and the user reports it works |
Schoology import from the personal calendar feed, on every page load, through the built-in relay api/schoology.mjs | Built and the relay is live; not yet tested with a real Schoology feed link |
Schoology API sync (Settings → Schoology → Automatic sync): the student pastes their personal Consumer Key/Secret from <school>.schoology.com/api once; api/schoology-api.mjs checks it and returns it sealed (AES-256-GCM with SCHOOLOGY_TOKEN_KEY, bound to the Firebase uid). Syncs classes, assignments, due dates, grades, category weights and turned-in status on open (at most every 15 min) through the same importCourses() as the grade paste. Needs Google sign-in. GET-only, stores and logs nothing | Built and tested with mocked Google keys and a mocked Schoology API; needs SCHOOLOGY_TOKEN_KEY in Vercel, not yet tested with a real key |
Schoology .ics file import (one-time, no relay needed) | Done |
| Easier Schoology setup: step-by-step guide, Paste button, connects as soon as a valid feed link is pasted (or Enter), explains a wrong link (e.g. the calendar page address), relay field under "Advanced" | Done (tested with a mocked relay) |
| Schoology grades import: paste the Grades page (Grades → Import from Schoology). Imports the current grading period's scores and category weights, creates or matches classes by course name, and averages by points per category like Schoology does. Calendar-feed assignments whose title is on a course's Grades page are filed into that course | Done; averages match Schoology exactly for 3 real courses (Algebra 95.72, Science 91.18, Chinese 96) |
Calendar shows assignment names as colored chips (homework, quiz, test, project; click a color in the key to change it, saved as studyflowCalColors), finished work faded, and a list for the clicked day; on phones the chips become colored bars and the page no longer runs off the right edge. Grade import also adds upcoming ungraded assignments to the calendar and ticks off graded or turned-in ones (the feed adopts them, no duplicates) | Done (tested with mocked data) |
Assignments page shows only work due in the next 7 days by default (plus overdue unfinished work). The first filter lets the student choose today, 3 days, 7 days, 2 weeks, 30 days, "Choose my own…" (any number of days, saved as studyflowDueDays) or all dates; a "Show all dates" link switches to everything. The choice is saved as studyflowDueFilter | Done |
Accounts (Sign in with Google): Firebase Auth + one Firestore doc per user (users/<uid>) holding every studyflow* item; changes sync 2 s after they happen and when the tab comes back into view; first sign-in on a device with its own work asks which copy to keep. Per-device state in studyflowCloud (kept out of backups) | On: Firebase project studyflow-dca86 (Google sign-in, Firestore rules limit each user to users/<own uid>); tested with a mocked Firebase |
Installable app (PWA): manifest.webmanifest, offline service worker sw.js, icons in icons/, "Install the app" card in Settings | Done locally; not yet tested on a real phone or with Google sign-in inside the installed app |
webcal://…/calendar/feed/ical/…/ical.ics link. The calendar page address (…/calendar/<number>/<month>) is not the export link. In StudyFlow go to Settings → School connections → Schoology, paste the link (or press Paste); it connects by itself. Keep the link private..ics file (with personal details removed) and adjust classFor() in index.html.logs/2026-10-10_SCHOOL_SYNC_PLAN.md):
client.requestAccessToken so a synchronous throw clears the pending sign-in.current() so a very late popup answer is ignored.hasGrantedAllScopes with try/catch.old.html (the original simple site) and template/index.html (a redirect to /) when they are no longer needed.| Path | What it is |
|---|---|
index.html | The app. Edit this file. All features are inline scripts in this one file. |
manifest.webmanifest, sw.js, icons/ | Installable app: name and icons, and the service worker that lets it open offline. Bump VERSION in sw.js when the list of app files changes. |
api/schoology.mjs | Vercel Function: the Schoology relay at /api/schoology. It only fetches Schoology calendar feed links and only answers the two StudyFlow sites. |
api/schoology-api.mjs | Vercel Function at /api/schoology-api: checks the StudyFlow (Firebase) sign-in, seals the student's Schoology API key, and reads their classes, assignments and grades (GET only). Needs the Vercel environment variable SCHOOLOGY_TOKEN_KEY (32 random bytes, base64). |
worker/schoology-relay.js | The same relay as a Cloudflare Worker, for anyone hosting StudyFlow somewhere without functions. |
old.html | The original StudyFlow page, kept for reference. |
template/index.html | Redirect so old /template/ links still work. Don't edit. |
logs/ | Plans and review records (2026-10-10_SCHOOL_SYNC_PLAN.md is the school-sync plan and review). |
studyflowData (classes, tasks, sessions, name), studyflowColors, studyflowFlashcards, studyflowFocus, studyflowFocusEnabled, studyflowSecretEnabled, studyflowGames, studyflowWordle, studyflowTyping, studyflowGpaScale, studyflowLastBackup, studyflowClassroom (client ID and connection state), studyflowSchoology (feed link and connection state), studyflowSchoologyApi (the sealed Schoology API token; left out of backups). The Google access token is in sessionStorage (studyflowGcToken) and is never saved permanently.
If the Vercel address changes, update ALLOWED_ORIGINS in api/schoology.mjs (and worker/schoology-relay.js), DEFAULT_RELAY in index.html, and the Authorized JavaScript origins of the Google OAuth client in Google Cloud.
Paste this into Claude Code (opened in this repo) to pick up where we left off:
I'm continuing work on StudyFlow (this repo, github.com/Sketchy426/Studyflow).
Read README.md first: the "Status" and "To do" sections say what is done and what is next.
The app is the single file index.html (no build). The Schoology relay is api/schoology.mjs
(Vercel Function); the Cloudflare copy is worker/schoology-relay.js. Live site:
https://studyflow-one-pi.vercel.app/ (auto-deploys from main); mirror: GitHub Pages.
Keep the existing design and code style, keep the rules in README.md, test changes in a
browser (headless Chrome with mocked fetch is fine), then commit and push to main.
When something changes, update the Status and To do sections of README.md.
Today I want to: <describe what you want next>