ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Full Lyceon.ai monorepo
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An AI-powered SAT practice application with RAG (Retrieval-Augmented Generation) capabilities, featuring quality practice questions, vector search functionality, and robust production deployment.
• Content Operations: Admin-managed question review and quality controls
• Vector Search: Semantic search using embeddings stored in PostgreSQL and Supabase
• AI Tutoring: Retrieval-Augmented Generation for personalized assistance
• Practice Sessions: Track progress and get instant feedback
• Admin Dashboard: Manage questions, review queues, and system healthREADME 전문 보기 ↗An AI-powered SAT practice application with RAG (Retrieval-Augmented Generation) capabilities, featuring quality practice questions, vector search functionality, and robust production deployment.
Install pnpm:
# Recommended: Standalone installer
curl -fsSL https://get.pnpm.io/install.sh | sh -
# or via npm (if already installed)
npm install -g pnpm
Required:
DATABASE_URL=postgresql://... # PostgreSQL connection string
NODE_ENV=development # or production
Optional:
# AI/ML
GEMINI_API_KEY= # Google Gemini API key
OPENAI_API_KEY= # OpenAI API key for embeddings
EMBEDDINGS_MODEL=text-embedding-3-small # Embedding model to use
# Vector Search (Supabase)
SUPABASE_URL=https://...
SUPABASE_SERVICE_ROLE_KEY=...
# Security
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5000 # CORS origins (comma-separated)
Important: This project uses pnpm exclusively. Do not use npm install or yarn install.
pnpm install
Development mode:
pnpm run dev
Production build:
pnpm run build
pnpm run preview
The app will be available at http://localhost:5000
The application provides comprehensive health monitoring:
/healthz - Primary Health CheckReturns system health status and diagnostics. This endpoint works even if the database is unavailable.
Response:
{
"ok": true,
"version": "1.0.0",
"nodeEnv": "development",
"uptime": 123.45,
"hostname": "server-name",
"hasDbUrl": true,
"dbReachable": true,
"hasSupabase": true,
"embeddingsModel": "text-embedding-3-small",
}
Fields:
ok: Overall health statusversion: Application versionnodeEnv: Current environment (development/production)uptime: Server uptime in secondshostname: Server hostnamehasDbUrl: Whether DATABASE_URL is configureddbReachable: Whether database connection is workinghasSupabase: Whether Supabase is configuredembeddingsModel: Active embeddings model/api/health - Legacy Health CheckReturns configuration details:
{
"config": {
"ocrProvider": "auto",
"embedProvider": "openai",
"vectors": false,
"llmQA": false
}
}
The application uses lazy database initialization to ensure it can start even when:
DATABASE_URL is not configuredBoot sequence:
/healthz endpoint (no DB required)If the database fails to connect:
/healthz shows dbReachable: falseThe app supports flexible authentication:
Local Auth (Default)
Rate Limiting:
Security Headers:
Request Monitoring:
Never write SQL migrations manually. Use Drizzle's schema push:
# Safe schema sync
pnpm run db:push
# Force sync (if data loss warning)
pnpm run db:push --force
To generate embeddings for questions that don't have them:
tsx scripts/backfill-embeddings.ts
Features:
To enable vector search in Supabase, run:
-- See database/supabase-vector-setup.sql
-- Creates pgvector extension and question_embeddings table
GET /api/health - API health checkGET /healthz - Service health checkGET /api/admin/questions/needs-review - Review queueGET /api/admin/questions/duplicates - Duplicate detection viewGET /api/admin/questions/statistics - Question quality metricsPOST /api/auth/signup - Email/password signupPOST /api/auth/signin - Email/password sign inPOST /api/auth/signout - Sign out (clears auth cookies)POST /api/auth/refresh - Refresh session from refresh cookiePOST /api/auth/consent - Submit guardian consent (under-13 flow)GET /api/auth/debug - Auth diagnostics endpointGET /api/auth/google/start - Start Google OAuth flowGET /auth/google/callback - OAuth callback endpointGET /api/profile - Canonical current-user profile payloadGET /api/auth/user and POST /api/auth/exchange-session (both return 404)The application uses structured logging with multiple channels:
NODE_ENV=productionpnpm run db:pushpnpm run build && pnpm run preview/healthz endpoint for health statusThe server binds to 0.0.0.0:5000 for container compatibility.
Health check command:
curl -f http://localhost:5000/healthz || exit 1
├── apps/api/ # Backend API
│ └── src/
│ ├── routes/ # API route handlers
│ ├── lib/ # Utilities (embeddings, etc.)
│ ├── db/ # Database client
│ └── middleware/# Express middlewares
├── client/ # React frontend
│ └── src/
│ ├── pages/ # Page components
│ ├── components/# Reusable components
│ └── lib/ # Frontend utilities
├── shared/ # Shared types and schemas
├── server/ # Express server bootstrap
├── scripts/ # Utility scripts
└── database/ # Database schemas
shared/schema.tsapps/api/src/routes/client/src/pnpm run test:e2e/healthz endpoint - it should work even with DB issuesDATABASE_URL is set correctlyNEXTAUTH_ENABLED matches your setupOPENAI_API_KEY or GEMINI_API_KEY is setEMBEDDINGS_MODEL configurationSUPABASE_URL and SUPABASE_SERVICE_ROLE_KEYSee the full runbook here: docs/SECURITY_RUNBOOK.md
To run the security regression tests locally (PowerShell):
# From the project root
pnpm install
pnpm run test:security
.env contains valid SUPABASE_URL and GEMINI_API_KEY for full test coverage.The Score Projection Engine calculates estimated SAT scores using College Board domain weights and student mastery data.
const SCORING_MODEL = {
baseScore: 400, // 200 per section minimum
rangePerSection: 600, // 800 max - 200 min
weights: {
math: {
'algebra': 0.35,
'advanced_math': 0.35,
'problem_solving': 0.15,
'geometry': 0.15
},
rw: {
'craft_structure': 0.28,
'information_ideas': 0.26,
'standard_english': 0.26,
'expression_ideas': 0.20
}
}
};
Section_Mastery = Sum(Domain_Mastery * Domain_Weight)Projected_Section = 200 + (600 * Section_Mastery)Variance = 100 / Math.cbrt(totalQuestions)Range_Low = Score - VarianceRange_High = Score + VarianceBefore calculation, mastery data is decayed based on inactivity:
Decay_Factor = 0.95 ^ Weeks_Inactive
This ensures students who neglect a domain see their projected score drop, incentivizing regular practice.
GET /api/progress/projection
Returns:
projection.composite: Total projected score (400-1600)projection.math: Math section score (200-800)projection.rw: Reading & Writing section score (200-800)projection.range.low/high: Confidence intervalprojection.breakdown: Per-domain contribution detailsMIT
projection.math: Math section score (200-800)