<?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: Manan Sharma</title>
    <description>The latest articles on DEV Community by Manan Sharma (@scar3max).</description>
    <link>https://dev.to/scar3max</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%2F4152909%2F9d3758f6-c0bb-4aed-954c-418434804e68.jpg</url>
      <title>DEV Community: Manan Sharma</title>
      <link>https://dev.to/scar3max</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scar3max"/>
    <language>en</language>
    <item>
      <title>Prep Sheet: A Cafe Prep Planner</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Tue, 13 Oct 2026 22:40:05 +0000</pubDate>
      <link>https://dev.to/scar3max/prep-sheet-a-cafe-prep-planner-3l0n</link>
      <guid>https://dev.to/scar3max/prep-sheet-a-cafe-prep-planner-3l0n</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;&lt;strong&gt;Prep Sheet&lt;/strong&gt; is a prep-planning prototype for independent cafes, bakeries, and food counters. It helps answer a practical morning question: how much should the kitchen prepare for each menu item?&lt;/p&gt;

&lt;p&gt;Food businesses have to balance two costly outcomes: preparing too much can mean waste, while preparing too little can mean turning customers away after a sell-out. Prep Sheet takes menu prices and costs plus recent daily sales, then turns those records into an item-by-item prep recommendation.&lt;/p&gt;

&lt;p&gt;The Telegram bot lets an owner enter a menu and daily sales in a private chat. Entries are validated and previewed before the owner confirms them. The app stores confirmed records locally in SQLite, separated by Telegram chat ID. &lt;code&gt;/prep&lt;/code&gt; produces a next-day brief from the last seven recorded sales rows per item and treats a recorded stock-out as evidence that demand may have been higher than sales.&lt;/p&gt;

&lt;p&gt;The potential customer is a small cafe owner or bakery operator who currently relies on memory or a spreadsheet to decide what to prepare. A paid version could be useful as an affordable daily planning tool, but I have not yet tested willingness to pay with cafe owners.&lt;/p&gt;

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

&lt;p&gt;Video Demo:   &lt;iframe src="https://www.youtube.com/embed/IBzSM0xGlSE" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prep-sheet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;venv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;venv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\.venv\Scripts\Activate.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".[tabpfn]"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prepsheet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;demo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--forecast-provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tabpfn&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The demo replays a &lt;strong&gt;synthetic 120-day cafe ledger&lt;/strong&gt;. Add &lt;code&gt;TABPFN_TOKEN&lt;/code&gt; to a private &lt;code&gt;.env&lt;/code&gt; and install the optional TabPFN extra to try the hosted TabPFN path. The output reports whether TabPFN succeeded or a local fallback was used. API calls may use account quota.&lt;/p&gt;

&lt;p&gt;To try the Telegram flow locally, configure &lt;code&gt;TELEGRAM_BOT_TOKEN&lt;/code&gt; and an allowlisted private chat ID in &lt;code&gt;.env&lt;/code&gt;, then run &lt;code&gt;python -m prepsheet telegram&lt;/code&gt;. The bot is a local long-polling process and must stay running.&lt;/p&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/Scar3max" rel="noopener noreferrer"&gt;
        Scar3max
      &lt;/a&gt; / &lt;a href="https://github.com/Scar3max/Prep-Sheet" rel="noopener noreferrer"&gt;
        Prep-Sheet
      &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;Prep Sheet&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Prep Sheet is a small-cafe prep planner for a bakery or counter in India. Its synthetic-data demo ingests sales notes, corrects for sell-outs, forecasts demand, converts that into prep quantities, and writes a short practical brief. Its local Telegram bot can collect a cafe's menu and daily sales, then produce a basic prep plan from those saved records.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What this project does&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Parses owner notes such as "sold 14 croissants, 9 cold coffees, puffs gone by 4pm, binned 6 muffins" into structured rows.&lt;/li&gt;
