<?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: Sridevi Asara</title>
    <description>The latest articles on DEV Community by Sridevi Asara (@sridevi_asara).</description>
    <link>https://dev.to/sridevi_asara</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%2F4174522%2Fcb95c920-4b82-4b22-b05e-3136721d7b18.png</url>
      <title>DEV Community: Sridevi Asara</title>
      <link>https://dev.to/sridevi_asara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sridevi_asara"/>
    <language>en</language>
    <item>
      <title>AI NATURE GUIDE</title>
      <dc:creator>Sridevi Asara</dc:creator>
      <pubDate>Sat, 10 Oct 2026 18:51:47 +0000</pubDate>
      <link>https://dev.to/sridevi_asara/ai-nature-guide-ibo</link>
      <guid>https://dev.to/sridevi_asara/ai-nature-guide-ibo</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/p&gt;

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

&lt;p&gt;NatureBuddy AI is a small, calm web app that helps students and beginners spend less time on screens and more time noticing the natural world around them.&lt;/p&gt;

&lt;p&gt;Most of us spend 8 to 12 hours a day on laptops and phones. We want to go outside, but a walk with no goal feels aimless, and when we do spot an interesting plant or bird, identification apps often want subscriptions, accounts, or location tracking. NatureBuddy tries to remove those barriers:&lt;/p&gt;

&lt;p&gt;Daily Nature Quest: a short outdoor mission each day (for example, "observe three different fallen leaves" or "five minutes of birdsong"). It changes daily and tracks how many quests you have completed.&lt;br&gt;
15-Minute Screen-Free Challenge: a countdown timer with Start, Pause and Reset. When it ends, a gentle synthesized chime plays and the session is saved.&lt;br&gt;
AI Nature Guide: describe what you saw ("a small yellow flower with five petals on a thin green stem") and a local Gemma model suggests 2 to 3 plausible matches, what to look at more closely next time, and a reminder never to eat wild plants or disturb wildlife.&lt;br&gt;
Private Nature Journal: field notes with a date, category (Flora, Fauna, Insect, Sky, Sensory, General) and optional location. Everything is stored in your own browser's localStorage.&lt;/p&gt;

&lt;p&gt;It is built for anyone who wants a gentle, zero-friction reason to step outside, especially students and developers who live in front of screens.&lt;/p&gt;

&lt;p&gt;Demo&lt;br&gt;
Hosted page (partial demo): &lt;a href="https://25b05a1201.github.io/NatureBuddy-AI/" rel="noopener noreferrer"&gt;https://25b05a1201.github.io/NatureBuddy-AI/&lt;/a&gt; Quests, the Screen-Free timer and the Journal work fully on the hosted page. The AI Nature Guide needs Gemma running on your own computer through Ollama, so on the hosted page it shows a notice instead. That is by design, because the AI runs locally and privately rather than on a server.&lt;br&gt;
Full experience: clone the repo and follow the setup below (about 5 minutes).&lt;/p&gt;



&lt;p&gt;Code&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/25b05a1201" rel="noopener noreferrer"&gt;
        25b05a1201
      &lt;/a&gt; / &lt;a href="https://github.com/25b05a1201/NatureBuddy-AI" rel="noopener noreferrer"&gt;
        NatureBuddy-AI
      &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;NatureBuddy AI — A Simple Outdoor Companion 🌱&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;NatureBuddy AI&lt;/strong&gt; is a clean, lightweight web application built for the &lt;strong&gt;Hacktoberfest 2026 Week 1 DEV Challenge (“Touch Grass”)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Its goal is simple: help students and beginners spend less time staring at screens and more time exploring, noticing, and appreciating nature outdoors.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. The Problem NatureBuddy AI Solves&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Modern students and developers spend 8 to 12+ hours every day in front of laptops and phones. Screen fatigue, attention fragmentation, and disconnectedness from our physical environment are widely documented challenges.&lt;/p&gt;
