<?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: Tanya Mott</title>
    <description>The latest articles on DEV Community by Tanya Mott (@tmott13).</description>
    <link>https://dev.to/tmott13</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%2F57846%2Fe6e7878a-1c0f-4f81-b940-f8ade0557fb8.jpeg</url>
      <title>DEV Community: Tanya Mott</title>
      <link>https://dev.to/tmott13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tmott13"/>
    <language>en</language>
    <item>
      <title>Ripple: One Blog Post, Every Social Platform, Written by Gemma in Your Browser</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Sat, 17 Oct 2026 20:45:12 +0000</pubDate>
      <link>https://dev.to/tmott13/ripple-one-blog-post-every-social-platform-written-by-gemma-in-your-browser-4eni</link>
      <guid>https://dev.to/tmott13/ripple-one-blog-post-every-social-platform-written-by-gemma-in-your-browser-4eni</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;This week I hit two years sober and relaunched my Substack. I wrote the post I'd been waiting two years to write, hit publish, and then realized I wasn't done. I still had to rewrite it as a Substack Note, an Instagram caption, a LinkedIn post and a short post. Each app wants a different length, a different tone, and a different place for the link.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Ripple&lt;/strong&gt;. You paste a blog post or newsletter, pick your tone, and get four ready-to-post drafts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📝 &lt;strong&gt;Substack Note:&lt;/strong&gt; 2–4 sentences that make people open the post&lt;/li&gt;