&lt;li&gt;Corrects obvious sell-out bias by treating recorded sales as a lower bound when a stock-out happened.&lt;/li&gt;
&lt;li&gt;Builds a simple per-item demand feature table from synthetic cafe data.&lt;/li&gt;
&lt;li&gt;Forecasts demand with a local heuristic by default, or the official Prior Labs TabPFN client when explicitly selected.&lt;/li&gt;
&lt;li&gt;Converts demand into a prep quantity using a simple newsvendor-style ratio.&lt;/li&gt;
&lt;li&gt;Generates a short morning brief with a local template…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Scar3max/Prep-Sheet" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repository includes the Python source, setup instructions, a synthetic demo, and tests. It is licensed under MIT.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Prep Sheet is a Python 3.11 project. The demo generates cafe sales and context features, estimates demand after accounting for sell-outs, converts forecasts to prep quantities, and formats a morning brief.&lt;/p&gt;

&lt;p&gt;For the model experiment, I integrated Prior Labs' TabPFN through its official &lt;code&gt;tabpfn-client&lt;/code&gt; interface. When explicitly selected and configured, &lt;code&gt;TabPFNRegressor&lt;/code&gt; is trained on the demo's generated tabular features and synthetic &lt;code&gt;true_demand&lt;/code&gt; labels. The run reports provider status and falls back to a local heuristic if the hosted call cannot produce a result.&lt;/p&gt;

&lt;p&gt;The Telegram workflow is a separate real-input path: it validates menu and sales entries, previews them for confirmation, saves them to a per-chat SQLite database, and calculates prep from recent recorded sales. &lt;strong&gt;That Telegram forecast currently uses a local recent-average calculation, not TabPFN.&lt;/strong&gt; The TabPFN experiment currently runs on synthetic demo data; it has not been validated on a cafe's real sales history.&lt;/p&gt;

&lt;p&gt;Two other providers are available as explicitly opt-in Telegram workflows. &lt;code&gt;train-tinker&lt;/code&gt; fine-tunes a LoRA adapter using the project's small synthetic sales-note examples; after configuring the returned model path, &lt;code&gt;/sales-note&lt;/code&gt; sends a free-form note to Tinker and turns its structured extraction into a review draft. The owner must inspect and confirm the rows before they are saved. I verified the hosted path with a one-step fine-tune and a synthetic extraction note, but have not evaluated quality on real cafe notes; the resulting checkpoint is experimental, not a production-ready sales parser. &lt;code&gt;/voice&lt;/code&gt; sends the current prep text to ElevenLabs Text to Speech and returns an audio file. I verified speech generation with a synthetic prep sentence. Both paths are optional hosted calls and may use provider quota.&lt;/p&gt;

&lt;p&gt;Gemini is optional and is used only to phrase a structured prep brief. It is not the forecasting model and is not an open-weight model. When enabled for Telegram &lt;code&gt;/prep&lt;/code&gt;, the structured summary is sent to Gemini; otherwise the app uses a local template.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;TabPFN gives this project an alternative to building and maintaining a conventional tabular model from scratch. Its client fits behind a provider boundary, so the demo can explicitly select TabPFN, report when it was used, and retain a local fallback when it is unavailable. The source code, data flow, inputs, and fallback behavior are inspectable and can be changed by another developer.&lt;/p&gt;

&lt;p&gt;This is not an offline or zero-cost claim: the current TabPFN integration calls a hosted service, needs a token and internet access, and may consume account quota. The demo sends synthetic features rather than a cafe owner's actual Telegram sales to TabPFN. The actual cafe-data workflow stays in local SQLite unless an owner explicitly uses &lt;code&gt;/sales-note&lt;/code&gt; (sending that note to Tinker), &lt;code&gt;/voice&lt;/code&gt; (sending the prep text to ElevenLabs), or enables Gemini briefing (sending the structured prep summary to Gemini).&lt;/p&gt;

