<?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: Akshat Shah</title>
    <description>The latest articles on DEV Community by Akshat Shah (@akshatshahh).</description>
    <link>https://dev.to/akshatshahh</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%2F4162619%2Fe6c88ee5-235b-4fe6-a60a-5678cd4ee02e.png</url>
      <title>DEV Community: Akshat Shah</title>
      <link>https://dev.to/akshatshahh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akshatshahh"/>
    <language>en</language>
    <item>
      <title>Trail Whisperer: Identify the Bird. Save the Moment. Keep Walking.</title>
      <dc:creator>Akshat Shah</dc:creator>
      <pubDate>Mon, 12 Oct 2026 05:02:32 +0000</pubDate>
      <link>https://dev.to/akshatshahh/trail-whisperer-identify-the-bird-save-the-moment-keep-walking-1eo0</link>
      <guid>https://dev.to/akshatshahh/trail-whisperer-identify-the-bird-save-the-moment-keep-walking-1eo0</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;A bird calls somewhere above you. A plant catches your eye. You take a photo, promise yourself you’ll identify it later, and eventually lose it among hundreds of other pictures.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Trail Whisperer&lt;/strong&gt; to give those small discoveries somewhere to live.&lt;/p&gt;

&lt;p&gt;It’s an offline-first trail companion and personal memory book for curious walkers, beginner birders, and anyone who wants to notice more outside.&lt;/p&gt;

&lt;p&gt;The workflow is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capture a plant or animal photo, or upload a short bird recording.&lt;/li&gt;
&lt;li&gt;Review the AI’s identification suggestion.&lt;/li&gt;
&lt;li&gt;Save the discovery with a trail name and optional notes.&lt;/li&gt;
&lt;li&gt;Keep exploring.&lt;/li&gt;
&lt;li&gt;Revisit your discoveries in your memory book at home.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The memory book includes a discovery timeline, species collection, trip summaries, and encounter statistics. At basecamp, you can search saved encounters by meaning and explore reference links about a species.&lt;/p&gt;

&lt;p&gt;My design goal was to make the screen a brief stop during an outing: capture something interesting, save the moment, and return your attention to the world around you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What “offline” means:&lt;/strong&gt; a prepared laptop runs the backend and downloaded AI models. A phone connects to that laptop over local Wi-Fi. The network does not need upstream internet, but the laptop must remain reachable. The models do not run directly on the phone.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/yq-PGzqCRfs" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The video is an AI-assisted product showcase made using app screenshots.&lt;/p&gt;

&lt;p&gt;The retained Squirrel and Kingfisher images are labeled demo photos, not verified trail observations. Species identifications are suggestions to review rather than confirmed sightings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trail Whisperer currently runs locally. There is no public hosted website.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After following the setup instructions, open &lt;code&gt;http://localhost:8000&lt;/code&gt; on your laptop, or access the laptop’s LAN address from your phone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/akshatshahh/trail-whisperer" rel="noopener noreferrer"&gt;Get the code and follow the local setup instructions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I initially tried hosting basecamp on Render, but discontinued that deployment after encountering hosting costs. The current setup runs on my own machine, with optional connected services available at home.&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/akshatshahh" rel="noopener noreferrer"&gt;
        akshatshahh
      &lt;/a&gt; / &lt;a href="https://github.com/akshatshahh/trail-whisperer" rel="noopener noreferrer"&gt;
        trail-whisperer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local-first trail companion with offline BirdNET and Gemma inference, a personal memory book, and optional online basecamp integrations.
    &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;Trail Whisperer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A trail ends. The wonder stays.&lt;/strong&gt; An offline trail companion and a memory book for Hacktoberfest 2026 · Touch Grass.&lt;/p&gt;