&lt;li&gt;📸 &lt;strong&gt;Instagram caption:&lt;/strong&gt; a scroll-stopping first line, emojis, "Link in bio," your sign-off and hashtags&lt;/li&gt;
&lt;li&gt;💼 &lt;strong&gt;LinkedIn post:&lt;/strong&gt; a hook, short lines, a question at the end, and the link ready to paste as the first comment&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;X / Threads / Bluesky:&lt;/strong&gt; one punchy line that fits in 280 characters, link included&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The writing is done by &lt;strong&gt;Gemma, running entirely in your browser.&lt;/strong&gt; Your unpublished post never leaves your device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who would pay for it:&lt;/strong&gt; indie writers, newsletter creators and small business bloggers. Basically anyone who publishes and then dreads the "now share it everywhere" part. There's no server and no API bill, so it can stay cheap: a small monthly subscription, a few dollars, instead of the pricey social media tools.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://ripple-nxxz.onrender.com/" rel="noopener noreferrer"&gt;https://ripple-nxxz.onrender.com/&lt;/a&gt;&lt;br&gt;
&lt;em&gt;(Chrome or Edge on a laptop works best. Click "Try a sample" if you don't have a post handy.)&lt;/em&gt;&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%2Fm10fimz310nmm2r0uq6z.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%2Fm10fimz310nmm2r0uq6z.png" alt="Ripple with a post pasted in and all four drafts written" width="800" height="1296"&gt;&lt;/a&gt;&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%2Fldtrxa98rhn4sqjvpfh1.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%2Fldtrxa98rhn4sqjvpfh1.png" alt="Ripple with a close-up of the ⚠️ " width="800" height="814"&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/tmott13" rel="noopener noreferrer"&gt;
        tmott13
      &lt;/a&gt; / &lt;a href="https://github.com/tmott13/ripple" rel="noopener noreferrer"&gt;
        ripple
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      One post, every platform. Turns a blog post into a Substack Note, Instagram caption, LinkedIn post and short post, with Gemma running privately in your browser.
    &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;✨ Ripple&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;One post. Every platform. Written privately in your browser.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Paste a blog post or newsletter and get a Substack Note, an Instagram caption, a LinkedIn post and a short post for X, Threads or Bluesky. The drafts are written by &lt;strong&gt;Gemma running in your browser&lt;/strong&gt; with &lt;a href="https://webllm.mlc.ai" rel="nofollow noopener noreferrer"&gt;WebLLM&lt;/a&gt;, so your unpublished writing never leaves your device.&lt;/p&gt;
&lt;p&gt;Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 2: Side Hustle.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Who it's for&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Indie writers, newsletter creators and small business bloggers who publish a post and then spend another hour rewriting it for every app.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma does the writing.&lt;/strong&gt; Each platform gets its own short, focused prompt, because small models do best with one clear job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The app owns the facts.&lt;/strong&gt; Gemma never writes links, hashtags or sign-offs. The app adds the link where each platform wants it ("Link in bio" on Instagram, a ready-to-copy first comment…&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/tmott13/ripple" 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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open model:&lt;/strong&gt; Gemma 2 2B (&lt;code&gt;gemma-2-2b-it-q4f16_1-MLC&lt;/code&gt;) on laptops, with Gemma 3 1B as the lighter option and the only one that fits on an iPhone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runs in the browser:&lt;/strong&gt; &lt;a href="https://webllm.mlc.ai" rel="noopener noreferrer"&gt;WebLLM&lt;/a&gt; runs Gemma on the device's GPU with WebGPU. The model downloads once and is cached, so after that it even works offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Angular 22 with signals. Drafts stream in word by word, and everything you type is saved in your browser only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; a free static site on Render. There's no backend at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important design decision came from my last project. In &lt;a href="https://dev.to/tmott13/off-grid-trails-a-trail-finder-that-still-works-when-the-bars-are-gone-3cl9"&gt;Off-Grid Trails&lt;/a&gt;, I learned that a small model is great with words and shaky with facts. So in Ripple, &lt;strong&gt;Gemma writes the words and the app owns the facts:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Links:&lt;/strong&gt; Gemma is told not to write links, and the app strips any it sneaks in. Then the app puts your link exactly where each platform wants it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hashtags:&lt;/strong&gt; Gemma suggests topics, and the app turns them into clean hashtags and caps them per platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limits:&lt;/strong&gt; the app enforces each platform's character limit and cuts at a full sentence, never mid-word. On X, it saves 23 characters for your link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Made-up numbers:&lt;/strong&gt; if a draft includes a number that isn't anywhere in your post, the app flags it with a ⚠️ so you can check it before posting. Small models &lt;em&gt;love&lt;/em&gt; to invent stats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleanup:&lt;/strong&gt; "Sure! Here's your caption:" preambles, quote marks and repeated sentences get stripped automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each platform also gets its own short prompt instead of one giant one. A 2B model does much better with one clear job at a time.&lt;/p&gt;

&lt;p&gt;I was surprised by how well Gemma generated the text for the post using the correct tone for each.&lt;/p&gt;

&lt;p&gt;I built this with Claude as my pair programmer. I picked the problem from my own week, made the product calls, and tested it on my own posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your drafts stay private.&lt;/strong&gt; Unpublished writing is personal. Mine was about my sobriety. With an open model running locally, nothing is uploaded to anyone's server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; There's no per-request API bill, so a side hustle like this can stay cheap for creators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; Once Gemma is downloaded, you can write your captions on a plane.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I control the whole pipeline.&lt;/strong&gt; I can shrink the model's memory, rewrite the prompts, and add my own safety checks around it. A closed API would be a black box in the middle.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I was my first user for Ripple. I took my most recent post on my Substack and pasted it in along with the title and URL to the post. I chose "warm" for the tone and my name as the sign-off. I kept all four platforms selected.&lt;/p&gt;

&lt;p&gt;Gemma was able to generate four wonderful captions with the correct tone for each platform along with helpful hashtags. I even like the emojis it included in each response.&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%2F4xlec72xnne15to6zm4b.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%2F4xlec72xnne15to6zm4b.png" alt="Ripple showing my responses for Substack and Instagram" width="800" height="1024"&gt;&lt;/a&gt;&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%2Fdj08o3co361bcmrcrbit.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%2Fdj08o3co361bcmrcrbit.png" alt="Ripple showing my responses for LinkedIn and X/Threads" width="800" height="868"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I like that I can regenerate the text if I don't particularly like or agree with the response.&lt;/p&gt;

&lt;p&gt;I don't think I would change anything currently. It works as expected and does an excellent job. I'm so glad I had this idea and to be able to bring it to life! This is definitely a tool I can see myself using and expanding on in the future for my own blogging.&lt;/p&gt;

&lt;p&gt;I would pay a small subscription fee per month to use it. I think it is worth it, especially if you write often.&lt;/p&gt;

&lt;p&gt;One thing I would add for the future of the app is the ability for Ripple to scrape the article text from the URL so you don't have to paste in the entire article. I probably would also add more social platforms like Facebook, Medium, and Wordpress.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma:&lt;/strong&gt; Gemma 2 2B and Gemma 3 1B run fully in the browser with WebLLM, and the app is built around keeping their output trustworthy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render:&lt;/strong&gt; the app is deployed as a free Render static site from a &lt;code&gt;render.yaml&lt;/code&gt; blueprint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to DEV, the Hacktoberfest team, and the MLC/WebLLM and Gemma teams for making on-device AI this easy to try. ✨&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Global Hack Week Recap: Cursor, Grok and a Few Tiny Apps</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Fri, 16 Oct 2026 01:18:07 +0000</pubDate>
      <link>https://dev.to/tmott13/my-global-hack-week-recap-cursor-grok-and-a-few-tiny-apps-2ieg</link>
      <guid>https://dev.to/tmott13/my-global-hack-week-recap-cursor-grok-and-a-few-tiny-apps-2ieg</guid>
      <description>&lt;p&gt;Last week I took part in MLH's Global Hack Week as part of Hacktoberfest 2026. I had one week, a healing ankle, and a goal of finishing my Hacktoberfest sticker book. I came out of it with a handful of small projects, 14 GHW points, and I'm now a Hacktoberfest Completionist (16 stickers). 🎉&lt;/p&gt;

&lt;p&gt;Here's what I built, what I tried, and what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge 1: Game Day Glance (built with Cursor)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://game-day-glance.onrender.com" rel="noopener noreferrer"&gt;https://game-day-glance.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a huge Atlanta sports fan, so my first build was &lt;strong&gt;Game Day Glance&lt;/strong&gt;: It shows when my favorite Atlanta sports teams play next. It also shows the live games at the top so I can keep an eye on all the action taking place in one place.&lt;/p&gt;

&lt;p&gt;I built it with Cursor using Grok. I was surprised by how well it looked on the first run. I only had to make one tweak to show the live games at the top. The colors and layout were on point from the start. My only thing is that it took awhile to generate the app. I do love the refresh button, it is very handy.&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%2Ffcvjs3negzo28wt079fr.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%2Ffcvjs3negzo28wt079fr.png" alt="Game Day Glance screenshot" width="800" height="1082"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge 2: Benchmarking Cursor's models
&lt;/h2&gt;

&lt;p&gt;Next, I gave the same task to three models in Cursor: &lt;strong&gt;Grok 4.7, Claude Opus 5.5 and Gemini Flash 3.8&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt (same for all three models):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Write a JavaScript function formatCountdown(gameDate) that returns a friendly string like ‘Live now’, ‘Tonight 7:30 PM’, ‘Tomorrow 8:20 PM’, ‘in 3 days’, or ‘Sat, Oct 17 · 3:30 PM’ in Eastern time. Include a few test cases.”&lt;/p&gt;

&lt;p&gt;I picked this because it’s a real function from my Game Day Glance app, a GHW mini app I built with Cursor that shows the next game for every Atlanta team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model 1:&lt;/strong&gt; Grok 4.7&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; very thorough, and the result worked well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; by far the slowest of the three.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Model 2:&lt;/strong&gt; Claude Opus 5.5&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; fast, and the result worked well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; none I noticed for this task.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Model 3:&lt;/strong&gt; Gemini Flash 3.8&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; speed was in between the other two. It wrote the most test cases of the three, and it included code snippets right in its answer along with the files, which made it easy to review without opening anything.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; none I noticed for this task.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; all three produced a working function, so the real differences were speed, test coverage, and how they presented the answer. For quick, everyday tasks, I’d pick the fastest model that still gets it right. When I want extra confidence, Gemini’s extra tests were a nice bonus, and I’d save the slower, more thorough model for bigger problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges 3, 4 and 6: Building my own Grok Bot
&lt;/h2&gt;

&lt;p&gt;I created my first Grok Bot and named it, fittingly, &lt;strong&gt;Grok&lt;/strong&gt;. Then I taught it two skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ESPN next-game skill (Challenge 4):&lt;/strong&gt; Grok looks up when my teams play next, and a routine runs every &lt;strong&gt;Friday at 5 PM&lt;/strong&gt; so my weekend game plan is waiting for me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atlanta events browser workflow (Challenge 6):&lt;/strong&gt; Grok browses discoveratlanta.com and pulls together things to do in Atlanta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was cool to create a skill with Grok. It was a slight challenge getting used to using Grok's "computer" and the concept of that. Teach a Skill wouldn't work properly so I had Grok start its computer then we were off to the races.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quick wins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cursor Pro sign-ups&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tiger Cloud CLI + MCP signup&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Small apps are the best way to learn a new tool.&lt;/li&gt;
&lt;li&gt;Comparing models side by side changed how I would pick them. I never did a comparison like that before with different models.&lt;/li&gt;
&lt;li&gt;Having Grok do something for me on a schedule felt cool but I need to see how I can apply it better to suit my life.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It was my first time participating in Global Hack Week with MLH. I really enjoyed it. It was cool to build from my couch while I recover from ankle surgery. I'm looking forward to next year!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm going to be diving in more with Grok Bot and how I can use it to benefit my life. I did get the X Subscription that includes X Premium, Grok, Grok Bot, and Cursor. I already had a sub to Grok so it's basically the same price as the bundle which is great. Now I have access to more tools for the same price each month!&lt;/p&gt;

&lt;p&gt;Thanks to MLH, DEV and the Hacktoberfest team for a fun week. If you joined Global Hack Week too, tell me what you built in the comments! 👇&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>ai</category>
      <category>cursor</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Off-Grid Trails: A Trail Finder That Still Works When the Bars Are Gone</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Sat, 10 Oct 2026 21:21:44 +0000</pubDate>
      <link>https://dev.to/tmott13/off-grid-trails-a-trail-finder-that-still-works-when-the-bars-are-gone-3cl9</link>
      <guid>https://dev.to/tmott13/off-grid-trails-a-trail-finder-that-still-works-when-the-bars-are-gone-3cl9</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;In the North Georgia mountains and the Smokies, your phone becomes a brick. You park at the trailhead with full bars, and ten minutes up the trail they're gone. That's exactly when you start wondering: &lt;em&gt;Am I still on the trail? How far back is the car? Is there water nearby?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In September 2019, I hiked Panther Creek Falls alone with my two dogs. I misjudged how far it was to the waterfall and didn't pack enough water for all three of us, and I ran out before we even reached the falls. The trail was treacherous, with tree roots the entire way, over 7 miles out and back, and I don't remember having any cell signal. I was lucky to find a Girl Scout camp near the falls. They gave us fresh filtered water and snacks, and they probably saved my life. I rested there and at the falls for a while. Since the trail was an out-and-back, I knew the way back, but not how far I had left. It started raining on the walk out, and I've never been so thankful to see my car parked on the side of the road. I wish I'd had an app that showed me nearby camps and water. I thank God for those Girl Scouts.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Off-Grid Trails&lt;/strong&gt;, a phone app that does its job with zero signal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Download a trail pack before you go.&lt;/strong&gt; One tap on Wi-Fi saves an area's trails, waterfalls, springs, viewpoints, peaks and shelters to your phone. I started with five spots I love: Vogel State Park &amp;amp; Blood Mountain, Amicalola Falls, Laurel Falls, Clingmans Dome, and Alum Cave &amp;amp; Mount LeConte.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Nearest trail" and "You're on it ✓."&lt;/strong&gt; GPS works without cell service, because your phone talks to satellites, not towers. The app tells you which trail you're on, or how far away the nearest one is and in which direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"I parked here."&lt;/strong&gt; Drop a pin at the trailhead, and an arrow points you back to your car with the distance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breadcrumbs.&lt;/strong&gt; An orange line records the path you actually walked. Retracing it is safer than cutting straight through the woods toward the car.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask Gemma, on your phone.&lt;/strong&gt; A small Gemma model runs entirely on the device. Tap "I think I'm lost" or "Closest water" and you get the facts from your trail pack plus a calm tip from Gemma, or type your own question. No server, no signal, nothing leaves your phone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; anyone who loves trails where the bars disappear, and anyone who's ever wished they'd known exactly how far they had left. I'm excited to go hiking again next year once my ankle heals. I'm looking forward to testing out this app in real time and making necessary tweaks.&lt;/p&gt;

&lt;p&gt;A lot of people skip the trails with no service because it feels risky. This app is meant to take a little of that worry away, so you can put the phone in your pocket and actually look around.&lt;/p&gt;

&lt;p&gt;The screen is the shortest part of the experience: two minutes on Wi-Fi at home, a tap at the trailhead, and then the phone stays in your pocket unless you need it.&lt;/p&gt;

&lt;p&gt;The app is a companion, not a replacement for a paper map, water, and telling someone your plan. It says so right in the app.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://off-grid-trails.onrender.com" rel="noopener noreferrer"&gt;https://off-grid-trails.onrender.com&lt;/a&gt; &lt;em&gt;(open it on your phone, download a pack, then turn on Airplane Mode)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fspu87ltdcn71v50uno7r.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fspu87ltdcn71v50uno7r.webp" alt="Home Page (online)" width="721" height="1568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe0etqg280pvwvfv1y2qd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe0etqg280pvwvfv1y2qd.webp" alt="Home Page (offline)" width="721" height="1568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7yo5go6zaqf8tc87lwi.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7yo5go6zaqf8tc87lwi.webp" alt="The Clingmans Dome map" width="721" height="1568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ddvj8zsbq0ph5gliwax.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ddvj8zsbq0ph5gliwax.webp" alt="The Clingmans Dome with Gemma answers" width="721" height="1568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Heads-up: it's on Render's free plan, so the first load after it's been idle can take up to a minute. After that, it's saved to your phone.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Taking it outside
&lt;/h3&gt;

&lt;p&gt;I'm recovering from ankle surgery, so a real hike will have to wait until next year. Instead, I tested everything from home in Airplane Mode: I downloaded packs for Vogel, Laurel Falls and Clingmans Dome, used Demo walk to "hike" the Appalachian Trail and Sugarland Mountain Trail, dropped car pins, and asked Gemma for help, all with zero signal. I'm looking forward to going on a hike next year with the app as my guide.&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/tmott13" rel="noopener noreferrer"&gt;
        tmott13
      &lt;/a&gt; / &lt;a href="https://github.com/tmott13/off-grid-trails" rel="noopener noreferrer"&gt;
        off-grid-trails
      &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;Off-Grid Trails&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;An offline trail finder for when there's no cell service. Built for the North Georgia mountains and the Smokies.&lt;/p&gt;
&lt;p&gt;Download a trail pack on Wi-Fi before you go. After that, everything works in airplane mode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Map of nearby trails&lt;/strong&gt; (OpenStreetMap data, drawn on the phone, no map tiles needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nearest trail&lt;/strong&gt; with distance and direction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"I parked here"&lt;/strong&gt; car pin and a live arrow back to it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breadcrumbs&lt;/strong&gt; of the path you walked, so you can retrace your steps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nearby&lt;/strong&gt; water, waterfalls, viewpoints, peaks, shelters and trailheads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask Gemma&lt;/strong&gt;: a small Gemma model runs &lt;em&gt;on the phone&lt;/em&gt; with WebLLM (WebGPU). It only answers from the facts in your pack and your GPS. The question buttons also work without the model.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;This app is a companion, not a replacement for a paper map, water and telling someone your plan.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it locally&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Needs Node 22.22.3+ (Node 24 recommended).&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&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/tmott13/off-grid-trails" 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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Angular 22 with signals, built phone-first. Angular's service worker caches the whole app, so it opens from the Home Screen in Airplane Mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline storage:&lt;/strong&gt; trail packs, the car pin and breadcrumbs live in the phone's IndexedDB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map:&lt;/strong&gt; no map tiles. The trails are drawn as SVG lines straight from the pack data, which keeps packs tiny (a whole park is a few hundred KB) and avoids bulk-downloading anyone's tile server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trail data:&lt;/strong&gt; OpenStreetMap, through the Overpass API. My Node/Express server turns raw OSM data into a small "pack." Public Overpass servers often turn away requests from cloud hosts, so I "bake" the preset packs on my laptop and ship them with the app. Render just serves them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-device AI:&lt;/strong&gt; Gemma 3 1B through WebLLM, running on the iPhone's GPU with WebGPU. It's a one-time ~700 MB download on Wi-Fi, and then it's cached on the phone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; one Render web service serves the app and the packs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with Claude as my pair programmer. It helped me scaffold the app, write the server and debug on-device AI. I made the product calls, picked the trails, and tested everything on my own phone in Airplane Mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I learned about running AI on a phone&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Getting Gemma onto an iPhone was the hardest part of this project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The first attempt crashed Safari.&lt;/strong&gt; "A problem repeatedly occurred." The phone ran out of memory loading the model, then crashed again every time the app reopened and tried to load it. I added a crash guard: if Gemma takes the page down, the app remembers and never auto-loads it again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then it wouldn't start at all,&lt;/strong&gt; because of a settings conflict in how much text the model can hold at once. Shrinking that window to 1,024 tokens fixed the error and cut memory use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then it worked, and it looped.&lt;/strong&gt; My first offline answer was "The closest water source is a stream" about fifteen times. Small models do that. I cut its answers short and filtered out repeats, and the loop was gone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then it got the directions wrong.&lt;/strong&gt; Next I let Gemma reword the app's answers, with a check: if a distance or direction changed, the app showed its own answer instead. The check caught Gemma on almost every answer. A 1B model is great with words and shaky with numbers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I split the job. &lt;strong&gt;The app owns the facts: names, distances, directions, word for word. Gemma adds one short, calm tip underneath&lt;/strong&gt;, like "Stay put and keep your eyes open." Any tip that mentions a number or a direction gets thrown out. Gemma can make the moment feel less scary, but it can't send you the wrong way.&lt;/p&gt;

&lt;p&gt;That split is the decision I'm proudest of. When you're lost, a confident wrong answer is worse than no answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87ry9pmckchv0z2gz74m.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87ry9pmckchv0z2gz74m.webp" alt="the looping " width="721" height="1568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrrn7dnieck23318w49h.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrrn7dnieck23318w49h.webp" alt="" width="721" height="1568"&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 where the signal doesn't.&lt;/strong&gt; An open model can live on my phone. A closed API needs a connection, which is exactly what you don't have on a mountain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private by default.&lt;/strong&gt; My location and questions never leave the device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to run.&lt;/strong&gt; No API bill, no subscription. The trail data is open too, thanks to OpenStreetMap contributors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mine to shape.&lt;/strong&gt; I could shrink the model's memory, rewrite its rules, and add a safety check, because I control the whole stack.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma:&lt;/strong&gt; Gemma 3 1B runs on-device in the browser with WebLLM, with zero signal. The app keeps every fact exact, and Gemma adds a calm tip that passes a safety filter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render:&lt;/strong&gt; the Node/Express server and the Angular front end run as one Render web service, which also serves the pre-baked trail packs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to the DEV and Hacktoberfest teams, and to OpenStreetMap contributors for the trail data (ODbL). Built from my couch while my ankle heals, for the trails I can't wait to get back to. 🥾&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Let's Not Be Hangry: An Open-Model App for My Boyfriend, Who Forgets to Eat</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Sun, 04 Oct 2026 22:58:31 +0000</pubDate>
      <link>https://dev.to/tmott13/lets-not-be-hangry-an-open-model-app-for-my-boyfriend-who-forgets-to-eat-18e7</link>
      <guid>https://dev.to/tmott13/lets-not-be-hangry-an-open-model-app-for-my-boyfriend-who-forgets-to-eat-18e7</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 boyfriend has been staying with me while I recover from ankle surgery. He's been taking care of me, and I noticed he wasn't taking care of himself. He forgets to eat. When he's busy, lunch just doesn't happen. And because it's my kitchen, he's hesitant to help himself to anything.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Let's Not Be Hangry&lt;/strong&gt;, a tiny app with one job: make eating faster and easier than skipping.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"How much time you got?"&lt;/strong&gt; He taps &lt;strong&gt;1 min&lt;/strong&gt;, &lt;strong&gt;5 min&lt;/strong&gt; or &lt;strong&gt;15 min&lt;/strong&gt;, and Gemma picks something from my kitchen that fits, tells him exactly where it is ("freezer door"), and how to eat it. No-cooking options come first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A "fair game" list.&lt;/strong&gt; I filled it with everything he's welcome to. If it's on the list, it's his. No asking, no guilt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Finished it 🛒"&lt;/strong&gt; adds the item to a restock list for me, so "I ate the last yogurt" becomes a helpful heads-up instead of an apology.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meal-time nudges.&lt;/strong&gt; If nothing's been logged by the end of his lunch or dinner window, he gets a friendly reminder that Gemma writes fresh each time, so it never gets stale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A big "I ate!" button&lt;/strong&gt; that's always in reach of his thumb.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rules I gave the model: be warm, short and a little funny. Never mention calories, diets or guilt. Just help him eat something.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What he said when I handed it to him:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"It's pretty cool"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"It took a bit to figure out but seems self-explanatory"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"The colors makes it easy to navigate"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"It helped me decide what to eat with the time I had available"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"The reminders were helpful"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;One of the first picks it gave him: String cheese, fridge door. "She'd much rather you be fed than hungry, so go for it!"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://lets-not-be-hangry.onrender.com" rel="noopener noreferrer"&gt;https://lets-not-be-hangry.onrender.com&lt;/a&gt;&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%2Fy9pjarokwxzqn2mwo3ta.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%2Fy9pjarokwxzqn2mwo3ta.png" alt="app screenshot" width="800" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Heads-up: it's on Render's free plan, so the first load after it's been idle can take up to a minute.&lt;/em&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/tmott13" rel="noopener noreferrer"&gt;
        tmott13
      &lt;/a&gt; / &lt;a href="https://github.com/tmott13/lets-not-be-hangry" rel="noopener noreferrer"&gt;
        lets-not-be-hangry
      &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;Let's Not Be Hangry&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A tiny app for someone who forgets to eat. Tap how much time you have (1, 5 or 15 min) and Gemma, an open-weight model, picks something from the "fair game" list and says where it is. "I finished it" adds the item to a restock list. Meal-window reminders show up if nothing was logged.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it's built&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Angular 22&lt;/strong&gt; frontend (signals, zoneless)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node/Express server&lt;/strong&gt; (&lt;code&gt;server.mjs&lt;/code&gt;) that serves the app and forwards &lt;code&gt;/api/chat&lt;/code&gt; to Gemma&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt;, two ways
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;LLM_PROVIDER=google&lt;/code&gt;: Gemma through Google AI Studio (works anywhere, e.g. on Render)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LLM_PROVIDER=ollama&lt;/code&gt;: Gemma through local Ollama (nothing leaves your machine)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The fair-game list, restock list and log are stored in the browser (localStorage).&lt;/li&gt;
&lt;li&gt;If the model can't be reached, the app falls back to a built-in "demo mode" pick.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run locally&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Needs Node 22.22.3+ (or Node 24).&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install
npm run build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Option…&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/tmott13/lets-not-be-hangry" 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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;strong&gt;Gemma 4 31B&lt;/strong&gt;, an open-weight model, served through Google AI Studio so it works on his phone anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; flip one environment variable (&lt;code&gt;LLM_PROVIDER=ollama&lt;/code&gt;) and the same app runs Gemma locally through Ollama on my laptop, and nothing leaves the house.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server:&lt;/strong&gt; a small Node/Express server that serves the app and handles one endpoint, &lt;code&gt;/api/chat&lt;/code&gt;. It decides where Gemma runs, keeps the API key out of the browser, and adds a simple rate limit so the public demo can't be abused.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Angular 22 with signals and the default zoneless setup. It's phone-first, with chunky, playful buttons and a sticky bottom bar. The lists live in the browser's localStorage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience&lt;/strong&gt;: if Google returns an error, the server retries, and if that model is still down, it automatically switches to another Gemma model my key can use. If no model can be reached, the app falls back to a built-in pick, so it never leaves him empty-handed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with Claude as my pair programmer. It helped me scaffold the Angular app and the Node server, fix bugs, and work through hosting options. I made the product calls, designed the experience around him, and deployed it.&lt;/p&gt;

&lt;p&gt;The trickiest part wasn't the UI. It was the model. The Gemma version I started with wasn't available to my key anymore, and the bigger one sometimes threw server errors. Instead of hardcoding a fix, I had the server ask Google which Gemma models my key can actually use and fall back gracefully. It's a small reminder that open models come in a family, and you can swap between them.&lt;/p&gt;

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

&lt;p&gt;This app knows his routines: when he eats, when he doesn't, what's in our kitchen. That's personal. Building on an open model means I get to decide where that information goes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Swappable:&lt;/strong&gt; the same app runs on hosted Gemma or on local Gemma with a one-line config change. I'm not locked into one company's API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private when it matters:&lt;/strong&gt; in local mode, Gemma runs entirely on my laptop with Ollama, so nothing goes to a server I don't control. A closed API can't offer that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheap to keep alive:&lt;/strong&gt; it runs on a free tier of hosted Gemma, or on a small local Gemma on my laptop. No subscription required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mine to shape:&lt;/strong&gt; I can change the prompt, the tone or even the model itself without asking permission.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would have worked for the demo, but this is the version I'd actually want running in my home.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 4 31B picks every meal and writes every nudge, with a local Gemma mode through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; the Node server and Angular app run as one Render web service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with love for my favorite forgetful eater. 🍌&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Why I Finally Rebuilt My Portfolio in Angular 22 (And What Jumping from Angular 12 Taught Me)</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Sat, 03 Oct 2026 23:14:29 +0000</pubDate>
      <link>https://dev.to/tmott13/why-i-finally-rebuilt-my-portfolio-in-angular-22-and-what-jumping-from-angular-12-taught-me-507j</link>
      <guid>https://dev.to/tmott13/why-i-finally-rebuilt-my-portfolio-in-angular-22-and-what-jumping-from-angular-12-taught-me-507j</guid>
      <description>&lt;p&gt;A few weeks ago, I opened my personal website and felt that familiar pang of developer guilt.&lt;/p&gt;

&lt;p&gt;My site was frozen in time—running on &lt;strong&gt;Angular 12&lt;/strong&gt; and showcasing work from years ago (ASP.NET MVC, C#, AngularJS, and transitions through early enterprise versions). While that foundation taught me how enterprise software scales, looking under the hood felt completely disconnected from what I actually do every day.&lt;/p&gt;

&lt;p&gt;At my day job, I work in production &lt;strong&gt;Angular 19&lt;/strong&gt;, building high-density freight audit ledgers, embedded Stripe and Plaid checkout rails, and custom monorepo workspaces. Yet, my personal site was still carrying the weight of a decade-old legacy footprint.&lt;/p&gt;

&lt;p&gt;I didn't throw away my domain or start over from scratch elsewhere—I sat down and did a complete rewrite from the ground up, jumping ten major versions directly from &lt;strong&gt;Angular 12 to Angular 22&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is what went into the rewrite, the leap across ten versions, and what I learned along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The 10-Version Leap: Angular 12 to Angular 22
&lt;/h2&gt;

&lt;p&gt;Jumping from Angular 12 straight to Angular 22 feels like stepping into an entirely different framework—in the best way possible.&lt;/p&gt;

&lt;p&gt;In Angular 12, simple features still required an incredible amount of boilerplate ceremony:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bloated &lt;code&gt;NgModule&lt;/code&gt; declarations tying components together&lt;/li&gt;
&lt;li&gt;Heavy zone-based change detection running dirty checks everywhere&lt;/li&gt;
&lt;li&gt;Repetitive RxJS subscriptions for basic synchronous component state&lt;/li&gt;
&lt;li&gt;Verbose structural directives (&lt;code&gt;*ngIf&lt;/code&gt;, &lt;code&gt;*ngFor&lt;/code&gt;) littering templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rewriting the codebase directly in &lt;strong&gt;Angular 22&lt;/strong&gt; stripped that cruft down to essentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero NgModules:&lt;/strong&gt; Completely standalone architecture where components only import what they use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Control Flow:&lt;/strong&gt; Replacing structural directives with modern &lt;code&gt;@if&lt;/code&gt; and &lt;code&gt;@for&lt;/code&gt; syntax made templates dramatically more readable and cut bundle overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signals-First Reactivity:&lt;/strong&gt; Moving local UI state to fine-grained Signals eliminated manual subscription cleanup and unnecessary async pipe chains.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of fighting legacy upgrade paths incrementally, rewriting the codebase cleanly unlocked modern build speeds, microscopic bundle sizes, and a developer experience that actually feels fun.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Replacing the "Resume Checklist" with Real Problems
&lt;/h2&gt;

&lt;p&gt;When you have been writing code for a while, the default trap is listing every library, runtime, and tool you have ever touched. But a giant list of 30 logos doesn't tell anyone what you actually &lt;em&gt;solve&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Instead of keeping that passive list, I structured the rewrite around real production challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Handling Financial Flows Securely:&lt;/strong&gt; Integrating Stripe Elements and Plaid Link for ACH and credit card processing. In financial checkout, it's not just about rendering an input; you have to manage strict tokenization boundaries, handle asynchronous webhooks, and build optimistic state updates with graceful failure recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixing State Leaks:&lt;/strong&gt; Moving away from broad global state caches that can accidentally preserve sensitive checkout tokens across routes. Migrating to route-scoped &lt;code&gt;@ngrx/component-store&lt;/code&gt; instances tied checkout streams directly to the component lifecycle, cutting memory overhead by 42% and eliminating stale session state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daytime Continuous Delivery with Kubernetes:&lt;/strong&gt; For a long time, enterprise deployments meant stressful, off-hours maintenance windows to prevent broken sessions. This year, our team migrated the frontend onto Kubernetes clusters. Today, our delivery pipeline runs like clockwork:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure DevOps&lt;/strong&gt; drives our sprint planning and backlog execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; manages our repositories, pull request reviews, and deployment triggers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes&lt;/strong&gt; handles rolling zero-downtime updates with automated health probes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split.io &amp;amp; Harness&lt;/strong&gt; decouple code deploys from feature releases via canary toggles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grafana&lt;/strong&gt; gives our team real-time visibility into pipeline build times, ingress health, and client error rates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We went from dreading after-hours release windows to shipping zero-downtime updates in the middle of a Tuesday afternoon without interrupting active user checkout sessions.&lt;/p&gt;

&lt;p&gt;Every project card on the new site includes a deep-dive drawer that breaks down the original business problem, technical deliverables, concrete metrics, and architectural takeaways.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Building a 12-Card Skills Grid (and the SVG Math That Broke My Layout)
&lt;/h2&gt;

&lt;p&gt;Instead of a generic chip list, I built an interactive 12-card skills grid organized into clean, complementary pairs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core Architecture:&lt;/strong&gt; Angular 19 &amp;amp; TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Architecture:&lt;/strong&gt; Angular Signals &amp;amp; NgRx ComponentStore&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reactive &amp;amp; Workspace:&lt;/strong&gt; RxJS Streams &amp;amp; Angular Monorepo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Systems:&lt;/strong&gt; Figma Tokens &amp;amp; Tailwind / SCSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Platform:&lt;/strong&gt; Stripe &amp;amp; Plaid + .NET / C#&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This seemed straightforward until I started building the custom inline SVGs for each card. &lt;/p&gt;

&lt;p&gt;A few visual bugs quickly showed up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aspect Ratio Issues:&lt;/strong&gt; One icon used a vertical &lt;code&gt;256x384&lt;/code&gt; coordinate space inside a square container, which compressed it into a tiny letterbox. Normalizing everything to a consistent &lt;code&gt;256x256&lt;/code&gt; bounding box brought back consistent sizing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipping on High-DPI Screens:&lt;/strong&gt; A Tailwind path had coordinates extending past the viewBox boundary, silently cutting off roughly a third of the wave graphic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compound Brand Layouts:&lt;/strong&gt; Putting Stripe and Plaid into a single card required manual coordinate offsets and scaling so neither logo crowded the other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Getting all 12 cards aligned symmetrically across mobile, tablet, and desktop took plenty of trial and error, but the end result is fast, responsive, and readable.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The Enterprise Reality vs. The Personal Lab
&lt;/h2&gt;

&lt;p&gt;One question I had to answer was: &lt;em&gt;Which Angular version should I highlight?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In enterprise engineering, you don't rewrite critical production apps the moment a new framework version is released. At work, our core applications run stably on &lt;strong&gt;Angular 19&lt;/strong&gt;. It is reliable, deterministic, and supports high-volume financial workflows where stability is non-negotiable.&lt;/p&gt;

&lt;p&gt;For my personal site rewrite, though, I had no legacy constraints. Rewriting it in &lt;strong&gt;Angular 22&lt;/strong&gt; let me work directly with the latest signal primitives and zero-debt setups.&lt;/p&gt;

&lt;p&gt;Highlighting both is honest: it demonstrates knowing how to keep enterprise production software stable while continuously experimenting with modern tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Key Takeaways from the Rewrite
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Don't fear the version jump:&lt;/strong&gt; Moving across ten framework versions sounds daunting, but starting with a clean rewrite instead of chaining 10 migration CLI passes let me adopt modern idiomatic patterns immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery maturity is frontend engineering:&lt;/strong&gt; A frontend engineer isn't just writing components. Understanding how your bundle is packaged into Docker, deployed on Kubernetes, toggled via Split.io, and monitored in Grafana makes you dramatically more effective at work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be specific about domain work:&lt;/strong&gt; Anyone can say they "integrate APIs." Explaining how you tokenized corporate bank accounts through Plaid Link or automated freight invoice audit rules proves actual hands-on business impact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat your own site like a real project:&lt;/strong&gt; Responsive breakpoints, clean accessibility, component lifecycle cleanups, and lean build budgets belong on your personal domain just as much as an enterprise app.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;You can check out the live site here: &lt;a href="https://tanyamott.com/" rel="noopener noreferrer"&gt;tanyamott.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When was the last time you overhauled your personal site? Have you made a multi-version framework leap recently? Let's chat in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>career</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Building My Own AI Command Center</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Fri, 02 Oct 2026 02:09:10 +0000</pubDate>
      <link>https://dev.to/tmott13/building-my-own-ai-command-center-1j66</link>
      <guid>https://dev.to/tmott13/building-my-own-ai-command-center-1j66</guid>
      <description>&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I spent one evening building a personal AI command center, and it now writes me one short briefing every weekday at 9 AM. Not a productivity system for a business. A briefing for my life.&lt;/p&gt;

&lt;p&gt;I'm a frontend developer, a writer, and an Enneagram Type 9. Type 9s are great at keeping the peace and terrible at remembering their own priorities. My days fill up with other people's asks, and the things I care about quietly slide.&lt;/p&gt;

&lt;p&gt;The spark came from Erika Stanley's &lt;a href="https://open.spotify.com/episode/1pfNBNsQc1PPUlFA5y0mlY" rel="noopener noreferrer"&gt;AI Queens&lt;/a&gt; episode, "Claude Command Center: Stop Drowning in Email, Slack, and To-Do Lists." Hearing her walk through her setup made me realize I could build one around my own life.&lt;/p&gt;

&lt;p&gt;So I wanted one place that puts my priorities first, every morning, in five things or fewer. October gave me the perfect test: Hacktoberfest, a reading habit I'm trying to build, and recovering from ankle surgery, all at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  What lands every weekday morning
&lt;/h2&gt;

&lt;p&gt;Every weekday at 8:59 AM, a scheduled Claude task reads my email, calendar, podcasts, and daily log, then sends me one briefing. The rule I gave it: five things that matter beat twenty that don't.&lt;/p&gt;

&lt;p&gt;It always starts the same way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What's still open&lt;/strong&gt; from yesterday, at the very top&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick wins:&lt;/strong&gt; up to five things I can finish in about 10 minutes, with time estimates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The one most important thing today&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Weather, energy, recovery, reading, and one awareness line&lt;/li&gt;
&lt;li&gt;Hacktoberfest progress, emails worth answering, what's due&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One or two focus ideas,&lt;/strong&gt; offered as options, never orders&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each day has its own mode, so the week has a rhythm:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;What changes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monday&lt;/td&gt;
&lt;td&gt;Set up the week&lt;/td&gt;
&lt;td&gt;Week at a glance, deadlines, a suggested top 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tuesday&lt;/td&gt;
&lt;td&gt;More time&lt;/td&gt;
&lt;td&gt;One meatier block of real work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wednesday&lt;/td&gt;
&lt;td&gt;Mid-week check-in&lt;/td&gt;
&lt;td&gt;Done vs. slipping, one adjustment, no report card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thursday&lt;/td&gt;
&lt;td&gt;More time&lt;/td&gt;
&lt;td&gt;The one bigger thing to finish before Friday&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Friday&lt;/td&gt;
&lt;td&gt;Fun Friday&lt;/td&gt;
&lt;td&gt;Lighter tone, wins, weekend weather, something fun nearby&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The pieces under the hood
&lt;/h2&gt;

&lt;p&gt;The whole system runs on three simple parts: a plain-text log, a few trackers, and some ground rules about tone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A daily log I talk to.&lt;/strong&gt; A file called &lt;code&gt;carryover.md&lt;/code&gt; has a dated entry for each day with four sections: Done, Didn't get to, Came up today, and Carry forward. At night I just say what happened ("read 12 pages, got the DevRelay sticker") and Claude sorts it into the right place. It only ever adds, never deletes. The morning briefing reads it, so nothing I said slips through the cracks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trackers that fit this season of life.&lt;/strong&gt; Right now it tracks my ankle recovery, a 10-pages-a-day reading habit, what I'm learning, and my Hacktoberfest stickers. Habit tracking like water and steps is paused until I'm healed. A tracker that makes me feel behind is worse than no tracker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frameworks as options, not rules.&lt;/strong&gt; I use Human Design, the Enneagram, and my INFJ-T type as self-reflection tools. Each briefing gets exactly one awareness sentence from them, written fresh. Every suggestion is framed as something I can respond to. Big decisions get "sleep on it, then decide by ___." And one hard rule: no guilt, no "you should have."&lt;/p&gt;

&lt;h2&gt;
  
  
  Hacktoberfest 2026: chasing 15 stickers
&lt;/h2&gt;

&lt;p&gt;My top priority this month is Hacktoberfest, and I'm aiming for 15 stickers, the maximum prize tier. By the end of day one I had 5.&lt;/p&gt;

&lt;p&gt;I've done Hacktoberfest before, back when it was all about pull requests, so I was surprised by how much changed this year. Pull requests no longer count toward rewards. Instead you collect virtual stickers in a sticker book by doing things: DEV Challenge posts, livestream check-ins, Global Hack Week, connecting tools, and surveys. There are 24 in total. Two are in-person, which I'm skipping while I recover, so 22 is my real maximum.&lt;/p&gt;

&lt;p&gt;The command center made this easy to plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It mapped every sticker to its deadline and picked a path to 15 by mid-October.&lt;/li&gt;
&lt;li&gt;It flags each DEV Challenge the day before it closes. They close at 2:59 AM on Mondays, which is really Sunday night.&lt;/li&gt;
&lt;li&gt;It filters 33 livestreams down to the evening and weekend ones I can actually catch live, since check-ins need the code on screen.&lt;/li&gt;
&lt;li&gt;It turned the four "do it anytime" stickers into quick wins. I knocked out all four on day one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next up: the Launch Weekend DEV Challenge. Build something small, write it up, post it by Sunday night.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned in one evening
&lt;/h2&gt;

&lt;p&gt;The biggest lesson: a good system says no more than it says yes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fewer trackers win.&lt;/strong&gt; I was tempted to track everything. Every tracker is something I have to log at night, so I kept only what matters this month and paused the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the rules before you plan.&lt;/strong&gt; I almost set a pull-request goal. Reading the actual Hacktoberfest site showed PRs don't count anymore, and the whole plan changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep work and personal separate.&lt;/strong&gt; I skipped connecting my work calendar and sprint board, and I used my personal Claude account, not my work one, for my Hacktoberfest tools. My open-source work should be clearly mine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tone is a feature.&lt;/strong&gt; "Options, not orders" and "no guilt" do more for me than any clever automation. If the briefing made me feel behind, I'd stop reading it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start small and imperfect.&lt;/strong&gt; My first book is 10 pages a day. My first DEV post will be something quick. Done beats perfect.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Tomorrow is the first real briefing, and it happens to be Fun Friday. Over October I'll find out whether a calmer, shorter morning actually changes what I get done.&lt;/p&gt;

&lt;p&gt;Here's what I'll report back on at the end of the month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Did I reach 15 Hacktoberfest stickers?&lt;/li&gt;
&lt;li&gt;[ ] Did 10 pages a day turn into a finished book?&lt;/li&gt;
&lt;li&gt;[ ] Which parts of the briefing did I actually use, and which did I skip?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build something like this, start with one question: what are the five things you'd want to know before 9 AM? Everything else can wait.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>hacktoberfest</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My Futuristic Portfolio!!</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Fri, 30 Jan 2026 06:22:48 +0000</pubDate>
      <link>https://dev.to/tmott13/my-futuristic-portfolio-d71</link>
      <guid>https://dev.to/tmott13/my-futuristic-portfolio-d71</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;Hi everyone! I'm Tanya, a senior software engineer from Atlanta, GA. I focus on frontend development with a focus in Angular and the Microsoft stack/ecosystem. This is the first website/app I've built using pure AI and I'm very excited to share it here below. I'm looking forward to learning more about AI and building more cool things in the near future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://futuristic-engineering-portfolio-946942333693.us-west1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




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

&lt;p&gt;I built my portfolio using Google's AI Studio. It was my first time using it and I found it to be very fascinating. I spent the past two weeks creating it, off and on, making tweaks until I got it to where I fully love it enough to submit! I learned a lot about AI Studio and how to prompt to get the changes I wanted implemented.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;p&gt;I'm really proud of myself for diving in head first into creating a website/app from scratch using AI Studio. The initial version looked super rough and plain but with some really thoughtful prompting and further tweaking through follow-up prompts, I was able to create a beautiful website that is functional and shows my personality. &lt;/p&gt;

&lt;p&gt;I love the logo image generator, I am truly so fascinated with AI image generation, it is truly magical. To be able to implement an image generator within an app that was also generated is pretty cool. I am in awe of how images are generated within seconds and can't wait to learn more about how exactly that all works. &lt;/p&gt;

&lt;p&gt;Not going to lie, I am an Angular developer and this application is written in React out of the box but I was still able to read the code and make tweaks within the code as well, not just rely on AI. Perhaps I will generate an app that translates React to Angular or vise-versa OR maybe I could just prompt AI to do it for me (lol).&lt;/p&gt;

&lt;p&gt;Bonus points: I generated my cover photo in chatgpt using a prompt it suggested from checking out my portfolio. The colors matches perfectly! 🤩&lt;/p&gt;

&lt;p&gt;Thanks for checking out my portfolio &amp;amp; good luck to all the participants! This was fun...thank you dev.to! 🚀✨&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>I'm Still Living My Dream as a Software Developer</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Tue, 03 Mar 2020 15:36:30 +0000</pubDate>
      <link>https://dev.to/tmott13/i-m-still-living-my-dream-as-a-software-developer-44ki</link>
      <guid>https://dev.to/tmott13/i-m-still-living-my-dream-as-a-software-developer-44ki</guid>
      <description>&lt;h2&gt;
  
  
  Five years ago, I started my journey professionally as a software developer after attaining my BS in Information Systems degree.
&lt;/h2&gt;

&lt;p&gt;I wrote in a previous post more about my software development experience and my struggles but to summarize...&lt;/p&gt;

&lt;p&gt;1) The road has not been close to easy, plenty of roadblocks, speed humps, pot holes... you name it. &lt;br&gt;
2) Mental emotional abuse was real in the workplace.&lt;br&gt;
3) Managed chaos and unrealistic deadlines.&lt;br&gt;
4) Getting laid off for BS reasons - where I live, Georgia, it's a right to work state.&lt;br&gt;
5) Dealt with incompetent and jerk bosses.&lt;/p&gt;

