<?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: Ganga Ponnu</title>
    <description>The latest articles on DEV Community by Ganga Ponnu (@randomtyms).</description>
    <link>https://dev.to/randomtyms</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4043774%2F416e8d49-4433-41ea-9980-833bcd81af66.webp</url>
      <title>DEV Community: Ganga Ponnu</title>
      <link>https://dev.to/randomtyms</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/randomtyms"/>
    <language>en</language>
    <item>
      <title>Building a Fugu-Powered, Offline-First EdTech Hub Entirely on a Smartphone</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Fri, 18 Sep 2026 17:22:47 +0000</pubDate>
      <link>https://dev.to/randomtyms/building-a-fugu-powered-offline-first-edtech-hub-entirely-on-a-smartphone-453h</link>
      <guid>https://dev.to/randomtyms/building-a-fugu-powered-offline-first-edtech-hub-entirely-on-a-smartphone-453h</guid>
      <description>&lt;p&gt;What do you do when you want to build a fully featured, interactive 3D educational platform for regional kids, but you don't have venture capital, an engineering team, or even a desktop computer?You write it on a cracked Android smartphone next to a kitchen stove.This is the architectural story of RandomTyms—a lightweight, privacy-first, offline-first Progressive Web App (PWA) that recently caught the attention of Google's Web Capabilities team. Here is how it was built, the Web APIs that power it, and why the "smartphone-only development workflow" is no longer a gimmick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architectural Blueprint:&lt;/strong&gt; Zero-Data &amp;amp; Offline-FirstIn regional India, connectivity is highly unpredictable, and low-spec hardware is the baseline. Traditional edtech heavily relies on massive native apps, aggressive user tracking, and heavy video streaming pipelines.To bridge this digital divide, RandomTyms was engineered with a strict App Shell architecture optimized for zero data collection and absolute anonymity.&lt;br&gt;
&lt;strong&gt;1. Service Workers &amp;amp; Aggressive Local Caching&lt;/strong&gt;&lt;br&gt;
To ensure the app functions seamlessly in dead zones, it implements a strict offline-first loading strategy. The browser intercepts network requests via a Service Worker lifecycle:&lt;br&gt;
By caching heavy 3D structures and rendering scripts directly into the browser's Cache Storage API during the initial handshake, subsequent visits bypass the network layer entirely. The interactive modules load instantly, directly from the device disk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Project Fugu &amp;amp; The Web Capabilities Layer&lt;/strong&gt;&lt;br&gt;
To achieve native parity without compiling multi-megabyte Android bundles, the platform harnesses advanced Web APIs tracked under Chromium's Project Fugu.By utilizing standardized, lightweight integration layers, the web ecosystem directly hooks into system capabilities:&lt;br&gt;
Web App Manifest Shortcuts: Deeply embeds the platform into the mobile UI launcher without an app store middleman.&lt;br&gt;
Badging API &amp;amp; Content Aggregation: Dynamically pushes lightweight UI updates to users without running background tracking demons.&lt;br&gt;
Universal Share Targets: Allows the PWA to act as a system-level receiver, letting users pass educational text directly into the AI Textbook Quiz Generator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Modern Web Capabilities Matter&lt;/strong&gt; &lt;br&gt;
When this project was submitted to Google’s Chromium Issue Tracker (Project Fugu Showcase), it received a direct validation response from Thomas Steiner (Developer Relations Engineer at Google), who called it a "fantastic showcase of what the modern web can achieve today."The takeaway for indie developers is clear: The browser is now a fully matured operating system.You no longer need to pay rent to proprietary app marketplaces, maintain separate codebases for iOS and Android, or harvest intrusive user metrics just to deliver an interactive experience. With the right configuration of Service Workers, modern caching structures, and Web APIs, a single smartphone can become both the production factory and the global distribution network.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>github</category>
      <category>android</category>
    </item>
    <item>
      <title>Building an App Shell PWA on a Mobile Phone: Offline UI, External Links, and Chromium Fugu published: true</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Wed, 02 Sep 2026 09:59:57 +0000</pubDate>
      <link>https://dev.to/randomtyms/building-an-app-shell-pwa-on-a-mobile-phone-offline-ui-external-links-and-chromium-fugu-548j</link>
      <guid>https://dev.to/randomtyms/building-an-app-shell-pwa-on-a-mobile-phone-offline-ui-external-links-and-chromium-fugu-548j</guid>
      <description>&lt;p&gt;Most web development tutorials assume standard prerequisites: a multi-monitor desktop, a terminal, and local build pipelines like Node.js or Vite.&lt;/p&gt;

