<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mandy</title>
    <description>The latest articles on DEV Community by Mandy (@mandy_324).</description>
    <link>https://dev.to/mandy_324</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3774525%2Ff31bdaad-bd26-4aea-a2c2-176b8f1e0412.png</url>
      <title>DEV Community: Mandy</title>
      <link>https://dev.to/mandy_324</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mandy_324"/>
    <language>en</language>
    <item>
      <title>I Built a Charity Platform with Radical Penny-Level Transparency in a Day — Powered by Google Gemini</title>
      <dc:creator>Mandy</dc:creator>
      <pubDate>Fri, 27 Feb 2026 00:02:37 +0000</pubDate>
      <link>https://dev.to/mandy_324/i-built-a-charity-platform-with-radical-penny-level-transparency-in-a-day-powered-by-google-gemini-c8l</link>
      <guid>https://dev.to/mandy_324/i-built-a-charity-platform-with-radical-penny-level-transparency-in-a-day-powered-by-google-gemini-c8l</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This project started as a proposal. My employer loved it so much they decided to fund it entirely. I'm a fresher — and somehow I'm the project manager.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A quick note on the name&lt;/strong&gt;: I came up with &lt;em&gt;"OpenHand"&lt;/em&gt; and honestly loved it — but the name is already taken, so it's not finalized. We're just calling it OpenHand internally for now. The final name will be something original that isn't claimed yet. I liked it too much not to keep using it in the meantime.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was scrolling through scholarship donation sites one evening and I kept hitting the same wall: you donate ₹2,000 to help someone attend college and then... silence. You get a thank-you email. Maybe a vague update six months later. But you never actually know if your ₹2,000 paid for a textbook, tuition, or ended up somewhere else entirely.&lt;/p&gt;

&lt;p&gt;That bothered me deeply.&lt;/p&gt;

&lt;p&gt;So I asked myself: what if donors could see &lt;em&gt;every single rupee&lt;/em&gt; they donated traced back to an actual receipt? Not "funds were used responsibly" — but literally a scanned invoice from the college, a bank transfer screenshot, metadata and all?&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;OpenHand&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenHand&lt;/strong&gt; is a full-stack charity platform where individuals in need (scholarships, medical emergencies, livelihood support, community projects) can post aid requests, get them verified through a two-level admin review process, and receive donations from the public — with every single disbursement of funds published publicly with attached proof documents.&lt;/p&gt;

