<?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: Eze Prince </title>
    <description>The latest articles on DEV Community by Eze Prince  (@eze_princejr_1dcc53250ce).</description>
    <link>https://dev.to/eze_princejr_1dcc53250ce</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4170080%2F370c022f-daa5-4189-a212-29b6769e65d1.webp</url>
      <title>DEV Community: Eze Prince </title>
      <link>https://dev.to/eze_princejr_1dcc53250ce</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eze_princejr_1dcc53250ce"/>
    <language>en</language>
    <item>
      <title>Nature Quest: an on-device open AI that sends you outside and gets out of your way</title>
      <dc:creator>Eze Prince </dc:creator>
      <pubDate>Sun, 11 Oct 2026 22:40:12 +0000</pubDate>
      <link>https://dev.to/eze_princejr_1dcc53250ce/nature-quest-an-on-device-open-ai-that-sends-you-outside-and-gets-out-of-your-way-1nbd</link>
      <guid>https://dev.to/eze_princejr_1dcc53250ce/nature-quest-an-on-device-open-ai-that-sends-you-outside-and-gets-out-of-your-way-1nbd</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;Most "AI for the outdoors" ideas still end with you staring at a screen. &lt;strong&gt;Nature Quest&lt;/strong&gt; is built the other way round: the screen is the shortest part of the experience.&lt;/p&gt;

&lt;p&gt;You tap once. An open AI model running on your own phone picks a short mission that fits where you are and how you feel, for example "Five greens" or "Count the voices" (listen for three minutes and count the different bird calls). The card is simple: &lt;strong&gt;a title, why this quest, your task, and the time.&lt;/strong&gt; Then the app says &lt;strong&gt;"Your quest is ready. Now put the phone away."&lt;/strong&gt; and dims itself. You go outside. When you come back it asks what happened, you share a few words and an optional photo, and your journal, streak and achievements grow. Then it tells you that is enough screen for now.&lt;/p&gt;

&lt;p&gt;It is not a chatbot. The AI works behind the scenes: Mission, Reality, Return, Reflection, Progress. It is for anyone who wants a nudge outside without another feed to scroll, including people with weak signal, small data plans and mid-range phones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0zvna35v77i7unc82sbg.jpg" 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%2F0zvna35v77i7unc82sbg.jpg" alt=" " width="800" height="1714"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Live app (installable PWA, works offline after setup): &lt;a href="https://nature-quest-c14be.web.app" rel="noopener noreferrer"&gt;https://nature-quest-c14be.web.app&lt;/a&gt;&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Kings-creation" rel="noopener noreferrer"&gt;
        Kings-creation
      &lt;/a&gt; / &lt;a href="https://github.com/Kings-creation/nature-quest" rel="noopener noreferrer"&gt;
        nature-quest
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      "Offline-first PWA where an on-device open AI picks outdoor quests that get you off your phone"
    &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;Nature Quest 🌿&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;An offline-first PWA that uses an open-weight AI model, running on your own device, to write short real-world