&lt;p&gt;Even going through all of that, it didn't stop be from continuing to pursue my dream. It's what I wanted to do since high school, how could I let it stop me?! I knew if I could manage to stay in my field for five years that it would get better, and it has. Now, I'm working for the best company so far in my career. I've been able to become more picky in my company selection after gaining more experience. Sometimes, we have to take what we can get in the moment in order to succeed. I think for women, it's harder on us, I still experience some struggles but it's getting better. I'm used to being the only woman developer on past teams and now currently. I'm OK with it though, sometimes it's nice to be 'special'. &lt;/p&gt;

&lt;p&gt;We still need more women in tech but I am happy at the direction we are going since I started my career.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am proud to be a woman software developer!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>wecoded</category>
    </item>
    <item>
      <title>Sometimes Letting Go is Hard in Our Career</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Thu, 20 Feb 2020 03:05:37 +0000</pubDate>
      <link>https://dev.to/tmott13/sometimes-letting-go-is-hard-in-our-career-2nga</link>
      <guid>https://dev.to/tmott13/sometimes-letting-go-is-hard-in-our-career-2nga</guid>
      <description>&lt;p&gt;Sometimes in our career, we are super hard on ourselves. Whether it's not thinking you're good enough for that next role or position, or maybe a mental blocker is blocking you from achieving your goals. Whatever it is, we've all had some struggle that blocks us from achieving our best. &lt;/p&gt;

