<?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: Soumya ghosh</title>
    <description>The latest articles on DEV Community by Soumya ghosh (@soumyaghosh2006).</description>
    <link>https://dev.to/soumyaghosh2006</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%2F4157245%2F99b49180-3f99-467b-b5e8-654f0ea1f959.jpg</url>
      <title>DEV Community: Soumya ghosh</title>
      <link>https://dev.to/soumyaghosh2006</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soumyaghosh2006"/>
    <language>en</language>
    <item>
      <title>InkFlow: The Adaptive Writing Twin &amp; Anti-AI-Slop Engine</title>
      <dc:creator>Soumya ghosh</dc:creator>
      <pubDate>Sat, 17 Oct 2026 15:44:15 +0000</pubDate>
      <link>https://dev.to/soumyaghosh2006/inkflow-the-adaptive-writing-twin-anti-ai-slop-engine-13fo</link>
      <guid>https://dev.to/soumyaghosh2006/inkflow-the-adaptive-writing-twin-anti-ai-slop-engine-13fo</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;We are living through a time when AI-generated writing is becoming increasingly common, but much of it sounds remarkably similar.&lt;/p&gt;

&lt;p&gt;When people use generic AI assistants to polish emails, academic papers, or technical reports, their original writing style can get replaced by repetitive buzzwords, predictable sentence structures, and a uniform corporate tone.&lt;/p&gt;

&lt;p&gt;For students, researchers, professionals, and content creators, this creates a problem: their writing can lose the personal voice and natural rhythm that make it their own.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;InkFlow: The Adaptive Writing Twin &amp;amp; Anti-AI-Slop Engine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;InkFlow is an adaptive writing assistant designed to help people improve their writing while preserving their individual style.&lt;/p&gt;

&lt;p&gt;It has four core capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal Style Genome:&lt;/strong&gt; Uses a two-minute linguistic calibration exercise to build an eight-dimensional profile of a user's writing style, including formality, sentence-length variation, vocabulary diversity, clause structure, and punctuation habits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Slop Detection:&lt;/strong&gt; Identifies common synthetic writing clichés and highlights phrases that make a draft sound generic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four-Stage Rewrite Pipeline:&lt;/strong&gt; Generates or transforms text, removes unwanted stylistic patterns, checks semantic consistency, and performs a light grammar pass designed to preserve the author's punctuation preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive Style Learning:&lt;/strong&gt; Tracks writing changes across sessions and incorporates recurring stylistic preferences rather than overreacting to a single edit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;InkFlow is designed for university students, academics, non-native English professionals, content creators, and technical writers who want writing assistance without losing their own voice.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Side Hustle: Monetization
&lt;/h3&gt;

&lt;p&gt;InkFlow follows a freemium model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free Tier:&lt;/strong&gt; Includes 1,500 words per day, one personal Style Genome profile, AI-slop highlighting, and access to the Humanize Studio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tier — ₹39/month:&lt;/strong&gt; Offers unlimited daily words, multiple writing profiles for different contexts, and priority access to higher-capacity open-weight models through an integrated Razorpay checkout supporting UPI, cards, and net banking.&lt;/p&gt;

&lt;p&gt;The goal is to make personalized writing assistance affordable for students and independent creators.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Web Application:&lt;/strong&gt; &lt;a href="https://ink-flow-twin.vercel.app" rel="noopener noreferrer"&gt;https://ink-flow-twin.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend API:&lt;/strong&gt; &lt;a href="https://inkflow-backend-73hf.onrender.com" rel="noopener noreferrer"&gt;https://inkflow-backend-73hf.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Video:&lt;/strong&gt; &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__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1p_FhEloK0iyZPGV6k-1JwhivHP4IomsQ/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            hacktoberfest3rdchallenge.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&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%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Here are some features you can explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Humanize Studio:&lt;/strong&gt; Paste a draft or raw bullet points, identify common AI-writing clichés, and refine the text with character-level punctuation differences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two-Minute Voice Calibration:&lt;/strong&gt; Complete four linguistic exercises to generate a personalized Style Genome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentence Cadence Analytics:&lt;/strong&gt; Inspect sentence-length variation across paragraphs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct AI Writer:&lt;/strong&gt; Draft emails and lecture notes, then refine them through the Humanize Studio.&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;a href="https://github.com/SoumyaGhosh2006/InkFlow" rel="noopener noreferrer"&gt;https://github.com/SoumyaGhosh2006/InkFlow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project uses a modular full-stack architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI, Python 3.11+, Motor for asynchronous MongoDB access, Groq inference, Pydantic v2, Razorpay integration, Sentry tracing, and Pytest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React 19, TypeScript, Vite, Tailwind CSS, Framer Motion, Zustand, Radix UI, Lucide icons, and Firebase Authentication.&lt;/p&gt;

&lt;p&gt;The repository includes the implementation of the writing pipeline, style calibration, authentication, and subscription workflow.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  1. Dual-Tier Open-Weight Inference
&lt;/h3&gt;

&lt;p&gt;Rather than depending on a single model, InkFlow uses a primary model and a fallback model through Groq.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary model:&lt;/strong&gt; &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt; handles complex stylistic transformations, nuanced rewriting, and Style Genome conditioning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback model:&lt;/strong&gt; &lt;code&gt;openai/gpt-oss-20b&lt;/code&gt; provides a lighter alternative when the primary model encounters timeouts, rate limits, or latency issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The backend uses FastAPI to coordinate requests from the React frontend and route them through the sequential rewriting pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Eight-Dimensional Style Genome
&lt;/h3&gt;

&lt;p&gt;A generic instruction such as "rewrite this in my tone" often produces an exaggerated imitation rather than a useful representation of someone's writing style.&lt;/p&gt;

&lt;p&gt;InkFlow instead uses a short linguistic calibration exercise to capture different aspects of how a person writes.&lt;/p&gt;

&lt;p&gt;The eight dimensions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Formality:&lt;/strong&gt; The balance between academic language and conversational expression.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syntactic Density:&lt;/strong&gt; How frequently subordinate clauses appear in sentences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lexical Entropy:&lt;/strong&gt; Vocabulary diversity and variation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Burstiness Variance:&lt;/strong&gt; Variation in sentence length, from short statements to longer, more complex sentences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Punctuation Signature:&lt;/strong&gt; The author's use of em-dashes, semicolons, commas, and other punctuation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clause Chaining:&lt;/strong&gt; How the author connects related ideas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contraction Ratio:&lt;/strong&gt; The frequency of forms such as "don't" and "it's."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tone Affinity:&lt;/strong&gt; Whether the writing tends to be assertive, exploratory, analytical, or pragmatic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these dimensions provide a more structured starting point for adapting the writing process to individual preferences.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Four-Stage Sequential Rewrite Pipeline
&lt;/h3&gt;

&lt;p&gt;InkFlow processes writing through four stages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1 — Base Draft Generation:&lt;/strong&gt; Expands raw bullet points or creates a first draft while preserving the original assertions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2 — Style Transformation and Slop Removal:&lt;/strong&gt; Applies the user's Style Genome and removes common synthetic clichés.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3 — Semantic Fidelity Check:&lt;/strong&gt; Checks whether the transformed text retains the source's meaning and triggers a retry when significant semantic drift is detected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 4 — Quirk-Preserving Grammar Pass:&lt;/strong&gt; Corrects errors while attempting to preserve characteristic punctuation choices and deliberate stylistic patterns.&lt;/p&gt;

&lt;p&gt;The final result includes character-level differences so users can inspect the changes instead of blindly accepting a rewritten draft.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Engineering Challenges and Solutions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Challenge 1: Preserving Personal Punctuation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Conventional grammar correction can remove em-dashes, semicolons, and other punctuation habits that are part of someone's writing style.&lt;/p&gt;

&lt;p&gt;InkFlow separates grammar correction into its own stage and uses deterministic checks to help protect those preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 2: Preventing Semantic Drift&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aggressive cliché removal can accidentally remove important context, numbers, or factual claims.&lt;/p&gt;

&lt;p&gt;InkFlow includes a semantic verification stage designed to detect meaningful divergence and retry when the rewritten text no longer adequately reflects the source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 3: Improving the Mobile Writing Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A side-by-side editing layout can become difficult to use on smaller screens.&lt;/p&gt;