missions, then deliberately gets out of your way so you can go outside.&lt;/p&gt;
&lt;p&gt;Built for the DEV / Hacktoberfest 2026 "Touch Grass" challenge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The loop:&lt;/strong&gt; one tap gets a quest, the screen tells you to put the phone away and rests itself, you go outside
you come back and say how it went, and your journal and streak grow. The screen is the shortest part of the experience.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Open AI, no paid APIs&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Quests come from a library of 114 hand-checked missions. An open-weight model on the phone picks the one that fits you.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Smart matching (default, recommended)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt; (Apache-2.0, about 25 MB) via Transformers.js / ONNX Runtime Web, in a Web Worker&lt;/td&gt;
&lt;td&gt;Embeds what you type ("tired after work, want something calm"), the time of&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Kings-creation/nature-quest" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repository was created on October 11, 2026, inside the challenge window (Oct 5 to 11).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1cmzva2abxdjeqat17pw.jpg" 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%2F1cmzva2abxdjeqat17pw.jpg" alt=" " width="800" height="1714"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The open AI at the core&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smart matching (default).&lt;/strong&gt; &lt;code&gt;all-MiniLM-L6-v2&lt;/code&gt; (Apache-2.0, about 25 MB) runs in the browser through Transformers.js and ONNX Runtime Web, inside a Web Worker. It reads what you type ("tired after work, want something calm"), the time of day, the season, who you are with, your energy, and a gentle lean toward quests you finished before. It re-orders a library of &lt;strong&gt;114 hand-checked quests&lt;/strong&gt; by meaning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It can only re-order.&lt;/strong&gt; The model never writes or adds a quest, so it cannot ramble or invent something unsafe. Every quest also passes app-level safety rules (no climbing, water, roads, foraging, darkness or strangers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional creative writing.&lt;/strong&gt; The same provider layer can drive a small on-device writer, or a bigger open model on your own computer, for example &lt;code&gt;gpt-oss:20b&lt;/code&gt; through Ollama. It is experimental and off by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What went wrong, and why the design changed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started by having a small language model write every quest on the phone. On my mid-range Android phone (Chrome, CPU only; the WebGPU API existed but no graphics adapter was available) Qwen2.5-0.5B loaded in about 19 seconds, took about 15 seconds to produce a first word, and then wrote around 0.3 tokens per second. A whole quest needs about a hundred, so it never finished. A smaller 135M model was faster but rambled into stories and also never produced a usable quest. So I stopped forcing one model to do every job. Small open models are great at &lt;em&gt;understanding meaning&lt;/em&gt; (fast, offline) and poor at long free writing on weak hardware. The final design uses the right model for each job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The rest of the stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offline-first PWA: service worker, IndexedDB, and a sync outbox. Everything runs on the device. Firebase gives optional sign-in; the cloud backup code exists but I did not enable Firestore for this demo, so my progress stays local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never stuck:&lt;/strong&gt; every model runs behind a watchdog with timeouts, a skip button, and an in-app self-test that prints where the time goes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest verification:&lt;/strong&gt; time outside versus quest length, an optional photo (kept on the phone and checked only for being a real, non-blank image), and the person's own words. Each completion is labelled self-reported, time-checked or photo-attached. The AI never claims to have seen anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No double rewards:&lt;/strong&gt; completion is idempotent, so double taps, reloads and crashes cannot count a quest twice.&lt;/li&gt;
&lt;li&gt;68 automated engine tests and 69 browser checks (offline reload, stuck or crashing model, matching, photo evidence).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frp7hye7ubo4ojerv3h89.jpg" 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%2Frp7hye7ubo4ojerv3h89.jpg" alt=" " width="800" height="1714"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Field test:&lt;/strong&gt; I tried it on my own phone on October 11. The app picked "Stand in the light" for me and labelled it "Picked for you by all-MiniLM-L6-v2", and I started it. I finished "Bench pause" (5 minutes outside, labelled "Time on quest checked") and wrote "This was relaxing" in my journal. I also finished "Lean and look up" and attached a photo, which the app labelled "Photo attached". I finished that one in about a minute, so the journal honestly records 1 minute. That is why the app records time instead of pretending.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi7c0czhfnc3y091plk0k.jpg" 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%2Fi7c0czhfnc3y091plk0k.jpg" alt=" " width="800" height="1714"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It runs with no internet.&lt;/strong&gt; The place you want this app is a trail or a park, exactly where the signal drops. A closed API cannot go there. A model cached in the browser can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No keys, no per-quest bill, no credit card to try it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your words and photos stay on your phone.&lt;/strong&gt; No server I control ever sees them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is swappable.&lt;/strong&gt; A tiny matching model on a phone, a bigger open model on a laptop, one app. Open weights let me measure each model on the real device and change the design when one failed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it was worse, honestly:&lt;/strong&gt; small open models were too slow and too chatty to write whole quests on a mid-range phone. I did not hide that. I redesigned around what small open models do well and kept free writing as an optional mode.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Do AI models still follow instructions when the rules stack up? A control-vs-stress benchmark</title>
      <dc:creator>Eze Prince </dc:creator>
      <pubDate>Sun, 11 Oct 2026 07:52:22 +0000</pubDate>
      <link>https://dev.to/eze_princejr_1dcc53250ce/do-ai-models-still-follow-instructions-when-the-rules-stack-up-a-control-vs-stress-benchmark-1bkf</link>
      <guid>https://dev.to/eze_princejr_1dcc53250ce/do-ai-models-still-follow-instructions-when-the-rules-stack-up-a-control-vs-stress-benchmark-1bkf</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kaggle-2026-09-23"&gt;Kaggle Benchmarking Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Reliability under constraints: when a model must satisfy several rules at once, and the prompt is padded with distractors or conflicting notes, which rules slip?&lt;/p&gt;

