<?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: SRG-Cy</title>
    <description>The latest articles on DEV Community by SRG-Cy (@srgcy).</description>
    <link>https://dev.to/srgcy</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%2F4159871%2Fffcc056f-cae3-443f-a951-1d01cc9e47fb.png</url>
      <title>DEV Community: SRG-Cy</title>
      <link>https://dev.to/srgcy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/srgcy"/>
    <language>en</language>
    <item>
      <title>StyleCast: an AI outfit planner that runs on your phone</title>
      <dc:creator>SRG-Cy</dc:creator>
      <pubDate>Sat, 17 Oct 2026 13:59:36 +0000</pubDate>
      <link>https://dev.to/srgcy/stylecast-an-ai-outfit-planner-that-runs-on-your-phone-414g</link>
      <guid>https://dev.to/srgcy/stylecast-an-ai-outfit-planner-that-runs-on-your-phone-414g</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;Every morning I check the weather app, open the wardrobe, and guess. Then it's 22 degrees and I'm in a hoodie, or it's pouring and my jacket isn't waterproof.&lt;/p&gt;

&lt;p&gt;StyleCast does the guessing for me:&lt;/p&gt;

&lt;p&gt;📸 Snap your wardrobe once. An open vision model running in the browser tags each item: type, colour, warmth, waterproof, formality. Every tag is one tap to edit.&lt;br&gt;
🌦️ Get today's outfit. It reads the forecast for where you are (rain, wind, temperature) and your plan for the day (casual, work or gym), then picks from your clothes.&lt;br&gt;
🧺 It remembers. No wearing the same shirt three days running, and anything marked "in the wash" stays out.&lt;br&gt;
🕳️ It spots gaps. "Nothing waterproof for days like today."&lt;br&gt;
🛍️ Budget chat. Ask "I have €50, what should I buy?" and Gemma, running on your device, plans searches from your gaps and shows real products that fit the budget.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try it: &lt;a href="https://srg-cy.github.io/StyleCast/" rel="noopener noreferrer"&gt;https://srg-cy.github.io/StyleCast/&lt;/a&gt; (works best in Chrome on a laptop or Android; it installs to your home screen like an app).&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%2Fuztqizmvjeem52ml3upn.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%2Fuztqizmvjeem52ml3upn.png" alt=" " width="780" height="1688"&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%2Ff2ohuuegnwq8gnmv6ncm.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%2Ff2ohuuegnwq8gnmv6ncm.png" alt=" " width="780" height="1688"&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%2F2mabhgu1i4p1mowvxcwb.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%2F2mabhgu1i4p1mowvxcwb.png" alt=" " width="780" height="1688"&gt;&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/SRG-Cy" rel="noopener noreferrer"&gt;
        SRG-Cy
      &lt;/a&gt; / &lt;a href="https://github.com/SRG-Cy/StyleCast" rel="noopener noreferrer"&gt;
        StyleCast
      &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;StyleCast&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Photograph your wardrobe once. Every morning, get an outfit from your own clothes that fits the real forecast.&lt;/p&gt;
&lt;p&gt;Built for the DEV Hacktoberfest 2026 Open-Source AI Challenge, Week 2 ("Side Hustle").&lt;/p&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/SRG-Cy/StyleCast/docs/screenshots/today-rain.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSRG-Cy%2FStyleCast%2FHEAD%2Fdocs%2Fscreenshots%2Ftoday-rain.png" width="200" alt="Today on a rainy day: 13 degrees under the curtain-red header, and an outfit of denim jacket, hoodie, jeans and trainers in an arched mirror"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/SRG-Cy/StyleCast/docs/screenshots/today-sunny.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSRG-Cy%2FStyleCast%2FHEAD%2Fdocs%2Fscreenshots%2Ftoday-sunny.png" width="200" alt="Today on a sunny day: 22 degrees, and a t-shirt, shorts and trainers in the mirror"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/SRG-Cy/StyleCast/docs/screenshots/wardrobe.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSRG-Cy%2FStyleCast%2FHEAD%2Fdocs%2Fscreenshots%2Fwardrobe.png" width="200" alt="The wardrobe, with each category hanging on its own brass rail"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/SRG-Cy/StyleCast/docs/screenshots/shop.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSRG-Cy%2FStyleCast%2FHEAD%2Fdocs%2Fscreenshots%2Fshop.png" width="200" alt="The Shop chat with country and who-for settings"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Today's outfit stands in a fitting-room mirror under the forecast; the wardrobe hangs on rails, one per category.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wardrobe scan:&lt;/strong&gt; snap each item. An open model running in your browser tags type, colour, warmth, waterproofing and formality. Every tag is editable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily outfit:&lt;/strong&gt; checks today's forecast (rain, wind, temperature) and your occasion (casual, work or gym), then picks an outfit from your wardrobe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wear history:&lt;/strong&gt; remembers what you wore recently so it doesn't repeat, and lets you mark items "in the wash".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gap spotting:&lt;/strong&gt; tells you what your wardrobe is missing for the weather you actually get ("nothing waterproof for days like today").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget chat (Shop tab):&lt;/strong&gt; say "I have €50 today, what should I…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SRG-Cy/StyleCast" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It's a static site with no build step, MIT licensed. npm test covers the outfit rules, the budget chat and the shopping server, and CI runs it on every pull request.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Version 1 was a dead end&lt;/strong&gt;&lt;br&gt;
On day one, StyleCast was a Python server calling Qwen2.5-VL through Ollama on my PC. The outfits were good. The setup was terrible: every user would need to install Ollama and pull a 6 GB model before seeing a single outfit. Nobody pays for that.&lt;/p&gt;

