<?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: Ujjwal Gupta</title>
    <description>The latest articles on DEV Community by Ujjwal Gupta (@ujjwalgupta2021).</description>
    <link>https://dev.to/ujjwalgupta2021</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F952154%2F985a5c8c-29d8-4ca3-90cb-5440bf1be996.jpeg</url>
      <title>DEV Community: Ujjwal Gupta</title>
      <link>https://dev.to/ujjwalgupta2021</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ujjwalgupta2021"/>
    <language>en</language>
    <item>
      <title>Price Pulse AI - Competitive Radar</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Sat, 17 Oct 2026 19:11:04 +0000</pubDate>
      <link>https://dev.to/ujjwalgupta2021/price-pulse-ai-competitive-radar-4i7j</link>
      <guid>https://dev.to/ujjwalgupta2021/price-pulse-ai-competitive-radar-4i7j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Beat Online Discounts &amp;amp; Keep Your Walk-in Customers&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A 100% client-side, zero-server competitive pricing intelligence assistant designed specifically for brick-and-mortar retail shop owners.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;h3&gt;
  
  
  The Problem: Showrooming &amp;amp; Predatory E-Commerce Discounts
&lt;/h3&gt;

&lt;p&gt;Every single day, independent offline store owners (clothing boutiques, electronics &amp;amp; mobile stores, kirana supermarkets, and footwear outlets) face the exact same frustrating scenario:&lt;br&gt;
A customer walks into the physical store, tries on a jacket, inspects a phone, or asks about groceries, pulls out their smartphone, and says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I saw this ₹500 cheaper online on Amazon / Flipkart! Can you match the price?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most offline shopkeepers panic: they either &lt;strong&gt;give in and slash their hard-earned profit margins&lt;/strong&gt;, or &lt;strong&gt;refuse and watch the customer walk straight out the door&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: PricePulse AI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;PricePulse AI&lt;/strong&gt; is a zero-server, privacy-first competitive intelligence dashboard running 100% inside the shopkeeper's web browser. In under 2 seconds, the store owner can paste any online product link and enter their current shop price. &lt;/p&gt;

&lt;p&gt;PricePulse immediately analyzes the competitor listing and equips the shopkeeper with an &lt;strong&gt;In-Store Action Plan&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎯 &lt;strong&gt;Risk to Shop (The Pulse Meter):&lt;/strong&gt; An animated SVG gauge calculating an instant threat score (0–100) that categorizes whether the competitor move is a negligible online illusion or an aggressive flash sale requiring defensive action.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Your Shop vs. Competitor (The Diff Matrix):&lt;/strong&gt; A 4-card transition grid showing where physical retail beats e-commerce:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price Comparison:&lt;/strong&gt; True delta percentage between in-store price and online listed price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery vs. Instant Take-Home:&lt;/strong&gt; Comparing courier delays (3–6 days) and hidden handling fees vs. immediate take-home tonight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-Store Trial &amp;amp; Perks:&lt;/strong&gt; Hands-on trial room fitting, audio testing, and personal service vs. online return friction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust &amp;amp; Warranty:&lt;/strong&gt; Instant 1-to-1 in-store counter replacement vs. courier return hassles and lost parcels.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;🗣️ &lt;strong&gt;Staff Counter-Script (Objection Handler):&lt;/strong&gt; Word-for-word spoken dialogue for sales assistants to counter "I saw it cheaper online" objections confidently on the spot.&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;WhatsApp Customer Broadcast:&lt;/strong&gt; Engaging, high-converting messages with emojis tailored for the store's VIP broadcast list or WhatsApp Status.&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Shop Counter Signboard:&lt;/strong&gt; High-impact text ready to print on an A4 sheet for checkout counters, fitting rooms, or chalkboard easels.&lt;/li&gt;
&lt;li&gt;🎁 &lt;strong&gt;In-Store Margin Bundle &amp;amp; Playbook:&lt;/strong&gt; Smart accessory add-ons and value shields that close walk-ins without sacrificing product margins.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Who Would Pay For It?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Independent Retail Store Owners:&lt;/strong&gt; Boutique clothing shops, mobile/laptop retail stores, consumer electronics dealers, optical stores, and neighborhood kiranas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retail Store Managers &amp;amp; Franchises:&lt;/strong&gt; Multi-branch retailers needing standardized staff counter-scripts so sales staff don't give unauthorized cash discounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial Viability:&lt;/strong&gt; As a $12/month or $99/year micro-SaaS, or bundled as a one-time digital kit for local retail associations. Because it runs 100% client-side, the operational hosting cost is &lt;strong&gt;$0.00&lt;/strong&gt;, making gross margins near &lt;strong&gt;100%&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Web App:&lt;/strong&gt; &lt;a href="https://ujjwalgupta2021.github.io/PricePulse-AI/" rel="noopener noreferrer"&gt;https://ujjwalgupta2021.github.io/PricePulse-AI/&lt;/a&gt; &lt;em&gt;(Deployable to GitHub Pages with 0 server configuration)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Interactive Demos (Zero Setup Required):&lt;/strong&gt;
Clicking any demo button instantly simulates real retail defense scenarios without requiring an API key:

&lt;ul&gt;
&lt;li&gt;👕 &lt;strong&gt;Clothing Boutique:&lt;/strong&gt; Arctic Expedition Parka vs. discount e-commerce apparel seller.&lt;/li&gt;
&lt;li&gt;📱 &lt;strong&gt;Mobile &amp;amp; Electronics:&lt;/strong&gt; Noise-Cancelling Wireless Headphones vs. online tech marketplace.&lt;/li&gt;
&lt;li&gt;🛒 &lt;strong&gt;Supermarket / Kirana:&lt;/strong&gt; Premium Basmati Rice &amp;amp; Oil Combo vs. quick-commerce delivery apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theme Switcher:&lt;/strong&gt; Full support for both &lt;strong&gt;Dark Glassmorphic Theme&lt;/strong&gt; and clean, high-contrast &lt;strong&gt;Light Retail Theme&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/ujjwalgupta2021/PricePulse-AI" rel="noopener noreferrer"&gt;https://github.com/ujjwalgupta2021/PricePulse-AI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Architecture:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;index.html&lt;/code&gt; — Clean semantic structure, SVG gauge meters, and accessibility-first modal views.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;styles.css&lt;/code&gt; — Modern glassmorphism system with CSS custom properties, responsive grids, and dark/light modes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/app.js&lt;/code&gt; — Application lifecycle, event orchestration, and markdown export engine.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/gemini.js&lt;/code&gt; — Direct HTTPS connection to Google Gemini Flash with automatic model negotiation and resilient JSON parsing.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/scraper.js&lt;/code&gt; — Client-side scraping bridge cascading across Jina Reader AI, AllOrigins, and URL slug anti-bot extractors.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/pulse-meter.js&lt;/code&gt; — High-performance SVG needle rotation and stroke-dashoffset animation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/diff-matrix.js&lt;/code&gt; — High-contrast side-by-side transition cards comparing baseline vs. live page data.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/counter-attack.js&lt;/code&gt; — Multi-tab action plan generator with 1-click clipboard copy.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;js/storage.js&lt;/code&gt; — 100% client-side LocalStorage vault for private keys, preferences, and watchlist.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pure Open-Innovation &amp;amp; Client-Side Agent Harness
&lt;/h3&gt;

&lt;p&gt;PricePulse AI was built without any backend servers, Python microservices, or node daemons. The entire application runs directly inside the client's browser as a zero-server agent harness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla HTML5 &amp;amp; CSS3:&lt;/strong&gt; No bloated CSS frameworks or heavyweight JavaScript bundles; initial load takes &amp;lt; 150ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Scraping Bridge:&lt;/strong&gt; Directly reads competitor product listings using Jina Reader AI (&lt;code&gt;https://r.jina.ai/&lt;/code&gt;), AllOrigins proxy, and an intelligent URL slug parser with Amazon/Flipkart anti-bot detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-Weight &amp;amp; Model-Agnostic Architecture:&lt;/strong&gt; Built around the open HTTP standard for generative inference. While it pairs natively with Google Gemini Flash for speed (&amp;lt;600ms), its modular schema engine is compatible with open-weight models (including Google Gemma 2B/9B, Llama 3, and Mistral via local WebLLM or Ollama proxies).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Google Gemini Flash Integration with Dynamic Model Auto-Negotiation
&lt;/h3&gt;

&lt;p&gt;PricePulse connects directly to Google AI Studio's Gemini Flash REST API (&lt;code&gt;generativelanguage.googleapis.com/v1beta&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated Catalog Discovery:&lt;/strong&gt; The engine queries &lt;code&gt;ModelService.ListModels&lt;/code&gt; to dynamically discover supported models on the user's key (&lt;code&gt;gemini-1.5-flash&lt;/code&gt;, &lt;code&gt;gemini-2.0-flash&lt;/code&gt;, &lt;code&gt;gemini-3.8-flash&lt;/code&gt;) without requiring confusing manual dropdown configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Schema Steering:&lt;/strong&gt; Uses official system instructions with JSON response constraints to ensure high-fidelity retail defense outputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilient JSON Parser:&lt;/strong&gt; Employs regex &lt;code&gt;{ ... }&lt;/code&gt; substring recovery to gracefully extract valid data even if the model outputs conversational text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail-Safe Retail Intelligence Shield:&lt;/strong&gt; If the AI API experiences network disconnects or quota rate limits, PricePulse automatically activates an offline synthesized retail audit using the real URL, extracted product title, and store baseline, ensuring &lt;strong&gt;0% crash rate&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero Recurring Overhead for Mom-and-Pop Retailers:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Most commercial retail software costs $50–$200/month because of cloud servers, databases, and middleman APIs. By utilizing open web standards, free-tier client-side AI, and static hosting, offline store owners can access enterprise-grade competitive intelligence without paying hefty SaaS subscriptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Absolute Privacy of Store Margins &amp;amp; Wholesale Pricing:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Local shopkeepers will never upload their private wholesale margins, supplier costs, or pricing baseline to a closed, centralized cloud database where competitor algorithms could scrape or exploit it. In PricePulse AI, every price check and API key stays sealed in the browser's local sandbox (&lt;code&gt;localStorage&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Vendor Lock-In:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The application does not depend on a single proprietary backend. If an API endpoint changes, the open architecture adapts dynamically or runs client-side simulation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This project was developed with &lt;strong&gt;Google Antigravity AI&lt;/strong&gt; as an advanced agentic coding partner. &lt;/p&gt;