&lt;p&gt;ModelBench has 16 tasks in 8 control/stress pairs across four families (constraints, structured output, distractors, compound tasks). A control is a plain task; its stress version adds extra constraints, conflicting instructions or irrelevant facts. Every answer is scored by deterministic code (JSON parsing, word limits, exact values, forbidden words), never by an AI judge. A task's score is the share of its checks passed. Infrastructure errors are never counted against a model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models Tested
&lt;/h2&gt;

&lt;p&gt;Five models on Kaggle, one run each: gpt-oss-20b, Gemini 3.7 Flash, Claude Sonnet 5.5, Gemma 4 31B and DeepSeek-R1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Findings
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. A huge spread on identical prompts.&lt;/strong&gt; gpt-oss-20b scored 96.7%, Gemini 3.7 Flash 94%, Claude Sonnet 5.5 84%, Gemma 4 31B 68% and DeepSeek-R1 16%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Score did not follow cost.&lt;/strong&gt; On Kaggle's score-vs-cost chart, gpt-oss-20b sits in the "efficient" corner, while DeepSeek-R1 is among the most expensive points with the lowest score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Strong models still slip on format discipline.&lt;/strong&gt; In an earlier manual pilot, Claude Sonnet 5.5 passed all 8 original tasks, but on a harder set it gave a correct multi-step answer (24.19) while showing its working, even though the prompt said "reply with only the number". Gemini 3.6 Flash passed 7 of 8 harder tasks and dropped a task from a list after a distractor said sprint planning had moved (one run, so only a hypothesis).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. What surprised me.&lt;/strong&gt; Claude scored 100% on the first 8 tasks in my manual pilot but 84% on all 16 on Kaggle. I haven't diagnosed why. The 8 added tasks are harder, but one run per model is a weak basis for a conclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Benchmark
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.kaggle.com/benchmarks/ezeprincejr/modelbench-reliability-under-constraints" rel="noopener noreferrer"&gt;https://www.kaggle.com/benchmarks/ezeprincejr/modelbench-reliability-under-constraints&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;Only 16 tasks and one run per model, so small differences are not reliable. Scoring is equal-weight and provisional. Eight of the tasks were written after a two-model pilot, so they are not blind. A JSON reply wrapped in a code fence counts as a format failure. I did not diagnose why DeepSeek-R1 scored so low (it could be a real format problem or my scoring being too strict). I have not split scores into control vs stress per model. Next I'd add repeated runs, more models and a per-task failure analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prototype dashboard (optional)
&lt;/h2&gt;

&lt;p&gt;I also built a companion dashboard as an installable web app: &lt;a href="https://modelbench-ai-c14be.web.app" rel="noopener noreferrer"&gt;https://modelbench-ai-c14be.web.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is only a prototype. The official, authoritative results are the ones on the Kaggle leaderboard above. The dashboard shows an "awaiting results" screen until results are loaded into it, and a labelled demo-data mode for previewing the layout.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>kagglechallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>INVORA PRO business management and POS system... now with APIs...</title>
      <dc:creator>Eze Prince </dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:16:54 +0000</pubDate>
      <link>https://dev.to/eze_princejr_1dcc53250ce/invora-pro-business-management-and-pos-system-now-with-apis-2h9h</link>
      <guid>https://dev.to/eze_princejr_1dcc53250ce/invora-pro-business-management-and-pos-system-now-with-apis-2h9h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjieoy7ybkj7uqrq0mlma.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%2Fjieoy7ybkj7uqrq0mlma.png" alt=" " width="800" height="533"&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%2Fmxbukcj4y8v55gf5c40j.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%2Fmxbukcj4y8v55gf5c40j.png" alt="INVORA PRO v3.3.2" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