&lt;p&gt;While people often want to spend time outside, two common barriers arise:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lack of a gentle starting point:&lt;/strong&gt; Stepping outside without an objective can feel aimless for digital natives accustomed to interactive tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identification frustration &amp;amp; privacy concerns:&lt;/strong&gt; When someone notices an interesting plant, insect, or bird, cloud-based plant identification apps often demand paid subscriptions, aggressive location tracking, account registrations, or proprietary…&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/25b05a1201/NatureBuddy-AI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Quick start:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
git clone &lt;a href="https://25b05a1201.github.io/NatureBuddy-AI/" rel="noopener noreferrer"&gt;https://25b05a1201.github.io/NatureBuddy-AI/&lt;/a&gt;&lt;br&gt;
cd NatureBuddy-AI&lt;br&gt;
ollama run gemma2:2b          # in a separate terminal&lt;br&gt;
pip install -r requirements.txt&lt;br&gt;
python main.py                # then open &lt;a href="http://127.0.0.1:8000" rel="noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;&lt;br&gt;
How I Built It&lt;/p&gt;

&lt;p&gt;Open-weight model: Google's Gemma (gemma2:2b by default) running locally through Ollama. The 2B size runs on an ordinary laptop, so no GPU or paid API is needed.&lt;/p&gt;

&lt;p&gt;Architecture:&lt;/p&gt;

&lt;p&gt;Frontend: semantic HTML5, responsive CSS and vanilla JavaScript. There is no framework and no build step.&lt;br&gt;
Backend: a lightweight FastAPI app (with httpx) that sends the user's observation to the local Ollama server and returns Gemma's answer. It also exposes a health check so the UI can show whether Gemma is ready.&lt;br&gt;
Storage: browser localStorage for quests, timer sessions and journal entries.&lt;/p&gt;

&lt;p&gt;Prompt design: the model is asked to be honest. A text description cannot definitively identify a living thing, so Gemma is instructed to offer possibilities rather than certainties, say gently when a description is too vague and ask clarifying questions, suggest what visual details to check next time, and include a safety and leave-no-trace reminder.&lt;/p&gt;

&lt;p&gt;Graceful degradation: if Ollama is not running, the app shows a friendly message explaining how to start it, and everything else (quests, timer, journal) keeps working.&lt;/p&gt;

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

&lt;p&gt;Using an open-weight model changed what I could promise users:&lt;/p&gt;

&lt;p&gt;Privacy: observations and field notes never leave the user's machine. There is no tracking, no account and no telemetry.&lt;br&gt;
Zero cost: no API keys, credit cards or token bills. That matters for students and hobbyists, who are exactly the audience for this project.&lt;br&gt;
Inspectable and extensible: anyone can see how the model is used, swap in a different Gemma size (gemma2:9b if their hardware allows), or fork the project and adapt it for their own region or ecosystem.&lt;br&gt;
Sustainability: it keeps working as long as the user has Ollama, with no dependency on a vendor's pricing or availability.&lt;/p&gt;

&lt;p&gt;A closed cloud API could have given me similar answers, but it would have required keys, billing, and sending people's personal observations to a third party. Open weights let me build something people can actually run for free and trust with their notes.&lt;/p&gt;

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

&lt;p&gt;Prize Categories&lt;br&gt;
&amp;lt;!-- List every partner category you are entering, or remove this section. For example, if there is a Gemma or Ollama category, list it here. --&amp;gt; &amp;lt;!-- Team Submissions: Please pick one member to publish the submission and credit teammates by listing their DEV usernames directly in the body of the post. --&amp;gt; &amp;lt;!-- Thanks for participating! --&amp;gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>study buddy</title>
      <dc:creator>Sridevi Asara</dc:creator>
      <pubDate>Sat, 10 Oct 2026 16:34:30 +0000</pubDate>
      <link>https://dev.to/sridevi_asara/study-buddy-1c7m</link>
      <guid>https://dev.to/sridevi_asara/study-buddy-1c7m</guid>
      <description>&lt;p&gt;STUDY BUDDY&lt;/p&gt;

&lt;p&gt;devchallenge&lt;/p&gt;

&lt;p&gt;weekendchallenge&lt;/p&gt;