&lt;p&gt;The mobile interface uses a segmented switcher between the source draft and the humanized result, a compact warning strip for detected phrases, and an automatic transition to the result after rewriting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 4: Strengthening Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During development, mock authentication tokens created the risk of visitors inheriting a test session instead of signing in with their own accounts.&lt;/p&gt;

&lt;p&gt;The production implementation rejects mock tokens, removes frontend fallback tokens, uses Firebase browser-session persistence, and includes an inactivity-based logout policy. The application also allows users to explore drafting features while prompting them to sign in for protected operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Subscription and Reliability
&lt;/h3&gt;

&lt;p&gt;InkFlow combines Firebase Authentication with a Razorpay-based subscription workflow. Its backend also includes Pydantic request validation, Sentry tracing, and automated tests.&lt;/p&gt;

&lt;p&gt;The primary and fallback model arrangement is designed to improve resilience when the primary inference service experiences problems.&lt;/p&gt;

&lt;p&gt;These components support the project's broader goal of making personalized writing assistance practical and affordable.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters because writing is personal. People should have more control over how AI transforms their words instead of being forced into a single model's default writing style.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Greater control over writing style:&lt;/strong&gt; Open-weight models give developers more flexibility to experiment with prompts, model selection, and style-conditioning techniques. This makes it possible to build a writing assistant around individual preferences rather than a generic corporate voice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More flexible inference:&lt;/strong&gt; InkFlow uses a primary and fallback model, helping the application respond to model availability and latency problems without relying entirely on one model configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affordable access:&lt;/strong&gt; The project combines open-weight inference with a low-cost subscription model intended for students and independent creators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A focus on authorship:&lt;/strong&gt; The goal is not to replace a person's ideas with machine-generated prose. It is to help people express their existing ideas more clearly while retaining the characteristics that make their writing recognizable.&lt;/p&gt;

&lt;p&gt;InkFlow is an exploration of how open-weight AI can support a more personalized writing experience.&lt;/p&gt;

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


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Gemini CLI"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Architecting InkFlow: The Adaptive Writing Twin, Anti-AI-Slop Engine &amp;amp; Psycholinguistic Genome&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Let's build InkFlow: an adaptive personal writing twin and anti-AI-slop assistant for university students and professionals. Commercial AI writing tools sanitize and homogenize text with robotic clichés ('delve into the tapestry', 'crucial testament'). We need: 1) A resilient 2-tier open-weight inference engine (Groq openai/gpt-oss-120b primary, 20b fallback), 2) A 4-stage sequential rewrite pipeline that purges slop but strictly preserves personal punctuation quirks (em-dashes, semicolons, conversational comma splices), 3) A 2-minute psycholinguistic Voice Calibration Drill (Pennebaker &amp;amp; King 1999 + Boston Cookie Theft), and 4) Daily/weekly word quota tracking.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;I will architect InkFlow with a FastAPI backend and React 19 / TypeScript frontend adhering to a 4-Stage Sequential Rewrite Pipeline and an 8-Dimensional Psycholinguistic Style Genome extractor:&lt;br&gt;
1. backend/services/providers.py: Configured resilient 2-tier Groq inference (openai/gpt-oss-120b primary with connect=2.5s / read=9.0s timeouts, auto-failover to openai/gpt-oss-20b within 800ms).&lt;br&gt;
2. backend/services/pipeline.py: Implemented Stage 1 (Generate), Stage 2 (Tone &amp;amp; Slop Purge), Stage 3 (Semantic Meaning Check with reason-aware retry on &amp;gt;15% drift), and Stage 4 (Non-Destructive Light Grammar Pass preserving human punctuation quirks).&lt;br&gt;
3. backend/services/grill.py &amp;amp; DrillCard.tsx: Engineered the 2-Minute Voice Calibration Drill mapping uninhibited writing to 8 psycholinguistic parameters (Formality, Syntactic Density, Lexical Entropy, Burstiness Variance, Punctuation Signature, Clause Chaining, Tone, Contractions).&lt;br&gt;
4. backend/services/quota.py: Enforced lazy weekly/daily quota resets with 1,500 words/day on the Free tier.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/app/services/pipeline.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/app/services/pipeline.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Created 4-stage sequential transformation pipeline with reason-aware semantic retry and punctuation protection gates.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/app/services/providers.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/app/services/providers.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Implemented dual-tier Groq LPU provider failover (120B primary -&amp;gt; 20B fallback) with granular connection timeouts.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-runcommand"&gt;run_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;pytest tests -q&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ pytest tests -q&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;39 passed, 0 failures. Verified provider failover, 4-stage retry gate, punctuation preservation, and quota resets.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Integrate Razorpay Standard Web Checkout for the Pro subscription tier. We need: 1) Backend endpoint to create orders (POST /api/v1/payments/create-order) with HMAC-SHA256 signature verification (POST /api/v1/payments/verify), 2) Frontend checkout modal with UPI/Card/Netbanking support, and 3) Set the Pro plan to ₹39/month (democratized student pricing) instead of ₹499.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I have implemented Razorpay standard checkout for the ₹39/mo (3,900 paise) Pro subscription tier:&lt;br&gt;
1. backend/app/api/v1/payments.py: Created POST /create-order and POST /verify endpoints with cryptographic HMAC-SHA256 signature validation.&lt;br&gt;
2. frontend/src/components/payments/UpgradeModal.tsx: Integrated Razorpay Checkout SDK (checkout.js) supporting UPI, card, and netbanking, with confetti celebrations on upgrade and automatic tier elevation to 'pro'.&lt;br&gt;
3. Set default order amount to 3900 paise (₹39) across backend services, frontend API, and test suites.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/app/api/v1/payments.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/app/api/v1/payments.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Configured Razorpay order creation and signature verification with default amount 3900 paise (₹39).&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/components/payments/UpgradeModal.tsx&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/components/payments/UpgradeModal.tsx&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Updated Pro subscription UI and checkout payload to ₹39/mo.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;When opening on a phone, the mobile view is severely broken. The textarea is cramped to 2 lines, output is pushed off-screen, and a wall of 9 slop chips plus docks cover the screen. Also, whenever I open on my phone or incognito, I am automatically logged in as 'Test User' with a dev token. Please fix the mobile layout so it's clean and easy to write, and fix the auto-login security bug.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Diagnosed and resolved both issues:&lt;br&gt;
1. Mobile Layout Redesign (TransformationStudio.tsx): Replaced the squeezed dual-pane vertical stack on phones (&amp;lt; lg) with a mobile-segmented switcher: [ Source Draft ] vs. [ Humanized Result ]. When on Source Draft, the textarea gets the full phone viewport height. Replaced the 200px slop chip cloud with a compact 1-line amber alert banner. Tapping 'Humanize Draft' automatically slides the view to the Humanized Result tab with streaming diffs and action docks.&lt;br&gt;
2. Auth Security Hardening (security.py &amp;amp; api.ts): Discovered the frontend was falling back to 'test-token' for unauthenticated users, which backend resolved to 'Test User'. Removed the fallback token and locked mock tokens strictly to DEBUG mode. In production, unauthenticated requests are properly treated as anonymous.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/components/studio/TransformationStudio.tsx&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/components/studio/TransformationStudio.tsx&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Implemented responsive segmented view switcher (Source Draft vs Humanized Result) for mobile screens.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/app/core/security.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/app/core/security.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Locked mock test tokens strictly to non-production environments with HTTP 401 enforcement.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Let users browse and use the tool without signing in (drafting, exploring tabs), but if they try to do ANY active operation like humanizing text or training the model, notify them with a sign-in modal, and block them until they sign in. After signing in with Google, keep them logged in permanently unless they click logout or remain inactive for 1 week. Also audit Razorpay environment variables.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Implemented the full unauthenticated exploration + action gating system and permanent session lifecycle:&lt;br&gt;
1. AuthModal (frontend/src/components/auth/AuthModal.tsx): Created an interactive Google sign-in modal that triggers whenever an unauthenticated visitor attempts active features: Humanize Draft (useStudioStore), Voice Calibration Drill (DrillCard), AI Chat composition (ChatWriterView), or Writing Adaptations (ActionDock).&lt;br&gt;
2. Permanent Session &amp;amp; 1-Week Inactivity Policy (firebase.ts &amp;amp; App.tsx): Configured Firebase browserLocalPersistence so logged-in users remain permanently signed in across browser restarts. Added throttled user activity tracking (inkflow_last_activity) with automatic logout after 7 consecutive days of zero interaction.&lt;br&gt;
3. Razorpay Env Security Audit: Verified RAZORPAY_KEY_SECRET is strictly confined to backend code and purged an unnecessary secret copy from frontend/.env, ensuring checkout uses only public key IDs.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/components/auth/AuthModal.tsx&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/components/auth/AuthModal.tsx&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Created accessible AuthModal with Google authentication, value highlights, and activity gating.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/lib/firebase.ts&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/lib/firebase.ts&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Configured browserLocalPersistence, 1-week inactivity timeout limit, and throttled activity tracking.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-runcommand"&gt;run_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;npm run build &amp;amp;&amp;amp; pytest tests -q&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ npm run build &amp;amp;&amp;amp; pytest tests -q&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Frontend built in 2.37s with 0 errors. All 39 backend tests passed.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        8 of 8 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Direct Session Link: &lt;a href="https://dev.to/agent_sessions/architecting-inkflow-the-adaptive-writing-twin-anti-ai-slop-engine-psycholinguistic-genome-ayhwbp"&gt;View full agentic session transcript on DEV&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;what my first customer said &lt;br&gt;
&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__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1L4862qCdfYNAJqRzjSn2ohP6OAjn-lY5/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            reviewfromcustomer.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&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%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Based on the project description, these are the partner categories to consider. Include only those for which you can demonstrate the required integration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Best Use of Render:&lt;/strong&gt; The FastAPI backend is deployed on Render.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Best Use of Sentry Agent Tracing:&lt;/strong&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Team Submissions
&lt;/h2&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/aishani_3009"&gt;@aishani_3009&lt;/a&gt;  was in my team, help me to develop this product. &lt;/p&gt;