&lt;p&gt;I built and deployed &lt;strong&gt;RandomTyms&lt;/strong&gt;—a Progressive Web App (PWA) using an &lt;strong&gt;App Shell architecture&lt;/strong&gt;—entirely on a single Android smartphone with a cracked screen. &lt;/p&gt;

&lt;p&gt;The project went on to be submitted and logged into Google's Chromium tracking portal for the &lt;strong&gt;Fugu Showcase (Issue #555599827)&lt;/strong&gt; and recognized nationally by India's Ministry of Electronics and Information Technology (MeitY ISEA 2025).&lt;/p&gt;

&lt;p&gt;Here is the exact technical architecture, handling offline App Shell caching vs. online-only external resources, and shipping it from a phone.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Mobile Development Workflow
&lt;/h2&gt;

&lt;p&gt;Developing on a handheld touch screen eliminates desktop luxuries. The toolchain had to be extremely lightweight and resilient:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-Browser Web Editors:&lt;/strong&gt; Writing clean, modular HTML5, CSS3, and modern vanilla JavaScript without heavy bundlers or local build dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Web Interface / Mobile Git Clients:&lt;/strong&gt; Managing commits, resolving merge conflicts, and publishing directly to GitHub Pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Touch &amp;amp; Viewport Testing:&lt;/strong&gt; Testing responsive touch targets, drawer animations, and network dropouts directly in mobile browsers rather than desktop emulators.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Core Architecture: App Shell vs. External Resources
&lt;/h2&gt;

&lt;p&gt;A critical distinction in web development is distinguishing between &lt;strong&gt;local app shell assets&lt;/strong&gt; and &lt;strong&gt;dynamic external resources&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What Lives in the Offline Cache:&lt;/strong&gt; Core markup, UI stylesheets, icons, local illustrations, and navigation elements. When a user is on spotty 3G or drops connection entirely, the app shell opens immediately with zero "No Internet" browser crashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What Requires Network Connectivity:&lt;/strong&gt; Embedded YouTube videos, outbound Blogspot articles, and external links. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By separating these concerns, the PWA offers instant perceived load times while maintaining transparent boundaries for third-party media.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Web Capabilities &amp;amp; Chromium Project Fugu Integration
&lt;/h2&gt;

&lt;p&gt;Project Fugu is Chromium's initiative to bring native app capabilities to the modern web platform. &lt;/p&gt;