&lt;p&gt;So on day two I threw it away and moved the AI into the browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tagging clothes from photos:&lt;/strong&gt; CLIP ViT-B/32 via Transformers.js, on your device (WebGPU on laptops, WebAssembly on phones).
Budget chat: Gemma 3 1B, or Gemma 3 270M without WebGPU, on your device in a web worker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather:&lt;/strong&gt; Open-Meteo, free with no key, called from the browser.
Shopping results: SerpApi Google Shopping, through a tiny Node server on Render.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wardrobe and photos:&lt;/strong&gt; IndexedDB, in your browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CLIP doesn't describe photos the way a chat model does. It compares a photo with a list of descriptions and picks the closest. For "what kind of clothing is this?" that's enough, and it's small enough to run on a phone. The outfit itself is chosen by plain JavaScript rules: weather first, then occasion, then what you haven't worn lately. I don't need a model to tell me it's raining.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then my jeans became a jacket&lt;/strong&gt;&lt;br&gt;
The first thing I photographed on my own phone was a pair of jeans. StyleCast filed them under jackets.&lt;/p&gt;

&lt;p&gt;I could have tweaked a prompt and hoped. Instead I wrote a scoring script that runs the tagger over 272 labelled product photos, and it now runs in CI on every pull request that touches the tagger. It found three problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lazy labels&lt;/strong&gt;. CLIP was matching my photo against "a photo of a jeans". With nothing else to go on, it went by colour and fabric, and blue denim looks like a denim jacket. Each type now gets a few plain descriptions: "a pair of jeans", "blue denim jeans", "denim trousers with two legs".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The centre crop&lt;/strong&gt;. CLIP crops to a square, which cut tall photos like jeans in half. Photos are now padded to a square instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A shortcut that cost accuracy&lt;/strong&gt;. I'd put phones on an 8-bit model to save memory. Now they use the 16-bit model, loaded in two halves (text first, then image) so it fits in phone memory.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With all three fixed, on the same 272 photos:&lt;/p&gt;

&lt;p&gt;📱 Phones: right clothing type went from 55% to 77%, and right category (top, bottom, shoes...) from 90% to 93%.&lt;br&gt;
💻 Laptops: right clothing type went from 72% to 77%, and right category from 92% to 93%.&lt;br&gt;
The cost: phones now download about 300 MB the first time instead of about 150 MB. The browser keeps it after that.&lt;/p&gt;

&lt;p&gt;The cost: phones now download about 300 MB the first time instead of about 150 MB. The browser keeps it after that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The budget chat: Gemma, Render and SerpApi&lt;/strong&gt;&lt;br&gt;
Ask "I have €50, what should I buy?" and this happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemma&lt;/strong&gt;(on your device) reads your wardrobe and the gaps the rules found, and plans up to three searches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only the short query ("rain jacket") and a price cap go to a Render server. It holds the SerpApi key, caches each search for six hours, and caps searches per IP and per day.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rules pick one product per search so the total stays within budget, and Gemma writes a sentence on why each pick fits.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you name the item ("shoes under 20"), it skips planning and searches for that. If Gemma can't load on your device, the rules plan the searches and write a plain explanation, so the chat still works.&lt;/p&gt;

&lt;p&gt;One lesson for anyone running models in the browser: a failed first load can leave ONNX Runtime broken for the rest of the page. Now each model attempt gets a fresh web worker, so a failed WebGPU attempt doesn't break the WebAssembly fallback.&lt;/p&gt;

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