&lt;p&gt;My aim with InkFlow is to build writing assistance that adapts to people rather than making people adapt to AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better writing should still sound like you.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Hacktoberfest #DEVChallenge #HF26Challenge #SideHustle #AI #OpenSource #WritingTools
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Goblin Mode: Nature Scavenger Bingo — An Offline-First AI Nature Hunt</title>
      <dc:creator>Soumya ghosh</dc:creator>
      <pubDate>Sun, 11 Oct 2026 07:03:00 +0000</pubDate>
      <link>https://dev.to/soumyaghosh2006/goblin-mode-nature-scavenger-bingo-an-offline-first-ai-nature-hunt-33am</link>
      <guid>https://dev.to/soumyaghosh2006/goblin-mode-nature-scavenger-bingo-an-offline-first-ai-nature-hunt-33am</guid>
      <description>&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%2Fzoguxx4ldb39gafik7bj.jpeg" 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%2Fzoguxx4ldb39gafik7bj.jpeg" alt="Grimble's Field Study board with Peepal Leaf, Neem Leaflet, Banyan Root, Wild Hibiscus and Garden Lizard tiles" width="726" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&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;What if AI could encourage us to spend less time looking at screens and more time exploring the world around us?&lt;/p&gt;

&lt;p&gt;That question inspired me to build &lt;strong&gt;Goblin Mode: Nature Scavenger Bingo&lt;/strong&gt;, an AI-powered outdoor nature scavenger hunt designed to turn an ordinary walk through a park, garden, or campus into an interactive discovery experience.&lt;/p&gt;

&lt;p&gt;Instead of endlessly scrolling through an app, users receive nature-based missions, explore their surroundings, photograph real specimens, and use AI to verify their discoveries.&lt;/p&gt;

&lt;p&gt;The project addresses two important challenges: keeping users focused on the real world instead of their screens, and identifying natural objects accurately from imperfect photographs.&lt;/p&gt;

&lt;p&gt;Goblin Mode combines an illustrated field-journal interface with computer vision, taxonomic knowledge retrieval, location-aware quest generation, and offline functionality.&lt;/p&gt;

&lt;p&gt;Its central character is &lt;strong&gt;Grimble&lt;/strong&gt;, an eccentric goblin naturalist who guides users through their discoveries with voice narration and a field-notebook-inspired interface—complete with stitched leather borders, torn deckled parchment pages, brass corner brackets, washi masking tape, and handcrafted watercolor-and-ink SVG botanical sketches.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Discover Nature Through Interactive Missions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application presents a 3×3 nature scavenger bingo board filled with missions inspired by leaves, insects, flowers, and other natural objects.&lt;/p&gt;

&lt;p&gt;When users select a mission, the interface enters &lt;strong&gt;Focus Mode&lt;/strong&gt; and displays one active challenge. This encourages users to put their phones away while exploring and bring them back only when they need to photograph their discovery.&lt;/p&gt;

&lt;p&gt;When a user clicks &lt;strong&gt;"Generate New Board"&lt;/strong&gt; to refresh their missions, the 3×3 grid cleanly unmounts and displays a dual concentric emerald-and-amber loading spiral with an enforced &lt;code&gt;&amp;gt;= 850ms&lt;/code&gt; minimum transition window—preventing jarring sub-second visual flashes while giving clear feedback that a fresh board is being synthesized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AI-Powered Nature Verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users can photograph a specimen and submit it for verification. Before the image reaches the vision model, the backend enhances the image, evaluates its visual details, and creates a dual-scale inspection image containing both the full photograph and a magnified region.&lt;/p&gt;

&lt;p&gt;The verification pipeline combines image analysis, taxonomic knowledge, and multimodal AI to distinguish genuine discoveries from incorrect lookalikes or featureless images:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stage 1 — Computer Vision Pre-Processing (&lt;code&gt;image_enhancer.py&lt;/code&gt;)&lt;/strong&gt;: Raw camera photos are analyzed with a Laplacian edge filter (&lt;code&gt;ImageFilter.FIND_EDGES&lt;/code&gt;) to measure structural edge density (&lt;code&gt;ActiveEdgeRatio&lt;/code&gt;) and color variance (&lt;code&gt;ColorStd&lt;/code&gt;), flagging blank walls or tiny dust specks before AI inference. The image is then converted into &lt;strong&gt;YCbCr color space&lt;/strong&gt; to balance luminance (&lt;code&gt;Y&lt;/code&gt; channel) contrast at a &lt;code&gt;45%&lt;/code&gt; blend without distorting natural green chlorophyll hues, sharpened via &lt;strong&gt;&lt;code&gt;UnsharpMask(radius=1.6, percent=145%, threshold=3)&lt;/code&gt;&lt;/strong&gt; to recover blurry leaf veins and insect legs, and composited into a single &lt;strong&gt;&lt;code&gt;784×448px&lt;/code&gt; Side-by-Side Dual-Scale Naturalist Inspection Plate&lt;/strong&gt; (Left: &lt;code&gt;448×448px&lt;/code&gt; Full Frame | Right: &lt;code&gt;332×448px&lt;/code&gt; &lt;code&gt;2×&lt;/code&gt; Magnified Center Detail Crop).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stage 2 — 4-Gate Taxonomic Referee (&lt;code&gt;verify.py&lt;/code&gt;)&lt;/strong&gt;: Evaluates Subject Integrity (Gate 1), Mandatory Taxonomic Anatomy (Gate 2), Hard-Negative Impostors (Gate 3), and Outdoor Camera Blur Tolerance (Gate 4).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, the system is designed to distinguish a &lt;strong&gt;Peepal leaf (&lt;em&gt;Ficus religiosa&lt;/em&gt;)&lt;/strong&gt;—which requires a heart-shaped cordate base, straight pinnate-reticulate yellow venation, and an elongated tail-like &lt;strong&gt;caudate drip-tip&lt;/strong&gt; ($\ge 20\%$ of blade length)—from visually similar indoor &lt;strong&gt;Money Plant (&lt;em&gt;Epipremnum aureum&lt;/em&gt;)&lt;/strong&gt; vines or &lt;strong&gt;Betel (&lt;em&gt;Piper betle&lt;/em&gt;)&lt;/strong&gt; leaves, and strictly reject a tiny dark speck on a floor as evidence of a &lt;strong&gt;Weaver Ant (&lt;em&gt;Oecophylla smaragdina&lt;/em&gt;)&lt;/strong&gt; unless 3-part body segmentation, a narrow petiole waist, and 6 jointed legs are visible.&lt;/p&gt;