&lt;p&gt;Act I: listen to a bird or photograph a plant, save the discovery, put the phone away. Act II: at home, revisit a timeline, grow a lifelist, explore species field notes and search your own encounters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local application:&lt;/strong&gt; &lt;a href="http://localhost:8000" rel="nofollow noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt; (after setup) · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/akshatshahh/trail-whisperer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;strong&gt;Evidence:&lt;/strong&gt; &lt;a href="https://github.com/akshatshahh/trail-whisperer/VALIDATION.md" rel="noopener noreferrer"&gt;VALIDATION.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is no public hosted website. GitHub hosts the source code; run the application on your own laptop. For offline trail use, open the laptop's LAN address on your phone as described below. Optional online integrations can run from a local basecamp service when connected.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Technologies and sponsor integrations&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gemma:&lt;/strong&gt; &lt;code&gt;gemma3n&lt;/code&gt; for trail Q&amp;amp;A, field notes and journal summaries; &lt;code&gt;gemma3:4b&lt;/code&gt; for vision. Ollama serves downloaded open-weight models locally on your laptop. No Google/Gemini API key is used.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MongoDB Atlas:&lt;/strong&gt; &lt;code&gt;sightings&lt;/code&gt;…&lt;/p&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/akshatshahh/trail-whisperer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/akshatshahh/trail-whisperer" rel="noopener noreferrer"&gt;Browse the repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes the frontend, backend, model setup scripts, local startup instructions, and regression tests. Credentials, databases, and personal uploads are excluded from Git.&lt;/p&gt;

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

&lt;p&gt;Trail Whisperer has two modes: &lt;strong&gt;trail&lt;/strong&gt; and &lt;strong&gt;basecamp&lt;/strong&gt;. Both can run locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  On the trail
&lt;/h3&gt;

&lt;p&gt;The React interface communicates with a FastAPI backend. Ollama serves downloaded Gemma models for questions, summaries, and field notes. Gemma 3 4B handles photographs, while BirdNET analyzes short bird recordings.&lt;/p&gt;

&lt;p&gt;SQLite stores discoveries, and uploaded media stay in the local data directory.&lt;/p&gt;

&lt;p&gt;The request path is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phone → local Wi-Fi → laptop → local models → local journal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One implementation detail mattered more than I expected: the installed Gemma 3n build exposed text completion but not vision. I used a separate local vision model for photographs instead of assuming one model could handle everything.&lt;/p&gt;

&lt;p&gt;All model assets must be downloaded before leaving home. Identification and journaling then work without a remote inference API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Back at basecamp
&lt;/h3&gt;

&lt;p&gt;An explicit sync sends records and media to a second local service.&lt;/p&gt;

&lt;p&gt;Basecamp uses SQLite without additional credentials, or MongoDB Atlas when configured. Atlas Vector Search uses locally generated &lt;code&gt;nomic-embed-text&lt;/code&gt; embeddings to retrieve related encounters.&lt;/p&gt;

&lt;p&gt;Optional connected features extend the journal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; transcribes saved voice notes through an authenticated basecamp endpoint. Local Gemma summarizes the transcript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SerpApi&lt;/strong&gt; retrieves public species reference links and snippets for sourced field notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry Agent Tracing&lt;/strong&gt; records model and research workflow timings and statuses, excluding prompts, recordings, location, and credentials from trace payloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These integrations remain disabled in trail mode. They require internet at basecamp; the core local workflow does not require their keys or paid web hosting.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I tested
&lt;/h3&gt;

&lt;p&gt;The latest verification passed &lt;strong&gt;27 automated tests&lt;/strong&gt; and the production frontend build.&lt;/p&gt;

&lt;p&gt;Real-model checks identified a rose photograph and returned a Black-capped Chickadee candidate from a bird recording.&lt;/p&gt;

&lt;p&gt;An offline regression blocked external backend network connections while photo identification, bird identification, local questions, saving, and retrieval continued working. Saved records and media survived a backend restart, and the application’s cloud-call counter remained at zero.&lt;/p&gt;

&lt;p&gt;I also exercised the photo workflow in a mobile-width browser. That checks layout and browser behavior; it does not substitute for a physical phone-and-hotspot field test. The README includes the manual procedure for that check.&lt;/p&gt;