&lt;p&gt;Key milestones achieved during the session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designed and refined the &lt;strong&gt;Retail Defense Pivot&lt;/strong&gt;: Transitioned technical e-commerce scraping jargon into actionable spoken dialogue for offline retail shopkeepers.&lt;/li&gt;
&lt;li&gt;Engineered the &lt;strong&gt;High-Speed Connection &amp;amp; Auto-Negotiation Engine&lt;/strong&gt;: Eliminated slow sequential pinging and built dynamic Google Gemini catalog discovery.&lt;/li&gt;
&lt;li&gt;Solved &lt;strong&gt;Anti-Bot Interception for Amazon.in&lt;/strong&gt;: Built smart URL slug parsers to extract real product names directly from &lt;code&gt;/product-name/dp/ASIN&lt;/code&gt; links even when target sites throw robot checks.&lt;/li&gt;
&lt;li&gt;Enhanced &lt;strong&gt;Typography &amp;amp; Accessibility&lt;/strong&gt;: Designed a high-contrast Light Theme alongside the Dark Mode to guarantee clear visibility under bright store counter lighting.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary Track:&lt;/strong&gt; Side Hustle (Hacktoberfest Open-Source AI Challenge Week 2)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner Categories:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Best Use of AI / Gemini API&lt;/li&gt;
&lt;li&gt;Zero-Server Open-Source Web Application&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Built with ❤️ for the Hacktoberfest 2026 Week 2 DEV Challenge — Side Hustle!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🍀 FloraFind &amp; Grounded</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Tue, 06 Oct 2026 21:04:38 +0000</pubDate>
      <link>https://dev.to/ujjwalgupta2021/florafind-grounded-3pfn</link>
      <guid>https://dev.to/ujjwalgupta2021/florafind-grounded-3pfn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;FloraFind &amp;amp; Grounded&lt;/strong&gt; is a gamified single-page web application (SPA) designed to solve a universal developer problem: terminal fatigue, continuous debugging burn-out, and excessive screen time. Built specifically for Week 1 of the &lt;strong&gt;Hacktoberfest 2026 DEV Challenge ("Touch Grass")&lt;/strong&gt;, this project turns stepping away from the desk into an interactive, rewarding outdoor quest.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌟 Key Highlights:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;🌿 "Screen-Time Detox" Quest Engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generates real-world outdoor challenges (&lt;em&gt;"Inspect Sidewalk Chlorophyll"&lt;/em&gt;, &lt;em&gt;"Locate 3-Leaf Hardware Redundancy"&lt;/em&gt;, &lt;em&gt;"Deep Canopy Sunlight Audit"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Category filtering (&lt;em&gt;Quick 5-Min&lt;/em&gt;, &lt;em&gt;Flora Scavenger&lt;/em&gt;, &lt;em&gt;Deep Forest Debug&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Logs outdoor uptime minutes, Grass XP points, and levels upon completion.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;🤖 Cloud Open Innovation AI Identifier ("FloraFind")&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accepts both natural language plant descriptions and direct leaf photo uploads via camera/file picker.&lt;/li&gt;