&lt;p&gt;hf26challenge&lt;br&gt;
🦉 StudyBuddy: A Gentle, Distraction-Free Study Companion&lt;br&gt;
This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.&lt;/p&gt;

&lt;p&gt;💡 What I Built&lt;br&gt;
I built StudyBuddy, a minimalist, privacy-focused, and customizable web application that brings three essential study tools into one cohesive experience:&lt;/p&gt;

&lt;p&gt;Customizable Pomodoro Timer: A circular progress indicator, adjustable study sessions, and gentle synthesized audio cues.&lt;br&gt;
Interactive 3D Flashcards: Animated flashcards with self-assessed learning progress, allowing users to mark cards as Mastered or Needs Review.&lt;br&gt;
Instant Quiz Arena: Generates multiple-choice quizzes from flashcard decks or allows users to create custom quizzes.&lt;br&gt;
StudyBuddy is designed to make studying feel more organized, focused, and enjoyable without requiring users to switch between multiple applications.&lt;/p&gt;

&lt;p&gt;💖 Who I Built It For and the Problem It Solves&lt;br&gt;
I built StudyBuddy for my friend Alex, who is preparing for demanding certification exams while managing ADHD and study-related anxiety.&lt;/p&gt;

&lt;p&gt;While studying, Alex faced two major challenges:&lt;/p&gt;

&lt;p&gt;Tab overload and context switching: Using separate applications for timers, flashcards, and quizzes interrupted concentration and made studying feel fragmented.&lt;br&gt;
Distracting features and restrictive monetization: Many study tools include unnecessary interface elements, subscription restrictions, tracking mechanisms, or notifications that can interrupt a focused study session.&lt;br&gt;
Alex needed something simple, calming, and customizable: one place to manage study intervals, practice active recall, test knowledge, and receive gentle encouragement from a friendly owl companion.&lt;/p&gt;

&lt;p&gt;That inspired StudyBuddy: a lightweight study companion designed around focus, simplicity, and user control.&lt;/p&gt;

&lt;p&gt;🚀 Demo and Source Code&lt;br&gt;
GitHub Repository: 25b05a1201/studybuddy&lt;br&gt;
Live Demo: &lt;a href="https://25b05a1201.github.io/studybuddy/(https://25b05a1201.github.io/studybuddy/)" rel="noopener noreferrer"&gt;https://25b05a1201.github.io/studybuddy/(https://25b05a1201.github.io/studybuddy/)&lt;/a&gt;&lt;br&gt;
Local Setup: Open index.html in a browser or run npm start using the included Node.js server.&lt;br&gt;
Video Preview: Add a demo GIF or video walkthrough link if available.&lt;br&gt;
AI Agent Session: Add the conversation transcript or agent session link if available.&lt;br&gt;
Key Features&lt;br&gt;
⏱️ 1. Customizable Pomodoro Timer&lt;br&gt;
Circular SVG countdown with visual progress tracking.&lt;br&gt;
Quick +1m, -1m, and +5m adjustments.&lt;br&gt;
Customizable study-session targets.&lt;br&gt;
Gentle sound cues generated using the Web Audio API.&lt;br&gt;
🗂️ 2. Interactive Flashcards&lt;br&gt;
Animated 3D card-flipping effects.&lt;br&gt;
Self-assessed learning progress using Mastered and Needs Review.&lt;br&gt;
Keyboard shortcuts for a smoother study experience:&lt;br&gt;
Space — Flip a flashcard.&lt;br&gt;
Arrow keys — Navigate between cards.&lt;br&gt;
M — Mark a card as mastered.&lt;br&gt;
R — Mark a card for review.&lt;br&gt;
📝 3. Instant Quiz Arena&lt;br&gt;
Generate multiple-choice questions from flashcard decks.&lt;br&gt;
Create custom quizzes.&lt;br&gt;
Randomize answer options and select distractors from other cards in the deck.&lt;br&gt;
Review answers and quiz results after completion.&lt;br&gt;
🎨 4. Personalized Study Experience&lt;br&gt;
Five color palettes: Indigo, Sunset, Emerald, Rose, and Slate.&lt;br&gt;
One-click dark mode.&lt;br&gt;
Customizable settings for a more comfortable study environment.&lt;br&gt;
🔒 5. Local-First Data Storage&lt;br&gt;
Save flashcard decks, study statistics, daily streaks, and settings in browser local storage.&lt;br&gt;
Export and import data as JSON.&lt;br&gt;
Run the application without requiring a backend service for its core study features.&lt;br&gt;
🛠️ How I Built It&lt;br&gt;
Tech Stack&lt;br&gt;
HTML5: Semantic page structure and native dialog elements.&lt;br&gt;
CSS3: Responsive layouts, CSS variables, 3D animations, and dark mode.&lt;br&gt;
Modern JavaScript (ES2022): Application state, timer logic, flashcards, and quiz generation.&lt;br&gt;
Web Audio API: Synthesized audio cues without external sound files.&lt;br&gt;
SVG: Circular timer progress visualization.&lt;br&gt;
Browser Local Storage: Persistent local data and preferences.&lt;br&gt;
Node.js: A lightweight local static server with no additional server dependencies.&lt;br&gt;
The application is designed to run without a frontend framework, bundler, or third-party tracking scripts.&lt;/p&gt;

