ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Entrepreneurship quiz app — 300 questions across 5 chapters, timed mock exams, missed-question practice. Bilingual Vietnamese–English, installs as an app, works offline.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
EnQuiz: An Offline-First Bilingual Revision App for Entrepreneurship
Teaching software for exam revision: a 300-question bank across the five chapters
of an undergraduate Entrepreneurship course, delivered as timed mock exams and
chapter practice with immediate explanations, with automatic tracking of every
missed question, a per-chapter diagnosis of each paper, and an importer that
matches a pasted question paper to a pasted answer key by question number. It runs
entirely in the browser, installs to the home screen, and keeps working with no
network connection.README 전문 보기 ↗An offline-first, bilingual revision app for Entrepreneurship.
A 300-question bank across five chapters of an undergraduate Entrepreneurship course, delivered as timed mock exams and chapter practice with immediate explanations — plus automatic tracking of every missed question, a per-chapter diagnosis of each paper, and an importer that matches a pasted question paper to a pasted answer key by question number. It runs entirely in the browser, installs to the home screen, and keeps working with no network connection.
▶️ Live app: https://thuyhuongctu.github.io/EnQuiz/ 📦 Archived on Zenodo: 10.5281/zenodo.21850735
| 300 questions | 5 chapters | 2 languages | 0 servers | ~6,700 lines, no framework |
Three commitments distinguish EnQuiz from a general-purpose quiz platform, and each one is a constraint the code is held to:
| Chapter | Topic | Questions |
|---|---|---|
| 1 | Overview of starting a business | 60 |
| 2 | Assessing opportunities and developing a business plan | 60 |
| 3 | Raising capital and key financial indicators | 60 |
| 4 | Choosing a business model | 60 |
| 5 | Marketing for a new business | 60 |
| Total | 300 |
The interface is bilingual English–Vietnamese; the question content stays in Vietnamese, as taught in the course. A separate "KT330H" track adds instructor case studies and a comprehensive review set — see Extending the source.
A/B/C/D
and ←/→, and a progress bar.Four settings in Settings → Appearance: Follow device, Light, Clay noir and Cosmic dark.
Clay noir is the application's dark look: a dark stone ground whose panels appear moulded by hand, lit in gold. Its depth is made entirely of layered CSS shadow, so it adds no image files and nothing to download; every text–background pair on it was measured against WCAG AA, the lowest coming out at 6.05:1. Cosmic dark is the dark look of earlier releases, kept for anyone who preferred it.
Under Follow device — the setting until the learner chooses otherwise — a phone set to light gives the light theme and a phone set to dark gives Clay noir, and it switches live when the phone does. The choice is stored per browser.
Ten steps, each highlighting the region of the screen it describes, opening with a French greeting — « Bonjour ! Je m'appelle Hương. » The narration is recorded audio in the author's own voice, 24 files across Vietnamese and English, not machine speech; the text is always on screen, so the tour works with the sound off. Audio is fetched only when the tour runs.
The complete narration script, in both languages, with the screen target, the
character pose and the audio file for every step, is published in
docs/LOI_THOAI_HUONG_AI.md.
index.html every screen, and the inline SVG icon sprite
└── assets/js/
i18n.js bilingual dictionary and translation engine
storage.js progress, history, streak, imported sets (localStorage)
bank.js loads, normalises and merges the question bank
parser.js extracts questions and answers from pasted text
app.js practice modes, scoring, statistics, clocks, media
tour.js the guided tour and its recorded audio
└── data/manifest.js → data/ch01.js … ch05.js (60 questions each)
└── sw.js service worker: versioned offline copy of the shell
About 6,700 lines of HTML, CSS and JavaScript. No framework, no build step, no package manager, no runtime dependency. Fonts are self-hosted rather than called from a font CDN, so typography survives an offline launch.
Quickest: download the source and open index.html in a browser.
With a local server — required for the service worker and offline mode:
python3 -m http.server 8000
# then open http://localhost:8000
Publication: every push to main triggers .github/workflows/pages.yml,
which publishes https://thuyhuongctu.github.io/EnQuiz/. No manual step.
Installation: open the page in Chrome, Edge or Safari and choose Install app / Add to Home Screen. A ⬇️ button also appears in the header when the browser offers installation.
The service worker keeps a copy of the application under a versioned cache
(CACHE_VERSION in sw.js). Pages and code are fetched network-first, so a
new release appears immediately and falls back to the cache when the network
is gone; images and audio are served cache-first.
Large media is deliberately excluded from the pre-cache. The introduction
video goes further still: its <video> element carries no src at all
until the play button is pressed, and the service worker skips
assets/video/ entirely — a 24 MB file would consume most of the storage a
web application is permitted, and a media player requests byte ranges to
seek, which a cache can only answer with the whole file.
Learning data never leaves the device. There is no account. Results, missed questions, flags and imported sets stay in the learner's own browser; Erase all data in Settings clears everything. No answer, score or progress figure is transmitted anywhere.
Case study unlock records a school email. Opening the original case study materials asks for a school email once per device. The email, the case ID and the time are sent over HTTPS to a Supabase function so the instructors know who viewed the materials. They are not shared, are kept for at most 12 months, and are deleted on request ([email protected], subject "Delete EnQuiz data").
Visits are counted, anonymously. The app loads GoatCounter, a cookieless analytics script that stores no IP address, sets no identifier and does not follow visitors across sites. It reports how many times the app was opened, on which day, and from which country — nothing that identifies a person, and nothing about what a learner answered. This is disclosed in the app's own Privacy panel, in both languages, and in the full bilingual policy published at chinh-sach.html, which is also the policy linked from the Google Play listing.
Apart from the case study unlock above, the counter is the only external request the app makes. It is served from a different origin, so the service worker does not touch it; with no network it fails silently and the app carries on.
Used to add or replace question sets without touching the source. Open Merge questions & answer key from the home screen, paste into the two boxes, then press Analyse to preview before saving.
Questions are matched to answers by the question number printed in the paper, not by paste order, so any subset can be pasted — for example only questions 31–60.
| Element | Accepted forms |
|---|---|
| Question numbering | Question 1: · Câu 1. · 1. · 1) |
| Options | A. · A) · (A) · a. — same line or separate lines, 2 to 6 options |
| Answer inside the paper | * before the correct option, or Answer: B / Đáp án: B at the end |
| Answer key | 1. B · Question 1: B · 1 - B · 1B · 1. B. followed by the answer text |
| Explanation (optional) | Explanation: … at the end of a question |
Imported sets are saved in localStorage and reloaded next time; each can be
deleted individually from the same screen.
A permanent question set. Create a file in data/, for example ch06.js:
registerBank({
id: 'ch06',
title: 'Chương 6 – Tên chương',
titleEn: 'Chapter 6 – Chapter name', // optional, used by the English interface
order: 6,
questions: [
{
q: 'Question text?',
a: ['Option A', 'Option B', 'Option C', 'Option D'],
c: 1, // zero-based index of the correct option
e: 'Explanation (optional)'
}
]
});
Add the file name to the array in data/manifest.js, add its path to the
SHELL list in sw.js, and bump CACHE_VERSION. The application loads and
merges it automatically, dropping questions whose text duplicates an existing
one. The c field also accepts "B", "2", or the exact text of the
correct option.
An interface language. Every display string lives in
assets/js/i18n.js, grouped by key; add a language by appending a block to
DICT with the same keys as the vi block. In HTML, static elements are
translated through data-i18n="key" (or data-i18n-html when the string
contains markup, and data-i18n-attr="title:key" for attributes). In
JavaScript, use t('key', { name: value }).
Two characters, kept apart on purpose: Ms. Huong in an ao dai carries the course, and Huong AI in the knit vest runs the guided tour.
| File | Where it appears |
|---|---|
huong-welcome.webp | home header, and results at the pass mark |
huong-quiz.webp | opens the chapter list, sits beside the question card, and appears on results below the pass mark |
huong-cheer.webp | results, score 8 and above |
video-poster.webp | the video cover — a real frame from the video itself |
class-group.webp | the banner on the exam setup screen |
vest-*.webp | Huong AI in the tour panel, one file per pose |
vest-avatar.webp | tour button, tour panel, advice card |
logo.svg · globe.svg · mekong-map.webp | mark, and faded backgrounds |
The Ms. Huong pictures on the home screen, the chapter list, the answering screen and the video cover are whole frames from the introduction video, used uncropped. Cut-outs were tried and abandoned: the transparency had hard edges and a dark residue along the outline, measured at 40–42% of the edge pixels, which showed as a jagged fringe around the hair and the dress. The app icon is the exception — it comes from a cut-out whose outline measured 3.5% dark, clean enough to sit on the icon's own ground.
To change a picture, replace the file and keep the name. Which picture
appears on the result screen is decided in renderResult() in
assets/js/app.js; the tour poses are in POSE_SRC in assets/js/tour.js.
If you use EnQuiz, please cite it. GitHub renders a Cite this repository
button from CITATION.cff.
Do, T. H., & Phan, A. T. (2026). EnQuiz: an offline-first bilingual quiz app for entrepreneurship revision (Version v.1.2) [Computer software]. Can Tho University. https://doi.org/10.5281/zenodo.21850735
@software{do_phan_enquiz_2026,
author = {Do, Thuy Huong and Phan, Anh Tu},
title = {{EnQuiz: an offline-first bilingual quiz app for
entrepreneurship revision}},
version = {v.1.2},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.21850735},
url = {https://doi.org/10.5281/zenodo.21850735}
}
Zenodo mints two kinds of identifier: the concept DOI
10.5281/zenodo.21850735 always resolves to the latest release, while each
release also receives its own version DOI that pins an exact build. Cite
the concept DOI for the software in general and the version DOI for a
reproducible reference. Machine-readable metadata is in CITATION.cff and
.zenodo.json.
Authors
[email protected][email protected]Copyright subsists automatically under the Intellectual Property Law of Viet Nam and the Berne Convention from the moment of creation; a Copyright Office of Viet Nam registration is in preparation.
Scope of authorship. All 300 questions were written by Do Thuy Huong for the course she teaches; they are not drawn from a departmental question pool. The interface text, the character artwork, the recorded narration, the introduction video and both songs are likewise her own work. Phan Anh Tu contributed the KT330H case studies and comprehensive review content, and as academic supervisor and co-author.
Institutional position. The first author is a lecturer at the Faculty of Business and Law, Vinh Long University of Technology and Engineering, and a PhD candidate at Can Tho University; the second author is at the School of Economics, Can Tho University. The work was created outside any assigned task, research project or funded programme of either institution and without using their funds or facilities. Because a Can Tho University staff member is named as co-author, the university's intellectual-property regulations are being checked before the registration is filed.
EnQuiz is proprietary software. © 2026 Do Thuy Huong and Phan Anh Tu. All
rights reserved. It is not open source and it is not under a Creative
Commons licence. The full terms, in English and Vietnamese, are in
LICENSE.
Permitted, free of charge and without asking: using the app for your own study and exam revision; sharing the link; installing it on your own devices; importing your own question sets for use on your own device.
Requires written permission: copying, extracting or redistributing the question content in any form; re-publishing the app elsewhere, even with attribution; commercial use or use in paid teaching or training; modification, translation or derivative works; removal of copyright notices.
Copying and the right-click menu are disabled in the app as a reminder. That is a reminder, not a technical barrier — unauthorised copying is an infringement however it is carried out.
For any other use, write to [email protected] for written permission.