&lt;p&gt;Server-side validation checks the model's response before awarding progress—forcing &lt;code&gt;passed = false&lt;/code&gt; and &lt;code&gt;0 XP&lt;/code&gt; if &lt;code&gt;is_impostor_or_fake == true&lt;/code&gt;, &lt;code&gt;confidence &amp;lt; 0.85&lt;/code&gt;, or the CV speck detector triggered—helping reduce incorrect identifications to achieve &lt;strong&gt;90–95%+ taxonomic precision&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Dynamic Quest Generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Goblin Mode can generate nature missions using location context rather than relying exclusively on a fixed list of challenges.&lt;/p&gt;

&lt;p&gt;Its &lt;strong&gt;Universal Two-Tier Taxonomic RAG system (&lt;code&gt;botanical_rag.py&lt;/code&gt;)&lt;/strong&gt; combines a curated biodiversity index (Tier 1, using strict whole-word boundary regexes &lt;code&gt;\b...\b&lt;/code&gt;) with dynamically generated species-verification criteria (Tier 2). Whenever a player attempts a randomly generated location-based quest that isn't in the static catalog (such as &lt;em&gt;Touch-Me-Not Mimosa pudica&lt;/em&gt;, &lt;em&gt;Crimson Callistemon Bottlebrush&lt;/em&gt;, &lt;em&gt;Seven-Spotted Coccinella Ladybug&lt;/em&gt;, or &lt;em&gt;Plumeria rubra&lt;/em&gt;), our backend queries the open-weight &lt;strong&gt;120B &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;&lt;/strong&gt; model (&lt;code&gt;reasoning_effort="low"&lt;/code&gt;) on the fly to synthesize its scientific name, mandatory diagnostic traits, and lookalike impostors to reject. Cached results in &lt;code&gt;_DYNAMIC_RAG_CACHE&lt;/code&gt; are reused in &lt;code&gt;0ms&lt;/code&gt;, while deterministic domain-class fallback rules handle cases where the AI service is unavailable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Offline-First Exploration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outdoor connectivity is not always reliable, so the application includes client-side HTML5 Canvas image normalization (&lt;code&gt;64px&lt;/code&gt; min to &lt;code&gt;1280px&lt;/code&gt; max bounding box, &lt;code&gt;#FFFFFF&lt;/code&gt; alpha compositing, &lt;code&gt;0.88&lt;/code&gt; JPEG compression under &lt;code&gt;300 KB&lt;/code&gt;) and IndexedDB persistence (&lt;code&gt;idb-keyval&lt;/code&gt;) for local progress and queued specimens.&lt;/p&gt;

&lt;p&gt;A 3-tier procedural quest-generation system cascades from &lt;strong&gt;Local Ollama (&lt;code&gt;gemma2:2b&lt;/code&gt;)&lt;/strong&gt; $\to$ &lt;strong&gt;Cloud Groq (&lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;)&lt;/strong&gt; $\to$ a client-side &lt;strong&gt;Combinatoric Matrix (&lt;code&gt;combinatoricMatrix.ts&lt;/code&gt;)&lt;/strong&gt; that multiplies 15 sensory adjectives, 15 nature nouns, and 10 location contexts to produce up to &lt;strong&gt;2,250 combinations&lt;/strong&gt; for zero-signal offline exploration.&lt;/p&gt;

&lt;p&gt;Account-specific local storage (&lt;code&gt;goblin_bingo_board_v4_&amp;lt;uid&amp;gt;&lt;/code&gt; vs. &lt;code&gt;goblin_bingo_board_v4_guest&lt;/code&gt;) also keeps individual users' boards and XP progress strictly isolated on the same device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Voice, Atmosphere, and Accessibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Grimble provides expressive voice narration through &lt;strong&gt;ElevenLabs (&lt;code&gt;eleven_multilingual_v2&lt;/code&gt;)&lt;/strong&gt; when configured, backed by a &lt;strong&gt;deterministic SHA-256 disk audio cache (&lt;code&gt;backend/audio_cache/&lt;/code&gt;)&lt;/strong&gt; that drops repeat voice latency from &lt;code&gt;~1,400ms&lt;/code&gt; to &lt;code&gt;&amp;lt;15ms&lt;/code&gt; and supported by a dedicated &lt;strong&gt;Centralized Dual-Channel Audio Controller (&lt;code&gt;audioManager.ts&lt;/code&gt;)&lt;/strong&gt; that separates &lt;code&gt;SFX&lt;/code&gt; and &lt;code&gt;Voice&lt;/code&gt; channels so UI clicks never overlap or interrupt Grimble's field commentary.&lt;/p&gt;

&lt;p&gt;The interface also adapts its visual atmosphere to the time of day in &lt;strong&gt;Indian Standard Time (&lt;code&gt;UTC +05:30&lt;/code&gt;)&lt;/strong&gt; on a fast &lt;strong&gt;10-second polling heartbeat&lt;/strong&gt;, with distinct &lt;strong&gt;Morning/Day (&lt;code&gt;07:00–17:00 IST&lt;/code&gt;)&lt;/strong&gt; sunlit pollen motes, &lt;strong&gt;Evening/Sunset (&lt;code&gt;17:00–19:00 IST&lt;/code&gt;)&lt;/strong&gt; amber-violet twilight washes, and &lt;strong&gt;Night (&lt;code&gt;19:00–07:00 IST&lt;/code&gt;)&lt;/strong&gt; moonlit washes with a crescent moon, twinkling stars, and drifting bioluminescent fireflies that are strictly hidden outside nocturnal hours.&lt;/p&gt;

&lt;p&gt;Together, these features aim to make nature exploration feel like an interactive field adventure rather than another screen-based game.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Web App (Please try on phone for best experience):&lt;/strong&gt; &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__body flex items-center justify-between"&gt;
        &lt;a href="https://goblin-nature-bingo.vercel.app" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;goblin-nature-bingo.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Live Backend Health Telemetry:&lt;/strong&gt; &lt;a href="https://goblin-nature-bingo.onrender.com/api/health" rel="noopener noreferrer"&gt;https://goblin-nature-bingo.onrender.com/api/health&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1DqGSOqb6mjMUv41udrZGpEPFkdf78fXF/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1DqGSOqb6mjMUv41udrZGpEPFkdf78fXF/view?usp=sharing&lt;/a&gt;&lt;/p&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/SoumyaGhosh2006/Goblin_Nature_Bingo" rel="noopener noreferrer"&gt;https://github.com/SoumyaGhosh2006/Goblin_Nature_Bingo&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SoumyaGhosh2006" rel="noopener noreferrer"&gt;
        SoumyaGhosh2006
      &lt;/a&gt; / &lt;a href="https://github.com/SoumyaGhosh2006/Goblin_Nature_Bingo" rel="noopener noreferrer"&gt;
        Goblin_Nature_Bingo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌿 Goblin Nature Bingo&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Offline-First, Location-Aware Outdoor Field Journal &amp;amp; AI Botanical Scavenger Hunt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://goblin-nature-bingo.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/497475712333f6c5c4cb31450be3024bc96398485253b50805443ce7c607b871/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6976655f44656d6f2d676f626c696e2d2d6e61747572652d2d62696e676f2e76657263656c2e6170702d3136613334613f7374796c653d666f722d7468652d6261646765" alt="Live Demo"&gt;&lt;/a&gt;
&lt;a href="https://goblin-nature-bingo.onrender.com/api/health" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/622e544936ccaacebf19d89d3455307070dfaaa98df6cafa0b419f0733280944/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656e6465725f4150492d4f6e6c696e652d616d6265723f7374796c653d666f722d7468652d6261646765" alt="Backend API"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SoumyaGhosh2006/Goblin_Nature_Bingo/./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/608c8dfda488178950ce502d7697514db3a6a712579327ed90b9b594260f6355/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e7376673f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Goblin Nature Bingo&lt;/strong&gt; is an interactive, offline-first outdoor scavenger hunt web application guided by &lt;strong&gt;Grimble&lt;/strong&gt;, a voice-synthesized goblin naturalist who gets players off their screens and physically outside exploring parks, gardens, campuses, and neighborhood trails.&lt;/p&gt;
&lt;p&gt;Instead of endlessly scrolling through a screen, users receive nature-based missions on a &lt;code&gt;3×3&lt;/code&gt; weathered leather-and-parchment field binder, step outside to explore their surroundings, photograph real botanical and zoological specimens, and use a multi-stage &lt;strong&gt;Computer Vision + Universal Taxonomic RAG + Open-Weight Multimodal AI&lt;/strong&gt; referee to verify their discoveries.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Core Capabilities&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tactile Naturalist Field Journal &amp;amp; Screen-Free Focus Mode&lt;/strong&gt;: A &lt;code&gt;3×3&lt;/code&gt; deckled-paper Bingo grid featuring stitched leather borders, brass corner brackets, washi masking tape, and bespoke ink-and-watercolor SVG botanical illustrations. Selecting any quest tile enters &lt;strong&gt;Focus Mode&lt;/strong&gt;, collapsing the UI into a single sensory outdoor mission…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SoumyaGhosh2006/Goblin_Nature_Bingo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Explore the implementation, report issues, and contribute to making outdoor AI experiences more reliable and accessible.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React 19, TypeScript, Vite, Tailwind CSS, Framer Motion, HTML5 Canvas, and IndexedDB using idb-keyval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Python 3.11, FastAPI, Pillow, httpx, and Pydantic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI and Computer Vision:&lt;/strong&gt; Qwen 3.8 27B and GPT-OSS 120B through Groq, with local Ollama integrations for Gemma 2 and Moondream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication and Persistence:&lt;/strong&gt; Firebase Authentication, Cloud Firestore, and account-scoped IndexedDB storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice and Monitoring:&lt;/strong&gt; ElevenLabs text-to-speech and Sentry SDK integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment:&lt;/strong&gt; Vercel for the frontend and Render for the FastAPI backend.&lt;/p&gt;

