ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
ঘরে বসে English MCQ অনুশীলন: Model Test, Fun Quiz, প্রতিটি উত্তরের বাংলা ব্যাখ্যা ও মেধাতালিকা।
Translation pending
EducationHTML · JavaScriptGitHub @tuhin5060OnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A Bangla-first university admission companion, built around the University of Chittagong: English MCQ practice (Grammar + Memorising: vocabulary, BCS synonym/antonym, prepositions, idioms) that feels like a game and like the real exam, a Tips & Tricks blog, and official links for 18 universities.
Setting it up on Vercel (new account or project): see VERCEL_SETUP.md — database, the four environment variables, cron, domain and Google.
Live: https://sbs-university-admission-model-test.vercel.app (Vercel) and the
Cloudflare Pages copy — both deploy from main and share one Neon database.
| 🎮 Fun Quiz | 30 s countdown per question, points, streak bonus (x1.5 / x2), 50:50 and Freeze lifelines, sounds + confetti, instant explanation, leaderboard. |
| ⏱️ Model Test | One timer for the whole test (36 s per question), question palette, 🚩 flag for review, ⏭ skip to the next unanswered question, −0.25 for every wrong answer, auto-submit on time-up, topic-wise report and full answer sheet. |
💬 Community (#community) | Ask a question under a topic (with up to 5 tags, or straight from a question in the answer sheet), reply to others, filter by status / topic / tag / search. The asker marks the thread — or one reply — as ✅ solved. An admin deletes a thread or reply with the admin password. The newest threads also show on the home page. |
| 🔔 Reminders | Browser notifications (Chrome / Edge / Android; iPhone after “Add to Home Screen”): a daily 8 PM (Bangladesh) practice reminder — skipped for students who already took a test that day — and news when a new topic is added. Offered in a small card after a test and on the home page (on / test / off). |
| 🔁 My mistakes | Wrong answers are collected automatically; two correct answers later remove them. |
| 📅 Daily Quiz | The same 20 past-year questions (10 CU/DU + 10 other universities) for everyone each day, 12 minutes, −0.25 per wrong, one ranked try a day, a page with every day's result, board and answers, and a morning push reminder. |
| 💡 Tips & Tricks | 13 posts (CU English roadmap, MCQ strategy, Article & Tense cheat-sheets, routines, exam-day checklist …) with "practice this topic" buttons inside posts. |
| 🏛️ Universities | CU spotlight with photo gallery, detailed profiles (CU, DU, RU, JU, CUET, BUET, KUET, RUET), 10 more universities, an official link directory, admission resources and a personal checklist. |
| 🪪 Name + roll | Every student gets a unique roll (001, 002 …) shown as Name.007. The same name + roll on another phone brings back scores and progress. A taken roll is refused with a free one suggested. |
| 🏆 Score | Tests taken, best/average marks, correct/wrong totals and your leaderboard position (#rank of N) for Fun Quiz and Model Test, recent results, the leaderboard and a WhatsApp feedback button. A popup at the top tells everyone online when someone sets a new highest score. |
| 🧠 Memorising | Vocabulary Synonym / Antonym / Word Meaning (~1000 words), BCS 10th–40th Synonym & Antonym, 200 Appropriate Prepositions, 198 Phrase & Idioms, plus a searchable word list (#vocab). |
| 📊 Progress | Accuracy per topic, history, results review, backup/import. Everything is stored in the browser. |
Mobile first (bottom tab bar, big tap targets, sticky start button, bottom-sheet question palette) and a full desktop layout (top nav, side palette, multi-column grids). Light/dark/auto theme, keyboard shortcuts (A–D / 1–4, Enter, ←/→, F), reduced-motion support.
index.html App shell (header, footer, mobile tab bar)
assets/
css/styles.css Design system + all styles (tokens, light/dark)
img/ Local images (CU photos, favicon)
js/
main.js Router (#hash routes), global events, theme, search
quiz.js Quiz engine: sessions, answers, timers, finishing
components.js Shared HTML pieces (cards, leaderboard, photos…)
shared/scoring.js Scoring rules — used by browser AND server
lib/ dom helpers, local storage, API calls, sound/confetti
pages/ One file per page: home, start, play, result,
tips, universities, progress, misc
data/ ← ALL CONTENT. See CONTENT_GUIDE.md
questions/*.js One file per topic (2079 questions, 19 topics; Grammar + Memorising)
vocabulary.js Word list for the শব্দতালিকা page
posts.js Tips & Tricks posts
universities.js Universities, official links, resources
university-profiles.js DU & CoU facts, rankings, photos (with sources)
site.js Site name, credits, CU photos
server/ ← THE API (one copy, used by both hosts)
routes/profile.js Name + unique roll, login with name + roll
routes/scores.js Leaderboard, my stats/rank, answer-sheet check, top-score events
routes/visitors.js Live visitor count + "new highest score" events
routes/progress.js Private progress backup
db.js Database setup + table definitions
neon-http.js Tiny Neon SQL-over-HTTPS client (no npm package)
http.js, route.js Request/response helpers, error handling
local-db.js In-memory Postgres (PGlite) for tests and `npm run dev`
api/*.js Vercel entry points (2 lines each → server/routes)
functions/api/*.js Cloudflare Pages entry points (2 lines each → server/routes)
wrangler.toml Cloudflare Pages settings
scripts/serve.mjs Local dev server (static + API)
tests/ Content checker, unit/API tests, browser e2e
tense-express/ Old URL → redirects to Fun Quiz (Tense); classic.html keeps the old game
No build step and no framework: plain HTML, CSS and ES modules.
npm install
npm run dev # http://localhost:3000 — works offline with an in-memory Postgres
npm run check # content checker + unit/API tests
npm run test:e2e # optional browser test (needs: npm i -D playwright && npx playwright install chromium)
Set DATABASE_URL to use a real Neon database locally; without it the data
resets when the server stops.
Both hosts use the same Neon database, so the leaderboard, rolls and progress
are identical on the Vercel and Cloudflare sites. Tables are created
automatically on the first request (server/db.js → SCHEMA):
students (unique roll), score_attempts, presence, progress, events.
The connection string is a secret: it lives only in the host's settings, never in the repository or the browser.
The API has no runtime npm dependencies on purpose: Cloudflare Pages does
not run npm install when the build command is empty, so an imported package
would break the Cloudflare build. server/neon-http.js speaks Neon's HTTPS
protocol with plain fetch. (@electric-sql/pglite is a dev-only dependency
for tests.)
university-model-test-sbs-updated, connected to GitHub main
(every push to main deploys to production; other branches get a preview).api/*.js (Node.js functions with Web Request/Response).DATABASE_URL comes from the Vercel ↔ Neon
integration (Storage tab). POSTGRES_URL also works. MongoDB variables are
no longer used and can be deleted.VAPID_PRIVATE_JWK (Sensitive): the signing key for notifications (a P-256
JWK with d, x, y; the public key is derived from it). Without it the
reminder control is hidden.CRON_SECRET (Sensitive): Vercel Cron sends it to /api/push-cron, which
runs daily at 14:00 UTC = 8 PM Bangladesh (vercel.json → crons; on the
Hobby plan it fires within that hour).ADMIN_PASSWORD (Sensitive): the password for “Admin হিসেবে delete” in the
community. Without it nothing can be deleted (the API answers 503).main, build command empty, output directory ..functions/api/*.js (Pages Functions, nodejs_compat).DATABASE_URL (type
Secret) for Production and Preview, using the same value as on Vercel
(Neon console → Connect, or Vercel → Storage → Neon). Then redeploy.
Without it the site still works, but the leaderboard, visitor count and community are hidden.
Add ADMIN_PASSWORD (Secret) the same way, with the same value as on Vercel.campus_player); player ids are never shown to other users.
Typing the same name + roll on a new device logs in as that student — there
is no password, so a roll is like a simple PIN and should not be shared.UNIQUE constraint). A new student may type a roll
they were given (e.g. 2111) or leave it empty: automatic rolls are the lowest
free number, so handed-out rolls are never taken. A request for a taken roll
gets 409 and the nearest free roll.scoring.js the browser uses. Client-sent
scores are ignored. Submissions are idempotent (attemptId) and rate-limited
(20 per student per 10 minutes)./api/visitors
once a minute with a random browser id (no name, no IP stored). The badge
shows how many browsers sent one in the last 150 s; closing the tab removes it
at once. If the database is not configured the badge is simply hidden.ADMIN_PASSWORD on the server (digest comparison, a short delay after a
wrong password); the password never reaches the browser code or the repo.npm run sync — Google Fonts and the
Wikimedia photos; no framing), X-Frame-Options: DENY,
Cross-Origin-Opener-Policy, HSTS on Cloudflare. Every POST from another
website is refused. Per-address limits (server/ratelimit.js, hashed
addresses kept a day): 10 wrong admin passwords per 15 min then a lock-out,
40 new students per hour, 60 sign-ins per 10 min, 40 community posts per
10 min, 150 scores per 10 min, notification sign-ups. The leaderboard is
identical for everyone and kept 20 s at Vercel's edge, so a request flood
barely reaches the database. All SQL is parameterised; all text is escaped
when shown; secrets live only in the host settings.Open #backup, enter the admin password and the whole database downloads as one
JSON file. docs/MIGRATE_TO_D1.md explains how to load it into Cloudflare D1
(scripts/backup-to-d1.mjs) — every student, roll, score and post carries over.
See CHANGELOG.md for everything that changed in v2 and CONTENT_GUIDE.md for
adding content.
progress