&lt;li&gt;Communicates with Google AI Studio open-weight models (&lt;strong&gt;Gemma 2&lt;/strong&gt; and &lt;strong&gt;Gemini Flash&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Compiles plants into hilarious developer-centric botanical specifications (&lt;em&gt;Hardware Redundancy&lt;/em&gt;, &lt;em&gt;Photosynthesis SLA&lt;/em&gt;, &lt;em&gt;Developer Patch Notes&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Features an &lt;strong&gt;Interactive Percentage Loader&lt;/strong&gt; with dynamic 6-step ticker and anti-freeze timeouts.&lt;/li&gt;
&lt;li&gt;Includes an &lt;strong&gt;Offline Simulator Fallback&lt;/strong&gt; mode if no API key is provided or network is offline.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;📊 Outdoor Uptime &amp;amp; Streak Dashboard&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracks total outdoor minutes, active daily streaks, quests completed, and plant scans logged.&lt;/li&gt;
&lt;li&gt;Unlockable &lt;strong&gt;Developer Grass Badges&lt;/strong&gt; (&lt;em&gt;Seedling Debugger&lt;/em&gt;, &lt;em&gt;Touch Grass Protocol&lt;/em&gt;, &lt;em&gt;Solar Streak&lt;/em&gt;, &lt;em&gt;Quantum Photosynthesis&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Light &amp;amp; Dark mode theme engine with dynamic toggle.&lt;/li&gt;
&lt;li&gt;100% persisted locally in browser &lt;code&gt;LocalStorage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;🔒 Privacy-First Client Architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No hardcoded API keys. User keys are stored &lt;strong&gt;only&lt;/strong&gt; in the browser's &lt;code&gt;LocalStorage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Direct HTTPS requests to Google AI Studio with zero intermediary backend servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;🚀 &lt;strong&gt;Live Application Demo&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;a href="https://florafind-and-grounded.vercel.app/" rel="noopener noreferrer"&gt;https://florafind-and-grounded.vercel.app/&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🎮 How to Use &amp;amp; Run the Project
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Option A: Try the Live Web App Online (Easiest)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open &lt;a href="https://florafind-and-grounded.vercel.app/" rel="noopener noreferrer"&gt;https://florafind-and-grounded.vercel.app/&lt;/a&gt; in any desktop or mobile browser.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accept real-world outdoor challenges on the &lt;strong&gt;Screen-Time Detox Board&lt;/strong&gt; to log outdoor uptime minutes and earn Grass XP.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Switch to the &lt;strong&gt;FloraFind AI Compiler&lt;/strong&gt;, type a plant description or upload a photo, and click &lt;strong&gt;Run Gemma AI Analysis&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;(Optional)&lt;/em&gt; Click the &lt;strong&gt;Key Settings&lt;/strong&gt; (🔑) icon in the header to enter your free &lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;Google AI Studio API key&lt;/a&gt;. If no key is provided, the app automatically runs in &lt;strong&gt;Offline Simulator Mode&lt;/strong&gt; with realistic mock data!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Option B: Run Locally on Your System&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Because &lt;strong&gt;FloraFind &amp;amp; Grounded&lt;/strong&gt; is a 100% pure client-side static application, &lt;strong&gt;no Node.js packages, build tools, or backend servers are needed!&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the Repository&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/ujjwalgupta2021/FloraFind-and-Grounded.git
   &lt;span class="nb"&gt;cd &lt;/span&gt;FloraFind-and-Grounded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch in Your Browser&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simply &lt;strong&gt;double-click &lt;code&gt;index.html&lt;/code&gt;&lt;/strong&gt; to open it directly in any web browser.&lt;/li&gt;
&lt;li&gt;Or serve it locally using any static web server:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="c"&gt;# Python 3:&lt;/span&gt;
 python &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8000

 &lt;span class="c"&gt;# Node serve:&lt;/span&gt;
 npx serve &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;code&gt;http://localhost:8000&lt;/code&gt; in your browser.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/ujjwalgupta2021/FloraFind-and-Grounded" rel="noopener noreferrer"&gt;https://github.com/ujjwalgupta2021/FloraFind-and-Grounded&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── index.html   # Main SPA layout, quest board, AI analyzer UI, theme engine &amp;amp; modal
├── style.css    # Custom scrollbars, glassmorphism, animations &amp;amp; theme overrides
├── app.js       # App state engine, Google AI Studio integration, AbortController timeouts
└── README.md    # Official DEV Challenge submission document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧠 Open-Source &amp;amp; Open-Weight AI Architecture
&lt;/h3&gt;

&lt;p&gt;This application is built around Google AI Studio's open model endpoints, featuring &lt;strong&gt;Google's Gemma open-weight series&lt;/strong&gt; (&lt;code&gt;gemma-2-27b-it&lt;/code&gt;, &lt;code&gt;gemma-2-9b-it&lt;/code&gt;) and fast multimodal models (&lt;code&gt;gemini-2.0-flash&lt;/code&gt;, &lt;code&gt;gemini-1.5-flash&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automated Connection &amp;amp; Model Securer&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a user inputs an API key, the app calls &lt;code&gt;ModelService.ListModels&lt;/code&gt; (&lt;code&gt;https://generativelanguage.googleapis.com/v1beta/models&lt;/code&gt;) to discover authorized models.&lt;/li&gt;
&lt;li&gt;It runs an automated priority candidate test sweep to lock in a guaranteed 200 OK connection without requiring users to navigate complex dropdown settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AbortController Timeout Engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built a custom &lt;code&gt;fetchWithTimeout()&lt;/code&gt; wrapper with an optimal 19-second master deadline and 19-second direct fetch budget.&lt;/li&gt;
&lt;li&gt;Prevents browser requests from hanging indefinitely on slow or unresponsive endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend Stack&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core&lt;/strong&gt;: Vanilla HTML5, Modern Modular JavaScript (ES6+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS (Play CDN) + Vanilla CSS Glassmorphism &amp;amp; Keyframe Animations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Icons&lt;/strong&gt;: Lucide Icons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Persistence&lt;/strong&gt;: Browser &lt;code&gt;LocalStorage&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation and open-weight models (such as Google's &lt;strong&gt;Gemma&lt;/strong&gt; family) are fundamental to the future of software development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Transparency &amp;amp; Sovereignty&lt;/strong&gt;: Open-weight models give developers full visibility into model behavior and parameter architectures, removing black-box dependency on proprietary closed APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Privacy Architecture&lt;/strong&gt;: Open endpoints allow applications like &lt;em&gt;FloraFind&lt;/em&gt; to construct direct, peer-to-endpoint calls straight from the user's browser, enabling privacy-first architectures where user keys and personal data stay client-side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unlocking Creative Developer Tooling&lt;/strong&gt;: Open innovation allows developers to build specialized, niche AI experiences—like compiling real-world plants into hilarious developer SLA patch notes—without prohibitive licensing or API lock-in constraints.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This application was planned, architected, and built with the assistance of an autonomous agent swarm using &lt;strong&gt;Antigravity 2.0&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🏆 Grand Prize / Open Innovation Track&lt;/strong&gt;: Best application leveraging open-weight AI models (Google Gemma / AI Studio).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌿 Touch Grass Week 1 Theme Track&lt;/strong&gt;: Best project encouraging physical outdoor interaction, screen-time detox, and real-world exploration.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with 💚 for the Hacktoberfest 2026 Week 1 DEV Challenge — Go Touch Grass!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>Study Buddy — Pomodoro, Flashcards &amp; Quiz in One Beautiful App 🦉</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Mon, 05 Oct 2026 11:24:12 +0000</pubDate>
      <link>https://dev.to/ujjwalgupta2021/study-buddy-pomodoro-flashcards-quiz-in-one-beautiful-app-30hb</link>
      <guid>https://dev.to/ujjwalgupta2021/study-buddy-pomodoro-flashcards-quiz-in-one-beautiful-app-30hb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;StudyBuddy&lt;/strong&gt; is a browser-based productivity + learning app I built for my friend — a college student who was juggling exam prep across three different tools: a phone timer for Pomodoro, a notes app for flashcards, and a Google Form quiz a teacher shared. Every session, they'd context-switch between apps, lose focus, and end up doomscrolling between switches.&lt;/p&gt;

&lt;p&gt;StudyBuddy collapses all three into one beautiful, distraction-free dark-mode app that lives entirely in the browser — no login, no account, no backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ⏱️ Pomodoro Timer
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Animated circular ring timer with a gradient stroke that depletes in real time&lt;/li&gt;
&lt;li&gt;Three modes: &lt;strong&gt;Focus&lt;/strong&gt;, &lt;strong&gt;Short Break&lt;/strong&gt;, &lt;strong&gt;Long Break&lt;/strong&gt; — fully configurable&lt;/li&gt;
&lt;li&gt;Session dot tracker (dots turn green as sessions complete)&lt;/li&gt;
&lt;li&gt;Sound alerts via the Web Audio API — no external files&lt;/li&gt;
&lt;li&gt;Auto-start next session toggle&lt;/li&gt;
&lt;li&gt;Keyboard shortcuts: &lt;code&gt;Space&lt;/code&gt; to start/pause, &lt;code&gt;R&lt;/code&gt; to reset&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🃏 Flashcards
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create cards with a &lt;strong&gt;question&lt;/strong&gt; (front) and &lt;strong&gt;answer&lt;/strong&gt; (back)&lt;/li&gt;
&lt;li&gt;Silky smooth &lt;strong&gt;3D flip animation&lt;/strong&gt; on click or &lt;code&gt;Space&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Navigate with arrow buttons or &lt;code&gt;← →&lt;/code&gt; keys&lt;/li&gt;
&lt;li&gt;Optional &lt;strong&gt;deck/tag&lt;/strong&gt; label per card&lt;/li&gt;
&lt;li&gt;After flipping: rate each card as &lt;strong&gt;Hard / OK / Easy&lt;/strong&gt; for self-paced spaced repetition&lt;/li&gt;
&lt;li&gt;Full card list with per-card delete; all data persists via &lt;code&gt;localStorage&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🧠 Quiz Mode
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Build custom &lt;strong&gt;multiple-choice questions&lt;/strong&gt; (up to 4 options each)&lt;/li&gt;
&lt;li&gt;Mark the correct answer with a ✓ toggle right in the builder&lt;/li&gt;
&lt;li&gt;Per-question &lt;strong&gt;countdown timer&lt;/strong&gt; (configurable 5–300 s) with urgent pulsing at ≤5 s&lt;/li&gt;
&lt;li&gt;Shuffle toggle for randomised question order&lt;/li&gt;
&lt;li&gt;Live score counter during the quiz&lt;/li&gt;
&lt;li&gt;Results screen: animated progress bar, score %, emoji feedback, and a full per-question review showing what you got wrong and what the right answer was&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who it's for
&lt;/h3&gt;

&lt;p&gt;Friends who were burning hours every week just managing study tools. Now they open one tab, set a 25-minute Pomodoro, reviews flashcards during the break, and takes a self-quiz at the end. Zero friction, zero context switching.&lt;/p&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://ujjwalgupta2021.github.io/StudyBuddy/" rel="noopener noreferrer"&gt;ujjwalgupta2021.github.io/StudyBuddy/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To run locally: clone the repo and open &lt;code&gt;index.html&lt;/code&gt; directly in your browser — no build step, no &lt;code&gt;npm install&lt;/code&gt;, no server required.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ujjwalgupta2021/StudyBuddy.git
&lt;span class="nb"&gt;cd &lt;/span&gt;StudyBuddy
&lt;span class="c"&gt;# Open index.html in your browser&lt;/span&gt;
start index.html        &lt;span class="c"&gt;# Windows&lt;/span&gt;
open index.html         &lt;span class="c"&gt;# macOS&lt;/span&gt;
xdg-open index.html     &lt;span class="c"&gt;# Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/ujjwalgupta2021/StudyBuddy" rel="noopener noreferrer"&gt;github.com/ujjwalgupta2021/StudyBuddy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is &lt;strong&gt;vanilla HTML + CSS + JS&lt;/strong&gt; — three files, zero dependencies, zero build tooling.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Semantic structure, ARIA labels, all three tab panels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;style.css&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dark glassmorphism design system — custom tokens, animations, responsive grid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app.js&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All logic: timer engine, flashcard state, quiz engine, localStorage persistence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;graph TD
    A["index.html\nStructure + ARIA"] --&amp;gt; B["app.js\nAll Logic"]
    B --&amp;gt; C["Pomodoro Engine\nsetInterval + Web Audio"]
    B --&amp;gt; D["Flashcard Manager\nlocalStorage CRUD"]
    B --&amp;gt; E["Quiz Engine\nTimer + Scoring"]
    A --&amp;gt; F["style.css\nDesign System"]
    F --&amp;gt; G["CSS Custom Properties\nDark theme tokens"]
    F --&amp;gt; H["CSS Grid Layouts\nPomodoro · FC · Quiz"]
    B --&amp;gt; I["localStorage\nPersists sessions, cards, score"]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Highlights worth looking at
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Circular timer ring&lt;/strong&gt; — pure SVG with a &lt;code&gt;stroke-dashoffset&lt;/code&gt; that ticks down in sync with &lt;code&gt;setInterval&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CIRCUMFERENCE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 615.75px&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateRing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fraction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CIRCUMFERENCE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;fraction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ring-fill&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeDashoffset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3D card flip&lt;/strong&gt; — CSS &lt;code&gt;perspective&lt;/code&gt; + &lt;code&gt;rotateY&lt;/code&gt; with &lt;code&gt;backface-visibility: hidden&lt;/code&gt;, zero JS for the animation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.fc-inner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve-3d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;0.55s&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.fc-inner.flipped&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sound alerts with no audio files&lt;/strong&gt; — Web Audio API oscillator, generated on the fly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;playBeep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;freq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;osc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createOscillator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createGain&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exponentialRampToValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built StudyBuddy with &lt;strong&gt;&lt;a href="https://antigravity.dev" rel="noopener noreferrer"&gt;Antigravity IDE&lt;/a&gt;&lt;/strong&gt; — an open agentic coding assistant powered by &lt;strong&gt;Google DeepMind's Gemini&lt;/strong&gt; models. The entire session was a dialogue: I described features, the agent scaffolded the HTML, generated the CSS design system, wrote the JavaScript logic modules, and I reviewed and iterated in real time.&lt;/p&gt;

&lt;p&gt;The workflow was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Described the three feature areas&lt;/strong&gt; — the agent planned the tab structure and data model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design pass&lt;/strong&gt; — prompted for a dark glassmorphism aesthetic; the agent authored the full CSS custom-property token system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature implementation&lt;/strong&gt; — timer engine, flashcard CRUD, quiz state machine — all built iteratively with me reviewing and adjusting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polish&lt;/strong&gt; — fixed layout gaps (the Pomodoro right-side empty space issue), resolved CSS linter warnings (&lt;code&gt;appearance&lt;/code&gt; vendor prefix compatibility), tuned responsive breakpoints&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent also caught and fixed a real CSS issue mid-session: &lt;code&gt;-moz-appearance: textfield&lt;/code&gt; without the standard &lt;code&gt;appearance: textfield&lt;/code&gt; companion — a cross-browser compatibility gap that linters flag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤖 &lt;strong&gt;Antigravity IDE&lt;/strong&gt; — agentic coding assistant (Google DeepMind / Gemini)&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Google Fonts&lt;/strong&gt; (Outfit typeface) — the only external resource&lt;/li&gt;
&lt;li&gt;🔊 &lt;strong&gt;Web Audio API&lt;/strong&gt; — browser-native, no library&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;StudyBuddy is intentionally &lt;strong&gt;dependency-free&lt;/strong&gt;. No React, no bundler, no CDN-hosted UI kit. That was only possible because an open AI agent understood my constraints ("pure HTML/CSS/JS, runs by opening a file") and worked within them — rather than defaulting to whatever popular framework its training data skewed toward.&lt;/p&gt;

&lt;p&gt;A closed, black-box API can generate code, but it can't be audited, customised, or run offline. With an open-weight model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No data leaves the machine&lt;/strong&gt; — flashcard content and study patterns stay private&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No account walls&lt;/strong&gt; — the app works offline, on any device, forever&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No forced upgrades&lt;/strong&gt; — the code I ship today still works in ten years, no deprecated API keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open innovation made it possible to build a tool that is genuinely &lt;em&gt;for a person&lt;/em&gt;, not a product for a company. That difference matters when you're building for a friend rather than for a market.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;The full pair-programming session with the Antigravity agent — including the design decisions, the Pomodoro layout fix, and the CSS compatibility conversation — was conducted live in the IDE. Key moments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chose &lt;code&gt;stroke-dashoffset&lt;/code&gt; SVG ring over &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; for better CSS composability&lt;/li&gt;
&lt;li&gt;Debated &lt;code&gt;max-width&lt;/code&gt; constraints vs. CSS Grid for the Pomodoro layout (Grid won — no empty right-side space)&lt;/li&gt;
&lt;li&gt;The agent proactively flagged the &lt;code&gt;-moz-appearance&lt;/code&gt; / &lt;code&gt;appearance&lt;/code&gt; cross-browser issue without being asked&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🏆 &lt;strong&gt;Hacktoberfest Weekend Challenge&lt;/strong&gt; — Build for a Friend&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Open Source&lt;/strong&gt; — zero-dependency, MIT-licensed, pure web standards&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Best Design / UI&lt;/strong&gt; — dark glassmorphism, micro-animations, 3D card flip, animated ring timer&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for anyone who wants to ace their exams.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>learning</category>
    </item>
    <item>
      <title>Study Buddy — Pomodoro, Flashcards &amp; Quiz in One Beautiful App 🦉</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:43:31 +0000</pubDate>
      <link>https://dev.to/ujjwalgupta2021/studybuddy-pomodoro-flashcards-quiz-in-one-beautiful-app-1kjc</link>
      <guid>https://dev.to/ujjwalgupta2021/studybuddy-pomodoro-flashcards-quiz-in-one-beautiful-app-1kjc</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;StudyBuddy&lt;/strong&gt; is a browser-based productivity + learning app I built for my friend — a college student who was juggling exam prep across three different tools: a phone timer for Pomodoro, a notes app for flashcards, and a Google Form quiz a teacher shared. Every session, they'd context-switch between apps, lose focus, and end up doomscrolling between switches.&lt;/p&gt;

&lt;p&gt;StudyBuddy collapses all three into one beautiful, distraction-free dark-mode app that lives entirely in the browser — no login, no account, no backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ⏱️ Pomodoro Timer
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Animated circular ring timer with a gradient stroke that depletes in real time&lt;/li&gt;
&lt;li&gt;Three modes: &lt;strong&gt;Focus&lt;/strong&gt;, &lt;strong&gt;Short Break&lt;/strong&gt;, &lt;strong&gt;Long Break&lt;/strong&gt; — fully configurable&lt;/li&gt;
&lt;li&gt;Session dot tracker (dots turn green as sessions complete)&lt;/li&gt;
&lt;li&gt;Sound alerts via the Web Audio API — no external files&lt;/li&gt;
&lt;li&gt;Auto-start next session toggle&lt;/li&gt;
&lt;li&gt;Keyboard shortcuts: &lt;code&gt;Space&lt;/code&gt; to start/pause, &lt;code&gt;R&lt;/code&gt; to reset&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🃏 Flashcards
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create cards with a &lt;strong&gt;question&lt;/strong&gt; (front) and &lt;strong&gt;answer&lt;/strong&gt; (back)&lt;/li&gt;
&lt;li&gt;Silky smooth &lt;strong&gt;3D flip animation&lt;/strong&gt; on click or &lt;code&gt;Space&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Navigate with arrow buttons or &lt;code&gt;← →&lt;/code&gt; keys&lt;/li&gt;
&lt;li&gt;Optional &lt;strong&gt;deck/tag&lt;/strong&gt; label per card&lt;/li&gt;
&lt;li&gt;After flipping: rate each card as &lt;strong&gt;Hard / OK / Easy&lt;/strong&gt; for self-paced spaced repetition&lt;/li&gt;
&lt;li&gt;Full card list with per-card delete; all data persists via &lt;code&gt;localStorage&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🧠 Quiz Mode
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Build custom &lt;strong&gt;multiple-choice questions&lt;/strong&gt; (up to 4 options each)&lt;/li&gt;
&lt;li&gt;Mark the correct answer with a ✓ toggle right in the builder&lt;/li&gt;
&lt;li&gt;Per-question &lt;strong&gt;countdown timer&lt;/strong&gt; (configurable 5–300 s) with urgent pulsing at ≤5 s&lt;/li&gt;
&lt;li&gt;Shuffle toggle for randomised question order&lt;/li&gt;
&lt;li&gt;Live score counter during the quiz&lt;/li&gt;
&lt;li&gt;Results screen: animated progress bar, score %, emoji feedback, and a full per-question review showing what you got wrong and what the right answer was&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who it's for
&lt;/h3&gt;

&lt;p&gt;Friends who were burning hours every week just managing study tools. Now they open one tab, set a 25-minute Pomodoro, reviews flashcards during the break, and takes a self-quiz at the end. Zero friction, zero context switching.&lt;/p&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://ujjwalgupta2021.github.io/StudyBuddy/" rel="noopener noreferrer"&gt;ujjwalgupta2021.github.io/StudyBuddy/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To run locally: clone the repo and open &lt;code&gt;index.html&lt;/code&gt; directly in your browser — no build step, no &lt;code&gt;npm install&lt;/code&gt;, no server required.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ujjwalgupta2021/StudyBuddy.git
&lt;span class="nb"&gt;cd &lt;/span&gt;StudyBuddy
&lt;span class="c"&gt;# Open index.html in your browser&lt;/span&gt;
start index.html        &lt;span class="c"&gt;# Windows&lt;/span&gt;
open index.html         &lt;span class="c"&gt;# macOS&lt;/span&gt;
xdg-open index.html     &lt;span class="c"&gt;# Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/ujjwalgupta2021/StudyBuddy" rel="noopener noreferrer"&gt;github.com/ujjwalgupta2021/StudyBuddy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is &lt;strong&gt;vanilla HTML + CSS + JS&lt;/strong&gt; — three files, zero dependencies, zero build tooling.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Semantic structure, ARIA labels, all three tab panels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;style.css&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dark glassmorphism design system — custom tokens, animations, responsive grid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app.js&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All logic: timer engine, flashcard state, quiz engine, localStorage persistence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;graph TD
    A["index.html\nStructure + ARIA"] --&amp;gt; B["app.js\nAll Logic"]
    B --&amp;gt; C["Pomodoro Engine\nsetInterval + Web Audio"]
    B --&amp;gt; D["Flashcard Manager\nlocalStorage CRUD"]
    B --&amp;gt; E["Quiz Engine\nTimer + Scoring"]
    A --&amp;gt; F["style.css\nDesign System"]
    F --&amp;gt; G["CSS Custom Properties\nDark theme tokens"]
    F --&amp;gt; H["CSS Grid Layouts\nPomodoro · FC · Quiz"]
    B --&amp;gt; I["localStorage\nPersists sessions, cards, score"]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Highlights worth looking at
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Circular timer ring&lt;/strong&gt; — pure SVG with a &lt;code&gt;stroke-dashoffset&lt;/code&gt; that ticks down in sync with &lt;code&gt;setInterval&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CIRCUMFERENCE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 615.75px&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateRing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fraction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CIRCUMFERENCE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;fraction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ring-fill&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeDashoffset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3D card flip&lt;/strong&gt; — CSS &lt;code&gt;perspective&lt;/code&gt; + &lt;code&gt;rotateY&lt;/code&gt; with &lt;code&gt;backface-visibility: hidden&lt;/code&gt;, zero JS for the animation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.fc-inner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve-3d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;0.55s&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.fc-inner.flipped&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sound alerts with no audio files&lt;/strong&gt; — Web Audio API oscillator, generated on the fly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;playBeep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;freq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;osc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createOscillator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createGain&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exponentialRampToValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;audioCtx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dur&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built StudyBuddy with &lt;strong&gt;&lt;a href="https://antigravity.dev" rel="noopener noreferrer"&gt;Antigravity IDE&lt;/a&gt;&lt;/strong&gt; — an open agentic coding assistant powered by &lt;strong&gt;Google DeepMind's Gemini&lt;/strong&gt; models. The entire session was a dialogue: I described features, the agent scaffolded the HTML, generated the CSS design system, wrote the JavaScript logic modules, and I reviewed and iterated in real time.&lt;/p&gt;

&lt;p&gt;The workflow was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Described the three feature areas&lt;/strong&gt; — the agent planned the tab structure and data model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design pass&lt;/strong&gt; — prompted for a dark glassmorphism aesthetic; the agent authored the full CSS custom-property token system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature implementation&lt;/strong&gt; — timer engine, flashcard CRUD, quiz state machine — all built iteratively with me reviewing and adjusting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polish&lt;/strong&gt; — fixed layout gaps (the Pomodoro right-side empty space issue), resolved CSS linter warnings (&lt;code&gt;appearance&lt;/code&gt; vendor prefix compatibility), tuned responsive breakpoints&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent also caught and fixed a real CSS issue mid-session: &lt;code&gt;-moz-appearance: textfield&lt;/code&gt; without the standard &lt;code&gt;appearance: textfield&lt;/code&gt; companion — a cross-browser compatibility gap that linters flag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤖 &lt;strong&gt;Antigravity IDE&lt;/strong&gt; — agentic coding assistant (Google DeepMind / Gemini)&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Google Fonts&lt;/strong&gt; (Outfit typeface) — the only external resource&lt;/li&gt;
&lt;li&gt;🔊 &lt;strong&gt;Web Audio API&lt;/strong&gt; — browser-native, no library&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;StudyBuddy is intentionally &lt;strong&gt;dependency-free&lt;/strong&gt;. No React, no bundler, no CDN-hosted UI kit. That was only possible because an open AI agent understood my constraints ("pure HTML/CSS/JS, runs by opening a file") and worked within them — rather than defaulting to whatever popular framework its training data skewed toward.&lt;/p&gt;

&lt;p&gt;A closed, black-box API can generate code, but it can't be audited, customised, or run offline. With an open-weight model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No data leaves the machine&lt;/strong&gt; — flashcard content and study patterns stay private&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No account walls&lt;/strong&gt; — the app works offline, on any device, forever&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No forced upgrades&lt;/strong&gt; — the code I ship today still works in ten years, no deprecated API keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open innovation made it possible to build a tool that is genuinely &lt;em&gt;for a person&lt;/em&gt;, not a product for a company. That difference matters when you're building for a friend rather than for a market.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;The full pair-programming session with the Antigravity agent — including the design decisions, the Pomodoro layout fix, and the CSS compatibility conversation — was conducted live in the IDE. Key moments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chose &lt;code&gt;stroke-dashoffset&lt;/code&gt; SVG ring over &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; for better CSS composability&lt;/li&gt;
&lt;li&gt;Debated &lt;code&gt;max-width&lt;/code&gt; constraints vs. CSS Grid for the Pomodoro layout (Grid won — no empty right-side space)&lt;/li&gt;
&lt;li&gt;The agent proactively flagged the &lt;code&gt;-moz-appearance&lt;/code&gt; / &lt;code&gt;appearance&lt;/code&gt; cross-browser issue without being asked&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🏆 &lt;strong&gt;Hacktoberfest Weekend Challenge&lt;/strong&gt; — Build for a Friend&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Open Source&lt;/strong&gt; — zero-dependency, MIT-licensed, pure web standards&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Best Design / UI&lt;/strong&gt; — dark glassmorphism, micro-animations, 3D card flip, animated ring timer&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for anyone who wants to ace their exams.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