&lt;p&gt;The architecture separates image enhancement, taxonomic retrieval, visual verification, quest generation, persistence, and audio management into distinct components. This makes individual systems easier to maintain and gives the application multiple fallback paths when a service is unavailable.&lt;/p&gt;




&lt;h3&gt;
  
  
  Our Engineering Journey: Real Problems We Faced &amp;amp; How We Tackled Them
&lt;/h3&gt;

&lt;p&gt;Building an AI app that works reliably outdoors required solving several non-obvious systems and computer-vision problems that emerged during real-world testing:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The "Everything Is Blurry" Bug &amp;amp; RGB Auto-Contrast Distortion
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Went Wrong&lt;/strong&gt;: When we first deployed the backend to Render and tested real phone photos—including a real damp mossy wall in a bathroom and outdoor leaves—the verifier kept rejecting valid photos as &lt;em&gt;"blurry or obscured."&lt;/em&gt; Tracing the pipeline revealed two culprits: first, our cloud container was attempting to reach a local Ollama vision instance (&lt;code&gt;127.0.0.1:11434&lt;/code&gt;) first and falling back to a blind placeholder description when Ollama wasn't running on Render; second, when we added standard RGB &lt;code&gt;ImageOps.autocontrast&lt;/code&gt; to sharpen blurry camera shots, it stretched the Red, Green, and Blue histograms independently. On a green leaf with very little red-channel variance, independent RGB stretching distorted natural chlorophyll greens into dark, unnatural blotches!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How We Solved It&lt;/strong&gt;: We routed cloud vision directly to multimodal &lt;strong&gt;&lt;code&gt;qwen/qwen3.8-27b&lt;/code&gt;&lt;/strong&gt; and re-engineered &lt;code&gt;image_enhancer.py&lt;/code&gt; to convert images into &lt;strong&gt;&lt;code&gt;YCbCr&lt;/code&gt; color space&lt;/strong&gt;, applying a &lt;code&gt;45%&lt;/code&gt;-blended &lt;code&gt;autocontrast&lt;/code&gt; &lt;strong&gt;exclusively on the Luminance (&lt;code&gt;Y&lt;/code&gt;) channel&lt;/strong&gt; before merging back with the untouched &lt;code&gt;Cb&lt;/code&gt; and &lt;code&gt;Cr&lt;/code&gt; chrominance channels. Paired with &lt;strong&gt;&lt;code&gt;UnsharpMask(radius=1.6, percent=145%, threshold=3)&lt;/code&gt;&lt;/strong&gt;, this recovered crisp leaf venation, serrated edges, and mossy bryophyte textures from slightly blurry phone shots while preserving &lt;strong&gt;100% of true botanical RGB hues&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. When the Model Became "Too Chill": Stopping Floor Dots &amp;amp; Vine Impostors
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Went Wrong&lt;/strong&gt;: After making the prompt tolerant of slight camera blur, the model became overly lenient. When we tested it by submitting a photo of tiny black and white dots on a floor for a &lt;em&gt;"Weaver Ant Trail"&lt;/em&gt; quest, it approved them as ants! When we submitted a random heart-shaped indoor &lt;em&gt;Money Plant&lt;/em&gt; vine leaf for a &lt;em&gt;"Heart-Shaped Peepal Leaf"&lt;/em&gt; quest, it approved that too—only rejecting photos when the frame was a completely blank wall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How We Solved It&lt;/strong&gt;:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Laplacian Edge &amp;amp; Speck Telemetry&lt;/strong&gt;: We added pre-inference computer vision telemetry using &lt;code&gt;ImageFilter.FIND_EDGES&lt;/code&gt; and &lt;code&gt;ImageStat&lt;/code&gt;. Any image with &lt;code&gt;ActiveEdgeRatio &amp;lt; 0.010&lt;/code&gt; and &lt;code&gt;ColorStd &amp;lt; 18.0&lt;/code&gt; (or &lt;code&gt;EdgeMean &amp;lt; 2.0&lt;/code&gt;) is automatically flagged with &lt;code&gt;is_featureless_or_speck = True&lt;/code&gt;, mathematically catching floor dots and blank surfaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4-Gate Taxonomic RAG &amp;amp; Whole-Word Regexes&lt;/strong&gt;: We built &lt;code&gt;botanical_rag.py&lt;/code&gt; with explicit &lt;strong&gt;Mandatory Diagnostic Traits&lt;/strong&gt; and &lt;strong&gt;Hard-Negative Impostors to Reject&lt;/strong&gt;, plus a server-side post-validation guard (&lt;code&gt;confidence &amp;gt;= 0.85&lt;/code&gt; and &lt;code&gt;is_impostor_or_fake == False&lt;/code&gt;). During testing, we also caught a classic regex bug: substring matching caused the keyword &lt;code&gt;"ant"&lt;/code&gt; in our arthropod classifier to falsely match &lt;code&gt;"Touch-Me-Not Plant"&lt;/code&gt; (&lt;code&gt;pl-ant&lt;/code&gt;) and &lt;code&gt;"Fragrant Plumeria"&lt;/code&gt; (&lt;code&gt;fragr-ant&lt;/code&gt;)! Switching to strict &lt;strong&gt;word-boundary regular expressions (&lt;code&gt;\b{keyword}s?\b&lt;/code&gt;)&lt;/strong&gt; fixed the collision immediately. In benchmark runs, floor dots and wrong vine leaves were cleanly rejected at &lt;strong&gt;&lt;code&gt;confidence = 0.00–0.05&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Overcoming the 7,000 ITPM Token Wall &amp;amp; Supporting Infinite Location Quests
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Went Wrong&lt;/strong&gt;: Because players can generate quests dynamically anywhere in the world, we couldn't rely on a static hardcoded species list. However, when we initially sent two high-resolution base64 images (&lt;code&gt;1280px&lt;/code&gt; Full Frame + &lt;code&gt;768px&lt;/code&gt; &lt;code&gt;2×&lt;/code&gt; Detail Crop) and ran dynamic RAG synthesis on the same vision model (&lt;code&gt;qwen/qwen3.8-27b&lt;/code&gt;), a single verification consumed &lt;strong&gt;5,194 input tokens&lt;/strong&gt;—hitting Groq's &lt;code&gt;7,000 ITPM&lt;/code&gt; free-tier rate limit on the very second photo! We also discovered that legacy &lt;code&gt;.env&lt;/code&gt; configurations referencing &lt;code&gt;llama-3.2-11b-vision-preview&lt;/code&gt; failed with &lt;code&gt;HTTP 400 model_decommissioned&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How We Solved It&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5.5× Vision Token Reduction&lt;/strong&gt;: Instead of sending two separate high-res images, &lt;code&gt;image_enhancer.py&lt;/code&gt; composites the &lt;code&gt;448×448&lt;/code&gt; Enhanced Full View and the &lt;code&gt;332×448&lt;/code&gt; &lt;code&gt;2×&lt;/code&gt; Magnified Center Zoom side-by-side into a single &lt;strong&gt;&lt;code&gt;784×448px&lt;/code&gt; Naturalist Inspection Plate&lt;/strong&gt; (~450 vision tokens). Combined with &lt;code&gt;/no_think&lt;/code&gt; and &lt;code&gt;max_tokens: 220&lt;/code&gt;, total input tokens dropped from &lt;strong&gt;5,194 to ~900 tokens per verification (an 82% reduction)&lt;/strong&gt;, enabling &lt;strong&gt;6–7 consecutive photo verifications per minute&lt;/strong&gt; with zero rate-limit errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decoupled 120B Dynamic RAG Synthesizer&lt;/strong&gt;: We routed Tier-2 Dynamic Taxonomic RAG synthesis and board generation to Groq's &lt;strong&gt;120B &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;reasoning_effort="low"&lt;/code&gt;), which uses a separate rate-limit bucket and synthesizes full scientific rubrics for any unseen location quest in &lt;code&gt;~0.3s&lt;/code&gt; (cached in &lt;code&gt;_DYNAMIC_RAG_CACHE&lt;/code&gt; for &lt;code&gt;0ms&lt;/code&gt; repeat lookups).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-Healing Model Config&lt;/strong&gt;: Added automatic runtime sanitization in &lt;code&gt;config.py&lt;/code&gt; that transparently upgrades decommissioned &lt;code&gt;.env&lt;/code&gt; model strings to &lt;code&gt;qwen/qwen3.8-27b&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Eliminating Audio Layering, Clock Drift &amp;amp; Cross-Account State Leaks
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Centralized Audio Preemption&lt;/strong&gt;: Rapidly clicking specimen tiles, lighting toggles, and Grimble's voice button originally caused 2–3 audio instances to play simultaneously. We replaced scattered &lt;code&gt;.play()&lt;/code&gt; calls with a singleton dual-channel controller (&lt;code&gt;audioManager.ts&lt;/code&gt;) that runs &lt;code&gt;pause()&lt;/code&gt; + &lt;code&gt;currentTime = 0&lt;/code&gt; with a &lt;code&gt;60ms&lt;/code&gt; debounce on the &lt;code&gt;SFX&lt;/code&gt; channel while protecting the &lt;code&gt;Voice&lt;/code&gt; channel from minor UI interruptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account-Scoped Storage Hydration&lt;/strong&gt;: To prevent Player A's offline board and XP from leaking when Player B logs in on the same device, we bound IndexedDB keys to Firebase Auth's &lt;code&gt;onAuthStateChanged&lt;/code&gt; UID (&lt;code&gt;goblin_bingo_board_v4_&amp;lt;uid&amp;gt;&lt;/code&gt;) and purged in-memory state on logout.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;Open-weight models and accessible developer tools make it possible to experiment with AI beyond conventional chatbot interfaces.&lt;/p&gt;