&lt;p&gt;The next meaningful step is to evaluate a model on enough real, permissioned cafe history and connect it to &lt;code&gt;/prep&lt;/code&gt; only if it improves on the simple local baseline.&lt;/p&gt;
&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This is an expanded chronological reconstruction of the project decisions and implementation work; earlier turns were summarized, so it is not a verbatim raw transcript.&lt;/p&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;Prep Sheet: Detailed Build, Provider Decisions, and Telegram Workflow&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;Project goal: build Prep Sheet, a practical prep planner for small cafes in India. Show your work: preserve the development process so it can help judges understand how the project was built. A DEV post can link to or embed the agent session; this is optional.&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;Started with a synthetic Indian cafe ledger and a working demo pipeline rather than requiring a cafe's private records. The prototype covers sales/ledger generation, note extraction, feature construction, stock-out correction, forecasting, prep quantities, briefing, CLI output, and tests. The sample menu includes Bun Maska, Cake Slice, Cold Coffee, Croissant, Masala Dosa, Muffin, Samosa, Sandwich, Tea, and Veg Puff. The demo replays 120 synthetic days with a fixed seed, reports per-item demand and prep quantities, includes recent-sales and weather-cue reasons, and writes results to results/demo_results.json. This makes the initial demo reproducible and inspectable while keeping synthetic results distinct from actual cafe forecasts.&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-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;Assume the answers to the project questions however you think suits the project the most.&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;Used reasonable defaults for the prototype: synthetic cafe data, locally runnable Python package, a demo-first forecasting path, and practical prep recommendations. Initial test failures exposed a feature-table indexing bug, which was fixed before the demo and focused tests passed.&lt;/p&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;Is the original project prompt complete? Please finish the next missing layer.&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;Distinguished what the synthetic demo proves from real-provider behavior and real-cafe validation. Added optional provider integrations, environment-based configuration, provider status reporting, and tests that exercise success/fallback behavior without live API calls.&lt;/p&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;How do I get the TabPFN API URL? Walk me through obtaining each token in the .env one by one. I have obtained Gemini and TabPFN keys; what next? How do I know whether results used APIs or fallbacks? I removed the keys from .env for privacy and will add them locally when running.&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;Explained that credentials should stay in the user's private .env, and the program reports provider requested/used/status/reason. A key by itself does not select a remote provider: selection must be configured or passed as a CLI option. Switched the TabPFN path to the official tabpfn-client estimator flow instead of a hand-built service URL adapter.&lt;/p&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;Update the code so I can use the API keys instead of local fallbacks. Do I have to download the TabPFN client?&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;Added provider selection and documented installation of the optional TabPFN client. The TabPFN demo trains on generated synthetic item/context features with synthetic true-demand labels. It is not a trained real-cafe forecasting system. Provider status distinguishes remote success from a local fallback.&lt;/p&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;The first demo showed TabPFN fallback from AttributeError; Gemini fell back after HTTP 404 because its configured model was unavailable. A subsequent run showed TabPFN failure: 'list' object has no attribute 'shape', and another unavailable Gemini model. Please diagnose from these outputs.&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;Fixed TabPFN labels by providing a pandas Series, which resolved the label shape error. Updated Gemini model choices in response to the API's model-unavailable messages and added retry/failover handling for transient service errors. Later output confirmed TabPFN success. Gemini errors were explicitly surfaced in provider status instead of being mistaken for success.&lt;/p&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;Can I use Gemma instead of Gemini, since I may have a partner track? Then: okay, use Gemma instead of Gemini. Later I chose to keep using Gemini after its model configuration was updated.&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;Discussed that managed Gemma through Google Cloud is a different deployment/setup path and is not activated by a Gemini API key alone. The implementation remained on Gemini after the user opted to proceed with Gemini. A later run still showed Gemini model 404/503 responses, while TabPFN forecasting succeeded; these provider statuses were treated as evidence, not hidden.&lt;/p&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 it works perfectly; what should I do? What is our bot actually doing? Can I ask users for their menu and sales details?&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;Clarified that the initial Telegram bot only returned synthetic demo prep data. The next feature should accept the cafe's menu and sales, save them per private Telegram chat, and produce a prep result from those saved records rather than the synthetic demo ledger.&lt;/p&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;Okay, implement menu and sales entry in the bot. Use the assumptions you think fit the project.&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 guided /menu and /sales entry, preview-before-save confirmation via /confirm, /cancel, /menu list, /prep, /help, and /id. Menu lines include item name, selling price, and cost (for example Tea | 25 | 8). Sales lines include item, quantity made, quantity sold, and stock-out yes/no (for example Tea | 20 | 20 | yes), with optional YYYY-MM-DD date selection. Input is validated for duplicate names, nonnegative prices/costs/counts, sold not exceeding made, valid stock-out values, and sales items present in that chat's menu. Menu matching is case-insensitive and updates preserve the existing display name. Duplicate item/date sales are rejected rather than overwritten. Saved data is scoped by chat ID in local SQLite. Only allowlisted private chats can access data; group chats are refused.&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-pytest"&gt;pytest&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;pytest -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"&gt;&lt;code&gt;pytest -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;The first suite run exposed Windows SQLite database files that remained open during temporary-directory cleanup. Replaced connection lifetime handling with a closing context manager; 19 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 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;The real Telegram prep path uses the cafe's latest seven recorded sales rows per item. On stock-out days, made quantity is used as a lower-bound demand estimate; sold-out days are noted in the prep reasons. Prep quantity also accounts for saved price and cost. This first version uses a local recent-average forecast for cafe records; TabPFN is used in the synthetic demo path only. Gemini may optionally phrase the structured prep brief and can fall back to a local template. Telegram storage is local at data/prepsheet.sqlite3 and the polling process must remain running; it is not a deployed always-on webhook.&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-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;Improve the output format of the Telegram bot.&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;Improved Telegram prompts, menu and sales reviews, help/confirmation/errors, and prep output with clearer headings, separators, emoji cues, rupee price formatting, item-by-item lines, and explicit confirm/cancel instructions. Prep output identifies Gemini success or local wording without dumping technical fallback error details. Updated the README to describe the revised format.&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-pytest"&gt;pytest&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;pytest -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"&gt;&lt;code&gt;pytest -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;19 passed. Pylance/file diagnostics reported no errors in the changed Python files.&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;If I added my TabPFN key, does this code use it?&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;Explained the exact conditions: the optional client must be installed, TABPFN_TOKEN must be set, and forecasting must be selected with FORECAST_PROVIDER=tabpfn or --forecast-provider tabpfn. The CLI demo can then report TabPFN success or fallback. Telegram /prep still uses the recent-average real-sales path; it does not call TabPFN.&lt;/p&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;Are you storing this agent session using DevRelay as I asked in the prompt?&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;Acknowledged that no upload had occurred yet. After the user approved saving, submitted an unpublished session to the DEV profile. The submitted version was too short and the user asked for a much more detailed record of the prompts, requirements, decisions, and properties considered.&lt;/p&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;The previous transcript was too curated. I want the agent session to represent the well-detailed prompt I gave and all the properties I attached and thought of as we moved forward.&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;Prepared this expanded chronological account from the history and project checkpoint available in the current session. It preserves the project's intent, user decisions, reported provider errors/results, feature behavior, and test outcome. This is an expanded reconstruction, not a claim to be an exact raw transcript; some earlier turns were already summarized in the available history.&lt;/p&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;
        27 of 23 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN&lt;/strong&gt; — TabPFN is used for the synthetic historical-demand forecasting experiment described above. The Telegram real-sales forecast does not yet use TabPFN.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; — The optional &lt;code&gt;/voice&lt;/code&gt; command converts the prep brief into speech and sends the generated audio to the Telegram chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Tinker&lt;/strong&gt; — Tinker fine-tunes a LoRA adapter for structured sales-note extraction, exposed through the opt-in &lt;code&gt;/sales-note&lt;/code&gt; workflow with a review-before-save step. The hosted path was smoke-tested on synthetic data, but I have not yet measured a clear performance, latency, or cost improvement over the rule-based extractor baseline; that comparison is still needed to fully meet this category's judging criterion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best use of GitHub Copilot&lt;/strong&gt; — I used GitHub Copilot as a pair programmer to build Prep Sheet’s end-to-end café planning workflow—from turning free-form sales notes into structured records to correcting for sell-outs, forecasting demand, and generating prep plans in Telegram. I reviewed and tested suggestions, kept hosted AI features opt-in with local fallbacks, and made sure extracted sales aren’t saved until the user confirms them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;submitted by: &lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__4152909"&gt;
    &lt;a href="/scar3max" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4152909%2F9d3758f6-c0bb-4aed-954c-418434804e68.jpg" alt="scar3max image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/scar3max"&gt;Manan Sharma&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/scar3max"&gt;/scar3max&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Grass Forecast - Turning Bike-Share and Weather Data into a Reason to Touch Grass</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Sun, 11 Oct 2026 11:07:58 +0000</pubDate>
      <link>https://dev.to/scar3max/grass-forecast-turning-bike-share-and-weather-data-into-a-reason-to-touch-grass-2idn</link>
      <guid>https://dev.to/scar3max/grass-forecast-turning-bike-share-and-weather-data-into-a-reason-to-touch-grass-2idn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Grass Forecast&lt;/strong&gt; helps people find a reason to step outside—even when the latest activity data is delayed.&lt;/p&gt;