&lt;p&gt;Atlas semantic search, the local ElevenLabs-to-Gemma pipeline, SerpApi research, and Sentry tracing were also exercised.&lt;/p&gt;

&lt;p&gt;The tests establish these workflows. They do not establish identification accuracy for every species, photo, or recording.&lt;/p&gt;

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

&lt;p&gt;For Trail Whisperer, where inference runs determines whether the application can help when connectivity disappears.&lt;/p&gt;

&lt;p&gt;Downloadable model weights and local inference let a prepared setup identify and journal discoveries without contacting a remote inference API. Photos, recordings, and notes remain on the trail machine until the user chooses to sync.&lt;/p&gt;

&lt;p&gt;The modular implementation also gives me room to adapt it. I can replace a vision model, inspect uncertain outputs, change prompts, or improve the bird-recording pipeline without rebuilding the application around one hosted provider.&lt;/p&gt;

&lt;p&gt;There are tradeoffs: advance downloads, CPU latency, and a laptop that must remain reachable. Gemma has its own model terms, and BirdNET weights have separate licensing requirements. Those constraints are documented in the repository.&lt;/p&gt;

&lt;p&gt;What this approach made possible is a useful local workflow that I can run, inspect, and improve on hardware I control.&lt;/p&gt;

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

&lt;p&gt;I used Codex during development to help implement the application, troubleshoot deployment, and add regression coverage.&lt;/p&gt;

&lt;p&gt;The repository’s incremental commits document the implementation, fixes, and validation work.&lt;/p&gt;

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

&lt;p&gt;I’m entering the categories for technologies meaningfully used in the current project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; local photo identification, questions, summaries, and field notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; optional basecamp journal storage and vector search over encounter embeddings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; basecamp voice-note transcription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing:&lt;/strong&gt; observability for model and research workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of SerpApi:&lt;/strong&gt; species research with public reference links.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trail Whisperer is built around a small interaction: notice something, learn a little, save the memory, and keep exploring.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>mlhacks</category>
    </item>
    <item>
      <title>The Offline Interrogator: Interview Practice for Avinash, Even Without Internet</title>
      <dc:creator>Akshat Shah</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:45:31 +0000</pubDate>
      <link>https://dev.to/akshatshahh/the-offline-interrogator-interview-practice-for-avinash-even-without-internet-5gko</link>
      <guid>https://dev.to/akshatshahh/the-offline-interrogator-interview-practice-for-avinash-even-without-internet-5gko</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;I built &lt;strong&gt;The Offline Interrogator&lt;/strong&gt; for my friend &lt;strong&gt;Avinash&lt;/strong&gt;, who lives in India and often travels by train.&lt;/p&gt;

&lt;p&gt;Avinash wants to feel more confident in interviews, especially when choosing words and explaining his thinking. Practicing with someone else can feel intimidating, and unreliable internet during train journeys makes online tools less dependable.&lt;/p&gt;

&lt;p&gt;This app gives him a private place to practice on his own schedule. He chooses DSA, Behavioral, or System Design, sets a difficulty and duration, and answers one question at a time. The interviewer gives hints, scores his answers, adjusts difficulty, and creates a report showing what to practice next.&lt;/p&gt;

&lt;p&gt;After downloading the model and installing dependencies, the text-based interview can run without internet. Cloning the repository alone is not enough—the initial setup requires connectivity.&lt;/p&gt;

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

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