&lt;p&gt;StyleCast is only a viable side hustle because the models are open.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔒 Privacy. Nobody wants photos of their bedroom wardrobe on a stranger's server. An open model running in the browser means the photos never leave the phone. A hosted vision API can't promise that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;💸 €0 per user. Closed APIs bill per photo and per message. Open weights on the user's device cost me nothing, which is what makes a €2 subscription work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✈️ Offline. Once the model is downloaded, tagging and outfit picks work without a connection. The last forecast is saved for mornings with bad signal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔧 Fixable. When CLIP got my jeans wrong, I could look inside: change the labels, change the preprocessing, compare precisions, and measure every change. A closed API would have left me rewording prompts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔁 Swappable. Gemma 1B drops to 270M on weaker devices, and the repo has a test page comparing CLIP with SmolVLM. No vendor decides that for me.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Transformers.js, ONNX Runtime Web, CLIP, Gemma and Open-Meteo did the heavy lifting. My part was gluing them together for one specific morning problem.&lt;/p&gt;

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

&lt;p&gt;My first users were two friends. They photographed their own clothes on their Android phones, and StyleCast got them right. Their verdict was "good, but it can be improved", which is fair. StyleCast is only a few days old, and their feedback is what goes into the next version.&lt;/p&gt;

&lt;p&gt;Before that, my first real test was my own wardrobe, and that's how the jeans bug turned up. That one wrong tag sent me from "it works on the demo photos" to measuring accuracy properly, and it was the most useful thing that happened all week. I've also run the full shopping flow live, with the app on GitHub Pages, the server on Render and real Google Shopping results from SerpApi.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best use of Gemma&lt;/strong&gt;: Gemma 3 runs entirely in the browser and powers the budget chat. It plans searches from the user's wardrobe gaps and explains each pick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use of Render&lt;/strong&gt;: the shopping server runs on Render from a one-click blueprint (render.yaml) and keeps the SerpApi key off users' devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use of SerpApi&lt;/strong&gt;: Google Shopping results with a price cap turn wardrobe gaps into real products within budget.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
    <item>
      <title>LevelOut: an anime-style System that levels you up at a real skill, outside</title>
      <dc:creator>SRG-Cy</dc:creator>
      <pubDate>Sun, 11 Oct 2026 12:13:23 +0000</pubDate>
      <link>https://dev.to/srgcy/levelout-an-anime-style-system-that-levels-you-up-at-a-real-skill-outside-3abj</link>
      <guid>https://dev.to/srgcy/levelout-an-anime-style-system-that-levels-you-up-at-a-real-skill-outside-3abj</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;p&gt;&lt;strong&gt;LevelOut&lt;/strong&gt; turns learning a real skill into a leveling anime.&lt;/p&gt;

&lt;p&gt;You know the trope: a weak hero gets chosen by a mysterious &lt;strong&gt;System&lt;/strong&gt; that hands out daily quests, and every completed quest makes them stronger. I wanted that feeling for real life, with the quests happening &lt;strong&gt;outside&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick a skill.&lt;/strong&gt; Football, cricket bowling, badminton footwork, skipping, a 5K, or type anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tell the System what you have&lt;/strong&gt;: a wall, stairs, water bottles, a ball, or nothing at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take the trial.&lt;/strong&gt; The open-weight model writes 6 questions for &lt;em&gt;your&lt;/em&gt; skill, including an injury check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Awaken.&lt;/strong&gt; You get a rank (E to S), a title like &lt;em&gt;E-Rank Striker&lt;/em&gt;, five stats (STR / AGI / VIT / SKL / FOC), a 30-day goal, a rank-up test and a weekly plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Quest.&lt;/strong&gt; Warm-up, drills, cool-down, bonus. Every drill works &lt;strong&gt;alone, outdoors, with only the things you said you have&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pocket your phone.&lt;/strong&gt; Accepting the quest starts a timer and tells you to go.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report back.&lt;/strong&gt; Rate each drill &lt;em&gt;Easy / Just right / Hard / Hurt / Skipped&lt;/em&gt;. You earn XP, stats and levels, and &lt;strong&gt;the next quest adapts&lt;/strong&gt;. Drills that hurt are replaced with gentler ones for a different body part.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To rank up you have to pass a &lt;strong&gt;real-world test&lt;/strong&gt; the System set for you, such as "juggle 25 times in a row". The game only moves when you do.&lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://levelout.onrender.com" rel="noopener noreferrer"&gt;https://levelout.onrender.com&lt;/a&gt;&lt;/p&gt;


