ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Exact Schoology grades, a what-if calculator and grade history. Independent; not affiliated with Schoology or PowerSchool.
EducationTypeScript · CSSGitHub @aarav-puriOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
Your Schoology grades, made clear. Exact grades, GPA, what-if scores, grade history and an AI assistant, with a Chrome extension.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Your grades. Finally, clear.
Klar turns your Schoology gradebook into one calm dashboard: exact grades, your GPA, what-if scores, grade history, and an AI assistant that answers questions about your own grades.
Every class Exact grades and categories, side by side.
What-if Try a score and see your grade move. Find the exact score you need.
Ask Klar Ask anything about your grades. Math comes from Klar's grade engine, not guesswork.
History Every change, from your first sync.Read the full README ↗Klar turns your Schoology gradebook into one calm dashboard: exact grades, your GPA, what-if scores, grade history, and an AI assistant that answers questions about your own grades.
Open Klar · Chrome extension · Privacy Policy · How it works · Run it locally
Klar never asks for your Schoology password, never reads your cookies, and can't change anything in Schoology. Every student's data is isolated by Postgres row-level security. Details: docs/SECURITY.md.
Klar is independent and is not affiliated with, endorsed by, or sponsored by Schoology or PowerSchool.
| Layer | Technology |
|---|---|
| Web app | Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS v4 |
| Database | Neon Postgres with per-student row-level security |
| Accounts | Neon Auth (managed Better Auth): email and password, password reset |
| AI | Vercel AI SDK through Vercel AI Gateway (openai/gpt-6-luna) |
| Extension | Chrome Manifest V3, Vite, a strict message protocol shared with the app |
| Shared logic | packages/core: grade engine, what-if solver, sync schema, Schoology parsers |
| Tests | Vitest (unit, plus the real migration in PGlite) and Playwright (the real extension end to end) |
| Hosting | Vercel |
apps/web Next.js app: landing page, sign-in, onboarding, dashboard, API
db/migrations: Postgres schema with row-level security (run on Neon)
apps/extension Chrome MV3 extension that reads the student's own gradebook, with consent
packages/core Framework-free logic: grade engine, what-if solver, sync schema,
Schoology page parser, official API mapper, extension protocol
brand/ Logo and icon SVG sources plus the PNG build script
e2e/ Playwright tests: the real extension in Chromium, a fake Schoology, a Neon test branch
e2e-shots/ The script that captures the product screenshots
docs/ Integration research, security model, brand notes
Requires Node 22+ and the Neon CLI (npm i -g neon@latest).
npm install
neon login
neon link --project-id <your-project-id> --branch production -y
npm run env:pull # writes the Neon variables into apps/web/.env.local
npm run db:migrate -w web # applies db/migrations over the direct (unpooled) connection
Add the secrets Neon doesn't provide to apps/web/.env.local, then start the app:
echo "NEON_AUTH_COOKIE_SECRET=$(openssl rand -base64 36)" >> apps/web/.env.local
echo "NEXT_PUBLIC_APP_URL=http://localhost:3000" >> apps/web/.env.local
echo "AI_GATEWAY_API_KEY=..." >> apps/web/.env.local # optional: turns on Ask Klar
npm run dev # http://localhost:3000
npm run env:pull only rewrites the Neon variables, so these are kept. Every option is listed in apps/web/.env.example, including the optional official Schoology API (SCHOOLOGY_CONSUMER_KEY, SCHOOLOGY_CONSUMER_SECRET, TOKEN_ENCRYPTION_KEY).
Extension:
npm run build:extension # for http://localhost:3000
KLAR_APP_ORIGINS="https://useklar.vercel.app" npm run build:extension # for production
In Chrome: chrome://extensions, turn on Developer mode, Load unpacked, choose apps/extension/dist.
npm test # core, extension and web unit tests
npm run typecheck
npm run test:e2e # builds the extension, starts Klar against the e2e Neon branch, runs the end-to-end suite
npm run screenshots # recaptures the product screenshots (fictional example data)
e2e, never production): sign-up, connecting, syncing a newly posted score, course details, sign-out, the official-API connection (approved and denied), and forgot password.Set up the e2e branch once:
neon branches create --name e2e --parent production
neon env pull --branch e2e --file apps/web/.env.e2e
npx playwright install chromium
The suite starts its own dev server on port 3000, so stop any other server on that port first.
Pushes to main deploy to production on Vercel (project root: apps/web). Preview deployments are created for other branches and pull requests.
DATABASE_URL, DATABASE_URL_UNPOOLED, NEON_AUTH_BASE_URL, NEON_AUTH_JWKS_URL, NEON_AUTH_COOKIE_SECRET, NEXT_PUBLIC_APP_URL, and AI_GATEWAY_API_KEY for Ask Klar.neon neon-auth domain add https://your-domain.npm run db:migrate -w web with DATABASE_URL_UNPOOLED when the schema changes.neon neon-auth config email-provider); the shared sender is for getting started.The Schoology integration was built to Schoology's current page markup and documented API and tested against faithful fakes. If numbers ever differ from Schoology's, save the gradebook page (names removed) under packages/core/test/fixtures/ and extend the parser tests. Unrecognized pages produce a clear PARSE_FAILED error, never guessed numbers.