tiennm99 003e7c8afd style(frontend): document the four one-shot setState-in-effect sites
eslint-plugin-react-hooks v7 flags setState inside an effect body. All four
occurrences predate this refactor and are one-shot initialisation or external
sync, not the cascading-render pattern the rule targets:

  - hydrating a ?q= deep link once the database is ready
  - reading the candidate count for the footer
  - auto-running the schema preset when the SQL tab first opens
  - mirroring the parent-owned query into SearchForm for deep links and clear

Each gets a scoped disable with a comment explaining why it is correct here,
rather than a blanket rule change. Restructuring these properly would mean
reworking deep-link hydration and auto-search with no test harness to catch a
regression; that is worth doing separately, not inside this refactor.

npm run lint is now clean.
2026-08-13 11:48:31 +07:00

thptqg

Tra cứu điểm thi THPT Quốc gia — exam-score lookup for Vietnam's national high school graduation exam. Client-side SQL (sql.js) over a SQLite database built from the ministry's raw .xls score files by the Rust xlsxread CLI.

Served as one site at tiennm99.github.io/thptqg.

Directory Year Size Site
2016/ THPT QG 2016 — 877,461 candidates ~50 MB raw data /2016/
2017/ THPT QG 2017 — ~861,000 candidates ~117 MB raw data /2017/ (+ old, old2 generations)

Each year was a standalone repository (thptqg2016, thptqg2017), merged here with full history. Each keeps its own tools/xlsxread copy because the raw data formats differ per year.

The Deploy to GitHub Pages workflow builds both years' databases and site bundles and publishes them behind a root index.

S
Description
Tra cứu điểm thi THPT Quốc gia 2016–2017 — 1,7 triệu thí sinh · Truy vấn SQL client-side với sql.js
Readme Apache-2.0
165 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 67.1%
JavaScript 18.9%
Svelte 11.6%
CSS 2.2%
HTML 0.2%