&lt;p&gt;In my previous article, I talked about how a company laid me off last October. I have had my share of negative feelings since then, trust me. Sometimes you got to really believe it's for the better. I have to give credit to Applied Resource Group, and to an awesome man named Dan - who is a recruiter - now manager - there. Dan placed me in my two last roles. I'm forever in his debt, seriously. But anyway, tonight was one of their networking events, their 10th anniversary -at Pontoon Brewing, which is a big deal! Congrats ARG!!! &lt;/p&gt;

&lt;p&gt;ARG has hosted many events that I've attended, some post prev job, and all of them have been a blast. Since ARG is a partner with my prev company - I'll just go ahead and name Improving - my old boss (Scott) and HR (Nancy) - show up frequently to their events. It's no brainer that I would/will show up and they would be there, so I might as well get used to it. At first tonight, I was avoiding them, shy to introduce myself, again; but after a few beers, I gained enough courage to do so. I went over to say hey, and immediately I was greeted with the same smiley faces, that I once remembered. It was warm and welcoming. Even the CEO was there visiting, it was nice to see him again, even thought he didn't remember me. We chatted for awhile and it was nice. When it was time for them to go, we said our goodbyes and separated. &lt;/p&gt;

&lt;p&gt;Afterwards, I could feel a weight lifted off my shoulder, it was as if all that stress and anxiety was gone and it was such a freeing feeling. I was so worried about what they would think of me that it blocked me from my healing. I can now move on, without feeling like I have regret. I can now feel fully confident in my current role, and feel secure in my feelings - that I am great and special and all the things that I truly am. &lt;/p&gt;

