ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Socra — a Socratic tutor for General Paper
Socra is an AI tutoring app for the Singapore A-Level General Paper (GP). A
student submits a GP essay question and is guided through a structured Socratic
dialogue that makes their thinking visible and pushes against it. It never hands
over a model answer — instead it builds an Essay Blueprint alongside the
conversation and tracks the reasoning moves the student demonstrates.
Status: personal project, shared as a reference / portfolio piece. Not
affiliated with Cambridge Assessment or SEAB.檢視完整 README ↗Socra is an AI tutoring app for the Singapore A-Level General Paper (GP). A student submits a GP essay question and is guided through a structured Socratic dialogue that makes their thinking visible and pushes against it. It never hands over a model answer — instead it builds an Essay Blueprint alongside the conversation and tracks the reasoning moves the student demonstrates.
Status: personal project, shared as a reference / portfolio piece. Not affiliated with Cambridge Assessment or SEAB.
The dialogue moves through phases (current_phase in the per-turn metadata):
| Phase | Name | Focus |
|---|---|---|
| 1 | Question Autopsy & Thesis Lock | Command word, loaded terms, the two positions, iterating to a precise thesis |
| 2 | Argument Sketch | Skeleton-first — lock every topic sentence and the counter-argument claim before any paragraph development |
| 3 | Deep Dives | Student-selected: develop each paragraph, the counter-argument, and the conclusion independently |
| 6 | Complete | Session finished |
While the student works, the backend maintains a live blueprint (key terms, thesis, paragraphs, counter-argument, conclusion) and a cross-session memory profile (which of five thinking moves the student has mastered, recurring strengths and weaknesses, score history).
uv for packagingclaude-3-7-sonnet-20250219 by default; override with ANTHROPIC_MODEL)uvgit clone https://github.com/<you>/socra.git
cd socra
Create a project, then apply the schema:
backend/schema.sql → Runsupabase db execute --file backend/schema.sqlThis creates all tables with Row Level Security policies. Email/password auth is on by default in Supabase; no extra config needed.
To give an account access to the developer-only endpoints (eval viewer, session reset), set its metadata in Authentication → Users → (user) → Raw app metadata:
{ "role": "developer" }
cd backend
cp .env.example .env # then fill in the values (see below)
uv sync # creates .venv and installs dependencies
uv run uvicorn main:app --reload --port 8000
The API starts on http://localhost:8000 (GET /health to check).
cd frontend
cp .env.example .env # then fill in the values (see below)
npm install
npm run dev
Open http://localhost:5173.
backend/.env| Variable | Required | Notes |
|---|---|---|
ANTHROPIC_API_KEY | yes | All AI calls |
SUPABASE_URL | yes | Project URL |
SUPABASE_ANON_KEY | yes | Anon/public key — the backend builds a per-request client from the caller's JWT so RLS applies |
EXA_API_KEY | for Learn mode | Article search + cache seeding |
ANTHROPIC_MODEL | no | Model override; defaults to claude-3-7-sonnet-20250219 |
FRONTEND_URL | prod only | Added to the CORS allow-list; required when RENDER is set |
DEV_ACCOUNT_EMAIL | no | Bypasses the session rate limit for this one account |
SUPABASE_SERVICE_ROLE_KEY | no | Only used by the standalone maintenance scripts (query_db.py, fix_turn_db.py, …), not the app. Some scripts read it as SUPABASE_KEY |
frontend/.env| Variable | Required | Notes |
|---|---|---|
VITE_SUPABASE_URL | yes | Same project URL |
VITE_SUPABASE_ANON_KEY | yes | Same anon key |
VITE_API_URL | no | Backend base URL; defaults to http://localhost:8000 |
VITE_PUBLIC_POSTHOG_TOKEN | no | Analytics; analytics is skipped if unset |
VITE_PUBLIC_POSTHOG_HOST | no | Defaults to https://us.i.posthog.com |
backend/
main.py FastAPI app — session lifecycle, streaming chat, nudges
ai.py SocraAI — system prompt, SSE streaming, blueprint extraction
memory.py Cross-session student memory
plato.py "Plato" — greeting, insight notes, session reflection
learn_routes.py Article search via Exa, cached in Supabase
bank_routes.py Saved/archived blueprints (knowledge bank)
blueprint_routes.py Live blueprint CRUD (deep-merge PATCH)
article_cache.py Supabase-backed Exa cache
schema.sql Supabase schema + RLS policies
data/fixtures/ Scripted conversations for the eval framework
run_evals.py Replay-based evaluation harness
frontend/src/
App.jsx Routes + session re-hydration
components/ Screens (chat, blueprint, bank, profile, …)
context/ Auth + session providers
lib/supabase.js fetchWithAuth — injects the Supabase bearer token
# Backend — replay fixtures through SocraAI and check SSE / metadata shape
cd backend && uv run python run_evals.py # needs ANTHROPIC_API_KEY
# Frontend — Playwright
cd frontend && npm test
The repo includes a backend/render.yaml (Render web
service) and a frontend/vercel.json (Vercel). Set the
backend's FRONTEND_URL to the deployed frontend origin so CORS allows it, and
point the frontend's VITE_API_URL at the deployed backend.