[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82994":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":46,"readmeContent":47,"aiSummary":48,"trendingCount":16,"starSnapshotCount":16,"syncStatus":15,"lastSyncTime":49,"discoverSource":50},82994,"get-it","beltromatti\u002Fget-it","beltromatti","Read it. See it. Get it. Built at GDG AI Hack Milan 2026 for \"Learn Different\" track.","https:\u002F\u002Fgetit.noesisai.it",null,"JavaScript",643,79,9,2,0,418,582,588,1254,99.71,"Apache License 2.0",false,"main",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"agents","ai","codex","edtech","feynman-technique","flashcards","gdg-ai-hack-2026","hackathon","knowledge-graph","learning","llm","nextjs","openai","pdf","react","spaced-repetition","study-tools","threejs","typescript","visualization","2026-06-12 04:01:39","\u003Cdiv align=\"center\">\n\n# Get It.\n\n### Read it. See it. Get it.\n\n**The study companion that turns a PDF into a measurable mastery map. Built around the document, not in place of it.**\n\n[![GDG AI Hack 2026](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGDG%20AI%20Hack-Milan%202026-1a1a2e?style=for-the-badge)](https:\u002F\u002Fgdg.community.dev\u002F)\n[![Website](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWebsite-getit.noesisai.it-5b66f1?style=for-the-badge&logo=data:image\u002Fsvg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIiIHkxPSIxMiIgeDI9IjIyIiB5Mj0iMTIiLz48cGF0aCBkPSJNMTIgMmExNS4zIDE1LjMgMCAwIDEgNCAxMCAxNS4zIDE1LjMgMCAwIDEtNCAxMCAxNS4zIDE1LjMgMCAwIDEtNC0xMCAxNS4zIDE1LjMgMCAwIDEgNC0xMHoiLz48L3N2Zz4=&logoColor=white)](https:\u002F\u002Fgetit.noesisai.it)\n[![Built with Codex CLI](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuilt%20with-Codex%20CLI-111113?style=for-the-badge&logo=openai&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex)\n\n[![Next.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-16-000000?logo=nextdotjs&logoColor=white)](https:\u002F\u002Fnextjs.org)\n[![Electron](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FElectron-33-2C2C2C?logo=electron&logoColor=9FEAF9)](https:\u002F\u002Fwww.electronjs.org\u002F)\n[![React 19](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-19-149ECA?logo=react&logoColor=white)](https:\u002F\u002Freact.dev)\n[![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.x-3178C6?logo=typescript&logoColor=white)](https:\u002F\u002Fwww.typescriptlang.org)\n[![Tailwind CSS 4](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTailwind-4.x-38BDF8?logo=tailwindcss&logoColor=white)](https:\u002F\u002Ftailwindcss.com)\n[![Three.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FThree.js-r184-000000?logo=threedotjs&logoColor=white)](https:\u002F\u002Fthreejs.org)\n[![pdf.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpdf.js-5.x-F40F02?logo=mozilla&logoColor=white)](https:\u002F\u002Fmozilla.github.io\u002Fpdf.js\u002F)\n[![License: Apache 2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache_2.0-blue.svg)](#license)\n\n\u003Cbr \u002F>\n\n![Get It. hero animation](hero.gif)\n\n\u003C\u002Fdiv>\n\n---\n\n## The problem\n\nThe student already has the PDF. They don't need another summary. They need to see the parts a textbook refuses to draw, and they need a way to prove to themselves that they have understood. Concept by concept, not page by page.\n\nToday's tools measure surface area, not depth. Flashcard ratings measure recall in the moment. Mind maps measure how much you drew. Summaries measure how patient the AI was. None of them answer the only question that matters on exam day:\n\n> *Would I survive a question I have not seen before?*\n\nGet It. is the layer that answers it.\n\n## How it works\n\nDrop a PDF — a digital, text-based one. Get It. checks the file up front and turns away scans or image-only documents with a clear message, because it reads text, not pictures. Once a file clears that gate, three things start at once.\n\n1. **The page tags itself.** A concept-detection agent walks every page and plants inline tag pills on the words that benefit from a picture. Each tag carries a renderer choice: 3D scene, 2D animation, formula walkthrough, plotted graph, or cited source.\n2. **The right pane fills in.** Click a tag and its visualization renders — Three.js for anatomy and molecules, Canvas for physics and chemistry animations, KaTeX-clean formulas, a plot engine for functions and distributions, authoritative quotes for legal articles and named papers. Ready tags are marked so you can tell what already exists, and a setting renders every tag automatically as you read if you prefer. When a sandbox crashes, the agent reads its own error and re-emits a fix. The student sees \"repairing\" instead of red text.\n3. **A knowledge graph builds itself.** Six to twenty-five concept nodes, typed edges, sized by mastery, coloured by progress, clickable for the four-axis breakdown plus the evaluator's note.\n\nThen the loop closes. Four study tools feed one journal.\n\n| Tool | What it measures |\n|---|---|\n| 💬 **Chat** | Recall references and paraphrases. Multi-turn, multi-thread, scoped to one document. |\n| 🎴 **Flashcards** | Open-recall under self-grade. Again \u002F Hard \u002F Good \u002F Easy on every card. |\n| ✅ **Quizzes** | Forced-choice discrimination. One correct answer, three plausible distractors. |\n| 💡 **Feynman** | The agent plays a curious eight-year-old. *You* teach. The strongest comprehension signal. |\n\nAfter every completed session the **evaluator** agent reads the journal end-to-end and updates four scores per concept node on the knowledge graph: **memory, comprehension, structure, application**. Each scored 0 to 100. Each monotone non-decreasing by a runtime clamp. The student can only progress, never regress.\n\nThe four numbers are the difference between a study app and a measurement instrument.\n\n## Bring your own ChatGPT\n\nThe AI side of Get It. has no business model layered on top.\n\nYou sign in once with the ChatGPT account you already pay for (or an OpenAI API key) through the official Codex CLI. Every agent inside the app runs against your own tier. There is no Get It. server, no shared key pool, no per-message metering, no \"AI credits\" wallet, no second subscription, and no plan to ever ship one.\n\n- **You pay for AI once.** ChatGPT Plus, Pro, Team, Enterprise, or Edu covers everything Get It. does.\n- **Plus is the practical floor.** The free tier signs in but its Codex allowance is intentionally small. Plus and above give comfortable session headroom in the same flow.\n- **Your data stays yours.** No backend, no upload step, no analytics. The work-context journal is a single JSON file on your disk, downloadable in one click from the right-pane menu.\n- **Rate limits are OpenAI's.** When you hit one, the app shows a countdown banner and resumes the background work itself once the window clears.\n\nOther AI study apps wrap a marked-up subscription around a model API the vendor holds. Get It. wraps a study workflow around the access you already have.\n\n## Install\n\nGet It. is a desktop app. Download the installer for your machine, double-click, sign in with the ChatGPT account you already use. Nothing else to buy.\n\n| Platform | Installer |\n|---|---|\n| macOS (Apple Silicon, M1 \u002F M2 \u002F M3 \u002F M4) | `Get It-\u003Cversion>-arm64.dmg` |\n| macOS (Intel) | `Get It-\u003Cversion>.dmg` |\n| Windows 10 \u002F 11 (x64) | `Get It Setup \u003Cversion>.exe` |\n| Linux (x64) | `Get It-\u003Cversion>.AppImage` |\n\nEvery release ships on the **[Releases](https:\u002F\u002Fgithub.com\u002Fbeltromatti\u002Fget-it\u002Freleases)** page. The app checks for a newer build on every launch and offers a one-click update inside its own window.\n\n### First launch\n\nThe setup wizard verifies the bundled Codex CLI, walks the OAuth sign-in, and refuses to open the main window until both gates are green. Then drop a PDF, or open one of the five bundled samples (anatomy, classical mechanics, Italian constitution, calculus, organic chemistry). Tags, chats, flashcard decks, quizzes, Feynman sessions, and the knowledge graph all stay on your computer.\n\n### Gatekeeper and SmartScreen\n\nmacOS builds (both Apple Silicon and Intel) are **signed with a paid Apple Developer ID Application certificate AND notarized by Apple**. On a fresh download from this repo's [Releases](https:\u002F\u002Fgithub.com\u002Fbeltromatti\u002Fget-it\u002Freleases) page the OS opens the app with **no Gatekeeper prompt** — the stapled notarization ticket tells Gatekeeper the binary is trusted before the network is even consulted. `spctl --assess` reports `source=Notarized Developer ID` and `xcrun stapler validate` passes on both architectures.\n\nWindows builds are not signed. The first launch shows a SmartScreen warning (\"Windows protected your PC\"); click **More info → Run anyway**. The warning persists because SmartScreen reputation is per-certificate and we currently don't ship a Windows code-signing cert (Microsoft's Trusted Signing service requires a paid Azure subscription that the project doesn't carry).\n\nIf you ever pull a build that *wasn't* notarized — a local ad-hoc build before secrets are wired up, an old release from before v1.2.1 — macOS shows the \"unidentified developer\" prompt instead. The bypass is **System Settings → Privacy & Security → Open Anyway** (macOS Sequoia 15 and macOS 26 removed the older right-click → Open shortcut). Or strip the quarantine flag in one shot from the CLI: `xattr -dr com.apple.quarantine \"\u002FApplications\u002FGet It.app\"`.\n\n### Storage\n\nEverything lives under one OS-native directory.\n\n| OS | Path |\n|---|---|\n| macOS | `~\u002FLibrary\u002FApplication Support\u002Fget-it\u002F` |\n| Windows | `%APPDATA%\\get-it\\` |\n| Linux | `~\u002F.local\u002Fshare\u002Fget-it\u002F` |\n\nLayout: one folder per document at `docs\u002F\u003CdocId>\u002F` (source PDF, extracted text cache, tags, work context, knowledge graph), a `docs.json` index at the root, a `codex-scratch\u002F` working dir, and `logs\u002F`. Deleting a doc from the Library wipes the whole folder.\n\n## Hack on it\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fbeltromatti\u002Fget-it.git\ncd get-it\nnpm install\nnpm run dev    # builds the Next.js standalone bundle and opens it in Electron\n```\n\n`npm run dev` exercises the full path: setup wizard, embedded server, IPC bridge. Re-run after edits.\n\nFor browser-side hot reload:\n\n```bash\nnpm run browser:dev    # http:\u002F\u002Flocalhost:3000\n```\n\n(The Electron-internal HMR loop has a known Next 16.2.6 + Turbopack + Chromium 130 hydration glitch, so browser dev or rebuild-and-test is the cleaner inner loop.)\n\nLocal desktop builds, one or all targets:\n\n```bash\nnpm run build && npm run electron:prepare\n\nnode scripts\u002Fbuild-electron.mjs --target=mac-arm64   # or mac-x64 \u002F win-x64 \u002F --all\n```\n\nArtefacts land in `dist-electron\u002F`. Cross-arch builds pull the matching Codex platform package from npm on the fly, so you do not need an Intel Mac or a Windows VM to build for them.\n\nReleases are tag-driven. Push a `vX.Y.Z` tag to `main` and `.github\u002Fworkflows\u002Frelease.yml` builds every target on a native runner, attaches the `.dmg` \u002F `.exe` \u002F `.AppImage` to a GitHub Release, and pins the version into Info.plist and NSIS metadata from the tag itself.\n\n## Architecture in one breath\n\n```\nupload  ─► quality gate (model-free) ─► pdfjs-dist extracts text + glyph bboxes per page\n         │\n         ├──► visualizer pipeline\n         │     ├─ batched concept-detection agent  →  DetectedConcept[] with anchor strings\n         │     │   (≤5 pages per call, concurrency 3)   (each concept carries its page)\n         │     └─ per-tag visualization-spec agent  →  3d \u002F 2d-anim \u002F formula \u002F graph \u002F 2d-text spec\n         │        (lazy: on click by default)           (server-side syntax preflight + client-side\n         │                                               runtime repair loop on sandbox crashes)\n         │\n         └──► knowledge-graph pipeline\n               ├─ kg-build agent (one-shot)            →  6–25 concept nodes + typed edges + global note\n               │  ◄── full document text                  (bounded by the 150-page upload cap)\n               └─ kg-evaluate agent (incremental)      →  per-node {memory, comprehension, structure,\n                  ◄── current graph (baseline scores)     application} 0–100, monotone non-decreasing\n                  ◄── interactions since the last pass\n```\n\nNine prompts behind one auth path, nine schemas behind one shared SDK wrapper. The full design rationale, the four-axis rubric, the per-doc evaluator queue, the LLM-code sandbox, and the desktop-packaging layer are in [`technical-writeup.md`](technical-writeup.md), also rendered as [PDF](technical-writeup.pdf).\n\n## The team\n\nBuilt in 24 hours at **GDG AI Hack 2026, Milan**, for the **Braynr** challenge. The hackathon submission lived at commit `277ec43`. Everything past that commit is post-hackathon polish: desktop packaging, the persistent Library, the first-launch setup wizard, the quizzes tool, the in-app auto-update flow, the server-side jobs runner, and long-document support that keeps a 100-page PDF affordable on a single ChatGPT plan. The product is the same. Only the way it gets onto a student's laptop has changed.\n\n- **Mattia Beltrami**, Politecnico di Milano\n- **Matteo Impieri**, Politecnico di Milano\n- **Filippo Difronzo**, Politecnico di Milano\n- **Luca Feggi**, Università di Padova\n\n## Notice\n\n**Get It. is an independent project. It is not affiliated with, endorsed by, or sponsored by OpenAI.** The app uses the official open-source [Codex CLI](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex) as the transport between the local app and OpenAI's models, signed in with the end user's own ChatGPT or OpenAI API account. \"OpenAI\", \"ChatGPT\", and \"Codex\" are trademarks of their respective owner; we use the names only to describe what Get It. interoperates with.\n\nYour use of OpenAI's models through Get It. is subject to OpenAI's own [Terms of Use](https:\u002F\u002Fopenai.com\u002Fpolicies\u002Fterms-of-use), [Usage Policies](https:\u002F\u002Fopenai.com\u002Fpolicies\u002Fusage-policies), and [Privacy Policy](https:\u002F\u002Fopenai.com\u002Fpolicies\u002Fprivacy-policy), and to the Codex CLI's [own license and release notes](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex). Those documents are authoritative for what the model service permits, how data is handled on OpenAI's side, and what each subscription tier covers.\n\n## License\n\nApache License 2.0. See [`LICENSE`](LICENSE). Source is open. Contributions are welcome.\n","Get It. 是一款将PDF文档转化为可衡量掌握程度学习地图的学习伴侣工具。其核心功能包括使用AI技术自动识别文档中的概念，并为用户提供视觉化的知识图谱，支持间隔重复学习法以加强记忆效果。该工具基于Next.js和React构建，结合了TypeScript、Three.js等现代前端技术栈，确保了良好的用户体验与性能。适用于需要深入理解复杂材料的学生或自学者，尤其是那些希望通过主动学习策略来提高理解和记忆效率的人群。通过Get It.，用户不仅能更直观地看到自己的学习进度，还能测试自己对新问题的应对能力，从而更好地准备考试或实际应用。","2026-06-11 04:09:49","CREATED_QUERY"]