&lt;p&gt;The project uses public Chicago Divvy bike-share data and weather information to forecast outdoor activity. When activity data is fresh, it predicts whether tomorrow is likely to be a high-activity day and identifies a likely busy time window. When Divvy’s published data is stale, it switches to a separate ride-count estimate, labels it clearly as an estimate, and shows how old the source data is. If an activity estimate isn’t available, the dashboard can still suggest an outing based on the weather.&lt;/p&gt;

&lt;p&gt;The idea is to make the forecast useful without pretending an estimate is an observation. Grass Forecast also generates a short, weather-aware nudge to make going outside feel more approachable.&lt;/p&gt;

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

&lt;p&gt;Video Demo:   &lt;iframe src="https://www.youtube.com/embed/azf1TR4cAYQ" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&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/Scar3max" rel="noopener noreferrer"&gt;
        Scar3max
      &lt;/a&gt; / &lt;a href="https://github.com/Scar3max/GrassForecast" rel="noopener noreferrer"&gt;
        GrassForecast
      &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;Grass Forecast&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Grass Forecast is a tiny outdoor-day forecaster built for the Touch Grass challenge. It learns from public outdoor activity data and historical weather to estimate whether tomorrow will be a high-activity day, which window is likely busiest, and then writes a short spoken nudge.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What this does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Pulls Chicago Divvy bike-share activity data from the public Divvy bucket&lt;/li&gt;
