ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Pulgo — A smart study planner with AI assistance, time tracking, and achievement system
EducationJavaScript · HTMLGitHub @igoriwaniukkOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
This forces a fresh Vercel deployment so it builds the latest commit —
Vercel's deploy hook didn't pick it up on its own.
This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.
• @vitejs/plugin-react uses Oxc
• @vitejs/plugin-react-swc uses SWC
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.Read the full README ↗This forces a fresh Vercel deployment so it builds the latest commit — Vercel's deploy hook didn't pick it up on its own.
This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.
Currently, two official plugins are available:
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the TS template for information on how to integrate TypeScript and Oxlint's TypeScript related rules in your project.
The app includes an in-app AI chat (the 💬 button) that can see the student's upcoming exams, study goals, and energy level to give personalized advice. It talks to Anthropic's Claude API through a small local backend, so your API key never reaches the browser.
server/.env.example to server/.env and paste your key into ANTHROPIC_API_KEY=. Never commit this file (it's already in .gitignore) or paste a real key into .env.example.npm run dev:full instead of npm run dev — this starts both the Vite dev server and the chat backend together.Note: the chat only works when running the app with its own backend (npm run dev:full, or your own hosting of both server/ and the built frontend). It will not work from a static, backend-less deployment of the built files alone.
The bell icon's "Enable phone notifications" option sends real OS-level push notifications (streak reminders, upcoming-exam nudges, your custom reminders) on a schedule — even while the app/tab is closed, using the browser's Push API + a small backend (server/index.js) that already exists for the AI chat.
npx web-push generate-vapid-keys.server/.env, set VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY to that pair, and VAPID_CONTACT to a mailto: address. Optionally set PUSH_INTERVAL_MINUTES (default 60) to control how often it checks.npm run dev:full (same as the AI chat — both share this backend).Limitations to know about:
npm run dev:full or your own hosting of server/ + the built frontend) — not from the static demo build alone.Google/Apple sign-in, Supabase sync, and the AI features all need a real backend origin — they cannot run from a sandboxed preview (e.g. a Claude Artifact), which blocks both third-party login redirects and most outbound network calls. Deploying to real hosting removes both restrictions.
The api/ folder holds the same backend logic as server/index.js, packaged
as individual Vercel Serverless Functions (api/chat.js, api/plan/*.js,
api/push/*.js) — Vercel detects the Vite frontend and these functions
automatically, no extra config beyond vercel.json (already included, for
the push-notification cron schedule).
VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY — same values as your
local .env.ANTHROPIC_API_KEY (and optionally ANTHROPIC_MODEL) — same as
server/.env.SUPABASE_SERVICE_ROLE_KEY — from Supabase's Project Settings → API →
"service_role" secret key (needed for deleting an account — which the
App Store requires — and for push notifications; see
server/.env.example)./api/chat on the live site to check: it shows
{"ai": true, "accounts": true} when the AI key and Supabase are set.VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_CONTACT — same as
server/.env, if you want push notifications.CRON_SECRET — any random string, if you set up push notifications
(locks down the cron endpoint; see server/.env.example).git push to your default branch redeploys automatically.Note on push notifications: Vercel has no long-running process to hold a
timer in, so scheduled sends run via Vercel Cron (vercel.json) hitting
/api/push/cron instead of the setInterval loop used locally. Cron
frequency limits differ by Vercel plan — check your dashboard/plan's current
limits if vercel.json's hourly schedule isn't accepted, and adjust it.