&lt;p&gt;For RandomTyms, the submission to the &lt;strong&gt;Chromium Fugu Showcase (Issue #555599827)&lt;/strong&gt; centered around pushing accessible web capabilities on mobile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Web Share API (&lt;code&gt;navigator.share&lt;/code&gt;):&lt;/strong&gt; Enabling direct native sharing of cartoon cards and digital awareness snippets straight to WhatsApp and regional chat channels without third-party plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Instant Shell Launch:&lt;/strong&gt; Instant standalone launch performance regardless of network stability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-Platform Visual Assets:&lt;/strong&gt; Integrating lightweight web stickers and animated assets verified with platform providers like Tenor/Gboard.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Mobile Debugging Realities: Practical Lessons
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Origin Checks Are Essential:&lt;/strong&gt; If your PWA links out to YouTube or external blogs, never use blanket caching without verifying &lt;code&gt;request.origin&lt;/code&gt;. Blindly trying to cache opaque cross-origin requests causes cache bloat and cryptic fetch errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Managing Mobile Syntax:&lt;/strong&gt; Writing JavaScript on a mobile keyboard without linting extensions requires clean, minimal code structures. Shorter helper functions prevent hunting for unclosed braces on a 6-inch touchscreen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Native Viewport Feedback:&lt;/strong&gt; Developing directly on the target physical device exposed layout overflows, button tap-target friction, and font readability issues that desktop emulators regularly miss.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;An offline-first strategy doesn't have to mean downloading the entire internet. Implementing a clean App Shell ensures your core interface is always fast and available, gracefully delegating dynamic media to the network—all buildable and deployable from a handheld phone.&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>github</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building a Zero-Scroll, Interactive Classroom Quiz Widget with Targeted Mistake Retakes</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Mon, 24 Aug 2026 17:40:45 +0000</pubDate>
      <link>https://dev.to/randomtyms/building-a-zero-scroll-interactive-classroom-quiz-widget-with-targeted-mistake-retakes-13b8</link>
      <guid>https://dev.to/randomtyms/building-a-zero-scroll-interactive-classroom-quiz-widget-with-targeted-mistake-retakes-13b8</guid>
      <description>&lt;p&gt;​When designing educational web widgets for classrooms, responsive design goes far beyond making things look presentable on a standard smartphone. A modern classroom app might run on an older Android device, an iPad in split view, a school Chromebook, or a massive 4K interactive smartboard.&lt;/p&gt;

&lt;p&gt;​Here is a breakdown of how we refactored the RandomTyms AI Quiz Generator into a zero-scroll, high-engagement classroom engine complete with instant mistake tracking and targeted practice loops.&lt;/p&gt;

&lt;h2&gt;
  
  
  ​The Pedagogical Goals
&lt;/h2&gt;

&lt;p&gt;​Active Learning Feedback Loop: Moving beyond a flat percentage score to show students exactly where their understanding slipped, providing an immediate pathway to drill only those specific gaps..&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;​Zero-Scroll, Fit-to-Screen UI: *&lt;/em&gt;&lt;br&gt;
Ensuring the question stem, four options, progress indicators, and feedback modal fit within the active viewport across mobile phones, tablets, laptops, and smartboards without vertical scrolling or browser zooming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;​Lightweight Architecture:&lt;/strong&gt; &lt;br&gt;
Delivering a pure, framework-free browser experience with built-in clipboard helpers for AI prompts and structured schema metadata for discoverability.&lt;/p&gt;

&lt;h2&gt;
  
  
  ​Key Upgrades &amp;amp; Architectural Enhancements
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;​1. The Targeted Mistake Review &amp;amp; Retry Engine&lt;/strong&gt;&lt;br&gt;
​Dynamic Mistake Logging: While a student plays, incorrect selections are captured with their full context—recording the original question stem, the chosen distractor, and the verified correct answer.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;​Contextual Review Panel: *&lt;/em&gt;&lt;br&gt;
Upon completing a quiz with mistakes, students receive a scrollable review section displaying each missed item with color-coded tags distinguishing their incorrect choice from the correct answer.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;​Targeted Practice Mode: *&lt;/em&gt;&lt;br&gt;
Alongside the standard full-quiz restart, a dedicated retake button launches a focused practice round featuring only the missed questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;​2. Eliminating Vertical Overflow for Smartboards &amp;amp; Screens&lt;/strong&gt;&lt;br&gt;
​Fluid Viewport Sizing: Replaced rigid pixel values with responsive clamp calculations tied to viewport height and width, keeping fonts, touch targets, and gaps proportional to available space.&lt;/p&gt;

&lt;p&gt;**​Dynamic Viewport Height Limits: **Bounded modal overlays and quiz containers to dynamic viewport heights (dvh) so bottom navigation bars on mobile browsers and classroom displays never push buttons off-screen.&lt;/p&gt;

&lt;p&gt;**​Adaptive 2×2 Smartboard Grid: **Switched the 4-option vertical stack to an automatic 2×2 grid layout on wider aspect ratios, cutting vertical screen usage in half on interactive whiteboards and desktop screens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;​3. Dual AI Prompt Integration&lt;/strong&gt;&lt;br&gt;
​Integrated dedicated prompt cards to streamline content creation with large language models like Gemini—supporting direct CSV file creation for small batches as well as raw structured extraction for large textbook scans.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Designed for seamless deployment across standard web pages, blogs, and classroom learning portals without third-party dependencies.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>staticwebapps</category>
    </item>
    <item>
      <title>How I Fixed My PWA's YouTube Feed for Free (Without Building a Server)</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Wed, 12 Aug 2026 15:07:17 +0000</pubDate>
      <link>https://dev.to/randomtyms/how-i-fixed-my-pwas-youtube-feed-for-free-without-building-a-server-3kcn</link>
      <guid>https://dev.to/randomtyms/how-i-fixed-my-pwas-youtube-feed-for-free-without-building-a-server-3kcn</guid>
      <description>&lt;p&gt;When building my Progressive Web App (PWA), I wanted a clean section showing my channel's latest YouTube uploads.&lt;/p&gt;

&lt;p&gt;​It sounded simple at first, but I quickly hit a classic web development wall: the dreaded CORS error.&lt;/p&gt;

&lt;p&gt;​Every time the app tried to read YouTube's feed directly inside the browser, security rules blocked it, resulting in a frustrating error message: "Couldn't load latest videos."&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxodi42dsfd922jyd5dj4.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxodi42dsfd922jyd5dj4.jpg" alt="PWA - Couldn't load latest videos." width="799" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​Instead of setting up a paid backend server or messing with complex API keys, I found a zero-cost trick using GitHub Actions as a background helper.&lt;/p&gt;

&lt;p&gt;​Here is how I solved it using logic instead of extra infrastructure.&lt;/p&gt;

&lt;p&gt;​&lt;strong&gt;💡 The Lightbulb Moment&lt;/strong&gt;&lt;br&gt;
​Why force the user's phone to do the heavy lifting every single time they open the app?&lt;/p&gt;

&lt;p&gt;​Instead of asking the app to fetch data from YouTube directly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;​A background script runs automatically every 3 hours inside GitHub.&lt;/li&gt;
&lt;li&gt;​It fetches the YouTube feed behind the scenes and saves a simple videos.json file inside my project.&lt;/li&gt;
&lt;li&gt;​My app simply reads that ready-made videos.json file locally—instantly, smoothly, and with zero security errors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;🛠️ How It Works in 3 Simple Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Scheduled Helper&lt;/strong&gt;: I set up a simple GitHub Action workflow. Think of it like setting an alarm clock on your phone—every 3 hours, GitHub wakes up, grabs the latest 5 videos from YouTube, and formats them into a neat text list (videos.json).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Auto-Publisher&lt;/strong&gt;: Once the file is updated, GitHub Pages automatically deploys the updated app files to the web.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The App Fetch&lt;/strong&gt;: Inside my app, reading the list takes just a single line of standard JavaScript. No security blocks, no API limits, and no delay for the user!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚠️ 3 Lessons I Learned Along the Way&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you try a similar setup for your own app, here are three quick gotchas to watch out for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watch out for "invisible" build blocks&lt;/strong&gt;: GitHub Pages uses a tool called Jekyll by default, which can sometimes ignore .json files. Creating a blank file named .nojekyll in your root folder fixes this instantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Beware of aggressive caching&lt;/strong&gt;: PWAs love saving old files so they work offline. Adding a tiny timestamp rule when reading your JSON ensures users always see the freshest videos instead of an old saved copy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check the green checkmark&lt;/strong&gt;: If your app still shows an error, check the Actions tab in GitHub. A single red ❌ on the deploy step means GitHub hasn't published your new file to the live site yet—a simple "Re-run" usually fixes it!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;🚀 The Result&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbicwx11u2x6is3uokm58.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbicwx11u2x6is3uokm58.png" alt="Clean section showing RandomTyms's latest YouTube uploads" width="800" height="1778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100% Free &amp;amp; Automatic&lt;/strong&gt;: Updates every 3 hours without me lifting a finger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lightning Fast&lt;/strong&gt;: The app loads instant static text instead of waiting for external websites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Server Maintenance&lt;/strong&gt;: No monthly hosting bills, no databases, and no servers to manage.&lt;/p&gt;

&lt;p&gt;Have you ever used clever static tricks or background tools to bypass backend headaches? I'd love to hear how you solved it in the comments!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>pwa</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a Sticker &amp; GIF Engine for Mobile Keyboards (Tenor Partner, Gboard &amp; Web Integration)</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Wed, 12 Aug 2026 09:11:30 +0000</pubDate>
      <link>https://dev.to/randomtyms/building-a-sticker-gif-engine-for-mobile-keyboards-tenor-partner-gboard-web-integration-4l62</link>
      <guid>https://dev.to/randomtyms/building-a-sticker-gif-engine-for-mobile-keyboards-tenor-partner-gboard-web-integration-4l62</guid>
      <description>&lt;h2&gt;
  
  
  canonical_url: &lt;a href="https://lokeshvarsha.blogspot.com/p/lokesh-varsha-stickers-gifs.html" rel="noopener noreferrer"&gt;https://lokeshvarsha.blogspot.com/p/lokesh-varsha-stickers-gifs.html&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;As developers and digital creators, we often spend endless hours building rich front-end experiences or backend APIs—only to face the real challenge: &lt;strong&gt;distribution&lt;/strong&gt;. How do you take original animated assets and put them directly where users communicate every second of the day (WhatsApp, Gboard, Telegram, and Twitter/X)?&lt;/p&gt;

&lt;p&gt;In this post, I want to share the architecture and integration process behind the &lt;strong&gt;RandomTyms&lt;/strong&gt; sticker engine featuring &lt;strong&gt;Lokesh &amp;amp; Varsha&lt;/strong&gt; (original AI-animated characters), from setting up an official Tenor Partner endpoint to embedding responsive media into web applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ The Architecture: From Animation to Global Keyboards
&lt;/h2&gt;

&lt;p&gt;To make animated media searchable across millions of mobile devices, relying on standalone image hosts isn't enough. The assets need to flow through the major keyboard APIs.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F067yr4tvci4ikvxtssvh.gif" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F067yr4tvci4ikvxtssvh.gif" alt="India Independence Day 80 celebration Gif" width="498" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tenor API Integration &amp;amp; Tagging Strategy
&lt;/h3&gt;

&lt;p&gt;Tenor (owned by Google) powers the primary GIF search engine across &lt;strong&gt;Gboard&lt;/strong&gt;, &lt;strong&gt;Discord&lt;/strong&gt;, &lt;strong&gt;LinkedIn&lt;/strong&gt;, and &lt;strong&gt;Twitter/X&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Getting verified as an &lt;strong&gt;Official Tenor Partner&lt;/strong&gt; unlocked direct indexing for our brand tags (&lt;code&gt;#randomtyms&lt;/code&gt;, &lt;code&gt;#lokesh&lt;/code&gt;, &lt;code&gt;#varsha&lt;/code&gt;). However, ranking on keyboard searches requires optimizing metadata for conversational intent rather than just asset titles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reaction-Based Tagging:&lt;/strong&gt; &lt;code&gt;#mass&lt;/code&gt;, &lt;code&gt;#ennadhu&lt;/code&gt;, &lt;code&gt;#thinking&lt;/code&gt;, &lt;code&gt;#happy_news&lt;/code&gt;, &lt;code&gt;#vanakkam&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Queries:&lt;/strong&gt; &lt;code&gt;#smart_english&lt;/code&gt;, &lt;code&gt;#cbse&lt;/code&gt;, &lt;code&gt;#learning_fun&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 You can view the live partner integration here: &lt;a href="https://tenor.com/en-IN/official/randomtyms" rel="noopener noreferrer"&gt;Tenor Official - RandomTyms Profile&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Web Integration: Building a Media Hub
&lt;/h2&gt;

&lt;p&gt;While API distribution covers messaging platforms, a dedicated web destination is essential for SEO indexing, deep linking, and embedding interactive widgets.&lt;/p&gt;

&lt;p&gt;We built a central hub page hosting the sticker library and search guidelines:&lt;br&gt;
📍 &lt;strong&gt;Live Page:&lt;/strong&gt; &lt;a href="https://lokeshvarsha.blogspot.com/p/lokesh-varsha-stickers-gifs.html" rel="noopener noreferrer"&gt;Lokesh &amp;amp; Varsha Stickers &amp;amp; GIFs Hub&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Technical Considerations for Animated Media Hubs:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Format Optimization:&lt;/strong&gt; Standard GIFs can quickly exceed 5MB–10MB per loop. Converting non-transparent loops to &lt;strong&gt;Animated WebP&lt;/strong&gt; reduces payload by ~60% while maintaining crisp 60fps renders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lazy Loading Media:&lt;/strong&gt; Using &lt;code&gt;loading="lazy"&lt;/code&gt; on sticker galleries prevents layout shift (CLS) and conserves mobile data when rendering 20+ animated assets simultaneously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform Embedding:&lt;/strong&gt; Providing clean HTML embed snippets allowing educators and bloggers to drop assets directly into slides and articles.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  🎮 Gamifying the Media (Interactive Web App)
&lt;/h2&gt;

&lt;p&gt;Beyond keyboard distribution, we linked these animated assets into an interactive web application—the &lt;strong&gt;Emoji Idioms Treasure Hunt&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It combines JavaScript-driven wheel physics, audio cues, and state management where players decode emoji combinations into idioms, triggering specific animated reactions:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://lokeshvarsha.blogspot.com/2026/08/emoji-idioms-treasure-hunt.html" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEjdy-H1kEcdRDTrH8iGKC-A70cRrB7zZNxvfUBinPX7pZbMo0x3JVysxBw_-FxqPuvrjSsfUNdooxaxDEF0XKNUE4UbVN2WvmGSpcBEadFxuEVteftEJfmkdpvL2QxEheMem6c9Lmcep_TDLoBuPk5iivH3csl1Cq-c4k_ntenTtzugiA%2Fw1200-h630-p-k-no-nu%2Fimage1786387165" height="480" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://lokeshvarsha.blogspot.com/2026/08/emoji-idioms-treasure-hunt.html" rel="noopener noreferrer" class="c-link"&gt;
            Spin the Wheel &amp;amp; Guess the Emoji Idioms! 🎡 Treasure Hunt Game with Lokesh &amp;amp; Varsha
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Can you decode 20 fun emoji clues to reveal hidden English idioms? Join Lokesh &amp;amp; Varsha in this interactive spin-the-wheel treasure hunt game.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flokeshvarsha.blogspot.com%2Ffavicon.ico" width="48" height="48"&gt;
          lokeshvarsha.blogspot.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  💡 Key Takeaways for Developers &amp;amp; Creators
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Leverage Existing Distribution Channels:&lt;/strong&gt; Don't try to build a custom messaging app just to share stickers. Integrate with Tenor/GIPHY to instantly tap into Gboard and WhatsApp ecosystems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure Metadata for Search:&lt;/strong&gt; Algorithmic search on keyboard engines relies heavily on emotional and conversational tags rather than literal descriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep Your Web Hub Lean:&lt;/strong&gt; Ensure your media hosting page uses proper canonical tags, structured JSON-LD, and lazy-loaded assets to maintain strong performance scores.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Have you built custom integrations with Tenor, GIPHY, or keyboard APIs? Let's discuss in the comments below! 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>socialmedia</category>
      <category>design</category>
      <category>api</category>
    </item>
    <item>
      <title>Building an AI Quiz Pipeline without using an AI API</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Mon, 27 Jul 2026 06:57:39 +0000</pubDate>
      <link>https://dev.to/randomtyms/building-an-ai-quiz-pipeline-without-using-an-ai-api-56an</link>
      <guid>https://dev.to/randomtyms/building-an-ai-quiz-pipeline-without-using-an-ai-api-56an</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Sometimes the most valuable software isn't another AI model—it's the workflow around it.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The internet is full of AI quiz generators. Upload some content - click a button - a quiz appears.&lt;/p&gt;

&lt;p&gt;So why did I build something that doesn't generate quizzes directly?&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiowfikzdx8f80ory1wsp.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiowfikzdx8f80ory1wsp.jpg" alt="Pixar-style 3D animated boy with glasses pointing forward against a dark blue background with text reading: 'I Didn't Build Another AI Quiz Generator. I Built the Missing Piece.'" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Gemini (and other LLMs) are already very good at reading textbook pages.&lt;/p&gt;

&lt;p&gt;But asking an LLM:&lt;br&gt;
"Generate a quiz from this chapter."&lt;br&gt;
rarely gives you production-ready output.&lt;/p&gt;

&lt;p&gt;Some common issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inconsistent formatting&lt;/li&gt;
&lt;li&gt;incomplete coverage of the chapter&lt;/li&gt;
&lt;li&gt;questions in random order&lt;/li&gt;
&lt;li&gt;difficult to import into another application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a teacher, this means spending more time cleaning the output than actually teaching.&lt;/p&gt;
&lt;h2&gt;
  
  
  My Approach
&lt;/h2&gt;

&lt;p&gt;Instead of building another AI wrapper, I built a workflow.&lt;br&gt;
Textbook Images&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
Optimized Prompt&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
Gemini&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
Structured Quiz Data&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
CSV File&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
RandomTyms Quiz Player&lt;/p&gt;

&lt;p&gt;The AI does what it's good at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding content&lt;/li&gt;
&lt;li&gt;extracting knowledge&lt;/li&gt;
&lt;li&gt;generating questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My application does what it is good at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enforcing structure&lt;/li&gt;
&lt;li&gt;creating a reusable quiz format&lt;/li&gt;
&lt;li&gt;powering an interactive quiz interface&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why CSV?
&lt;/h2&gt;

&lt;p&gt;This is probably the first question developers ask.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Why not just return JSON?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why involve CSV at all?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because my users aren't developers. They're teachers.&lt;/p&gt;

&lt;p&gt;CSV has some surprisingly practical advantages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opens in Excel.&lt;/li&gt;
&lt;li&gt;Can be edited without technical knowledge.&lt;/li&gt;
&lt;li&gt;Easy to archive.&lt;/li&gt;
&lt;li&gt;Easy to share.&lt;/li&gt;
&lt;li&gt;Works offline.&lt;/li&gt;
&lt;li&gt;Can be imported into the quiz player.
A quiz becomes a file that belongs to the teacher—not another conversation trapped inside an AI chat.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb5xiprlpxzzmowb94bkp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb5xiprlpxzzmowb94bkp.png" alt="Infographic titled 'Auto-Generate Quiz Files with AI' showing a 3-step guide for teachers to copy a Gemini prompt, upload textbook images, and save as a CSV file, featuring a 3D animated girl character holding a notebook." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Prompt Engineering Is Part of the Product
&lt;/h2&gt;

&lt;p&gt;One thing I learned while building this is that prompt engineering isn't just an implementation detail.&lt;/p&gt;

&lt;p&gt;It's product design.&lt;/p&gt;

&lt;p&gt;Instead of expecting teachers to write prompts like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate 40 multiple-choice questions covering every important concept...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;they simply copy a pre-built prompt.&lt;/p&gt;

&lt;p&gt;That prompt tells the AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analyse every uploaded textbook page&lt;/li&gt;
&lt;li&gt;cover all major concepts&lt;/li&gt;
&lt;li&gt;include definitions and key facts&lt;/li&gt;
&lt;li&gt;produce output in a predictable structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complexity stays hidden. The workflow stays simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Didn't Use an AI API
&lt;/h2&gt;

&lt;p&gt;At first glance, that seems like extra work. But there were reasons behind it.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwvmham5ftdkcuvsgxloy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwvmham5ftdkcuvsgxloy.png" alt="RandomTyms AI Quiz Generator interface featuring 3D animated characters Lokesh and Varsha alongside a upload card to choose a quiz file or paste a CSV link to start a quiz." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;1. Zero backend AI costs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No API billing.&lt;/li&gt;
&lt;li&gt;No token management.&lt;/li&gt;
&lt;li&gt;No rate limiting. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Users benefit from better models automatically&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Gemini improves, the workflow improves and I don't need to deploy a new backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Human review&lt;/strong&gt;&lt;br&gt;
Teachers naturally review the generated questions before importing them.&lt;/p&gt;

&lt;h2&gt;
  
  
  In education, that small review step is often a feature—not a bug.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;This approach isn't perfect.&lt;/li&gt;
&lt;li&gt;There is a manual copy-paste step.&lt;/li&gt;
&lt;li&gt;That's friction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But it's also where teachers can fix mistakes, remove unsuitable questions, or add their own.&lt;/p&gt;

&lt;p&gt;For educational content, I think that's a worthwhile trade-off.&lt;/p&gt;

&lt;p&gt;Not every workflow needs to be fully automated.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsdj1t6m7g6znd938gk88.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsdj1t6m7g6znd938gk88.png" alt="Wide promo banner for RandomTyms AI Quiz Generator featuring vibrant 3D animated siblings Lokesh and Varsha with feature icons for Any Subject, AI Quiz Magic, Instant Results, and Download Options." width="799" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>edtech</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Built an AI Quiz Generator, a PWA Hub, and an Animated Kids' Brand — All on One Phone</title>
      <dc:creator>Ganga Ponnu</dc:creator>
      <pubDate>Thu, 23 Jul 2026 12:13:45 +0000</pubDate>
      <link>https://dev.to/randomtyms/how-i-built-an-ai-quiz-generator-a-pwa-hub-and-an-animated-kids-brand-all-on-one-phone-4kh5</link>
      <guid>https://dev.to/randomtyms/how-i-built-an-ai-quiz-generator-a-pwa-hub-and-an-animated-kids-brand-all-on-one-phone-4kh5</guid>
      <description>&lt;p&gt;I don't have a studio. I don't have a team. What I have is a smartphone — and that single constraint ended up shaping every decision behind RandomTyms, an AI-animated Tamil-English educational brand built around two characters, Lokesh and Varsha, and now a small suite of free learning apps.&lt;/p&gt;

&lt;p&gt;This post is about the "how" — not the brand story, but the actual technical build: a PWA hub, an AI-powered quiz generator, and the scrappy fixes that come with building mobile-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I ended up shipping
&lt;/h2&gt;

&lt;p&gt;The core of it is a Progressive Web App hosted on GitHub Pages: randomtyms.github.io. It bundles together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Textbook Quiz Generator
&lt;/h2&gt;

&lt;p&gt;— generates quizzes from textbook content using Google Gemini, with OMR-style answer bubbles and score-tiered feedback&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Spinner Wheel
&lt;/h2&gt;

&lt;p&gt;— a simple randomizer for classroom use&lt;br&gt;
Multiplication Practice — quick-fire drills for kids&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Symmetry Detective
&lt;/h2&gt;

&lt;p&gt;— an interactive shape-recognition tool&lt;br&gt;
All free. No sign-up, no ads, no tracking.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building the PWA hub
&lt;/h2&gt;

&lt;p&gt;The hub itself is a manifest + service worker setup, which sounds simple until you're debugging it entirely from a phone browser's dev tools.&lt;/p&gt;

&lt;p&gt;A few specific things that took longer than expected:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live content feeds:&lt;/strong&gt; the Blog tab pulls from a live Blogger JSONP feed, and the Shorts tab runs through an RSS-to-JSON proxy — no dashboard, just feeds updating automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube thumbnails silently failing:&lt;/strong&gt; this one took a while to track down. Shorts-style RSS links didn't match the video ID regex I was using, so thumbnails just wouldn't render for some videos. Fixed it by adding /shorts/ pattern matching plus a fallback to the guid field.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the quiz generator
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fawy7zy6unyb2zxbhz086.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fawy7zy6unyb2zxbhz086.png" alt="RandomTyms Textbook to AI Quiz Generator" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the piece with the most moving parts. It's not just "call an API and show the output" — the widget needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Prompt engineering tuned so Gemini reliably hits a minimum question count (it would sometimes shortchange this)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CSV export handling — cleaning up BOM characters and CRLF line endings that were quietly corrupting downloads&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OMR-style answer bubbles and score-tiered feedback, built as a reusable embeddable component (rt-quiz-embed.html) and a full standalone version (rt-quiz-full.html)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basic security hardening on the widget itself&lt;/p&gt;

&lt;h2&gt;
  
  
  One unexpected debugging detour:
&lt;/h2&gt;

&lt;p&gt;Google Safe Browsing flagged the blog at one point. After digging in, the likely trigger wasn't the quiz code — it was the instructional pattern &lt;/p&gt;

&lt;p&gt;&lt;code&gt;"copy this prompt → open Gemini → paste → send"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;reading as suspicious to automated scanners. Worth knowing if you're building anything that walks users through copy-pasting into another AI tool.&lt;/p&gt;

&lt;p&gt;Making the repo actually discoverable&lt;br&gt;
Shipping the apps was only half the job — a live PWA with no polish around it just doesn't get found. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recent cleanup included:&lt;/strong&gt;&lt;br&gt;
A`` proper README.md with screenshots of each app, not just a text description&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;MIT license added (code only — the characters and brand art stay separately owned)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub topics (education, pwa, kids-learning, quiz-app) so it surfaces in topic search&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A pinned profile repo and a real profile picture instead of the default identicon&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Small things, but they add up to a repo that looks maintained rather than abandoned.&lt;/p&gt;

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

&lt;p&gt;More apps are in active development on the hub. If you're curious about building AI-powered tools without a team or a dev environment beyond a phone, happy to answer questions in the comments — this whole thing has been one long lesson in working within constraints rather than around them.&lt;/p&gt;

&lt;p&gt;🔗 Try the apps: randomtyms.github.io&lt;br&gt;
📖 Follow the blog: lokeshvarsha.blogspot.com&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>deved</category>
    </item>
  </channel>
</rss>