&lt;li&gt;Fetches historical daily weather for the training period and tomorrow's forecast from Open-Meteo for Chicago&lt;/li&gt;
&lt;li&gt;Builds a daily feature table with leakage-safe history and weather features&lt;/li&gt;
&lt;li&gt;Evaluates with expanding, time-ordered walk-forward folds and compares against three baselines&lt;/li&gt;
&lt;li&gt;Uses TabPFN when its token is configured and available; otherwise labels the scikit-learn fallback explicitly&lt;/li&gt;
&lt;li&gt;Generates a short, conversational nudge with Gemma through the Gemini API or a local fallback message, including a weather-aware estimate-based nudge when activity data is stale&lt;/li&gt;
&lt;li&gt;Converts fresh-data and stale-estimate nudges to short audio files with ElevenLabs when…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Scar3max/GrassForecast" 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;p&gt;Grass Forecast has a Python and FastAPI backend with a React dashboard. It collects public Divvy trip data and weather data from Open-Meteo, then prepares daily and hourly activity features for forecasting.&lt;/p&gt;

&lt;p&gt;The project uses two distinct approaches rather than treating missing recent data as if it were current:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With fresh activity data, it uses a high-activity classifier and estimates the busiest window.&lt;/li&gt;
&lt;li&gt;With stale data, it uses a separate ride-count estimator for targets up to 30 days beyond the latest observation. The dashboard shows the activity-through date, data age, forecast lead, and estimated count.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The stale estimate is directional, not measured activity. Its displayed model range is not a calibrated prediction interval, and the historical weather evaluation uses observed weather rather than archived day-ahead forecasts—so those results may be optimistic.&lt;/p&gt;

&lt;p&gt;For AI, I use the open-weight Gemma 3 4B model through the Gemini API to generate a concise, conversational nudge. The project also supports TabPFN for classification when configured, with a clearly labeled scikit-learn fallback.&lt;/p&gt;

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