&lt;p&gt;The demo shows question generation, spoken questions, answer scoring, the timer pausing during model processing, and the final report. It also shows MongoDB Atlas persistence and Sentry traces.&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/akshatshahh" rel="noopener noreferrer"&gt;
        akshatshahh
      &lt;/a&gt; / &lt;a href="https://github.com/akshatshahh/offline-interrogator" rel="noopener noreferrer"&gt;
        offline-interrogator
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local-first mock interviewer made for Avinash. Gemma 3 + Ollama + Mastra, with Atlas, ElevenLabs and Sentry.
    &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;The Offline Interrogator&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A local-first AI mock interviewer built for Avinash, a friend preparing for FAANG interviews. Hacktoberfest 2026 Weekend Challenge: &lt;strong&gt;Build for a Friend&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pick DSA, Behavioral, or System Design. Get one question at a time, explain your answer, ask for a hint, and receive a strict report card. Difficulty rises after strong answers and falls when fundamentals need work. Topic history makes weak spots visible across sessions.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Open-source AI at the core&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Gemma 3 4B open weights → local Ollama → &lt;code&gt;ollama-ai-provider&lt;/code&gt; → Mastra tools.&lt;/strong&gt; All question generation, answer scoring, and hint generation use this path. There are no OpenAI, Anthropic, or Gemini API calls in the app's reasoning code. Gemma is open-weight under Google's Gemma terms; Ollama and Mastra are open-source. This distinction matters: Gemma weights are available, but their license is not an OSI software license.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;server/llm.ts&lt;/code&gt; is the sole inference entry point. &lt;code&gt;server/tools.ts&lt;/code&gt; registers…&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/akshatshahh/offline-interrogator" 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;&lt;strong&gt;Gemma 3 4B, served locally through Ollama, performs all interview reasoning.&lt;/strong&gt; The app accesses it through &lt;code&gt;ollama-ai-provider&lt;/code&gt;. No OpenAI, Anthropic, or Gemini API generates questions or scores answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mastra&lt;/strong&gt; provides five registered tools: generate a question, score an answer, provide a hint, retrieve weak spots, and finish a session. The Express API controls the interview sequence and invokes Mastra's tool execution layer.&lt;/p&gt;

&lt;p&gt;Scores are validated against a strict JSON schema. The rubric covers correctness, approach, complexity analysis, edge cases, and communication.&lt;/p&gt;

&lt;p&gt;The frontend uses &lt;strong&gt;React, Vite, and TypeScript&lt;/strong&gt;. The timer pauses while the model scores an answer, generates a question, or prepares a hint, so processing time does not consume Avinash's answering time.&lt;/p&gt;

&lt;p&gt;Supporting services have specific roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB Atlas:&lt;/strong&gt; stores sessions, answers, scores, reports, and 24 starter questions. Stored history supports weak-spot analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs:&lt;/strong&gt; converts generated questions into speech, with playback controls when browsers block autoplay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry:&lt;/strong&gt; records tool and inference spans with model, latency, and prompt/completion token counts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Missing optional credentials do not prevent an interview. Storage falls back to memory, voice falls back to text, and console telemetry remains available.&lt;/p&gt;

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

&lt;p&gt;Avinash can practice without depending on a cloud LLM connection for every answer.&lt;/p&gt;

&lt;p&gt;Once the weights and dependencies are downloaded, Gemma runs on his laptop. We can inspect the implementation, change the interviewer prompts, and control the reasoning model ourselves.&lt;/p&gt;

&lt;p&gt;Local reasoning does not make every feature offline: Atlas, ElevenLabs, and Sentry require internet when enabled, and browser microphone recognition may use an online service. For offline train journeys, Avinash can use typed answers with the optional cloud services disabled.&lt;/p&gt;

&lt;p&gt;Gemma is an open-weight model under Google's Gemma terms; Ollama and Mastra are open-source software.&lt;/p&gt;

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

&lt;p&gt;I’m entering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 3 generates questions, hints, and answer scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Mastra:&lt;/strong&gt; the interviewer executes five registered Mastra tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; persisted interview history supports reports and weak-spot analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; generated interview questions become spoken audio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing:&lt;/strong&gt; tool and inference spans expose latency and token usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During development, an expired-session test exposed a monitoring issue: an expected 409 response was reported as an incident. I fixed this by excluding expected client errors from incident reporting and disabling Sentry telemetry during tests.&lt;/p&gt;

&lt;p&gt;The repository includes verification notes, and all six automated tests pass.&lt;/p&gt;

&lt;p&gt;The goal is to give Avinash a place to practice, make mistakes, and become more comfortable explaining his answers—on his own schedule.&lt;/p&gt;

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