&lt;p&gt;Goblin Mode explores how these technologies can support outdoor learning, biodiversity awareness, and hands-on discovery. Its combination of cloud models (&lt;code&gt;qwen/qwen3.8-27b&lt;/code&gt; and &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;), local inference options (&lt;code&gt;gemma2:2b&lt;/code&gt; and &lt;code&gt;moondream&lt;/code&gt; via Ollama), and deterministic offline fallbacks (&lt;code&gt;2,250-combination&lt;/code&gt; procedural matrix) is designed to reduce dependence on a single proprietary vendor, survive model deprecations seamlessly, and run at &lt;strong&gt;$0 cost&lt;/strong&gt; for students and educators.&lt;/p&gt;

&lt;p&gt;Local inference through Ollama can also support privacy-conscious exploration when the relevant models are installed and configured on the user's device, keeping backyard and campus photographs completely on local hardware.&lt;/p&gt;

&lt;p&gt;The broader goal is to make AI a companion to real-world experiences, not a replacement for them.&lt;/p&gt;

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


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Gemini CLI"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Building Goblin Mode: Universal Taxonomic RAG &amp;amp; Dual-Scale Computer Vision Referee&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Fix three issues in Goblin Mode: Nature Scavenger Bingo:&lt;br&gt;
1. Atmosphere phase updates too slowly after device time changes (poll every 10-15s in Auto mode).&lt;br&gt;
2. Redefine IST time boundaries to Day (07:00-17:00), Evening/Sunset (17:00-19:00), and Night (19:00-07:00) with fireflies strictly nocturnal.&lt;br&gt;
3. Fix overlapping audio playback by implementing a centralized dual-channel audio manager (SFX and Voice) that resets currentTime = 0 and protects Grimble's voice commentary from minor UI clicks.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I will update RealTimeAtmosphere.tsx to poll every 10 seconds using exact UTC-to-IST (+05:30) minute boundary calculations (Day 07:00–17:00, Sunset 17:00–19:00, Night 19:00–07:00) and build a singleton Dual-Channel Audio Manager (audioManager.ts) separating SFX and Voice channels.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/utils/audioManager.ts&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/utils/audioManager.ts&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Created centralized dual-channel audio preemption manager with SFX (60ms debounce + pause/reset) and protected Voice channel.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/components/RealTimeAtmosphere.tsx&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/components/RealTimeAtmosphere.tsx&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Updated IST phase calculation to 10-second polling interval with strict nocturnal firefly rendering (19:00–07:00 IST).&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;When someone clicks on 'Generate new board', hide the board and show an animated loading circle/spiral until the new board is ready, then reveal the board.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I will add an isGeneratingBoard state in App.tsx with a minimum 850ms transition threshold and render a dual concentric emerald/amber loading spiral inside BingoBoard.tsx while new quests are synthesized.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-replacefilecontent"&gt;replace_file_content&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;frontend/src/components/BingoBoard.tsx&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;frontend/src/components/BingoBoard.tsx&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Added AnimatePresence board unmount transition and dual concentric rotating loading circles with live status copy.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Now we need the image verification pipeline to achieve 90-95% taxonomic accuracy across both curated quests and any randomly generated location-based quests. It must not reject slightly blurry real photos (like damp mossy walls), but it must strictly reject fake impostors like black/white floor dots submitted as Weaver Ants or random Money Plant vine leaves submitted as a heart-shaped Peepal leaf. Use computer vision enhancers and a Taxonomic RAG system.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;I will architect a 3-stage Computer Vision + Universal Two-Tier Taxonomic RAG + 4-Gate Multimodal Referee pipeline:&lt;br&gt;
1. backend/services/image_enhancer.py: Computes Laplacian edge density (ImageFilter.FIND_EDGES) to flag featureless floor specks, applies 45%-blended YCbCr Y-channel auto-contrast (preserving true botanical RGB hues), sharpens venation via UnsharpMask(radius=1.6, percent=145, threshold=3), and builds a 784x448px Side-by-Side Dual-Scale Naturalist Inspection Plate (Left: 448x448 Full Frame; Right: 332x448 2x Magnified Center Zoom), cutting vision input tokens by 5.5x (5,194 -&amp;gt; ~900 tokens).&lt;br&gt;
2. backend/services/botanical_rag.py: Implements Tier-1 whole-word regex matching (\b...\b) for 17+ core species and Tier-2 Live Dynamic Taxonomic RAG Synthesis via openai/gpt-oss-120b (with in-memory LRU caching) for 100% of unseen location-generated quests.&lt;br&gt;
3. backend/routes/verify.py: Evaluates the inspection plate with qwen/qwen3.8-27b across 4 sequential gates and enforces a strict server-side post-validation override (confidence &amp;gt;= 0.85, is_impostor_or_fake == False, is_featureless_or_speck == False).&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/services/image_enhancer.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/services/image_enhancer.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Created YCbCr luminance contrast + UnsharpMask + 784x448 side-by-side dual-scale inspection plate generator.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/services/botanical_rag.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/services/botanical_rag.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Created Universal Two-Tier Botanical &amp;amp; Zoological RAG Engine with curated species index and live openai/gpt-oss-120b dynamic taxonomic synthesizer.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writetofile"&gt;write_to_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;backend/routes/verify.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;backend/routes/verify.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Updated /api/verify with 4-Gate multimodal evaluation, /no_think token optimization, 429 retry backoff, and server-side post-validation guards.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-runcommand"&gt;run_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python test_universal_rag.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python test_universal_rag.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Verified dynamic RAG synthesis across 5 unseen random quests (Mimosa pudica, Callistemon citrinus, Coccinella septempunctata, Pinus spp., Plumeria rubra) and confirmed rejection of floor specks (conf=0.05) and impostor vine leaves (conf=0.00).&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        6 of 6 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Link&lt;/strong&gt;: &lt;a href="https://dev.to/agent_sessions/building-goblin-mode-universal-taxonomic-rag-dual-scale-computer-vision-referee-sobpbu"&gt;Building Goblin Mode: Universal Taxonomic RAG &amp;amp; Dual-Scale Computer Vision Referee&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt;: Deploys and orchestrates our FastAPI AI verification, Pillow Computer Vision enhancer, and Dynamic Taxonomic RAG backend (&lt;code&gt;goblin-nature-bingo-api&lt;/code&gt;) via a declarative &lt;code&gt;render.yaml&lt;/code&gt; Blueprint and &lt;code&gt;Procfile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;: Integrates Google's open-weight &lt;strong&gt;Gemma 2 (&lt;code&gt;gemma2:2b&lt;/code&gt;)&lt;/strong&gt; model via Ollama (&lt;code&gt;backend/services/ollama_client.py&lt;/code&gt;) for local zero-cost procedural quest generation and botanical verification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt;: Powers &lt;strong&gt;Grimble the Goblin's&lt;/strong&gt; voice narration (&lt;code&gt;backend/services/elevenlabs_svc.py&lt;/code&gt;, &lt;code&gt;backend/routes/voice.py&lt;/code&gt;) with deterministic &lt;strong&gt;SHA-256 disk caching&lt;/strong&gt; and a dual-channel audio preemption manager.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing&lt;/strong&gt;: Uses &lt;code&gt;sentry-sdk&amp;gt;=2.0.0&lt;/code&gt; (&lt;code&gt;backend/main.py&lt;/code&gt;, &lt;code&gt;backend/routes/verify.py&lt;/code&gt;) with FastAPI transaction tracing (&lt;code&gt;traces_sample_rate=1.0&lt;/code&gt;) to monitor multimodal vision latency, rate-limit retries, and RAG pipeline performance.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Building Goblin Mode gave me an opportunity to explore the challenges of combining computer vision, retrieval-augmented generation, offline-first web development, and multimodal AI in one application.&lt;/p&gt;