&lt;p&gt;This project depends on being able to combine and inspect tools from different parts of the ecosystem: public activity data, open weather data, open-weight models, and open-source application frameworks.&lt;/p&gt;

&lt;p&gt;That flexibility helped me build a system that can adapt when one source is delayed. Instead of hiding the gap or returning nothing, Grass Forecast can switch to a clearly labeled estimate or offer a weather-based idea. Open tools also make it easier to see where the data comes from, what is processed locally, and where hosted AI services are involved. That transparency matters when a forecast could otherwise look more certain than it really is.&lt;/p&gt;

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

&lt;p&gt;Best Use of TabPFN &lt;br&gt;
Best Use of GitHub Copilotx&lt;br&gt;
Best Use of ElevenLabs&lt;br&gt;
Best Use of Gemma&lt;/p&gt;

&lt;p&gt;Published by - &lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__4152909"&gt;
    &lt;a href="/scar3max" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4152909%2F9d3758f6-c0bb-4aed-954c-418434804e68.jpg" alt="scar3max image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/scar3max"&gt;Manan Sharma&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/scar3max"&gt;/scar3max&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>PrepPal: How I Built an Adaptive, Open-Source AI Mock Interviewer for My Anxious Batchmate</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Fri, 02 Oct 2026 06:35:48 +0000</pubDate>
      <link>https://dev.to/scar3max/preppal-how-i-built-an-adaptive-open-source-ai-mock-interviewer-for-my-anxious-batchmate-30n7</link>
      <guid>https://dev.to/scar3max/preppal-how-i-built-an-adaptive-open-source-ai-mock-interviewer-for-my-anxious-batchmate-30n7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Every placement season on campus, the same story unfolds: brilliant engineers who can write flawless code freeze up the moment an interviewer asks them to explain concepts out loud. &lt;br&gt;