&lt;p&gt;Sometimes, we have to do what seems to be such a hard task, to accomplish something so great! &lt;/p&gt;

&lt;p&gt;When I first arrived and before I walked in the door tonight, I saw my current boss, the one that just left the office! We said hey and I walked in. Immediately I was greeted with the news that my boss shared - saying that I am great and so awesome! Yes - me - I am so awesome! Like I hadn't heard real feedback from him yet (but you know how you can tell) - but I am super flattered. I heard all that good news about me, that I went up to my old employer's face and faced my demons. I feel accomplished, I feel worthy. &lt;/p&gt;

&lt;p&gt;We need to face our demons more, they hold way too much power over us. My rough experience has caused mental harm that I am overcoming. We shouldn't be ashamed of our past, because it is what has got us to where we are today.  &lt;/p&gt;

&lt;p&gt;Five years into my software development career, and now it can be the best year ever because I have finally let go of what inhibits my growth. &lt;/p&gt;

&lt;p&gt;I courage you to go be great and to let your past be the past and to let go of what inhibits you.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How My Software Development Experience Changed My Mental Health</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Thu, 20 Feb 2020 02:21:18 +0000</pubDate>
      <link>https://dev.to/tmott13/how-my-software-development-experience-changed-my-mental-health-4i01</link>
      <guid>https://dev.to/tmott13/how-my-software-development-experience-changed-my-mental-health-4i01</guid>
      <description>&lt;p&gt;Mental health is something that is not mentioned enough, especially in the tech industry so I wanted to share my story.&lt;/p&gt;