&lt;p&gt;The platform's core differentiator is what I call the &lt;strong&gt;Transparency Engine&lt;/strong&gt;: funds are &lt;em&gt;never&lt;/em&gt; handed directly to recipients. Instead, administrators pay institutions and vendors directly — colleges, hospitals, bookstores — then publish a disbursement report with the invoice, bank transfer reference, and payment confirmation attached. Every donor who contributed to that cause receives an in-app notification:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Update on Rahul's Scholarship: ₹1,200 paid to ABC College (Receipt #4521) + ₹800 paid to National Bookstore for textbooks (Invoice #789)"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It goes deeper than that — each donor can also see exactly how &lt;em&gt;their specific contribution&lt;/em&gt; was proportionally allocated across those line items. Your ₹2,000 doesn't disappear into a pool. It follows a paper trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Spring Boot 3, Java 17, Spring Security, JPA/Hibernate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL 16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Vue 3 + Vite + Pinia + Vue Router&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;JWT with embedded role + userId claims&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;Docker + Docker Compose (3-container setup)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Storage&lt;/td&gt;
&lt;td&gt;Multipart upload (proof documents, KYC docs, receipts)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Key Features in the MVP
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10-stage request lifecycle&lt;/strong&gt;: Draft → Submitted → Level 1 Review → Level 1 Approved → Level 2 Review → Published → Funding → Fully Funded → Disbursement → Completed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two-level admin review&lt;/strong&gt;: Level 1 verifies document authenticity; Level 2 does deep institutional verification and approves for public listing — with separate internal notes at each stage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control&lt;/strong&gt;: four roles (regular user, L1 admin, L2 admin, super admin) — every API endpoint locked down accordingly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disbursement lifecycle&lt;/strong&gt;: Create → Mark Paid → Publish (with proof attachments) — triggers real-time donor notifications at each stage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Donor dashboard&lt;/strong&gt;: Personalized view of all funded causes, disbursement reports, and total impact summary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Milestone updates&lt;/strong&gt;: Recipients post progress updates (exam results, achievements, graduation) that automatically notify all their donors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin audit trail&lt;/strong&gt;: Every admin action permanently logged — who, when, what changed, reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform impact stats&lt;/strong&gt;: Live public dashboard (total funds raised, active campaigns, completed causes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Donor badges&lt;/strong&gt;: Four progressive tiers — first donation, repeat donor, generous, and champion — computed automatically based on giving history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 request categories&lt;/strong&gt;: Scholarship, Medical, Livelihood, Community — each with tailored verification fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full containerization&lt;/strong&gt;: One command spins the entire platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This went from a blank VS Code window to a working, containerized, seed-data-loaded application in a single day.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Role Google Gemini Played
&lt;/h3&gt;

&lt;p&gt;I didn't use Gemini as a code autocomplete tool. I used it as a &lt;strong&gt;thinking partner through four distinct architectural phases&lt;/strong&gt; — each treated as its own focused session with full context handed in upfront.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 — Feature Planning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before writing a single line of code, I described the problem to Gemini: the trust gap in charity platforms, the pain point of donors never knowing where money goes, and my instinct that direct disbursement with proof was the answer.&lt;/p&gt;

&lt;p&gt;Gemini helped me stress-test edge cases I wouldn't have caught on my own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;What happens if a campaign doesn't hit its funding goal by deadline?&lt;/em&gt; → Three options: extend deadline, partial scholarship, or refund donors — admin decides per case.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;How do you prevent someone from posting multiple overlapping requests?&lt;/em&gt; → Cooldown period — can't post a new request until the previous one resolves.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;How does penny-level tracking work across many donors?&lt;/em&gt; → Proportional allocation — if you donated 10% of the total, you see 10% of each disbursement line item.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output was a structured &lt;code&gt;features.md&lt;/code&gt; — 258 lines of specification across 11 feature domains. That document became the single source of truth for everything that followed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 — Frontend Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the spec locked, I described the four core user journeys to Gemini: a recipient posting a request, a donor browsing and giving, an admin reviewing and disbursing, a donor tracking their impact. We mapped those journeys to Vue components, Pinia store structure, and Vue Router guard patterns.&lt;/p&gt;

&lt;p&gt;Key decisions from this phase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embed &lt;code&gt;role&lt;/code&gt; in JWT claims so the frontend can make role-based decisions without an extra API round-trip&lt;/li&gt;
&lt;li&gt;30-second notification polling in the navbar (instead of WebSockets for MVP simplicity)&lt;/li&gt;
&lt;li&gt;A 3-step form wizard for request creation so recipients aren't hit with one overwhelming 20-field form in one go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 — Backend Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most technically dense session. I needed a Spring Boot architecture that could handle the state machine, the dual admin approval flow, and the disbursement-to-notification pipeline — without becoming spaghetti.&lt;/p&gt;

&lt;p&gt;Gemini helped me reason through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A custom global exception handler with mapped field-level validation errors (not generic 500s) for a much better frontend experience&lt;/li&gt;
&lt;li&gt;Layered DTOs separating internal entity state from API response shape — particularly the donation response DTO, which masks donor identity for anonymous contributions&lt;/li&gt;
&lt;li&gt;The audit service design: a standalone append-only table with &lt;code&gt;entityType/entityId&lt;/code&gt; rather than versioned rows, so audit queries stay simple forever&lt;/li&gt;
&lt;li&gt;Spring Security matcher ordering — getting public browse endpoints accessible without auth while all write and admin endpoints stay protected, without conflicting patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: 9 controllers, 10 services, 8 repositories — every component with a single clear responsibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 4 — Dockerization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemini walked me through the &lt;code&gt;depends_on&lt;/code&gt; + &lt;code&gt;healthcheck&lt;/code&gt; pattern — making the Spring Boot container explicitly wait for &lt;code&gt;pg_isready&lt;/code&gt; before attempting datasource initialization. It also flagged that &lt;code&gt;ddl-auto: update&lt;/code&gt; is fine for MVP but flagged Flyway migrations as a pre-production requirement.&lt;/p&gt;

&lt;p&gt;The final &lt;code&gt;docker-compose.yml&lt;/code&gt; spins up three containers: PostgreSQL 16 with a persistent named volume, the Spring Boot backend built from a multi-stage Dockerfile, and an Nginx container serving the Vue production build. Zero local installations needed beyond Docker itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;The platform is currently under active development and is not yet publicly deployed — it is being funded by my organization ahead of a worldwide launch in the coming weeks.&lt;/p&gt;

&lt;p&gt;Below is a walkthrough of the key screens in the working MVP:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public browse page&lt;/strong&gt; — Request cards with live progress bars, category filters, verification badges, and funding deadlines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Request detail page&lt;/strong&gt; — The full story, itemized funding breakdown, disbursement timeline with proof attachment links, and inline donation form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin review panel&lt;/strong&gt; — L1 and L2 review queues with internal notes, approval/rejection actions, and funding deadline controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin disbursements&lt;/strong&gt; — Create a disbursement, mark it paid, publish it (which fires in-app notifications to all donors instantly).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Donor dashboard&lt;/strong&gt; — Total donated, causes funded, badge tier, and recent donation history linked back to each request.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A live link will be shared here once we launch — and when that day comes, I'll be posting about it everywhere. Right here on DEV, on LinkedIn, and anywhere else people will listen. This one means a lot.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;State machines are the right abstraction for lifecycle modeling.&lt;/strong&gt; Once I modelled the request lifecycle as explicit enum states, everything else became clear — what transitions are valid, what notifications to fire at each transition, what each role is allowed to trigger. Never track multi-stage status with ad-hoc boolean flags.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JWT claim design matters from day one.&lt;/strong&gt; Embedding both &lt;code&gt;role&lt;/code&gt; and &lt;code&gt;userId&lt;/code&gt; directly in the token means every request handler can authorize and identify the caller without a database round-trip. Mid-build I discovered an earlier scaffolded token provider class that hadn't embedded the user ID — a decision that would have cascaded painfully through every service that needed to know who was acting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DTOs protect you from your own database.&lt;/strong&gt; Returning a raw entity directly from a REST endpoint is a ticking clock — eventually you add a sensitive field and forget it's exposed. The discipline of explicit DTO classes with factory methods (especially the donation response DTO handling anonymous donor masking) saved real headaches down the line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit tables are cheap and invaluable.&lt;/strong&gt; The audit log table cost me 45 minutes to build. For a platform where humans make trust-critical financial decisions, knowing that every admin action is permanently recorded — who approved, when, with what justification — is foundational, not a nice-to-have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal
&lt;/h3&gt;

&lt;p&gt;I'm a fresher. And the way this project got funded was not something I planned.&lt;/p&gt;

&lt;p&gt;I built this entirely on my own time, for myself — because I genuinely wanted it to exist. Once I had a working demo, I casually showed it to my manager. He liked it enough to bring his manager in — a director. The director liked it enough to gather the senior leadership team. I demoed the working application to all of them. They approved it on the spot and decided to fund it entirely under the organization.&lt;/p&gt;

&lt;p&gt;I'm now the project manager of something I built in a single day as a personal side project. That still doesn't feel real.&lt;/p&gt;

&lt;p&gt;The lesson here isn't about presentation skills or pitching frameworks. It's simpler: &lt;strong&gt;ship something real&lt;/strong&gt;. A working demo in front of the right people will always say more than any slide deck or spec document ever could.&lt;/p&gt;

&lt;p&gt;I also learned to be comfortable with deliberate scope. Shipping a working, demonstrable core beats shipping a half-broken everything. Razorpay integration, email delivery, and recurring donations are all staged — the foundation is solid, and they'll come next.&lt;/p&gt;




&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Worked Brilliantly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Structured problem-solving sessions.&lt;/strong&gt; When I came to Gemini with well-framed questions and full context ("here's the feature spec, here's the entity model, what are the failure modes in this design?"), the responses were genuinely insightful — not textbook answers, but responses that probed my specific design decisions.&lt;/p&gt;

&lt;p&gt;The feature planning phase was exceptional. Gemini surfaced edge cases — partial funding resolution, the cooldown anti-fraud measure, the KYC verification flow — that I would have hit much later and much more expensively in the build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-layer consistency.&lt;/strong&gt; When I described a frontend feature, Gemini would naturally flag "you'll need the backend endpoint to return X for that to work" — catching API contract mismatches before they became integration bugs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where I Needed More
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Large interconnected code generation&lt;/strong&gt; occasionally needed reconciliation. When generating multiple service classes together, a method signature in one class wouldn't quite align with the interface expected by another. The code was correct in isolation — the integration seams needed a human review pass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over-engineering instinct.&lt;/strong&gt; When I asked for a simple file upload handler, I got back a multi-interface strategy-pattern solution. A single focused service class was the right call for an MVP. I had to explicitly say "simpler is fine — we're not designing for hot-swappable storage backends right now."&lt;/p&gt;

&lt;h3&gt;
  
  
  The Ugly
&lt;/h3&gt;

&lt;p&gt;Mid-build, I asked Gemini to help fix a Spring Security CORS issue with preflight requests being blocked. The fix it suggested was technically correct — but it introduced a security regression by widening the allowed origins to &lt;code&gt;*&lt;/code&gt;. It wasn't wrong to suggest it (it's a standard debugging step), but it highlighted the core lesson: &lt;strong&gt;you need to understand every suggestion before you apply it.&lt;/strong&gt; The right tool still requires a thinking operator.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;OpenHand is in active development, fully funded by my organization. The next build sprint covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real Razorpay/Stripe integration&lt;/strong&gt; — escrow capability, refund mechanisms for failed campaigns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email delivery&lt;/strong&gt; — SMTP infrastructure is configured; notification templates are next&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Penny-level allocation UI&lt;/strong&gt; — the headline feature: each donor's dashboard shows their specific rupees apportioned across each disbursement line item&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KYC verification workflow&lt;/strong&gt; — ID gateway integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Milestone post form&lt;/strong&gt; — recipient UI for posting updates (backend complete, frontend form staged)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impact visualization&lt;/strong&gt; — geographic heatmap, category breakdowns, monthly trend charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within a few weeks, OpenHand will go live publicly. Anyone will be able to post a request — for a scholarship, medical treatment, livelihood support, or a community project — and every donor will be able to trace exactly where every rupee went, with the actual receipts to prove it.&lt;/p&gt;

&lt;p&gt;The mission is earnest: if every charity platform worked this way, the trust deficit that holds so many people back from donating would simply stop existing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The four-component approach — Plan → Frontend → Backend → Infrastructure — reflects a belief that AI is most valuable when you bring it a structured problem, not an open-ended one. Each Gemini session started with context. The outputs were sharp because the inputs were specific.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI-assisted development is a collaboration. Gemini was the smartest teammate in the room on Day 1. The code running in Docker right now is the result of that collaboration.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The live link is coming soon, and when it does, I'll be shouting about it here on DEV, on LinkedIn, and everywhere else.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you're a donor who has ever wondered where your money actually went — this platform (whatever its final name turns out to be) is being built for you.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>google</category>
      <category>geminireflections</category>
      <category>gemini</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title>InsightTube - Turn any YouTube video into an interactive learning experience.</title>
      <dc:creator>Mandy</dc:creator>
      <pubDate>Mon, 16 Feb 2026 05:40:16 +0000</pubDate>
      <link>https://dev.to/mandy_324/insighttube-turn-any-youtube-video-into-an-interactive-learning-experience-lih</link>
      <guid>https://dev.to/mandy_324/insighttube-turn-any-youtube-video-into-an-interactive-learning-experience-lih</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;InsightTube&lt;/strong&gt;, a cross-platform desktop learning app that transforms any YouTube video into a structured study workflow.&lt;/p&gt;

&lt;p&gt;The core idea is simple: when we watch long technical videos, we understand some parts, forget others, and rarely revise properly. InsightTube solves that by turning a single video URL into complete learning artifacts instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  What InsightTube does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fetches YouTube transcript data through a Rust/Tauri backend (including handling scenarios where browser-only transcript approaches often fail)&lt;/li&gt;
&lt;li&gt;Generates AI-powered study materials from the transcript:

&lt;ul&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;li&gt;Study Guide&lt;/li&gt;
&lt;li&gt;Flashcards&lt;/li&gt;
&lt;li&gt;Mind Map&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Generates MCQ quizzes with:

&lt;ul&gt;
&lt;li&gt;Adjustable question count&lt;/li&gt;
&lt;li&gt;Option shuffling&lt;/li&gt;
&lt;li&gt;Explanations&lt;/li&gt;
&lt;li&gt;Retry / version history&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Provides a transcript-aware &lt;strong&gt;AI chat&lt;/strong&gt; for each video with:

&lt;ul&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;li&gt;New chat support&lt;/li&gt;
&lt;li&gt;Chat history per video&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Includes productivity + retention tools:

&lt;ul&gt;
&lt;li&gt;Notes tab (video-specific + general)&lt;/li&gt;
&lt;li&gt;Todo and reminders support&lt;/li&gt;
&lt;li&gt;Dashboard with learning stats and activity calendar&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Supports multiple AI providers/models:

&lt;ul&gt;
&lt;li&gt;OpenAI + Gemini&lt;/li&gt;
&lt;li&gt;Model selection in settings&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Stores user data locally for a fast desktop-first experience&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why I built this
&lt;/h3&gt;

&lt;p&gt;I wanted to convert passive video consumption into active learning.&lt;br&gt;&lt;br&gt;
Most tools stop at “show transcript” or “make summary.” InsightTube goes further: it gives learners a full cycle — &lt;strong&gt;understand → test → revise → ask → track&lt;/strong&gt; — in one place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop&lt;/strong&gt;: Tauri v2 + Rust&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 19 + TypeScript + Vite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI&lt;/strong&gt;: OpenAI SDK + Google GenAI SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualization&lt;/strong&gt;: markmap for mind maps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Tauri store plugin (local persistence)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI&lt;/strong&gt;: Custom dark theme + responsive tab-based study interface&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h2&gt;
  
  
  - &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Mandy324/insightTube" rel="noopener noreferrer"&gt;https://github.com/Mandy324/insightTube&lt;/a&gt;  
&lt;/h2&gt;

&lt;p&gt;screenshots:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mvu8qdkq0q5vlvp7wub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mvu8qdkq0q5vlvp7wub.png" alt="Home Page" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbkiab1j9jfmf2589e08.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbkiab1j9jfmf2589e08.png" alt="History Page" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstwf2m7au0elh2g8pwin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstwf2m7au0elh2g8pwin.png" alt="Video Page" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F072lvz0rw6u4wz84gica.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F072lvz0rw6u4wz84gica.png" alt="Study Guide" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkl4jupuzn9bavyvojvv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkl4jupuzn9bavyvojvv8.png" alt="MindMap" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd9bqpmpjeq1x0a7o96w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd9bqpmpjeq1x0a7o96w.png" alt="Chat tab" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fde3ltxbwbudimf3fyvy4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fde3ltxbwbudimf3fyvy4.png" alt="Dashboard page" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5iabbit0ekx29wnyz1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5iabbit0ekx29wnyz1h.png" alt="Notes page" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xbq63jhbpk2csjq3x1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xbq63jhbpk2csjq3x1d.png" alt="Tasks page" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8akrklt53l6dg1uk2ep7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8akrklt53l6dg1uk2ep7.png" alt="Settings page" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;This project is where I felt the strongest difference between normal “AI assistance” and true “AI agent workflow.”&lt;/p&gt;

&lt;p&gt;With the usual GitHub Copilot extension in VS Code, I still need to interact constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt&lt;/li&gt;
&lt;li&gt;accept/edit&lt;/li&gt;
&lt;li&gt;prompt again&lt;/li&gt;
&lt;li&gt;manually wire pieces together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;strong&gt;Copilot CLI (agent mode)&lt;/strong&gt;, the workflow felt very different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I defined the feature goal&lt;/li&gt;
&lt;li&gt;Copilot CLI broke it into subtasks&lt;/li&gt;
&lt;li&gt;It explored the relevant files&lt;/li&gt;
&lt;li&gt;Implemented changes across multiple files&lt;/li&gt;
&lt;li&gt;Ran checks (&lt;code&gt;tsc&lt;/code&gt;, build) and iterated on errors&lt;/li&gt;
&lt;li&gt;Returned with a complete, working implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What stood out for me
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic task decomposition&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I didn’t have to micromanage implementation order. It created its own step-by-step execution flow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context-aware multi-file changes&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For one feature request, it updated types, services, page logic, and CSS together while keeping consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real development loop, not just snippet generation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It didn’t stop at code suggestion. It validated and fixed issues, which saved a lot of back-and-forth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Huge time savings&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I spent more time deciding product behavior and UX, and less time stitching boilerplate + plumbing code manually.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Concrete examples in this project
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSE Chat + History&lt;/strong&gt;: It implemented streaming response handling, persistence model, session switching, and UI updates together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard activity calendar fixes&lt;/strong&gt;: It addressed alignment/timezone bugs after implementation, not just first-pass coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat UI redesign from reference image&lt;/strong&gt;: It refactored structure + styles to match a cleaner no-bubble layout quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final takeaway
&lt;/h3&gt;

&lt;p&gt;Copilot CLI felt like working with an implementation partner, not just an autocomplete tool.&lt;br&gt;&lt;br&gt;
I just had to define the task clearly; it handled the heavy lifting by planning subtasks and executing them end-to-end. Compared to my normal extension workflow, this removed a lot of constant interaction and saved significant development time.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