My close friend and college roommate is one of those engineers. Despite knowing distributed systems and algorithms inside out, mock interview anxiety was getting the best of them. Commercial mock platforms were either expensive paid subscriptions, static LeetCode question banks, or generic AI chatbots that write 3-paragraph lectures instead of behaving like a real, conversational interviewer.&lt;br&gt;
To help my friend prepare without the fear of judgment or high fees, I built &lt;strong&gt;PrepPal&lt;/strong&gt; (Adaptive Performance-Based Technical Interview Bot) — an intelligent, conversational mock interviewer that adapts to how well the candidate is actually doing in real time.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Capabilities:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Natural, Concise Dialogue:&lt;/strong&gt; Follows strict conversational pacing (one short follow-up at a time, zero lecturing, and a filter that bans robotic phrases like &lt;em&gt;"Let's shift gears"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavioral &amp;amp; Hesitation Detection:&lt;/strong&gt; Actively catches filler words (&lt;em&gt;"umm"&lt;/em&gt;, &lt;em&gt;"uh"&lt;/em&gt;, trailing off), evasive non-answers, or blank spots, immediately softening the follow-up instead of penalizing blindly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Difficulty &amp;amp; Pivoting:&lt;/strong&gt; Computes a real-time momentum score across answers. If my friend is acing a topic, it escalates to expert architectural trade-offs; if they hit a wall, it smoothly pivots to another technical domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glassmorphism Analytics Dashboard:&lt;/strong&gt; Gives immediate feedback badges and post-interview Plotly visual performance reports.&lt;/li&gt;
&lt;/ul&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://interview-framework.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;interview-framework.onrender.com&lt;/span&gt;
          

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


&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What my friend said after testing it:&lt;/strong&gt;  &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;em&gt;"It doesn't feel like talking to ChatGPT. When I hesitated on Python decorators, it didn't write me an essay — it just gave me a gentle nudge to explain simple functions first, exactly like our campus placement rounds."&lt;/em&gt;
&lt;/h2&gt;
&lt;/blockquote&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/Scar3max" rel="noopener noreferrer"&gt;
        Scar3max
      &lt;/a&gt; / &lt;a href="https://github.com/Scar3max/MiniProject" rel="noopener noreferrer"&gt;
        MiniProject
      &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;🎯 Adaptive Performance-Based Interview Bot&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;An AI-powered technical interview companion that dynamically adjusts its questions, difficulty, and topics in real-time based on the candidate's answers. Built with a hybrid Edge-Cloud LLM architecture utilizing a local Small Language Model (SLM) for drafting and the Groq API for strategic evaluation.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Edge-Cloud Architecture&lt;/strong&gt;: Combines local Qwen2.5-7B-Instruct SLM (via Llama.cpp) and cloud-based Groq API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Difficulty &amp;amp; Pivoting&lt;/strong&gt;: Automatically detects knowledge gaps, hesitation patterns, and performance trend signals to adjust difficulty or pivot sub-topics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Badges&lt;/strong&gt;: Displays immediate feedback (e.g., &lt;em&gt;Good Answer&lt;/em&gt;, &lt;em&gt;Vague&lt;/em&gt;, &lt;em&gt;Incorrect&lt;/em&gt;, &lt;em&gt;Hesitation&lt;/em&gt;) as the candidate responds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Analytics Dashboard&lt;/strong&gt;: Renders interactive Plotly charts showing score trends, answer quality distribution, and personalized qualitative AI feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Natural Tone Enforcement&lt;/strong&gt;: Automatically monitors and filters robotic transitions to keep the dialogue conversational and human-like.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Tech Stack&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Streamlit (Glassmorphism dark theme)&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Scar3max/MiniProject" 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;p&gt;Local Edge SLM (Fine-Tuned Qwen2.5-7B-Instruct):&lt;/p&gt;

&lt;p&gt;Fine-tuned on our own campus technical interview dialogue dataset.&lt;br&gt;
Quantized to Q4_K_M GGUF and executed completely offline on consumer hardware via llama-cpp-python (llama.cpp) using the ChatML prompt specification.&lt;br&gt;
Serves as the rapid triage engine: produces instantaneous 12–18 word probing follow-ups and emits a dedicated [CONFIDENCE_LOW] token if the candidate's answer indicates struggle or hesitation.&lt;/p&gt;

&lt;p&gt;Open Cloud Reasoning (Qwen 3.8 27B via Groq):&lt;/p&gt;

&lt;p&gt;Handles parallel answer evaluation (strict 0.0–10.0 numeric scoring + diagnostic classification) with sub-second latency.&lt;br&gt;
Powers dynamic topic syllabus generation with an SQLite persistent caching layer.&lt;/p&gt;

&lt;p&gt;Open-Source Stack:&lt;/p&gt;

&lt;p&gt;Frontend: Streamlit with custom Glassmorphism dark CSS.&lt;br&gt;
Inference Harness: llama-cpp-python, Groq SDK.&lt;br&gt;
Visualization: Plotly for real-time candidate score trajectories and competency distributions.&lt;/p&gt;

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

&lt;p&gt;This project could not have succeeded on proprietary, closed-source foundation models alone:&lt;/p&gt;

&lt;p&gt;Custom Fine-Tuning for Specialized Agent Behavior:&lt;br&gt;
Closed APIs often refuse to output strict sentinel tokens or insist on polite, verbose conversational fillers. Open weights allowed us to fine-tune Qwen2.5-7B specifically on campus placement conversations, conditioning it to reliably output single control tokens like [CONFIDENCE_LOW] when candidates freeze up.&lt;br&gt;
Local Edge Inference Means Zero Anxiety &amp;amp; Complete Privacy:&lt;br&gt;
Job interview preparation is deeply vulnerable. By running our triage model locally in quantized GGUF format on a laptop, mock interview transcripts don't have to be harvested into commercial training sets. It works even on poor campus Wi-Fi with no internet dependency for drafting.&lt;br&gt;
Freedom to Evolve Without Lock-In:&lt;br&gt;
During development, we completely swapped our local SLM from Phi-3 to fine-tuned Qwen2.5, and migrated cloud reasoning to open-weight Qwen 27B without touching our core orchestration state machines. Open weights give builders sovereign control over their AI infrastructure.&lt;/p&gt;

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

&lt;p&gt;1)Best use of Render&lt;br&gt;
2)Best use of Github Copilot&lt;/p&gt;

&lt;p&gt;Submitted by: scar3max&lt;/p&gt;

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