&lt;p&gt;Project Structure&lt;br&gt;
studybuddy/&lt;br&gt;
├── index.html    # Main interface and native dialog modals&lt;br&gt;
├── styles.css    # Responsive styling, animations, and themes&lt;br&gt;
├── app.js        # Timer, application state, flashcards, and quizzes&lt;br&gt;
├── server.js     # Lightweight local Node.js server&lt;br&gt;
├── package.json  # Project metadata and npm scripts&lt;br&gt;
└── README.md     # Setup instructions and user documentation&lt;br&gt;
Technical Highlights&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Synthesized Audio Using the Web Audio API
Rather than loading external audio files, StudyBuddy generates its sound cues dynamically with the browser's Web Audio API.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The following simplified example demonstrates the oscillator and gain-envelope approach used to create a gentle bell-like sound:&lt;/p&gt;

&lt;p&gt;const SoundEngine = {&lt;br&gt;
  ctx: null,&lt;/p&gt;

&lt;p&gt;init() {&lt;br&gt;
    if (!this.ctx) {&lt;br&gt;
      const AudioContextClass =&lt;br&gt;
        window.AudioContext || window.webkitAudioContext;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  if (AudioContextClass) {
    this.ctx = new AudioContextClass();
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;},&lt;/p&gt;

&lt;p&gt;play(style = "bell") {&lt;br&gt;
    if (!AppState.settings.soundEnabled) return;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;this.init();

if (!this.ctx) return;

const now = this.ctx.currentTime;
const osc = this.ctx.createOscillator();
const gain = this.ctx.createGain();

osc.type = "sine";
osc.frequency.setValueAtTime(528, now);
osc.frequency.exponentialRampToValueAtTime(
  520,
  now + 1.8
);

gain.gain.setValueAtTime(0.4, now);
gain.gain.exponentialRampToValueAtTime(
  0.0001,
  now + 1.8
);

osc.connect(gain);
gain.connect(this.ctx.destination);

osc.start(now);
osc.stop(now + 1.8);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;br&gt;
};&lt;br&gt;
This example illustrates the core synthesis technique; the complete implementation is available in the repository.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dynamic Flashcard-to-Quiz Conversion
StudyBuddy can transform flashcards into multiple-choice questions by using the front of a card as the question and its back as the correct answer. Other distinct answers from the deck are sampled as distractors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;const questions = selectedCards.map((card) =&amp;gt; {&lt;br&gt;
  const correctAns = card.back;&lt;/p&gt;

&lt;p&gt;const distractors = deck.cards&lt;br&gt;
    .filter(&lt;br&gt;
      (c) =&amp;gt;&lt;br&gt;
        c.id !== card.id &amp;amp;&amp;amp;&lt;br&gt;
        c.back !== correctAns&lt;br&gt;
    )&lt;br&gt;
    .map((c) =&amp;gt; c.back)&lt;br&gt;
    .sort(() =&amp;gt; Math.random() - 0.5)&lt;br&gt;
    .slice(0, 3);&lt;/p&gt;

&lt;p&gt;const options = [&lt;br&gt;
    correctAns,&lt;br&gt;
    ...distractors&lt;br&gt;
  ].sort(() =&amp;gt; Math.random() - 0.5);&lt;/p&gt;

&lt;p&gt;return {&lt;br&gt;
    question: &lt;code&gt;Question: ${card.front}&lt;/code&gt;,&lt;br&gt;
    options,&lt;br&gt;
    correctIndex: options.indexOf(correctAns),&lt;br&gt;
    explanation: &lt;code&gt;Answer: ${correctAns}&lt;/code&gt;&lt;br&gt;
  };&lt;br&gt;
});&lt;br&gt;
This is a rule-based quiz-generation approach, not an AI-powered question-generation model. The number of available distractors depends on the content of the selected deck.&lt;/p&gt;

&lt;p&gt;🤝 Development with AI Pair Programming&lt;br&gt;
I developed and refined StudyBuddy with assistance from Antigravity (Gemini 3.8) as an AI pair-programming tool.&lt;/p&gt;

&lt;p&gt;The development process involved:&lt;/p&gt;

&lt;p&gt;Exploring study workflows that reduce unnecessary interface complexity.&lt;br&gt;
Refining the circular SVG timer's progress calculations using stroke-dasharray and stroke-dashoffset.&lt;br&gt;
Designing keyboard navigation for a smoother, mouse-free study experience.&lt;br&gt;
Considering edge cases involving deck deletion, quiz scoring, and browser audio behavior.&lt;br&gt;
The AI assistant supported the development process; the application's described quiz-generation logic is rule-based.&lt;/p&gt;

&lt;p&gt;🌍 Why Does Open Innovation Matter?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Privacy and Autonomy&lt;br&gt;
Study notes, flashcards, and learning habits are personal. A local-first architecture gives users greater control over their study data and reduces dependence on cloud services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessible Learning Tools&lt;br&gt;
Useful study tools should not require expensive subscriptions just to access basic timers, flashcards, or quizzes. StudyBuddy aims to make these core features available through a browser-based application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customization and Ownership&lt;br&gt;
Everyone has different learning preferences. By making the source code available, StudyBuddy allows developers and learners to inspect the implementation, adapt the interface, customize study workflows, and extend the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Community-Driven Improvement&lt;br&gt;
Open-source projects can evolve through feedback, contributions, bug fixes, and new ideas from the community. StudyBuddy is an opportunity to explore how a small, focused tool can grow through collaboration.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧠 What I Learned&lt;br&gt;
Building StudyBuddy gave me an opportunity to bring together several web development concepts in one practical project:&lt;/p&gt;

&lt;p&gt;Managing application state using JavaScript.&lt;br&gt;
Creating animated SVG progress indicators.&lt;br&gt;
Working with the Web Audio API.&lt;br&gt;
Designing reusable flashcard and quiz workflows.&lt;br&gt;
Persisting application data with browser local storage.&lt;br&gt;
Improving keyboard navigation and interface usability.&lt;br&gt;
Thinking about privacy and offline-friendly design from the beginning.&lt;br&gt;
The most important lesson was that a useful product does not always need more features. Sometimes, the best solution is to remove friction and make essential tasks easier.&lt;/p&gt;

&lt;p&gt;🏆 Challenge Tracks&lt;br&gt;
Primary Track: Build for a Friend&lt;br&gt;
Additional themes: Accessible and Delightful UX; Offline-First and Privacy-Focused Tools&lt;br&gt;
Please confirm the official eligibility and prize-category names before submitting.&lt;/p&gt;

&lt;p&gt;🔗 Explore the Project&lt;br&gt;
👉 View StudyBuddy on GitHub&lt;br&gt;
&lt;a href="https://25b05a1201.github.io/studybuddy/" rel="noopener noreferrer"&gt;https://25b05a1201.github.io/studybuddy/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find the project useful, feedback, suggestions, and contributions are welcome!&lt;/p&gt;

&lt;p&gt;devchallenge #weekendchallenge #hf26challenge&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>great</title>
      <dc:creator>Sridevi Asara</dc:creator>
      <pubDate>Sat, 10 Oct 2026 16:33:28 +0000</pubDate>
      <link>https://dev.to/sridevi_asara/great-a0p</link>
      <guid>https://dev.to/sridevi_asara/great-a0p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sridevi_asara/study-buddy-2m68" class="crayons-story__hidden-navigation-link"&gt;STUDY BUDDY&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sridevi_asara" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4174522%2Fcb95c920-4b82-4b22-b05e-3136721d7b18.png" alt="sridevi_asara profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sridevi_asara" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Sridevi Asara
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Sridevi Asara
                
                
              
              &lt;div id="story-author-preview-content-4828888" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sridevi_asara" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4174522%2Fcb95c920-4b82-4b22-b05e-3136721d7b18.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Sridevi Asara&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sridevi_asara/study-buddy-2m68" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sridevi_asara/study-buddy-2m68" id="article-link-4828888"&gt;
          STUDY BUDDY
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/sridevi_asara/study-buddy-2m68" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/sridevi_asara/study-buddy-2m68#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>STUDY BUDDY</title>
      <dc:creator>Sridevi Asara</dc:creator>
      <pubDate>Sat, 10 Oct 2026 14:36:06 +0000</pubDate>
      <link>https://dev.to/sridevi_asara/study-buddy-2m68</link>
      <guid>https://dev.to/sridevi_asara/study-buddy-2m68</guid>
      <description>&lt;h1&gt;
  
  
  🦉 StudyBuddy: A Gentle, Distraction-Free Study Companion
&lt;/h1&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;StudyBuddy&lt;/strong&gt;, a minimalist, privacy-focused, and customizable web application that brings three essential study tools into one cohesive experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Customizable Pomodoro Timer:&lt;/strong&gt; A circular progress indicator, adjustable study sessions, and gentle synthesized audio cues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive 3D Flashcards:&lt;/strong&gt; Animated flashcards with self-assessed learning progress, allowing users to mark cards as &lt;code&gt;Mastered&lt;/code&gt; or &lt;code&gt;Needs Review&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Quiz Arena:&lt;/strong&gt; Generates multiple-choice quizzes from flashcard decks or allows users to create custom quizzes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;StudyBuddy is designed to make studying feel more organized, focused, and enjoyable without requiring users to switch between multiple applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  💖 Who I Built It For and the Problem It Solves
&lt;/h2&gt;

&lt;p&gt;I built StudyBuddy for my friend &lt;strong&gt;Alex&lt;/strong&gt;, who is preparing for demanding certification exams while managing ADHD and study-related anxiety.&lt;/p&gt;

&lt;p&gt;While studying, Alex faced two major challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tab overload and context switching:&lt;/strong&gt; Using separate applications for timers, flashcards, and quizzes interrupted concentration and made studying feel fragmented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distracting features and restrictive monetization:&lt;/strong&gt; Many study tools include unnecessary interface elements, subscription restrictions, tracking mechanisms, or notifications that can interrupt a focused study session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alex needed something simple, calming, and customizable: one place to manage study intervals, practice active recall, test knowledge, and receive gentle encouragement from a friendly owl companion.&lt;/p&gt;

&lt;p&gt;That inspired StudyBuddy: a lightweight study companion designed around focus, simplicity, and user control.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Demo and Source Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/25b05a1201/studybuddy" rel="noopener noreferrer"&gt;25b05a1201/studybuddy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://25b05a1201.github.io/studybuddy/(https://25b05a1201.github.io/studybuddy/)" rel="noopener noreferrer"&gt;https://25b05a1201.github.io/studybuddy/(https://25b05a1201.github.io/studybuddy/)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Setup:&lt;/strong&gt; Open &lt;code&gt;index.html&lt;/code&gt; in a browser or run &lt;code&gt;npm start&lt;/code&gt; using the included Node.js server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video Preview:&lt;/strong&gt; &lt;em&gt;Add a demo GIF or video walkthrough link if available.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Agent Session:&lt;/strong&gt; &lt;em&gt;Add the conversation transcript or agent session link if available.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h4&gt;
  
  
  ⏱️ 1. Customizable Pomodoro Timer
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Circular SVG countdown with visual progress tracking.&lt;/li&gt;
&lt;li&gt;Quick &lt;code&gt;+1m&lt;/code&gt;, &lt;code&gt;-1m&lt;/code&gt;, and &lt;code&gt;+5m&lt;/code&gt; adjustments.&lt;/li&gt;
&lt;li&gt;Customizable study-session targets.&lt;/li&gt;
&lt;li&gt;Gentle sound cues generated using the Web Audio API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🗂️ 2. Interactive Flashcards
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Animated 3D card-flipping effects.&lt;/li&gt;
&lt;li&gt;Self-assessed learning progress using &lt;code&gt;Mastered&lt;/code&gt; and &lt;code&gt;Needs Review&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keyboard shortcuts for a smoother study experience:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Space&lt;/code&gt; — Flip a flashcard.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Arrow keys&lt;/code&gt; — Navigate between cards.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;M&lt;/code&gt; — Mark a card as mastered.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;R&lt;/code&gt; — Mark a card for review.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📝 3. Instant Quiz Arena
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Generate multiple-choice questions from flashcard decks.&lt;/li&gt;
&lt;li&gt;Create custom quizzes.&lt;/li&gt;
&lt;li&gt;Randomize answer options and select distractors from other cards in the deck.&lt;/li&gt;
&lt;li&gt;Review answers and quiz results after completion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🎨 4. Personalized Study Experience
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Five color palettes: Indigo, Sunset, Emerald, Rose, and Slate.&lt;/li&gt;
&lt;li&gt;One-click dark mode.&lt;/li&gt;
&lt;li&gt;Customizable settings for a more comfortable study environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🔒 5. Local-First Data Storage
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Save flashcard decks, study statistics, daily streaks, and settings in browser local storage.&lt;/li&gt;
&lt;li&gt;Export and import data as JSON.&lt;/li&gt;
&lt;li&gt;Run the application without requiring a backend service for its core study features.&lt;/li&gt;
&lt;/ul&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;HTML5:&lt;/strong&gt; Semantic page structure and native dialog elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS3:&lt;/strong&gt; Responsive layouts, CSS variables, 3D animations, and dark mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern JavaScript (ES2022):&lt;/strong&gt; Application state, timer logic, flashcards, and quiz generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Audio API:&lt;/strong&gt; Synthesized audio cues without external sound files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SVG:&lt;/strong&gt; Circular timer progress visualization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser Local Storage:&lt;/strong&gt; Persistent local data and preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js:&lt;/strong&gt; A lightweight local static server with no additional server dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application is designed to run without a frontend framework, bundler, or third-party tracking scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;studybuddy/
├── index.html    # Main interface and native dialog modals
├── styles.css    # Responsive styling, animations, and themes
├── app.js        # Timer, application state, flashcards, and quizzes
├── server.js     # Lightweight local Node.js server
├── package.json  # Project metadata and npm scripts
└── README.md     # Setup instructions and user documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Technical Highlights
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Synthesized Audio Using the Web Audio API
&lt;/h4&gt;

&lt;p&gt;Rather than loading external audio files, StudyBuddy generates its sound cues dynamically with the browser's Web Audio API.&lt;/p&gt;

&lt;p&gt;The following simplified example demonstrates the oscillator and gain-envelope approach used to create a gentle bell-like sound:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SoundEngine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AudioContextClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
        &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AudioContext&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;webkitAudioContext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AudioContextClass&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AudioContextClass&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="nf"&gt;play&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bell&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;AppState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;soundEnabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;osc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createOscillator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createGain&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sine&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;528&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exponentialRampToValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="mi"&gt;520&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.8&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exponentialRampToValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="mf"&gt;0.0001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.8&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example illustrates the core synthesis technique; the complete implementation is available in the repository.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Dynamic Flashcard-to-Quiz Conversion
&lt;/h4&gt;

&lt;p&gt;StudyBuddy can transform flashcards into multiple-choice questions by using the front of a card as the question and its back as the correct answer. Other distinct answers from the deck are sampled as distractors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;questions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;selectedCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;correctAns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;back&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;distractors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;deck&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cards&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;back&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;correctAns&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;back&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;correctAns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;distractors&lt;/span&gt;
  &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Question: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;front&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;correctIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;correctAns&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;explanation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Answer: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;correctAns&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a rule-based quiz-generation approach, not an AI-powered question-generation model. The number of available distractors depends on the content of the selected deck.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Development with AI Pair Programming
&lt;/h2&gt;

&lt;p&gt;I developed and refined StudyBuddy with assistance from &lt;strong&gt;Antigravity (Gemini 3.8)&lt;/strong&gt; as an AI pair-programming tool.&lt;/p&gt;

&lt;p&gt;The development process involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exploring study workflows that reduce unnecessary interface complexity.&lt;/li&gt;
&lt;li&gt;Refining the circular SVG timer's progress calculations using &lt;code&gt;stroke-dasharray&lt;/code&gt; and &lt;code&gt;stroke-dashoffset&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Designing keyboard navigation for a smoother, mouse-free study experience.&lt;/li&gt;
&lt;li&gt;Considering edge cases involving deck deletion, quiz scoring, and browser audio behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI assistant supported the development process; the application's described quiz-generation logic is rule-based.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  1. Privacy and Autonomy
&lt;/h3&gt;

&lt;p&gt;Study notes, flashcards, and learning habits are personal. A local-first architecture gives users greater control over their study data and reduces dependence on cloud services.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Accessible Learning Tools
&lt;/h3&gt;

&lt;p&gt;Useful study tools should not require expensive subscriptions just to access basic timers, flashcards, or quizzes. StudyBuddy aims to make these core features available through a browser-based application.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Customization and Ownership
&lt;/h3&gt;

&lt;p&gt;Everyone has different learning preferences. By making the source code available, StudyBuddy allows developers and learners to inspect the implementation, adapt the interface, customize study workflows, and extend the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Community-Driven Improvement
&lt;/h3&gt;

&lt;p&gt;Open-source projects can evolve through feedback, contributions, bug fixes, and new ideas from the community. StudyBuddy is an opportunity to explore how a small, focused tool can grow through collaboration.&lt;/p&gt;




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

&lt;p&gt;Building StudyBuddy gave me an opportunity to bring together several web development concepts in one practical project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing application state using JavaScript.&lt;/li&gt;
&lt;li&gt;Creating animated SVG progress indicators.&lt;/li&gt;
&lt;li&gt;Working with the Web Audio API.&lt;/li&gt;
&lt;li&gt;Designing reusable flashcard and quiz workflows.&lt;/li&gt;
&lt;li&gt;Persisting application data with browser local storage.&lt;/li&gt;
&lt;li&gt;Improving keyboard navigation and interface usability.&lt;/li&gt;
&lt;li&gt;Thinking about privacy and offline-friendly design from the beginning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important lesson was that a useful product does not always need more features. Sometimes, the best solution is to remove friction and make essential tasks easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏆 Challenge Tracks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary Track:&lt;/strong&gt; Build for a Friend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional themes:&lt;/strong&gt; Accessible and Delightful UX; Offline-First and Privacy-Focused Tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Please confirm the official eligibility and prize-category names before submitting.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Explore the Project
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/25b05a1201/studybuddy" rel="noopener noreferrer"&gt;View StudyBuddy on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://25b05a1201.github.io/studybuddy/" rel="noopener noreferrer"&gt;https://25b05a1201.github.io/studybuddy/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find the project useful, feedback, suggestions, and contributions are welcome!&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #weekendchallenge #hf26challenge
&lt;/h1&gt;

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