From d8e3be5c4f78ecd1c1d7e6373dea4af48a7f101f Mon Sep 17 00:00:00 2001 From: SantamRC Date: Fri, 4 Sep 2026 16:32:24 +0530 Subject: [PATCH 1/5] Santam GSoC 2026 Final Report Adds the final report post for the Mobile App Enhancement project, a thumbnail, and the Interactive Book V1/V2 UI comparison screenshots the post embeds. --- content/posts/Santam_GSoC2026_Final_Report.md | 449 ++++++++++++++++++ static/images/santam/Final Thumbnail.png | Bin 0 -> 273936 bytes static/images/santam/ui-comparison/README.md | 156 ++++++ .../santam/ui-comparison/after/01-home.png | Bin 0 -> 269743 bytes .../santam/ui-comparison/after/02-drawer.png | Bin 0 -> 253747 bytes .../after/03-drawer-expanded.png | Bin 0 -> 264213 bytes .../ui-comparison/after/04-chapter-page.png | Bin 0 -> 324326 bytes .../after/05-simulator-and-quiz.png | Bin 0 -> 247689 bytes .../ui-comparison/before/01-landing.png | Bin 0 -> 515880 bytes .../santam/ui-comparison/before/02-drawer.png | Bin 0 -> 280772 bytes .../before/03-drawer-expanded.png | Bin 0 -> 278959 bytes .../ui-comparison/before/04-chapter-page.png | Bin 0 -> 444418 bytes .../santam/ui-comparison/before/05-tables.png | Bin 0 -> 223719 bytes .../before/06-interaction-widget.png | Bin 0 -> 223719 bytes .../ui-comparison/before/07-popquiz.png | Bin 0 -> 229877 bytes .../ui-comparison/before/08-toc-sheet.png | Bin 0 -> 173820 bytes .../santam/ui-comparison/before/09-search.png | Bin 0 -> 509173 bytes .../santam/ui-comparison/v1-render-fix.patch | 107 +++++ 18 files changed, 712 insertions(+) create mode 100644 content/posts/Santam_GSoC2026_Final_Report.md create mode 100644 static/images/santam/Final Thumbnail.png create mode 100644 static/images/santam/ui-comparison/README.md create mode 100644 static/images/santam/ui-comparison/after/01-home.png create mode 100644 static/images/santam/ui-comparison/after/02-drawer.png create mode 100644 static/images/santam/ui-comparison/after/03-drawer-expanded.png create mode 100644 static/images/santam/ui-comparison/after/04-chapter-page.png create mode 100644 static/images/santam/ui-comparison/after/05-simulator-and-quiz.png create mode 100644 static/images/santam/ui-comparison/before/01-landing.png create mode 100644 static/images/santam/ui-comparison/before/02-drawer.png create mode 100644 static/images/santam/ui-comparison/before/03-drawer-expanded.png create mode 100644 static/images/santam/ui-comparison/before/04-chapter-page.png create mode 100644 static/images/santam/ui-comparison/before/05-tables.png create mode 100644 static/images/santam/ui-comparison/before/06-interaction-widget.png create mode 100644 static/images/santam/ui-comparison/before/07-popquiz.png create mode 100644 static/images/santam/ui-comparison/before/08-toc-sheet.png create mode 100644 static/images/santam/ui-comparison/before/09-search.png create mode 100644 static/images/santam/ui-comparison/v1-render-fix.patch diff --git a/content/posts/Santam_GSoC2026_Final_Report.md b/content/posts/Santam_GSoC2026_Final_Report.md new file mode 100644 index 0000000..4ff6af0 --- /dev/null +++ b/content/posts/Santam_GSoC2026_Final_Report.md @@ -0,0 +1,449 @@ +--- +title: "GSoC 2026 Final Report: CircuitVerse Mobile App Enhancement" +date: 2026-09-04T00:59:00+05:30 +draft: false +author: "Santam" +image: "/images/santam/Final Thumbnail.png" +tags: ["GSoC 2026", "CircuitVerse", "Flutter", "Mobile App", "Final Report"] +type: post +--- + +Hello everyone, + +This is my final report for Google Summer of Code 2026 with **CircuitVerse**. My project was *Mobile App Enhancement* — taking the CircuitVerse Flutter app from a codebase that had drifted a few years behind its ecosystem, and turning it into something that builds reliably, ships reliably, and finally does justice to the two features that matter most on a phone: the **Interactive Book** and the **circuit simulator**. + +If you read my [mid-term report](https://blog.circuitverse.org/posts/santam_gsoc2026_midterm_report/), the first half was mostly foundation: dependency upgrades, build toolchain, repository hygiene, and the first cut of the Interactive Book rewrite. The second half is where the features landed — a server-driven Interactive Book with offline reading and progress tracking, a JSON API generated from the book's own source, an embedded Vue simulator that runs without a network, and a CI/CD pipeline that no longer merges broken code into `master`. + +This post walks through all of it. + +--- + +## The Shape of the Project + +The app is a Flutter client for [circuitverse.org](https://circuitverse.org) — projects, groups, assignments, notifications, a simulator, and the Interactive Book, an interactive digital-logic textbook. Three things were true when I started: + +1. **The build was fragile.** Android SDK, Gradle, AGP and Kotlin had all drifted; generated files were committed; CI was one 353-line workflow. +2. **The Interactive Book was a markdown parser in a trench coat.** It fetched raw kramdown from the Jekyll website, ran it through `flutter_markdown` with 8 custom syntaxes and 8 custom builders, and fetched interactive components as raw HTML+JS from GitHub at runtime to stuff into a WebView. +3. **The simulator was network-only.** No connection, no simulator — on a platform where users are most likely to be offline. + +Each of those became a workstream. + +--- + +## Part 1 — Foundation + +Before any feature work could be trusted, the build had to be trustworthy. + +**[#530 — Upgrading Deprecated Dependency Versions (Android)](https://github.com/CircuitVerse/mobile-app/pull/530)** *(merged)* +Migrated the Android toolchain to a modern baseline — SDK 35 → 36, Gradle 8.10.2 → 8.14, AGP 8.7.0 → 8.11.1, Kotlin 1.9.25 → 2.2.20. Not a version bump so much as an ordering problem: each upgrade constrains the others, so it took working through the compatibility matrix to find a combination that actually resolved. + +**[#593 — chore: upgraded dependencies](https://github.com/CircuitVerse/mobile-app/pull/593)** *(merged)* +The Flutter-side pass: minimum iOS deployment target to 13.0, CI toolchain to the latest stable, a dropdown initialisation bug fixed across the assignments, projects and notifications forms, and the in-app showcase flow simplified. + +**[#578](https://github.com/CircuitVerse/mobile-app/pull/578)** and **[#619](https://github.com/CircuitVerse/mobile-app/pull/619)** *(both merged)* +Removed Flutter-generated plugin registration files from version control and extended the ignore rules across Android, iOS and web build artefacts. These regenerate on every build; tracking them produces diff noise and cross-machine conflicts for no benefit. + +**[#636 — Fix black screen issue](https://github.com/CircuitVerse/mobile-app/pull/636)** *(merged)* +A one-line fix with a satisfying blast radius: a recent commit had left `Navigator.pop` called twice, so screens like Contribute and About opened to a black screen. One deleted line, several screens back. + +--- + +## Part 2 — Interactive Book V2 + +This was the centre of the project, and the largest single piece of work: **[#624 — Interactive Book V2](https://github.com/CircuitVerse/mobile-app/pull/624)** (+5,203 / −4,552 across 122 files). + +### What was wrong with V1 + +The old path looked like this: + +``` +learn.circuitverse.org/_api/pages/ + ▼ + IbApi (HTTP) → IbEngineService → IbPageViewModel → IbPageView + (parses raw markdown + HTML) + ▼ + MarkdownBody (flutter_markdown) + ├── Math → flutter_math_fork + ├──