{"id":49542875,"url":"https://github.com/devoloper-1/quanta","last_synced_at":"2026-05-02T16:03:29.306Z","repository":{"id":347895869,"uuid":"1194848903","full_name":"DEVOLOPER-1/QUANTA","owner":"DEVOLOPER-1","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-29T23:13:05.000Z","size":53,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-30T01:31:57.198Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DEVOLOPER-1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-28T22:22:45.000Z","updated_at":"2026-03-29T23:13:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DEVOLOPER-1/QUANTA","commit_stats":null,"previous_names":["devoloper-1/quanta"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/DEVOLOPER-1/QUANTA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEVOLOPER-1%2FQUANTA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEVOLOPER-1%2FQUANTA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEVOLOPER-1%2FQUANTA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEVOLOPER-1%2FQUANTA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DEVOLOPER-1","download_url":"https://codeload.github.com/DEVOLOPER-1/QUANTA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEVOLOPER-1%2FQUANTA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32540120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T12:25:33.646Z","status":"ssl_error","status_checked_at":"2026-05-02T12:24:51.733Z","response_time":132,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-02T16:03:28.636Z","updated_at":"2026-05-02T16:03:29.301Z","avatar_url":"https://github.com/DEVOLOPER-1.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QUANTA ⚡\n\n\u003e *An open-source, distraction-free exam engine for students.*\n\u003e *No login. No tracking. No ads. Just questions.*\n\n**QUANTA** is a fully static, client-side exam engine that runs on GitHub Pages with zero build steps.\nDrop a CSV into `data/`, register it in `exams.json`, and it appears in the exam selector — instantly available to anyone with the link.\n\n---\n\n## Screenshot \u0026 Demo\n\n![QUANTA Module Selector](media-assets/QUANTA-selector-view.png)\n\n![QUANTA Active Exam View](media-assets/QUANTA-exam-view.png)\n\n![QUANTA Exam Results](media-assets/QUANTA-exam-results.png)\n\n\n**Live Demo:** [https://devoloper-1.github.io/QUANTA/](https://devoloper-1.github.io/QUANTA/)\n\n---\n\n## Features\n\n| Feature | Details |\n|---|---|\n| **Exam Selector** | Browse and select from multiple exam CSVs via a card catalog |\n| **Exam Mode** | Traditional timed assessment — score + explanations revealed at the end |\n| **Practice Mode** | Instant per-question feedback with full explanation after each answer |\n| **Flexible Timer** | Countdown (15–120 min) or unlimited elapsed mode |\n| **Question Map** | Visual grid showing answered / flagged / current question status |\n| **Flag System** | Mark questions for review before submitting |\n| **Keyboard Shortcuts** | `A`–`D` select · `→`/`←` navigate · `F` flag |\n| **Score Ring** | Animated circular score gauge with section breakdown bars |\n| **Review Mode** | Filter by All / Correct / Incorrect / Skipped / Flagged with explanations |\n| **Export JSON** | Download a full structured result report |\n| **Light + Dark Mode** | System preference detection + manual toggle with smooth transitions |\n| **Responsive** | Works well on mobile, tablet, and desktop |\n| **Zero Dependencies** | Vanilla HTML + CSS + ES Modules. No npm, no bundler, no framework |\n\n---\n\n## Project Structure\n\n```\nquanta/\n│\n├── index.html                  ← App shell (single HTML file)\n│\n├── css/\n│   ├── tokens.css              ← Design tokens: colors, fonts, spacing, shadows\n│   ├── base.css                ← Reset, typography, layout primitives, animations\n│   ├── components.css          ← Reusable UI: buttons, cards, badges, modals, toasts\n│   └── views.css               ← View-specific styles (selector, lobby, exam, results, review)\n│\n├── js/\n│   ├── app.js                  ← Entry point: registers routes and bootstraps the app\n│   ├── router.js               ← Hash-based view router\n│   ├── state.js                ← Singleton app state (cross-view data)\n│   │\n│   ├── models/\n│   │   ├── Question.js         ← Immutable value object, validates CSV row data\n│   │   └── Session.js          ← Mutable exam session: answers, flags, timing, results\n│   │\n│   ├── modules/\n│   │   ├── CSVParser.js        ← RFC-4180 compliant CSV parser (handles quoted fields)\n│   │   ├── Timer.js            ← Countdown + count-up timer, decoupled from DOM\n│   │   ├── ThemeManager.js     ← Light/dark theme with localStorage persistence\n│   │   └── ExamModes.js        ← OCP-compliant mode registry (Assessment, Practice)\n│   │\n│   └── views/\n│       ├── BaseView.js         ← Abstract base: lifecycle, event registry, helpers\n│       ├── SelectorView.js     ← Exam catalog / landing page\n│       ├── LobbyView.js        ← Pre-exam configuration (mode, timer, options)\n│       ├── ExamView.js         ← Main question interface (exam + practice)\n│       ├── ResultsView.js      ← Score ring, stats, section breakdown, export\n│       └── ReviewView.js       ← Filterable answer review with explanations\n│\n└── data/\n    ├── exams.json              ← ★ Exam registry — register new exams here\n    ├── xai-ml.csv              ← XAI \u0026 Responsible ML (100 questions)\n    └── your-new-exam.csv       ← ← Add your CSV here\n```\n\n---\n\n## Quick Start\n\nQUANTA requires HTTP to fetch CSV files. The easiest local options:\n\n```bash\n# Python (built-in, no install)\npython3 -m http.server 8000\n# → open http://localhost:8000\n\n# Node.js (no install)\nnpx serve .\n# → open http://localhost:3000\n\n# VS Code\n# Install \"Live Server\" extension → right-click index.html → Open with Live Server\n```\n\n### GitHub Pages (recommended for sharing)\n\n1. Push this repository to GitHub\n2. Go to **Settings → Pages → Source → `main` branch → `/` (root)**\n3. Your live URL will be `https://yourusername.github.io/quanta/`\n\nAll CSV fetching is relative — it just works.\n\n---\n\n## Adding a New Exam\n\n### Step 1 — Prepare your CSV\n\nCreate a spreadsheet with these **exact column headers** and export as UTF-8 CSV:\n\n| Column | Type | Description | Example |\n|---|---|---|---|\n| `id` | integer | Unique question number (1, 2, 3…) | `1` |\n| `section_id` | integer | Section group number (1–N) | `2` |\n| `section_name` | string | Human-readable section label | `\"EDA and Graphical Methods\"` |\n| `question` | string | Full question text | `\"Which measure of central tendency…\"` |\n| `option_a` | string | Option A text (no letter prefix) | `\"Mean\"` |\n| `option_b` | string | Option B text | `\"Median\"` |\n| `option_c` | string | Option C text | `\"Mode\"` |\n| `option_d` | string | Option D text | `\"Standard Deviation\"` |\n| `correct_answer` | string | Correct letter: `A`, `B`, `C`, or `D` | `\"C\"` |\n| `explanation` | string | Why the answer is correct | `\"The Mode is the most common value…\"` |\n| `difficulty` | string | `easy`, `medium`, or `hard` | `\"medium\"` |\n\n**CSV formatting rules:**\n- Wrap any field containing a comma in double-quotes: `\"This is, a field\"`\n- Escape a literal double-quote by doubling it: `\"She said \"\"hello\"\"\"`\n- First row must be the exact header row shown above\n- File must be UTF-8 encoded (default for most export tools)\n\n**Minimal example:**\n```csv\nid,section_id,section_name,question,option_a,option_b,option_c,option_d,correct_answer,explanation,difficulty\n1,1,\"Biology Basics\",\"What is the powerhouse of the cell?\",\"Nucleus\",\"Ribosome\",\"Mitochondria\",\"Golgi body\",\"C\",\"Mitochondria produce ATP through cellular respiration.\",\"easy\"\n2,1,\"Biology Basics\",\"DNA stands for:\",\"Dioxyribose Nucleic Acid\",\"Deoxyribonucleic Acid\",\"Dinitrogen Acetate\",\"Deoxyribose Nitrogen Acid\",\"B\",\"DNA = Deoxyribonucleic Acid, the carrier of genetic information.\",\"easy\"\n```\n\n### Step 2 — Add the CSV to `/data`\n\n```\ndata/\n├── exams.json\n├── xai-ml.csv\n└── biology-101.csv      ← your new file\n```\n\n### Step 3 — Register it in `data/exams.json`\n\n```json\n[\n  {\n    \"id\": \"biology-101\",\n    \"title\": \"Biology 101\",\n    \"description\": \"Covers cell biology, genetics, and evolution.\",\n    \"file\": \"data/biology-101.csv\",\n    \"tags\": [\"Biology\", \"Cell Biology\", \"Genetics\"],\n    \"difficulty\": \"beginner\",\n    \"sections\": 3,\n    \"questionCount\": 40,\n    \"estimatedMinutes\": 30,\n    \"author\": \"Your Name\"\n  }\n]\n```\n\n### Step 4 — Done\n\nRefresh the page. Your exam appears in the selector.\n\n---\n\n## Architecture Notes\n\n### Open/Closed Principle (OCP)\n\nThe codebase is designed to be **open for extension, closed for modification**.\n\n**Adding a new Exam Mode** (e.g. \"Timed Practice\"):\n1. Create `/js/modules/TimedPracticeMode.js` extending `ExamMode`\n2. Add one line to the `MODES` registry in `ExamModes.js`\n3. No other files change\n\n**Adding a new View**:\n1. Create `/js/views/MyView.js` extending `BaseView`\n2. Add one line to `app.js`: `router.register('myview', MyView)`\n3. No other files change\n\n### View Lifecycle\n\nEvery view follows the same contract via `BaseView`:\n- `render()` — builds DOM, binds events\n- `destroy()` — automatically cleans up all registered event listeners\n\nThe router calls `destroy()` on the departing view before mounting the next one — no memory leaks.\n\n---\n\n## Customisation\n\n### Design Tokens\n\nAll colors, fonts, spacing, and shadows live in `css/tokens.css`.\nThe light and dark themes are both defined there as CSS custom properties.\n\nTo change the primary accent color:\n```css\n:root        { --accent: #4F67FF; }\n[data-theme=\"dark\"] { --accent: #6878FF; }\n```\n\n### Pass Threshold\n\nCurrently hardcoded at 60% in `ResultsView.js`. To make it per-exam,\nadd a `passThreshold` field to `exams.json` and read it from `state.examMeta`.\n\n---\n\n## Contributing\n\nContributions are welcome! The most valuable contributions are:\n\n- **New question banks** — CSV files for any university-level subject\n- **Bug fixes** — especially edge cases in the CSV parser\n- **New exam modes** — extend `ExamMode` and open a PR\n\n### Contribution checklist for new CSVs\n\n- [ ] All 11 required columns present\n- [ ] `correct_answer` values are strictly `A`, `B`, `C`, or `D`\n- [ ] `difficulty` values are strictly `easy`, `medium`, or `hard`\n- [ ] `id` values are unique integers starting from 1\n- [ ] No personally identifiable information\n- [ ] Registered in `data/exams.json`\n\n---\n\n## Roadmap\n\n- [ ] Support for 2–5 answer options (not just A–D)\n- [ ] LaTeX/MathJax rendering for mathematical questions\n- [ ] Per-attempt history stored in `localStorage`\n- [ ] \"Weak Areas\" smart review (retry only questions answered incorrectly)\n- [ ] Offline PWA support\n\n---\n\n## License\n\n**Code** (HTML, CSS, JS) — MIT License\nFree to use, fork, and build upon.\n\n**Question Banks** (`data/*.csv`) — CC BY-NC-SA 4.0\nFree to use and adapt for non-commercial, educational purposes.\nMust credit original authors. Derivatives must carry the same license.\nCommercial use of the question banks is not permitted.\n\n---\n\n*Built for students who believe their study tools should feel as polished as the ideas they're learning.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevoloper-1%2Fquanta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevoloper-1%2Fquanta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevoloper-1%2Fquanta/lists"}