&lt;p&gt;I first became a software developer February of 2015, so about five years ago. It was almost two years after graduating with my BS in Information Systems degree. I already thought I was “behind” back then, because I couldn’t find a job right after college. I was working full-time as a technical writer after I graduated but continued the job search.&lt;/p&gt;

&lt;p&gt;I remember interviewing at Bluetube Interactive (now, no longer exists)…the interview was over two hours long. I didn’t do too well on the technical exercise on the computer, but the manager gave me a chance anyway, in hopes that I learn and grow. I only lasted there three months, before my manager fired me. He gave me an “ultimatum” in that, if I didn’t finish a project in two weeks, that he would let me go. I remember sitting in his office when he told me that. I wasn’t allowed to ask for help, even though I was learning 3 new technologies on the job (C#, Entity Framework, and responsive design). I learned .NET in college but it was with VB.NET. That really set the tone for most of my experience going forward. I was underappreciated and emotionally abused during those 3 months, it was rough.&lt;/p&gt;

&lt;p&gt;I was unemployed for a month before moving on to PowWow HR (also no longer exists). This company was at the Atlanta Tech Village as a startup, which back then, I thought was pretty cool. Turns out the micromanagement was pretty emotionally draining and abusive. Being in a small room, with your boss/CEO walking around and making sure you do your job everyday is not ideal. One day, in the middle of a week, my aunt passed away from cancer. It was sudden, even though she had cancer, so I was pretty upset. I found out after work and went in the next day. My boss could tell I was pretty upset, so he told me to go home for the day, so I went to see my mom. I came in the next day and everything seemed fine. Later on that week, they let me go. The reason being the deadline didn’t get met, even though it was an unrealistic one to begin with.&lt;/p&gt;

&lt;p&gt;I was unemployed for two months before finding my next job at Project Time &amp;amp; Cost. This was the first decent company I’ve worked for, everything was good…until my CTO hired a new team lead 8 months after I got there. Things went south pretty quickly and I ended up leaving voluntarily after a year. The new team lead was a micromanager who was also a fraud, who loved to demonize us developers. A lot of us jumped ship during that time.&lt;/p&gt;

&lt;p&gt;My next job at BreakAway Loyalty came smoothly after, I started right after leaving my previous job. Everything was great there until I had to work OT to meet a drastic deadline but no emotional abuse. I ended up leaving voluntarily after staying 2.5 years, my longest running job to date.&lt;/p&gt;

&lt;p&gt;I then went on to Improving Atlanta, a consulting company, which was absolutely horrid to begin with. Loved the culture but hated the work. What little spark and passion I had for technology, died there. After being burned out at BreakAway, I needed a good place to recover but IA wasn’t it at all. I ended up getting laid off, with no notice at all.&lt;/p&gt;

&lt;p&gt;After two months of unemployment (which was hell btw, but I’ll share in another post) brings me to my current company, CRH, which has been absolutely amazing so far. I have a wonderful boss, the best one I’ve ever had, I believe. Everything is almost perfect and a true “dream” job. The only problem is that I no longer have my passion “spark” that I once had and I am not sure how to get it back. I’ve only been with CRH for not even 2 months but I struggle with demonizing thoughts at least weekly. It’s horrible for my mental health. I know I need to see a therapist but I am waiting til I am financially able. Yes, I’m kind of in a “lull” stage cause I’m new and we are starting a new project, which is exciting btw. Rewriting an app from Angularjs (v.1) to Angular (v.9) is exciting, I love Angular. I was hired to do this project! But I’m afraid that my demons are going to kill everything and I’m not sure what to do except talk to a therapist. I remember when I interviewed, it was my last interview, as I received a verbal offer 2 hrs after I left. I remember my passion and excitement, the same feelings that got me the job. Those feelings are fading away but I hope they come back soon! Everyday is a new opportunity to change thoughts, I just have to take it in strides and hope time heals. I hope I get back to being “me” soon because I miss that drive and passion I once had.&lt;/p&gt;

&lt;p&gt;What has helped me the most in the past, and still continues to do so, is running and exercise. Also having a good support system.&lt;br&gt;
I hope my story inspired you, I wanted to share with the world because it’s been so hard over the last 5 years for me, especially being a woman developer.&lt;br&gt;
Thanks for reading!&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Working Remotely...</title>
      <dc:creator>Tanya Mott</dc:creator>
      <pubDate>Wed, 10 Oct 2018 16:59:26 +0000</pubDate>
      <link>https://dev.to/tmott13/working-remotely-3g88</link>
      <guid>https://dev.to/tmott13/working-remotely-3g88</guid>
      <description>&lt;p&gt;I have two questions about working remotely...&lt;/p&gt;

&lt;p&gt;1) Can you really work anywhere?&lt;/p&gt;

&lt;p&gt;2) Can you work out of state if you move?&lt;/p&gt;

&lt;p&gt;I'm considering moving out of state and wanted to see if it would be feasible to obtain a remote job here or in my future city? &lt;/p&gt;

&lt;p&gt;Thoughts?&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
  </channel>
</rss>