&lt;p&gt;I learned that a useful AI experience requires more than a model call. Image quality, color-space math (&lt;code&gt;YCbCr&lt;/code&gt; vs. &lt;code&gt;RGB&lt;/code&gt;), false-positive impostor gates, token budget optimization (&lt;code&gt;5,194&lt;/code&gt; $\to$ &lt;code&gt;~900&lt;/code&gt; tokens), SHA-256 caching, local IndexedDB persistence, per-UID account isolation, and multi-tier failure recovery all matter when software is used outside controlled conditions.&lt;/p&gt;

&lt;p&gt;The project also reinforced an important design principle: technology should encourage meaningful experiences rather than demand constant attention.&lt;/p&gt;

&lt;p&gt;Step outside. Find something unexpected. Complete your next nature quest.&lt;/p&gt;

&lt;h1&gt;
  
  
  Hacktoberfest #DEVChallenge #HF26Challenge #TouchGrass #AI #OpenSource #Gemma #TabPFN #ElevenLabs #Sentry #Render
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>SchoolDesk: AI-Powered Administration and Teaching Support for Schools</title>
      <dc:creator>Soumya ghosh</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:35:17 +0000</pubDate>
      <link>https://dev.to/soumyaghosh2006/schooldesk-ai-powered-administration-and-teaching-support-for-schools-f7j</link>
      <guid>https://dev.to/soumyaghosh2006/schooldesk-ai-powered-administration-and-teaching-support-for-schools-f7j</guid>
      <description>&lt;p&gt;title: SchoolDesk: AI-Powered Administration and Teaching Support for Schools&lt;br&gt;
published:&lt;/p&gt;
&lt;h2&gt;
  
  
  tags: devchallenge, weekendchallenge, hf26challenge
&lt;/h2&gt;

&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;I built &lt;strong&gt;SchoolDesk&lt;/strong&gt;, a dual-purpose administrative and academic web platform designed specifically for my father, who is a school principal.&lt;/p&gt;

&lt;p&gt;Managing a government school in India involves immense bureaucratic overhead, particularly the daily accounting for the "Midday Meal" scheme (tracking rice consumption, expenses, and student attendance). My father and his staff were losing hours daily to manual paper ledgers. Furthermore, teachers were spending significant off-the-clock time developing chapter notes and complex whiteboard diagrams.&lt;/p&gt;

&lt;p&gt;This platform solves both problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Administrative Ledger:&lt;/strong&gt; A voice-activated inventory tracker that takes natural language audio, transcribes it, and automatically structures it into a secure, downloadable, government-compliant Excel sheet and a generated "analog-style" handwritten digital ledger.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Teaching Aid (Admin Notes):&lt;/strong&gt; A client-side PDF scanner that ingests textbook chapters and uses a rigorously constrained LLM to output a master formula sheet, Higher-Order Thinking Skills (HOTS) questions, and dynamically generated SVG whiteboard diagrams.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&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__body flex items-center justify-between"&gt;
        &lt;a href="https://school-desk-lime.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;school-desk-lime.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
 &lt;br&gt;
video link:&lt;br&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__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1QRL--TqcUzlu91MCjht4VsmJekgJfCsJ/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            hacktober1stchallenge.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&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%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SoumyaGhosh2006" rel="noopener noreferrer"&gt;
        SoumyaGhosh2006
      &lt;/a&gt; / &lt;a href="https://github.com/SoumyaGhosh2006/SchoolDesk" rel="noopener noreferrer"&gt;
        SchoolDesk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;SchoolDesk&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Dual-Purpose School Administrative Ledger &amp;amp; AI Pedagogical Assistant&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;In government and public schools, headmasters, principals, and teachers face two recurring, time-consuming administrative challenges every single day:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manual Mid-Day Meal (MDM) Ledger Bookkeeping:&lt;/strong&gt; Manually recording daily student attendance, calculating ingredient costs (eggs, vegetables, oil, pulses, spices, fuel), reconciling bulk rice grain stocks, and maintaining flawless handwritten inspection registers for government compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-Intensive Lesson Preparation:&lt;/strong&gt; Extracting formulas, drafting Higher-Order Thinking Skills (HOTS) questions, synthesizing student mistake pitfalls, and drafting whiteboard diagrams across heavy textbook chapters.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;SchoolDesk&lt;/strong&gt; solves both problems with a unified, voice-driven digital workspace. It allows school staff to speak their daily meal expenses into existence in seconds, generate audit-ready spreadsheets and realistic handwritten registers, digitize physical vouchers with a built-in camera document scanner, and instantly convert syllabus PDFs into structured, textbook-grade teaching aids.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Core Features &amp;amp; Use Cases (User Guide)&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;SchoolDesk is designed to be completely…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SoumyaGhosh2006/SchoolDesk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React, Vite, Tailwind CSS (Typography), &lt;code&gt;remark-gfm&lt;/code&gt; / &lt;code&gt;rehype-katex&lt;/code&gt; (for LaTeX rendering), &lt;code&gt;html-to-image&lt;/code&gt; (for flawless PDF exports bypassing CSS color crashes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python), PyPDF2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI &amp;amp; Open Source:&lt;/strong&gt; Meta's Llama 3 70B (via Groq for lightning-fast inference), OpenAI Whisper (for audio transcription).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Collaborators:&lt;/strong&gt; Antigravity (coding agent), Gemini, and ChatGPT for architectural thought-partnering and prompt engineering.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  System Architecture &amp;amp; Workflow
&lt;/h3&gt;

&lt;p&gt;The application is built on two highly resilient, state-driven pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pipeline 1: The Voice-to-Ledger Engine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Voice Input]
     ↓
[Audio Sanitization / Base MIME Extraction]
     ↓
[Whisper API Transcription]
     ↓
[Raw Text]
     ↓
[LLM Data Extraction]
     ↓
[Strict Pydantic JSON Schema]
     ↓
[Frontend State Update]
     ↓
[Human Verification / Editing]
     ↓
[CSV or Handwritten Ledger Export]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Pipeline 2: The Pedagogical Teaching Aid Engine (Admin Notes)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[PDF/Image Upload]
     ↓
[Client-side jsPDF Scanner / PyPDF2 Extraction]
     ↓
[Raw Textbook Text]
     ↓
[LLM Inference (Llama 3 70B)]
     ├─&amp;gt; State 1: Zero Hallucination Grounding (Extracts exact formulas)
     ├─&amp;gt; State 2: 20% Prerequisite Memory Injection (Temperature = 0.2)
     ├─&amp;gt; State 3: Strict Escaping (Raw String Python Prompts)
     └─&amp;gt; State 4: SVG Generation (Forced Complexity Parameters)
     ↓