&lt;div&gt;
    &lt;iframe src="https://www.youtube.com/embed/8Lo6s_KjuCU" width="315" height="560"&gt;
    &lt;/iframe&gt;
  &lt;/div&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/SRG-Cy" rel="noopener noreferrer"&gt;
        SRG-Cy
      &lt;/a&gt; / &lt;a href="https://github.com/SRG-Cy/LevelOut" rel="noopener noreferrer"&gt;
        LevelOut
      &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;⚔️ LevelOut&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Train outside. Level up for real.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LevelOut turns learning a real skill into a leveling anime. An open-weight AI model plays &lt;strong&gt;the System&lt;/strong&gt;: it tests you, assigns you a rank, and gives you a &lt;strong&gt;Daily Quest&lt;/strong&gt; of outdoor drills you can do &lt;strong&gt;alone, with little or no equipment&lt;/strong&gt;. Complete it, report back, and you gain XP, stats and levels, while the System adapts tomorrow's quest to how you actually did.&lt;/p&gt;
&lt;p&gt;Built for the &lt;strong&gt;MLH × DEV Hacktoberfest Open-Source AI Challenge, Week 1: "Touch Grass"&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SRG-Cy/LevelOut/docs/quest.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSRG-Cy%2FLevelOut%2FHEAD%2Fdocs%2Fquest.png" alt="Daily quest"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it plays&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Accept the System.&lt;/strong&gt; &lt;em&gt;"You have met the conditions to become a Player."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose your path.&lt;/strong&gt; Pick any skill (football, cricket bowling, badminton footwork, skipping, a 5K, parkour, anything) and tick what you have: a wall, stairs, water bottles, a ball, a bench, or nothing at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The trial.&lt;/strong&gt; The model writes 6 assessment questions for &lt;em&gt;your&lt;/em&gt; skill, including…&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/SRG-Cy/LevelOut" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;LevelOut runs an open-weight model, and it can run that model locally too.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight model:&lt;/strong&gt; the System runs on &lt;strong&gt;gpt-oss-120b&lt;/strong&gt;, an open-weight model (Apache 2.0), served by &lt;strong&gt;Groq&lt;/strong&gt; through its OpenAI-compatible API and called with the open-source &lt;code&gt;huggingface_hub&lt;/code&gt; client. Any open model works: Qwen through Hugging Face Inference Providers is built in, and Llama, Gemma or Mistral are one environment variable away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local inference (optional):&lt;/strong&gt; set &lt;code&gt;LLM_BASE_URL&lt;/code&gt; to an &lt;strong&gt;Ollama&lt;/strong&gt;, &lt;strong&gt;llama.cpp&lt;/strong&gt; or &lt;strong&gt;vLLM&lt;/strong&gt; server and the same app runs entirely on weights you host yourself, with no code changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open model isn't decoration. &lt;strong&gt;It is the game master.&lt;/strong&gt; Without it there is no trial, no rank, no quest and no adaptation. It does three jobs, each with a strict JSON contract:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What the open model does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Trial&lt;/td&gt;
&lt;td&gt;Writes level-check questions specific to the chosen skill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Awakening&lt;/td&gt;
&lt;td&gt;Rates the Player honestly (most people start at E or D), sets stats, a 30-day goal, a rank-up test and a 7-day plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daily Quest&lt;/td&gt;
&lt;td&gt;Designs drills from the Player's own equipment, then &lt;strong&gt;adapts&lt;/strong&gt; them using the last report. Drills that hurt are replaced.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The game maths (XP curve, levels, rank gates, streaks, penalty quests) is deterministic JavaScript in the browser, so the model can't "inflate" your progress. You only level up by doing the drills.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your training data stays yours.&lt;/strong&gt; Fitness and injury answers are personal. Because the System is an open-weight model, you can run the exact same app on your own machine or server with &lt;code&gt;LLM_BASE_URL&lt;/code&gt;, and nothing leaves it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in.&lt;/strong&gt; The model is a setting, not a dependency: gpt-oss today, Qwen, Llama or Gemma tomorrow, on any host or none.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone can audit the coach.&lt;/strong&gt; The prompts (&lt;code&gt;prompts.py&lt;/code&gt;) and the model weights are both public, so you can see exactly why the System gave you a drill, and change it if it's wrong for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to run.&lt;/strong&gt; Open models on free hosts, or on your own hardware, mean a student can use a personal coach without a subscription.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Render.&lt;/strong&gt; LevelOut is deployed on Render's free tier from a &lt;code&gt;render.yaml&lt;/code&gt; Blueprint in the repo, so anyone can fork it and get their own System running in a few clicks: Render reads the build and start commands, pins Python, sets the open-model settings, and only asks you to paste your own API key, which never touches the repo. Two choices were shaped by running it as a public Render service: a 120-second gunicorn timeout, because reasoning models like gpt-oss can think for a while before answering, and a per-visitor limit on AI calls so a public link can't drain the key's free quota.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built with Flask, vanilla JS, and the open-weight gpt-oss-120b model served by Groq. MIT licensed.&lt;/em&gt;&lt;/p&gt;

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