tiennm99
e289d34da3
docs: translate README and references to Vietnamese
...
Translate README.md and docs/references.md to Vietnamese, matching the
language of the application's own interface.
Use the official terminology from Công văn 1239/BGDĐT 2025 for the three
question types instead of a literal rendering of the English.
Left unchanged: UI button labels quoted in the usage steps, every file
path and filename, external resource titles, and technical terms that are
normally kept in English.
2026-07-26 00:44:50 +07:00
tiennm99
938027e8ef
chore: remove dependabot version-update config
2026-07-25 14:14:10 +07:00
tiennm99
2e53cec50e
build(deps): bump next, react, tailwind, papaparse and pin patched transitive deps
...
- next 16.2.6 -> 16.2.9, eslint-config-next 16.2.6 -> 16.2.9
- react/react-dom -> 19.2.7, papaparse -> 5.5.4, tailwindcss/@tailwindcss/postcss -> 4.3.2
- add pnpm overrides for js-yaml (>=4.2.0), postcss (>=8.5.10), @babel/core (>=7.29.6 <8) to clear security advisories
- disable react-hooks/set-state-in-effect rule newly enforced by eslint-config-next 16.2.9
2026-07-17 17:57:23 +07:00
tiennm99 and GitHub
5c91ac96f9
fix(lint): pin eslint ^9 for eslint-config-next@16 compat; replace removed next lint ( #18 )
...
- Downgrade eslint ^10 → ^9 (eslint-config-next@16 requires eslint >=9)
- Replace `next lint` script with `eslint .` (next lint removed in Next 16)
- Rewrite eslint.config.mjs to use native flat config API (defineConfig +
eslint-config-next/core-web-vitals direct import) instead of FlatCompat
bridge which triggers a circular-structure JSON crash with eslint-config-next@16
- Remove @eslint/eslintrc devDep (no longer needed with native flat config)
- Fix pnpm-workspace.yaml allowBuilds placeholders → true
2026-05-23 23:58:33 +07:00
fb93483ec4
build(deps-dev): bump eslint-config-next from 15.3.5 to 16.2.6 ( #15 )
...
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next ) from 15.3.5 to 16.2.6.
- [Release notes](https://github.com/vercel/next.js/releases )
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js )
- [Commits](https://github.com/vercel/next.js/commits/v16.2.6/packages/eslint-config-next )
---
updated-dependencies:
- dependency-name: eslint-config-next
dependency-version: 16.2.6
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:22:33 +07:00
68d00a3360
build(deps): bump next from 16.1.5 to 16.2.6 ( #12 )
...
Bumps [next](https://github.com/vercel/next.js ) from 16.1.5 to 16.2.6.
- [Release notes](https://github.com/vercel/next.js/releases )
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js )
- [Commits](https://github.com/vercel/next.js/compare/v16.1.5...v16.2.6 )
---
updated-dependencies:
- dependency-name: next
dependency-version: 16.2.6
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:19:13 +07:00
8e5d3c3ff0
build(deps-dev): bump eslint from 9.39.4 to 10.4.0 ( #16 )
...
Bumps [eslint](https://github.com/eslint/eslint ) from 9.39.4 to 10.4.0.
- [Release notes](https://github.com/eslint/eslint/releases )
- [Commits](https://github.com/eslint/eslint/compare/v9.39.4...v10.4.0 )
---
updated-dependencies:
- dependency-name: eslint
dependency-version: 10.4.0
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:19:09 +07:00
e72f703634
build(deps): bump next in the minor-and-patch group across 1 directory ( #14 )
...
Bumps the minor-and-patch group with 1 update in the / directory: [next](https://github.com/vercel/next.js ).
Updates `next` from 16.1.5 to 16.2.6
- [Release notes](https://github.com/vercel/next.js/releases )
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js )
- [Commits](https://github.com/vercel/next.js/compare/v16.1.5...v16.2.6 )
---
updated-dependencies:
- dependency-name: next
dependency-version: 16.2.6
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:04:00 +07:00
tiennm99 and GitHub
d9b1e8e415
chore: drop inapplicable dependabot ecosystems ( #17 )
2026-05-23 11:08:57 +07:00
tiennm99 and GitHub
eb87b7f480
chore: add dependabot config ( #13 )
2026-05-23 10:49:05 +07:00
tiennm99
6666b1a228
chore: migrate from npm to pnpm
...
Replace package-lock.json with pnpm-lock.yaml, add packageManager field,
and convert README instructional npm commands to pnpm equivalents.
2026-05-13 10:20:21 +07:00
7e6f6f2bfb
build(deps-dev): bump tar from 7.4.3 to 7.5.7 ( #8 )
...
Bumps [tar](https://github.com/isaacs/node-tar ) from 7.4.3 to 7.5.7.
- [Release notes](https://github.com/isaacs/node-tar/releases )
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md )
- [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.7 )
---
updated-dependencies:
- dependency-name: tar
dependency-version: 7.5.7
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:35:12 +07:00
c17a62c7b2
build(deps-dev): bump js-yaml from 4.1.0 to 4.1.1 ( #2 )
...
Bumps [js-yaml](https://github.com/nodeca/js-yaml ) from 4.1.0 to 4.1.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md )
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1 )
---
updated-dependencies:
- dependency-name: js-yaml
dependency-version: 4.1.1
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:29 +07:00
f6d6febf47
build(deps): bump next from 15.3.5 to 16.1.5 ( #7 )
...
Bumps [next](https://github.com/vercel/next.js ) from 15.3.5 to 16.1.5.
- [Release notes](https://github.com/vercel/next.js/releases )
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js )
- [Commits](https://github.com/vercel/next.js/compare/v15.3.5...v16.1.5 )
---
updated-dependencies:
- dependency-name: next
dependency-version: 16.1.5
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:25 +07:00
tiennm99
e95ec82d2f
rename sheet template, remove completed plans and stale reports
2026-04-16 17:06:04 +07:00
tiennm99
f98ee22f84
feat: improve OMR detection with contour-based sheet detection and robust fill measurement
...
- Replace corner marker detection with contour-based sheet boundary detection
using findContours + approxPolyDP to find the largest rectangle
- Add corner marker detection as fallback (extracted to corner-marker-fallback.js)
- Switch bubble fill measurement from mean intensity to Otsu threshold + countNonZero
for better robustness against uneven lighting
- Remove 2-degree skew threshold — always apply perspective correction when 4 corners found
- Calibrate SHEET_LAYOUT ratios to match real CV1239 template measurements
- Add references doc with OMR tutorial and repository links
2026-04-16 17:03:02 +07:00
tiennm99
e1fc43ba3a
feat: add accuracy improvements, session management, analytics, and error handling
...
- Image resize (>2000px), adaptive fill threshold, blur/quality pre-check
- Manual answer correction UI with confidence highlighting and live scoring
- Session-based workflow with IndexedDB persistence and localStorage migration
- Per-question item analysis, score distribution histogram, print CSS
- CSV answer key import, session export/import (.chambai.json)
- Extract detection pipeline to standalone module, add error boundary
2026-04-13 18:23:25 +07:00
tiennm99
be8521f1ad
feat: fix critical bugs, correct detection pipeline, and improve UX
...
- Fix localStorage race condition in UploadPage (setTimeout -> ref-based)
- Fix useState misused as useEffect in ImageThumbnail (memory leak)
- Add IndexedDB store for debug images (prevents localStorage overflow)
- Correct SHEET_LAYOUT coordinates to match CV1239/BGDDT 2025 answer sheet
- Move exam code detection from x:0.45 to x:0.82 (correct position)
- Rewrite Phan III for multi-character answers (sign, decimal, digits)
- Add perspective correction via warpPerspective (skew > 2deg)
- Lift shared state to page.jsx (eliminates localStorage sync bugs)
- Add navigation guards (disable Upload without config, Results without data)
- Add step-completion indicators (checkmarks) on navigation tabs
- Add keyboard navigation for Phan I (type A/B/C/D to auto-advance)
- Add paste-from-spreadsheet for Phan I answer keys
- Move Save/Reset to sticky bottom bar in ConfigurationPage
- Add class statistics panel (mean, median, distribution histogram)
- Translate debug visualization legend to Vietnamese
- Extract components: phan-i-answer-grid, student-detail-modal, statistics
2026-04-13 09:21:13 +07:00
tiennm99
87642bdea9
refactor: convert TypeScript to JavaScript with JSDoc type annotations
...
Remove TypeScript from the project and convert all .ts/.tsx files to
.js/.jsx. Add JSDoc @typedef and @param annotations to all lib functions
for type checking via jsconfig.json checkJs. Delete tsconfig.json and
src/types/ directory, replace with src/lib/types.js JSDoc definitions.
2026-04-12 23:35:33 +07:00
tiennm99
611a199945
plan: TypeScript to JavaScript conversion
...
Add implementation plan with 5 phases for removing TypeScript
and converting all .ts/.tsx files to .js/.jsx.
2026-04-12 22:53:13 +07:00
tiennm99
2df2906513
remove claude local settings from git tracking
2026-04-12 20:18:40 +07:00
tiennm99
93603581e5
refactor: modularize image processing and improve Vietnamese THPT answer sheet detection
...
- Split 1152-line ImageProcessor into 7 focused modules under src/lib/ and src/types/
- Fix bubble grid to match Vietnamese THPT layout (Công văn 1239/BGDĐT 2025): 8-digit student ID, 4-digit exam code, proportional section positioning
- Replace hardcoded pixel positions with relative positioning anchored to corner markers
- Add weighted scoring (Phần I: 0.25pts, Phần II: 0.25pts/sub-option with partial credit, Phần III: 0.5pts) with configurable weights
- Replace window global callback hack with useRef-based resolver in UploadPage
- Add image thumbnails, real progress bar, inline status messages (replacing alert())
- Add sortable/filterable results table with score color badges and search
- Extract shared types to eliminate 3x duplication across components
- Remove CLAHE/bilateralFilter (unavailable in opencv.js browser) for reliable preprocessing
2026-04-12 20:16:53 +07:00
tiennm99
8aa2084f82
refactor: use root folder instead
2025-07-10 21:31:13 +07:00
tiennm99
6060ab9b17
Improve bubble detection with confidence visualization
...
Enhanced the image preprocessing pipeline using CLAHE and bilateral filtering for better bubble detection. Updated the bubble fill confidence calculation to use Gaussian blur and variance checks, and lowered detection thresholds for improved sensitivity. Added visual confidence indicators and logging for debugging, and adjusted debug visualization to reflect confidence levels.
2025-07-08 23:41:41 +07:00
tiennm99
e497376bcc
feat: debug image processing
2025-07-08 23:19:51 +07:00
tiennm99
3a47c9850a
feat: update image processing
2025-07-08 22:38:10 +07:00
tiennm99
a01daea8d5
feat: update image processor logic
2025-07-08 20:53:13 +07:00
tiennm99
355a3a0b11
feat: init
2025-07-07 23:11:31 +07:00
Tien Nguyen Minh and GitHub
ae3aac2edb
Initial commit
2025-07-07 22:07:22 +07:00