[Frontend Rendering]
     ├─&amp;gt; Sanitized GitHub Flavored Markdown (GFM)
     ├─&amp;gt; KaTeX CSS for Textbook-Quality Equations
     └─&amp;gt; Tailwind Prose for Professional Typography
     ↓
[Google Docs Bridge / High-Res PDF Export]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;Open innovation is the only way a project like this can exist in the real world. Closed, proprietary APIs are often too expensive, rigid, or heavily rate-limited for public sector education systems in developing nations. By utilizing open-weight models like Llama 3 and open-source audio transcription, we can achieve enterprise-grade automation on a shoestring budget.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Real-World Impact &amp;amp; Metrics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Administrative Efficiency:&lt;/strong&gt; What previously took 1.5 to 2 hours of manual calculation, cross-checking, and physical ledger entry is now accomplished via a 30-second voice note while walking down the school hallway. The data is instantly structured, mathematically verified, and ready for government audit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pedagogical Quality:&lt;/strong&gt; Designing engaging, challenging lesson plans with accurate visual aids is time-consuming. The Teaching Aid module reduces a 3-hour lesson prep down to 15 seconds. By injecting "prerequisite formulas" and HOTS questions, it actively upgrades the quality of education delivered to the students.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Market Positioning:&lt;/strong&gt; 95% of current EdTech focuses on the student (AI tutors, homework solvers). This project targets the administrators and teachers—a massive, underserved demographic that desperately needs tools to reduce burnout and administrative bloat.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;SchoolDesk currently uses open-source/open-weight AI and local inference, and using render.com to deploy my backend and to host the database,&lt;/p&gt;
&lt;h2&gt;
  
  
  tags: devchallenge, weekendchallenge, hf26challenge
&lt;/h2&gt;

&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;I built &lt;strong&gt;SchoolDesk&lt;/strong&gt;, a dual-purpose administrative and academic web platform designed specifically for my father, who is a school principal.&lt;/p&gt;

&lt;p&gt;Managing a government school in India involves immense bureaucratic overhead, particularly the daily accounting for the "Midday Meal" scheme (tracking rice consumption, expenses, and student attendance). My father and his staff were losing hours daily to manual paper ledgers. Furthermore, teachers were spending significant off-the-clock time developing chapter notes and complex whiteboard diagrams.&lt;/p&gt;

&lt;p&gt;This platform solves both problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Administrative Ledger:&lt;/strong&gt; A voice-activated inventory tracker that takes natural language audio, transcribes it, and automatically structures it into a secure, downloadable, government-compliant Excel sheet and a generated "analog-style" handwritten digital ledger.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Teaching Aid (Admin Notes):&lt;/strong&gt; A client-side PDF scanner that ingests textbook chapters and uses a rigorously constrained LLM to output a master formula sheet, Higher-Order Thinking Skills (HOTS) questions, and dynamically generated SVG whiteboard diagrams.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&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__body flex items-center justify-between"&gt;
        &lt;a href="https://school-desk-lime.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;school-desk-lime.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
video link:&lt;br&gt;&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__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1QRL--TqcUzlu91MCjht4VsmJekgJfCsJ/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            hacktober1stchallenge.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&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%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SoumyaGhosh2006" rel="noopener noreferrer"&gt;
        SoumyaGhosh2006
      &lt;/a&gt; / &lt;a href="https://github.com/SoumyaGhosh2006/SchoolDesk" rel="noopener noreferrer"&gt;
        SchoolDesk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;SchoolDesk&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Dual-Purpose School Administrative Ledger &amp;amp; AI Pedagogical Assistant&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;In government and public schools, headmasters, principals, and teachers face two recurring, time-consuming administrative challenges every single day:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manual Mid-Day Meal (MDM) Ledger Bookkeeping:&lt;/strong&gt; Manually recording daily student attendance, calculating ingredient costs (eggs, vegetables, oil, pulses, spices, fuel), reconciling bulk rice grain stocks, and maintaining flawless handwritten inspection registers for government compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-Intensive Lesson Preparation:&lt;/strong&gt; Extracting formulas, drafting Higher-Order Thinking Skills (HOTS) questions, synthesizing student mistake pitfalls, and drafting whiteboard diagrams across heavy textbook chapters.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;SchoolDesk&lt;/strong&gt; solves both problems with a unified, voice-driven digital workspace. It allows school staff to speak their daily meal expenses into existence in seconds, generate audit-ready spreadsheets and realistic handwritten registers, digitize physical vouchers with a built-in camera document scanner, and instantly convert syllabus PDFs into structured, textbook-grade teaching aids.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Core Features &amp;amp; Use Cases (User Guide)&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;SchoolDesk is designed to be completely…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SoumyaGhosh2006/SchoolDesk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React, Vite, Tailwind CSS (Typography), &lt;code&gt;remark-gfm&lt;/code&gt; / &lt;code&gt;rehype-katex&lt;/code&gt; (for LaTeX rendering), &lt;code&gt;html-to-image&lt;/code&gt; (for flawless PDF exports bypassing CSS color crashes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python), PyPDF2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI &amp;amp; Open Source:&lt;/strong&gt; Meta's Llama 3 70B (via Groq for lightning-fast inference), OpenAI Whisper (for audio transcription).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Collaborators:&lt;/strong&gt; Antigravity (coding agent), Gemini, and ChatGPT for architectural thought-partnering and prompt engineering.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  System Architecture &amp;amp; Workflow
&lt;/h3&gt;

&lt;p&gt;The application is built on two highly resilient, state-driven pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pipeline 1: The Voice-to-Ledger Engine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Voice Input]
     ↓
[Audio Sanitization / Base MIME Extraction]
     ↓
[Whisper API Transcription]
     ↓
[Raw Text]
     ↓
[LLM Data Extraction]
     ↓
[Strict Pydantic JSON Schema]
     ↓
[Frontend State Update]
     ↓
[Human Verification / Editing]
     ↓
[CSV or Handwritten Ledger Export]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pipeline 2: The Pedagogical Teaching Aid Engine (Admin Notes)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[PDF/Image Upload]
     ↓
[Client-side jsPDF Scanner / PyPDF2 Extraction]
     ↓
[Raw Textbook Text]
     ↓
[LLM Inference (Llama 3 70B)]
     ├─&amp;gt; State 1: Zero Hallucination Grounding (Extracts exact formulas)
     ├─&amp;gt; State 2: 20% Prerequisite Memory Injection (Temperature = 0.2)
     ├─&amp;gt; State 3: Strict Escaping (Raw String Python Prompts)
     └─&amp;gt; State 4: SVG Generation (Forced Complexity Parameters)
     ↓
[Frontend Rendering]
     ├─&amp;gt; Sanitized GitHub Flavored Markdown (GFM)
     ├─&amp;gt; KaTeX CSS for Textbook-Quality Equations
     └─&amp;gt; Tailwind Prose for Professional Typography
     ↓
[Google Docs Bridge / High-Res PDF Export]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Open innovation is the only way a project like this can exist in the real world. Closed, proprietary APIs are often too expensive, rigid, or heavily rate-limited for public sector education systems in developing nations. By utilizing open-weight models like Llama 3 and open-source audio transcription, we can achieve enterprise-grade automation on a shoestring budget.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real-World Impact &amp;amp; Metrics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Administrative Efficiency:&lt;/strong&gt; What previously took 1.5 to 2 hours of manual calculation, cross-checking, and physical ledger entry is now accomplished via a 30-second voice note while walking down the school hallway. The data is instantly structured, mathematically verified, and ready for government audit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pedagogical Quality:&lt;/strong&gt; Designing engaging, challenging lesson plans with accurate visual aids is time-consuming. The Teaching Aid module reduces a 3-hour lesson prep down to 15 seconds. By injecting "prerequisite formulas" and HOTS questions, it actively upgrades the quality of education delivered to the students.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Market Positioning:&lt;/strong&gt; 95% of current EdTech focuses on the student (AI tutors, homework solvers). This project targets the administrators and teachers—a massive, underserved demographic that desperately needs tools to reduce burnout and administrative bloat.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;SchoolDesk currently uses open-source/open-weight AI and local inference, and using render.com to deploy my backend and to host the database,&lt;/p&gt;

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