<?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: Chemuu</title>
    <description>The latest articles on DEV Community by Chemuu (@chemuu101).</description>
    <link>https://dev.to/chemuu101</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%2F946387%2F004eae29-61ca-43fe-b5d2-e5e963c5c626.jpeg</url>
      <title>DEV Community: Chemuu</title>
      <link>https://dev.to/chemuu101</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chemuu101"/>
    <language>en</language>
    <item>
      <title>Math Quest: Interactive 3D / AR maths learning (Let's make learning math Fun 😄️)</title>
      <dc:creator>Chemuu</dc:creator>
      <pubDate>Sun, 18 Oct 2026 20:04:17 +0000</pubDate>
      <link>https://dev.to/chemuu101/math-quest-interactive-3d-ar-maths-learning-4nlh</link>
      <guid>https://dev.to/chemuu101/math-quest-interactive-3d-ar-maths-learning-4nlh</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;Well, at times learning is hard for some people, especially Mathematics (and maybe Physics 😅️ or History because I cannot seem to remember years correctly ) but we'll focus on some math ( before I start complaining about my memory during History exams 😅️). Most people would love to learn with visuals in order to make it easier and maybe after a while they will pay for it with our local currency ( Kenya ). Three Dimensional models help interactivity and learners can get detailed experience especially for spheres and 3d shapes. 3D artists can also get some coffee( payment appreciation) for their contribution to better models. Learners can explore these models through Augmented Reality devices for it to be fun and understand the concepts. My motto in this website is that &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Math does not need to be textbook serious to be understood. Learning should be a fun and interactive experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Math Quest is a mobile-first web app that teaches geometry through interactive 3D solids, like spheres, cylinders, cones, pyramids, hemispheres, cubes and some geometrical calculations on three dimensional models.&lt;br&gt;
Learners read a short explanation ( there's also a voice narrator ), explore a diagram and a rotatable model (with optional AR on supported phones), answer a quick check, and request tutor hints when stuck.&lt;br&gt;
Ten lessons are free; extra content unlocks after a confirmed M-Pesa payment. Accounts use email OTP ( One Time Password ) to reduce fake sign-ups ( there are many bots these days and also fake mail generators , we don't want our database to be filled with those). &lt;br&gt;
An admin dashboard tracks users, verified payments, revenue, voice-service errors and approvals.&lt;br&gt;
A public artists gallery lets 3D creators submit model links and share PayPal or M-Pesa details for tips. &lt;br&gt;
The website is built with Next.js, MongoDB Atlas as a database , Safaricom Daraja for payment which is a local means of payment because I would first start locally although Stripe payment is also  not available for local developers and  deployed on Render. &lt;br&gt;
Currently I am using publicly available three dimensional models from &lt;a href="https://sketchfab.com/feed" rel="noopener noreferrer"&gt;here&lt;/a&gt; but I have credited the authors within the website as per their licenses. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note for any developer who uses public resources just like me:&lt;/em&gt; For these public models , licenses should be checked  in order to use resources because some creators prohibit using their resources for commercial purposes and also most of them require crediting for their work. There are different types of licenses out here so it will only take approximately 20 minutes to learn about them and the different media that use them (even GitHub uses them btw). This will save you from any lawsuits if you have a website especially one you are using to gain income. Let's not make a small hustling website bring you losses because you do not check for licenses. Every media you use should be carefully analyzed and credited if it's not yours. Last but not least it is polite to credit an artist. &lt;/p&gt;
&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Learners Of any age ( we learn every day, no age limit ) need geometry they can See and Move — not only flat textbook diagrams. They need to be able to visualize the concepts to get a better understanding&lt;/li&gt;
&lt;li&gt;3D artists need a way to showcase their skills. There are little opportunities for three Dimensional artists especially locally and this provides a way of making their talent known and be able to provide 3D art or AR (Augmented reality) in a fun and learning manner. There are few public geometric models out here and it was hard for me to find what to embed but with this, many artists can create their art to be used for learning.&lt;/li&gt;
&lt;li&gt;3D artists also need a hustling website or gig so this might be a good start for them to show case their skills and they would be able to get paid and sign a contract with the admin if they want more job security than just a &lt;code&gt;buy me coffee&lt;/code&gt; button&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Who's using it
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Pupils &amp;amp; parents - inspect cubes, spheres, and related shapes through on-page diagrams and optional AR-capable models, then answer questions and get hints.&lt;/li&gt;
&lt;li&gt;Teachers / tutors - analytics surface for registrations, revenue, voice failures , and a moderated artist registry that stores metadata and tip contacts&lt;/li&gt;
&lt;li&gt;3D artists - Submit models and get tips (PayPal / Mpesa)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Features map
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Math Quest Landing page
      │
      ├── Learning
      │     ├── 10 free 3D geometry lessons
      │     ├── 2 paid advanced lessons
      │     ├── Interactive diagrams
      │     ├── GLB models + AR (where supported)
      │     ├── Quiz + mastery progress
      │     └── Step-by-step tutor hints
      │
      ├── Access &amp;amp; trust
      │     ├── Email OTP registration
      │     ├── Session auth (JWT cookie)
      │     └── M-Pesa unlock (confirmed only)
      │
      ├── Community
      │     ├── Artists submit model links
      │     └── Buy-me-a-coffee (PayPal / M-Pesa)
      │
      └── Ops
            ├── Admin: users, revenue, payments
            ├── Failure analytics
            └── Artist approve / reject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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



&lt;p&gt;Here is a link from Render : &lt;a href="https://mathquest-hlil.onrender.com/" rel="noopener noreferrer"&gt;https://mathquest-hlil.onrender.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;



&lt;p&gt;Here is my code, I have included an example of what is in my .env (with no real secrets of course) file for anyone to try out and run on local to at least view the admin dashboard on local . My email is the only admin on Render and  adding anyone else is not recommended so it's better to run on local. The instructions to run are on the GitHub repo but feel free to ask questions , raise issues and try to make pull requests if you need a feature request. I would like to try to add a feature request from someone.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/taylorhelene" rel="noopener noreferrer"&gt;
        taylorhelene
      &lt;/a&gt; / &lt;a href="https://github.com/taylorhelene/Mathquest" rel="noopener noreferrer"&gt;
        Mathquest
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Week 2 submission
    &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;Math Quest&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Interactive &lt;strong&gt;3D geometry&lt;/strong&gt; lessons in the browser — rotate models, optional AR, tutor hints, email OTP sign-up, M-Pesa unlock, and an admin dashboard with Gemma briefing.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Landing page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/learn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lessons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/artists&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3D artist gallery + tips (PayPal / M-Pesa)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/admin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Analytics, payments, AI logs, approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Next.js 14 · TypeScript · MongoDB Atlas · Safaricom Daraja · Render&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Fork the repo&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone &lt;span class="pl-k"&gt;&amp;lt;&lt;/span&gt;your-repo-url&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; math-quest
cp .env.example .env.local
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; fill in at least JWT_SECRET (and MONGODB_URI for accounts/payments)&lt;/span&gt;

npm install
npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;a href="http://localhost:3000" rel="nofollow noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Local development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Production build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run production build&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Environment&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; → &lt;code&gt;.env.local&lt;/code&gt; (local) or set the same keys on &lt;strong&gt;Render&lt;/strong&gt;.
Add your keys.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Admin&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Sign in with an email listed in &lt;code&gt;ADMIN_EMAILS&lt;/code&gt;, then open &lt;code&gt;/admin&lt;/code&gt;.&lt;br&gt;
Gemma (if configured) summarises highlights, what to…&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/taylorhelene/Mathquest" 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;ol&gt;
&lt;li&gt;I used Ollama in locally and installed Gemma model&lt;/li&gt;
&lt;li&gt;I used local Gemma for improving my local project files&lt;/li&gt;
&lt;li&gt;I used Gemma to provide hints for learners in the project using API from Google AI studio.&lt;/li&gt;
&lt;li&gt;I used ElevenLabs text-to-speech free credit for audio for the readers who also need articulation. Some other educational voice ID was not free so I used the free one provided in Developers dashboard&lt;/li&gt;
&lt;li&gt;I used Gemma-powered admin briefing that summarizes highlights, issues to check, and pending approvals using API from Google AI studio.&lt;/li&gt;
&lt;li&gt;I use MongoDB to preserve lesson history , API errors and user data&lt;/li&gt;
&lt;li&gt;I hosted the project on Render and used AI insights to check build errors&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Project Tech stack
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Layer      | Choice
--------------------------------------------------------------
Frontend   | "Next.js 14 (App Router), TypeScript, CSS", Gemma
3D / AR    | Google &amp;lt;model-viewer&amp;gt; + .glb
Backend    | Next.js API routes
Database   | MongoDB Atlas
Payments   | Safaricom Daraja (STK Push + Query + callback)
Auth       | Email OTP + JWT cookie
Audio      | ElevenLabs + browser fallback
Hosting    | Render
_______________________________________________________________
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  List of screens and controls
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Landing page
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Header&lt;/strong&gt; — top bar of the site&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start learning&lt;/strong&gt; — opens the learning page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎨 Artists gallery&lt;/strong&gt; — opens the artists page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature cards&lt;/strong&gt; — information only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Footer&lt;/strong&gt; — links and site info at the bottom&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Header
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Theme button&lt;/strong&gt; — switches light / dark theme&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign in&lt;/strong&gt; — opens the auth modal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign out&lt;/strong&gt; — ends the session; progress no longer saves to the cloud&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unlock with M-Pesa&lt;/strong&gt; — opens the M-Pesa payment modal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin&lt;/strong&gt; (admin users only) — opens the admin dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Lessons list
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free lesson row&lt;/strong&gt; — opens that lesson (content, diagram, 3D model, quiz)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paid / locked lesson row&lt;/strong&gt; — asks for M-Pesa unlock if not paid; opens the lesson if paid or admin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress marks&lt;/strong&gt; — show saved attempts / mastery when signed in&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Lessons workspace
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lesson title &amp;amp; summary&lt;/strong&gt; — topic overview&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson body text&lt;/strong&gt; — teaching content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagram (LessonVisual)&lt;/strong&gt; — SVG preview of the solid&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3D model viewer&lt;/strong&gt; — drag to rotate, scroll to zoom (background always dark)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View in your space&lt;/strong&gt; — opens AR on supported phones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model credit line&lt;/strong&gt; — shows 3D model author / licence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Play audio&lt;/strong&gt; — speaks lesson text (ElevenLabs, or browser voice if the API fails)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answer options&lt;/strong&gt; — choose one multiple-choice answer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check answer&lt;/strong&gt; — marks right/wrong, shows explanation, saves progress if signed in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get a hint&lt;/strong&gt; — Gemma tutor hint (up to 3 levels)&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Footer
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home&lt;/strong&gt; — go to home&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lessons&lt;/strong&gt; — lessons page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artists gallery&lt;/strong&gt; — go to artists gallery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin&lt;/strong&gt; — go to admin dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit a 3D model&lt;/strong&gt; — go to artists submit form&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Auth modal
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sign in&lt;/strong&gt; — log in with email + password (if email is verified)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need an account? Register&lt;/strong&gt; — switch to the registration form&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name / Email / Password&lt;/strong&gt; — account fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send verification code&lt;/strong&gt; — saves the account and sends a 6-digit OTP email (or logs the OTP if Resend is not set)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification code (OTP)&lt;/strong&gt; — enter the 6-digit code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify &amp;amp; continue&lt;/strong&gt; — confirms OTP, signs you in, closes the modal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resend code&lt;/strong&gt; — sends a new OTP (expires in 10 minutes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Back to sign in&lt;/strong&gt; — return to the login form&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Already registered? Sign in&lt;/strong&gt; — switch to the login form&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Pay modal (M-Pesa)
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;M-Pesa phone number&lt;/strong&gt; — number that receives the STK PIN prompt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay with M-Pesa&lt;/strong&gt; — starts STK Push; order stays pending until success&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I’ve paid — check status&lt;/strong&gt; — checks Daraja/DB; unlocks only if payment completed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close&lt;/strong&gt; — closes the modal without unlocking&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Artists page — gallery
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;← Back to Math Quest&lt;/strong&gt; — go to home&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open 3D model&lt;/strong&gt; — opens the model URL in a new tab&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;☕ Buy me a coffee (PayPal)&lt;/strong&gt; — opens PayPal donate / paypal.me for that artist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📱 M-Pesa&lt;/strong&gt; — copies the M-Pesa number for Send Money&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Artists page — submit form
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Display name&lt;/strong&gt; — public artist name&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt; — contact for moderation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model title&lt;/strong&gt; — name of the model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model URL&lt;/strong&gt; — public https link to &lt;code&gt;.glb&lt;/code&gt; or model page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bio&lt;/strong&gt; (optional) — short description&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt; (optional) — e.g. CC-BY, CC0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PayPal&lt;/strong&gt; — email or paypal.me for tips&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;M-Pesa number&lt;/strong&gt; — phone for tips (at least one of PayPal or M-Pesa required)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit for review&lt;/strong&gt; — saves as pending until an admin approves&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Admin — Gemma briefing
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Summary&lt;/strong&gt; — short overview of platform health&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highlights&lt;/strong&gt; — key stats (users, revenue, AI)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What to check&lt;/strong&gt; — issues to review (pending pay, OTP, errors)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approvals pending&lt;/strong&gt; — artist queue status&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Artists &amp;amp; tips&lt;/strong&gt; — switches to the Artists tab&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Admin — tabs
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overview&lt;/strong&gt; — KPI cards + metrics table&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt; — confirmed M-Pesa payments table&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Users&lt;/strong&gt; — recent users (verified / paid)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI services&lt;/strong&gt; — Gemma + ElevenLabs event log table&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artists &amp;amp; tips&lt;/strong&gt; — submissions + PayPal/M-Pesa + approve/reject&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Admin — artist actions
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Approve&lt;/strong&gt; — publishes models to the public gallery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reject&lt;/strong&gt; — keeps the model off the public gallery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;← Home&lt;/strong&gt; — go to home&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lessons&lt;/strong&gt; — go to the lessons page&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Open Innovation is the general concept of the project as I am using the open source AI to build a project from scratch and to ensure it runs smoothly and tries to solve a current problem which is providing financial ease for 3D artists who need jobs and also making it easier for learners to get key concepts. The product is designed for real-world constraints in East Africa—mobile browsers, intermittent connectivity to external APIs, and MPesa as the primary payment . Free content lowers the barrier to entry; paid lessons unlock only after Mpesa payment.&lt;br&gt;
The project is created based on open source models and it makes these possible : &lt;br&gt;
&lt;strong&gt;Access&lt;/strong&gt;: Runs in the browser on shared or low-end phones—no app install.&lt;br&gt;
&lt;strong&gt;Local payments&lt;/strong&gt;: M-Pesa matches how families in Kenya already pay.&lt;br&gt;
&lt;strong&gt;Pedagogy&lt;/strong&gt;: 3D + hints support spatial thinking better than static notes alone.&lt;br&gt;
&lt;strong&gt;Integrity&lt;/strong&gt;: OTP reduces bot sign-ups; only confirmed payments unlock content.&lt;br&gt;
&lt;strong&gt;Creators&lt;/strong&gt;: Artists can share better models and receive tips without the app storing huge binary files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges faced
&lt;/h3&gt;

&lt;p&gt;I did face some challenges during the project development which was solved by Gemma locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User paid, but the dashboard still showed pending and paid lessons stayed locked.This was because I was treating &lt;code&gt;ResponseCode: "0"&lt;/code&gt; as “paid” — that only means the prompt was sent, not that PIN succeeded.
Weak handling of final codes caused a problem and Gemma was using a wrong reference so I updated the current documentation reference:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ResultCode: "0" → real success → unlock
1032 → cancelled by user → failed
1037 → timeout / user unreachable → failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ElevenLabs voice lesson audio failed at first; within the analytics tab in the developer dashboard in the ElevenLabs website : &lt;a href="https://elevenlabs.io/app/developers" rel="noopener noreferrer"&gt;https://elevenlabs.io/app/developers&lt;/a&gt; , it showed 402 error. The cause was missing credits / plan limits on the educator's voice ID I wanted and I did not realize it needed to be paid for. I used the free voice ID that was in the Developer's dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Register modal sent a code to my email when testing, but the interface didn’t clearly show an OTP modal that was supposed to pop up. The cause was a pop up extension blocker was preventing the modal from showing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;next build failed on Render with:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
@typescript-eslint/no-namespace 
@typescript-eslint/no-explicit-any 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cause was strict next/typescript rules treat many normal patterns as errors, which fail the build. &lt;br&gt;
Gemma relaxed rules. Strict ESLint + next build will block shipping unless rules or ignoreDuringBuilds are set.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My render website is not loading the models as fast as I want, I have not solved this yet because it may be a platform issue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Finally answering why why open innovation matters
&lt;/h3&gt;

&lt;p&gt;The business is low cost due to running Gemma as a hint provider instead of getting an actual tutor. The customer's data is not shared on any platform , it is private and stored on MongoDB Atlas. I can always change references to my local model for precise answers. I am using Gemma as a tutor ,hint provider and dashboard summarizer and it is a free API so I am not locked on prices currently.&lt;/p&gt;

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

&lt;p&gt;It is not possible to add logging for a free API in Google AI studio&lt;/p&gt;

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

&lt;p&gt;I am the only tester currently and I paid while testing 😅️. But no real user currently though, I will try to get one within the week.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Render&lt;/li&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;li&gt;Best Use of ElevenLabs&lt;/li&gt;
&lt;li&gt;Best Use of MongoDB Atlas&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>Dance a little challenge</title>
      <dc:creator>Chemuu</dc:creator>
      <pubDate>Sun, 11 Oct 2026 14:58:49 +0000</pubDate>
      <link>https://dev.to/chemuu101/dance-a-little-challenge-24dj</link>
      <guid>https://dev.to/chemuu101/dance-a-little-challenge-24dj</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;This is an application that plays a song during the day and it reminds user to dance or jump in the sun. This gives the user a bit of a break in whatever they were doing&lt;/p&gt;

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

&lt;p&gt;I can't upload a video right now&lt;/p&gt;

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

&lt;p&gt;It's on a private repository&lt;/p&gt;

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

&lt;p&gt;I used Gemma for this but this is only a scheduler, with cron jobs so I wont be posting the code here&lt;/p&gt;

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

&lt;p&gt;Open Innovation is the best&lt;/p&gt;

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

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>QEMU Arduino emulator dedicated to help Elsie</title>
      <dc:creator>Chemuu</dc:creator>
      <pubDate>Sun, 04 Oct 2026 17:33:43 +0000</pubDate>
      <link>https://dev.to/chemuu101/qemu-arduino-emulator-dedicated-to-help-elsie-4f77</link>
      <guid>https://dev.to/chemuu101/qemu-arduino-emulator-dedicated-to-help-elsie-4f77</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;My friend Elsie had a baby and she wants to go back to school. She started Udemy courses for programming. She is usually busy and once she sits, she forgets what she wants to do. I do not have a physical device to monitor her motion so I will emulate Arduino on QEMU. I want the device to monitor her movements in between active hours ( 8:00 am to 10:00 pm ) . Once she sits, the device will notify her to complete three tasks&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;learn current task on Udemy&lt;/li&gt;
&lt;li&gt;update folder &lt;/li&gt;
&lt;li&gt;ensure git is connected and automatically updates to repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The end goal is to make her remember to learn once she has time (no movement/ inactivity) in her hands.&lt;/p&gt;

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

&lt;p&gt;This is the front-end on Render : &lt;a href="https://dev-week.onrender.com/" rel="noopener noreferrer"&gt;https://dev-week.onrender.com/&lt;/a&gt;. &lt;br&gt;
It works well on local   &lt;iframe src="https://www.youtube.com/embed/P78T4YgsljA" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Here is my GitHub &lt;a href="https://github.com/taylorhelene/dev-week" rel="noopener noreferrer"&gt;code&lt;/a&gt;&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/taylorhelene" rel="noopener noreferrer"&gt;
        taylorhelene
      &lt;/a&gt; / &lt;a href="https://github.com/taylorhelene/dev-week" rel="noopener noreferrer"&gt;
        dev-week
      &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;dev-week&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use Gemma locally&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure code performs these tasks&lt;/p&gt;
&lt;p&gt;Sending a message between 8am to 10pm whenever there is no movement, user has no activity, it reminds user three things
- learn current task on udemy
- update folder
- ensure git is connected and automatically updates to repo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use QEMU to emulate Arduino sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upload the code to Github&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add to render&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/taylorhelene/dev-week" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;ol&gt;
&lt;li&gt;I set up Ollama locally using this tutorial &lt;a href="https://dev.to/avatsaev/local-intelligence-how-to-set-up-a-local-gpt-chat-for-secure-private-document-analysis-workflow-1lnm"&gt;link&lt;/a&gt; and pulled Gemma. 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx0uv71fbe7r33k3d1xsq.png" alt="Ollama Gemma 1"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0kbqmlqy06t5ul2usct9.png" alt="Ollama Gemma 2"&gt;
&lt;/li&gt;
&lt;li&gt;I used Gemma within Ollama with prompts to help point it to what I wanted. I gave it this &lt;a href="https://blog.kirillov.cc/posts/arduino-qemu/" rel="noopener noreferrer"&gt;link&lt;/a&gt; to a tutorial and I told it to build my project similarly but with a different programming language. &lt;/li&gt;
&lt;li&gt;I  set up my QEMU VM ( QEMU is an open source quick emulator)&lt;/li&gt;
&lt;li&gt;I used Gemma to edit a tutorial I found on Arduino and to ensure it ran my tasks&lt;/li&gt;
&lt;li&gt;I followed the instructions and used this to compile my sensor.c file

&lt;code&gt;shell
cd ~/movement-reminder
avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os \
-Wall -Wextra firmware/sensor.c -o firmware/sensor.elf
&lt;/code&gt;

shell&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I started QEMU using this&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/movement-reminder
qemu-system-avr &lt;span class="nt"&gt;-M&lt;/span&gt; uno &lt;span class="nt"&gt;-bios&lt;/span&gt; firmware/sensor.elf &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-nographic&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-serial&lt;/span&gt; tcp:127.0.0.1:5678,server&lt;span class="o"&gt;=&lt;/span&gt;on,wait&lt;span class="o"&gt;=&lt;/span&gt;off
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I ran local using this so that it depends on my interaction&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;QEMU_SERIAL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TEST_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;IDLE_SECONDS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10 &lt;span class="nv"&gt;REPEAT_SECONDS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20 &lt;span class="se"&gt;\&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; uvicorn main:app &lt;span class="nt"&gt;--host&lt;/span&gt; 127.0.0.1 &lt;span class="nt"&gt;--port&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bnpt6q6bpqgaljze2pm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bnpt6q6bpqgaljze2pm.png" alt="local server"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltxkng8a7r177fzukj88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltxkng8a7r177fzukj88.png" alt="QEMU"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I pushed code to Github and ran it on render using credits&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also used Gemma to try to connect devrelay but failed&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Ollama runs locally but it needs a network to run a model. I chose Gemma but I can swap models at any time. Ollama data is not uploaded or does not get to a server that's why history refreshes after each session. I have to find a way to keep logs in order to update the logs / file to Devrelay. Gemma needs to be given specific commands for it not to hallucinate and to build it's memory. I am also learning how to preserve memory and fine tune. My model which is 3:1b needs a lot of fine tuning.&lt;br&gt;
Open Innovation helps developers try out new ideas. The documentation is available and developers can help improve on the technology to fit in some recommendation or feedback. People create issues , bug reports of feature requests according to how they want the technology to work. Open technology is also the best way for development whereby your code and logic is sharpened and made more better.&lt;/p&gt;

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

&lt;p&gt;I copied my ollama history like this :&lt;br&gt;
&lt;code&gt;cp /home/user/.ollama/history ~/ollama-history.txt&lt;/code&gt; and pasted it to my code folder here :&lt;a href="https://github.com/taylorhelene/dev-week/blob/main/ollama-prompt-history.txt" rel="noopener noreferrer"&gt;code&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Best Use of Render&lt;/p&gt;

&lt;p&gt;Best Use of Gemma&lt;/p&gt;

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