<?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>Forem: Mr. Aang</title>
    <description>The latest articles on Forem by Mr. Aang (@cloutboi).</description>
    <link>https://forem.com/cloutboi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1373231%2Fac136f28-6c9d-4123-a40f-c8bf6a419389.png</url>
      <title>Forem: Mr. Aang</title>
      <link>https://forem.com/cloutboi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cloutboi"/>
    <language>en</language>
    <item>
      <title>Quest: Epic CLI tutor (Learn Code by Actually Building)</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Fri, 06 Feb 2026 18:29:37 +0000</pubDate>
      <link>https://forem.com/cloutboi/quest-epic-cli-tool-learn-code-by-actually-building-5fi0</link>
      <guid>https://forem.com/cloutboi/quest-epic-cli-tool-learn-code-by-actually-building-5fi0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Quest&lt;/strong&gt;.&lt;br&gt;
A CLI tool that teaches you Code by making you actually write code, not just read about it.&lt;/p&gt;

&lt;p&gt;I used to work in big tech and most of my responsibilities are maintaining repos, building mini features. I don't really get a chance for that &lt;strong&gt;0 to 1&lt;/strong&gt; development.  So last summer I started messing around with personal projects on the side. Let me tell you...the learning curve is real. I spent most of my time asking GPT, reading docs, doing tutorials.&lt;/p&gt;

&lt;p&gt;I kept thinking: why can't I just learn this stuff while I code? Like, inside my IDE, while I'm actually building?&lt;/p&gt;

&lt;p&gt;That's Quest. You pick a project (or have one generated for you), and it walks you through building it step by step — with automated checks for your code and AI hints when you're stuck. No browser tabs, no tutorial rabbit holes. Just your editor and your terminal.&lt;/p&gt;

&lt;p&gt;Here's what a typical session looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;quest begin       →  Pick a quest (templates or AI-generated)
quest next        →  See your current task
                  →  Write your code
quest check       →  Auto-validate your implementation
quest check -a    →  AI code review with inline comments
quest explain     →  Get hints (they get more direct each time)
quest complete    →  Move on
quest summary     →  See where you're at
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Loop
&lt;/h3&gt;

&lt;p&gt;This is the core workflow. It's dead simple on purpose:&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.amazonaws.com%2Fuploads%2Farticles%2Fajga1io90hv4h1mfe2bf.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.amazonaws.com%2Fuploads%2Farticles%2Fajga1io90hv4h1mfe2bf.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quest Templates
&lt;/h3&gt;

&lt;p&gt;There are 7 built-in templates ranging from 3-task quickies to 20-task deep dives:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Template&lt;/th&gt;
&lt;th&gt;Difficulty&lt;/th&gt;
&lt;th&gt;Tasks&lt;/th&gt;
&lt;th&gt;What You Build&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;go-web-api&lt;/td&gt;
&lt;td&gt;Quick&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;REST API basics — handlers, JSON, tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;go-cli-tool&lt;/td&gt;
&lt;td&gt;Quick&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;CLI with Cobra — subcommands and flags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;go-concurrency&lt;/td&gt;
&lt;td&gt;Quick&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Goroutines, channels, worker pools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;go-fairy-garden&lt;/td&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;A whimsical worker service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;go-todo-api&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Full CRUD API with middleware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;go-auth-system&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Auth system — JWT, sessions, the works&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;go-isekai-server&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;Distributed virtual world manager&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Or you can skip templates entirely. Describe what you want to build, pick a difficulty, and Copilot CLI generates a custom quest plan: chapters, tasks, validation rules, everything.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;

&lt;iframe src="https://player.vimeo.com/video/1162621373" width="710" height="399"&gt;
&lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/jovanpet/quest" rel="noopener noreferrer"&gt;github.com/jovanpet/quest&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/jovanpet/quest@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Starting a quest
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  🧭 Quest

  Choose your path:
  &amp;gt; 🗡️  Pick a Legendary Path
    🔨 Forge Your Own Quest
    🎲 Seek a Mystery Quest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Checking your work
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  🔍 Checking Task 1: Create a Hello World endpoint

  ✓ File exists                    main.go found
  ✓ Contains HTTP server code      http.HandleFunc detected

  🎉 All 2 checks passed!

  → Next step: quest complete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AI code review with &lt;code&gt;quest check -a&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;-a&lt;/code&gt; flag sends your code through Copilot CLI and you get inline comments injected right into your source files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// ✓ GOOD: Correct imports for HTTP server functionality&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;// TODO: What content type should the client expect from a JSON endpoint?&lt;/span&gt;
    &lt;span class="n"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;// HINT: Plain text isn't structured JSON — what Go package helps encode structs?&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c"&gt;// ✓ GOOD: Handler properly uses ResponseWriter to send response&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Progressive hints with &lt;code&gt;quest explain&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The hint system adapts based on how bad you are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Attempt 1 → Minimal hints ("Consider what happens if input is empty")
Attempt 2 → More specific ("Look into http.Error for error responses")
Attempt 3 → Direct code (partial code examples, since you're clearly stuck)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Copilot CLI was a great deal of help when refactoring code, especially when I would add a field and have to change all the templates. Furthermore an awesome helper for writing tests and catching the edge cases in. Lastly, I have no idea how to make CLI output pretty, I appreciate you Steve (Copilot)...also, low key, it does powers three core features that would've been a pain to build otherwise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hints that actually know your code
&lt;/h3&gt;

&lt;p&gt;When you run &lt;code&gt;quest explain&lt;/code&gt;, Quest grabs your current tas and pipes it to Copilot CLI. What comes back is structured comments tied to specific lines in your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  A code reviewer that knows your assignment
&lt;/h3&gt;

&lt;p&gt;The automated checks (&lt;code&gt;quest check&lt;/code&gt;) handle the basics...does the file exist? Does it contain the right patterns? Adding the &lt;code&gt;-a&lt;/code&gt; flag let's Copilot CLI do the real review. It reads your actual code, and writes comments like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;✓ GOOD: Using http.HandleFunc correctly&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;✗ ERROR: Missing error handling on ListenAndServe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;⚠ WARNING: Consider adding Content-Type header&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These go directly into your source files as inline comments, right above the relevant lines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generating entire quest plans
&lt;/h3&gt;

&lt;p&gt;This is kinda epic. Instead of picking a template, you describe what you want ("I want to build a princess fairy scheduler worker"), choose quick/normal/deep difficulty, and Copilot CLI generates a full teaching plan in JSON. And yes it's epic because I made an isekai server template you can check out: &lt;strong&gt;go-isekai-server&lt;/strong&gt; where you finish quests like...player skill endpoints...&lt;/p&gt;

&lt;h3&gt;
  
  
  What it changed for me
&lt;/h3&gt;

&lt;p&gt;The big realization was that Copilot CLI isn't just an autocomplete tool, it's basically a programmable AI interface. I can pipe structured prompts to it and get structured output back. No API keys, no cloud hosting, no billing dashboards. Just a binary that takes stdin and returns useful output.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Epic Battle: ChatGPT vs Akinator</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Wed, 04 Feb 2026 12:26:02 +0000</pubDate>
      <link>https://forem.com/cloutboi/chatgpt-vs-akinator-4ie1</link>
      <guid>https://forem.com/cloutboi/chatgpt-vs-akinator-4ie1</guid>
      <description>&lt;h2&gt;
  
  
  Is ChatGPT better than Akinator?
&lt;/h2&gt;

&lt;p&gt;I was asking myself this on a very boring evening. My thought process was: if OpenAI has access to so much data and Akinator is a deterministic algorithm, maybe ChatGPT has some kind of an edge? And as a child of the 2000s—when Akinator and &lt;em&gt;The Sims 2&lt;/em&gt; were all the rage, I couldn’t &lt;em&gt;not&lt;/em&gt; test this.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Akinator?
&lt;/h2&gt;

&lt;p&gt;For those who haven’t had the pleasure of engaging with this wonderful genie, &lt;a href="https://en.akinator.com/" rel="noopener noreferrer"&gt;Akinator&lt;/a&gt; is a website that guesses a person/thing you’re thinking of. It’s basically the 20 Questions game, except there’s an unlimited number of questions (I think), and it’s way smarter than your friend.&lt;/p&gt;

&lt;p&gt;Now, the algorithm.&lt;/p&gt;

&lt;h2&gt;
  
  
  The algorithm (in my words)
&lt;/h2&gt;

&lt;p&gt;Akinator isn’t “mind-reading”, it’s doing really aggressive guessing with probabilities.&lt;/p&gt;

&lt;p&gt;At the start, it has a massive list of possible answers (characters, objects, etc.). Each one has a kind of &lt;em&gt;profile&lt;/em&gt; behind it: for a bunch of questions (“Is your character real?”, “Are they from a TV show?”, “Are they male?”, “Are they associated with music?”), it stores what people &lt;em&gt;usually&lt;/em&gt; answered for that specific character. &lt;/p&gt;

&lt;p&gt;When you answer a question, Akinator updates its confidence for every possible candidate. If you say “yes” to something that matches a candidate’s profile, that candidate gets a boost. If you say “no” to something that candidate is strongly associated with, it drops down the rankings. And because it allows answers like “probably”, “probably not”, and “don’t know”, it can do softer updates instead of hard elimination.&lt;/p&gt;

&lt;p&gt;The key part is how it chooses the &lt;em&gt;next&lt;/em&gt; question. It doesn’t just ask random trivia—it tries to pick a question that will be most useful for narrowing things down. In practice, that usually means a question that splits the remaining “top candidates” as evenly as possible. If half the likely candidates would be “yes” and half would be “no”, your next answer gives it a lot of information either way. If a question would be “yes” for basically everyone still in the running, it’s pointless, so it avoids that.&lt;/p&gt;

&lt;p&gt;It repeats this loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep a ranked list of candidates (with confidence scores).&lt;/li&gt;
&lt;li&gt;Ask a question that’s likely to separate those candidates.&lt;/li&gt;
&lt;li&gt;Update confidence scores based on your answer.&lt;/li&gt;
&lt;li&gt;When one candidate becomes way more likely than the rest, it guesses.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And the reason it “gets better” over time: when it fails, users tell it the right answer, and it can update or create that character’s profile—basically learning new associations and fixing wrong ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A large enough number of "if" is indistinguishable from a neural network.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My Findings!
&lt;/h3&gt;

&lt;p&gt;How I decided to test this was by splitting the challenge into 4 trials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Very Easy (Elon Musk)
&lt;/li&gt;
&lt;li&gt;Easy (Harry Potter)
&lt;/li&gt;
&lt;li&gt;Medium (Jack Sparrow)
&lt;/li&gt;
&lt;li&gt;Hard (ChatGPT/Akinator — they were guessing each other :p)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  First Round — Very Easy (Elon Musk)
&lt;/h3&gt;

&lt;p&gt;This round was even: both guessed in 17 questions. What I found peculiar is that they both asked the same first question: &lt;strong&gt;“Is this a real person?”&lt;/strong&gt; That’ll come into play later, so keep that in mind.&lt;/p&gt;

&lt;p&gt;Akinator 1 : ChatGPT 1&lt;/p&gt;

&lt;h3&gt;
  
  
  Second Round — Easy (Harry Potter)
&lt;/h3&gt;

&lt;p&gt;Since in the previous round both asked whether the character was real, I thought fiction was in play. Oh boy, was I wrong…&lt;/p&gt;

&lt;p&gt;Akinator did its thing in 20 questions. Something I found interesting is that these questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;13. Does your character wear round glasses?
14. Is your character In Dumbledore's army?
15. Is your character's wife dead?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…all pointed to Harry Potter, so I figured this was obviously our young wizard.&lt;/p&gt;

&lt;p&gt;But then these were the questions that determined the outcome:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;19. Is your character's blood type O?
20. Is your character famous because of youtube?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which honestly just confused me.&lt;/p&gt;

&lt;p&gt;In comparison, ChatGPT felt like &lt;strong&gt;40+ questions&lt;/strong&gt; was totally fine. And no—it didn’t guess it by the end. Here are a few examples of what it asked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is he famous mainly for a specific historical event or incident, rather than a career (for example: survivor, witness, hero, or central figure in one major story)?
Is this person famous worldwide, not just in one country? 🌍
Is he famous for being extremely rich or connected to extreme wealth, even if he didn’t earn it himself? 💰
Is he known mainly for a single role or title (for example: “the face of X”, “the first person to do Y”, “the man involved in Z”), rather than ongoing fame?
Is this person associated with a large organization or institution (religious institution, international group, secretive org, or long-standing institution), but not as a politician or CEO?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It pretty clearly assumed that only real-world people were valid choices—which isn’t reasonable, given that it &lt;em&gt;literally&lt;/em&gt; asked me earlier whether the character was real or not. It also kind of blamed me for not stating that characters can be fictional, which felt a bit unfair considering the context.&lt;/p&gt;

&lt;p&gt;Akinator 2 : ChatGPT 1&lt;/p&gt;

&lt;h3&gt;
  
  
  Third Round - Medium (Jack Sparrow)
&lt;/h3&gt;

&lt;p&gt;Maybe I was wrong that this was a medium round as Mr. Akinator guessed it in &lt;strong&gt;12 questions&lt;/strong&gt;. :) &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As such I had high hopes for Mr. ChatGPT :)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There was a total of 25 questions. And as previously stated now the chat knew there could be fictional characters, as such, there was no reason to have a misunderstanding like the one previously.&lt;/p&gt;

&lt;p&gt;Most notable questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question 12:
Is this character from a movie released after 2000? 🎬🕰️
Question 19:
Is this character a criminal or outlaw (robber, con artist, thief, etc.) in the movie? 🚔💰 
Question 20:
Is this character a thief or con artist rather than a violent criminal? 🕵️‍♂️💼💎
Question 24:
Is this character known for being charismatic, talkative, or having a strong personality (jokes a lot, big presence on screen)?
Question 25:
Is this character from a heist or crime-focused movie (robberies, scams, illegal deals), even if it’s mixed with action or comedy? 🏦🎭
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final guess:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My guess is: Borat Sagdiyev 🧔‍♂️🇰🇿
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Akinator 3 : ChatGPT 1&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;I've decided to end the experiment here...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;So yea...after all this, I don’t think ChatGPT is “better than Akinator” at being Akinator.&lt;/p&gt;

&lt;p&gt;Akinator is a one-trick pony in the best way possible. It has a single job: ask the most useful next question, shrink the search space, and guess fast. And it shows. Even when it asks borderline unhinged questions near the end, it still somehow lands the plane.&lt;/p&gt;

&lt;p&gt;ChatGPT is different. It’s smart, but it’s general smart. It can reason, explain, and hold context...but it doesn’t naturally run a tight guessing loop unless you force it into one. In my tests it either took way longer than necessary or drifted into the wrong assumptions (like treating everything as a real person), even after it already asked whether the character was real. And the Jack Sparrow miss was the nail in the coffin—good questions, wrong landing.&lt;/p&gt;

&lt;p&gt;So the takeaway isn’t “LLMs are worse,” it’s “the genie is optimized.” Akinator wins because it’s designed to win this exact game.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Mind Backlog: a sprint for your brain</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Wed, 22 Oct 2025 07:11:04 +0000</pubDate>
      <link>https://forem.com/cloutboi/mind-backlog-a-sprint-for-your-brain-1ofg</link>
      <guid>https://forem.com/cloutboi/mind-backlog-a-sprint-for-your-brain-1ofg</guid>
      <description>&lt;p&gt;App Store: &lt;a href="https://apps.apple.com/app/id6754186382" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this app
&lt;/h2&gt;

&lt;p&gt;Most productivity tools push output. They want more tasks, more deadlines, more alerts.&lt;br&gt;&lt;br&gt;
Clarity does not come from doing more. It comes from knowing what deserves attention.&lt;/p&gt;

&lt;p&gt;I like the Getting Things Done (a book about getting things done) idea of capturing everything so the mind can relax.&lt;br&gt;&lt;br&gt;
I wanted a quieter way to do that. Mind Backlog is my take on GTD: capture, clarify, choose, and move on with less noise and more care.&lt;/p&gt;

&lt;h2&gt;
  
  
  A sprint for your brain
&lt;/h2&gt;

&lt;p&gt;Think of your thoughts like a lightweight sprint board.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backlog
&lt;/h3&gt;

&lt;p&gt;Ideas, questions, and unsolved problems live here.&lt;br&gt;&lt;br&gt;
Backlog is not failure. It is permission to let something rest until you are ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  Active
&lt;/h3&gt;

&lt;p&gt;Items you are tackling in this sprint.&lt;br&gt;&lt;br&gt;
You decided they are solvable now or worth your energy today.&lt;/p&gt;

&lt;h3&gt;
  
  
  Completed
&lt;/h3&gt;

&lt;p&gt;Resolved or released.&lt;br&gt;&lt;br&gt;
The goal is not endless checkboxes. The goal is to release mental load.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;You write what is on your mind.&lt;br&gt;&lt;br&gt;
The app asks one question:&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.amazonaws.com%2Fuploads%2Farticles%2F0s5uu1jagsjxynmpplh9.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.amazonaws.com%2Fuploads%2Farticles%2F0s5uu1jagsjxynmpplh9.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can I solve this right now?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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.amazonaws.com%2Fuploads%2Farticles%2Fskvb4ybfvtpw25u0x684.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.amazonaws.com%2Fuploads%2Farticles%2Fskvb4ybfvtpw25u0x684.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If yes, send it to &lt;strong&gt;What's the next Task&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;If not, let it rest in &lt;strong&gt;Backlog&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can I name the next action?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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.amazonaws.com%2Fuploads%2Farticles%2Ftun9jgs3tfb30z8v06qy.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.amazonaws.com%2Fuploads%2Farticles%2Ftun9jgs3tfb30z8v06qy.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If yes, send it to &lt;strong&gt;Active&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Fx3u8kukcd81hs430mt29.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.amazonaws.com%2Fuploads%2Farticles%2Fx3u8kukcd81hs430mt29.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If not, we will keep it warm in the &lt;strong&gt;Backlog&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2F9h9xmqy3js8zzatqwno5.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.amazonaws.com%2Fuploads%2Farticles%2F9h9xmqy3js8zzatqwno5.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No due dates. No streaks. No pressure.&lt;br&gt;&lt;br&gt;
Just a simple flow that helps you think clearly and act with intention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Philosophy
&lt;/h2&gt;

&lt;p&gt;This is not a task grinder. It is a thought organizer.&lt;br&gt;&lt;br&gt;
It helps you notice what is calling for attention, sort what is actionable, and let the rest breathe until you are ready.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sometimes the best productivity tool is not the one that makes you do more.&lt;br&gt;&lt;br&gt;
It is the one that helps you think better.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ios</category>
      <category>mobile</category>
      <category>swift</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>🌸 Building My Own Isekai Story - Part 1</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Fri, 17 Oct 2025 05:52:42 +0000</pubDate>
      <link>https://forem.com/cloutboi/building-my-own-isekai-story-part-1-3cg6</link>
      <guid>https://forem.com/cloutboi/building-my-own-isekai-story-part-1-3cg6</guid>
      <description>&lt;p&gt;Link at the top for curious: &lt;a href="https://isekai-manga-5c872.web.app/auth/signin" rel="noopener noreferrer"&gt;&lt;strong&gt;ISEKAI MANGA EXTRAVAGANZA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hi Dev Community 👋  &lt;/p&gt;

&lt;p&gt;One thing pretty much &lt;em&gt;everyone&lt;/em&gt; knows about me (and so do you now)...I freaking love anime and manga.&lt;br&gt;&lt;br&gt;
It’s on my Hinge profile, that’s how you know I’m serious about it...and probably why I am single lol.&lt;/p&gt;

&lt;p&gt;I think what draws me in so much is how these ordinary people...the gamer dudes, a random cool mum, the salarymen...suddenly get transported to wild worlds and become heroes/monsters/(stay cool mums) to go on these awesome adventures; do something totally different from their 9-5.  &lt;/p&gt;

&lt;p&gt;The transformations, the absurd premises, the over-the-top drama; it’s S-tier entertainment.  &lt;/p&gt;

&lt;p&gt;I mean... &lt;strong&gt;“Reborn as a Vending Machine.”&lt;/strong&gt; (lowkey not that good)&lt;br&gt;
Stuff like that just makes my day, especially lately when real dev work has been… let’s say &lt;em&gt;less isekai, more bugkai&lt;/em&gt;. 😅  &lt;/p&gt;

&lt;p&gt;So yeah, I daydream a lot about my own isekai world — who I’d meet, what powers I’d have, what my love interests would be.&lt;br&gt;&lt;br&gt;
For the record, my build is &lt;em&gt;mage tier&lt;/em&gt;, probably controlling plants and vines. Not OP, but with that “god-level later” potential.&lt;br&gt;&lt;br&gt;
I’d definitely use vines to walk around like Doctor Octopus from Spiderman and it would a Medieval setup with a Demon Lord. I feel reborn as minor Demon Lord would be a cool build, the hero is the love interest. 😅   &lt;/p&gt;




&lt;h2&gt;
  
  
  🌌 Why I Built This
&lt;/h2&gt;

&lt;p&gt;At some point, I realized there must be an easier way to test the whole “isekai theory” without getting hit by a truck —&lt;br&gt;&lt;br&gt;
so I decided to &lt;strong&gt;build a website that lets you generate your own custom manga story.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;You start by setting your world, main character, and a few other parameters I find important (more on that later).&lt;br&gt;&lt;br&gt;
Then, &lt;strong&gt;Gemini&lt;/strong&gt; takes over — generating multiple possible storylines, full arcs, chapters, panels, and characters.  &lt;/p&gt;

&lt;p&gt;So far, I’ve built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 Login and story creation portal
&lt;/li&gt;
&lt;li&gt;🧠 AI workflow that lets you choose between multiple generated storylines
&lt;/li&gt;
&lt;li&gt;🪄 Generation engine that produces &lt;strong&gt;arcs&lt;/strong&gt;, &lt;strong&gt;chapters&lt;/strong&gt;, &lt;strong&gt;objectives&lt;/strong&gt;, &lt;strong&gt;threads&lt;/strong&gt;, &lt;strong&gt;manga panels&lt;/strong&gt;, and &lt;strong&gt;characters&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, it only creates &lt;strong&gt;text stories&lt;/strong&gt;, but you can export them as &lt;strong&gt;PDFs&lt;/strong&gt; (because yes, I was nice enough to add that 😉). I guess you can't add PDFs to DEV posts but it's cool. &lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;Part 1&lt;/strong&gt; of my experiment — testing if AI can actually build a consistent long-form story with major twists, setbacks, and character development.&lt;/p&gt;

&lt;p&gt;Spoiler: it totally can.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 What’s Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 2:&lt;/strong&gt; Add image generation for pages — so you can actually &lt;em&gt;see&lt;/em&gt; your manga.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Part 3:&lt;/strong&gt; Add user choices that affect the story — so you can guide how your isekai ends.  &lt;/p&gt;

&lt;p&gt;Personally, I’m &lt;em&gt;not&lt;/em&gt; a huge fan of harem isekai (probably a hot take, I know).&lt;br&gt;&lt;br&gt;
So having choices means you can steer your story away from that and focus on what &lt;em&gt;you&lt;/em&gt; love about the genre — be it adventure, mystery, or ridiculous plotlines.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🌠 Try It Yourself
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://isekai-manga-5c872.web.app/auth/signin" rel="noopener noreferrer"&gt;&lt;strong&gt;ISEKAI MANGA EXTRAVAGANZA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For now, I can’t support everyone under my API key (Google, sponsor my anime addiction wth 😭).&lt;br&gt;&lt;br&gt;
When you log in, just head to the &lt;strong&gt;Settings&lt;/strong&gt; page and add your own Gemini API key — it’ll stay private inside your Firebase user profile. Also, if you feel weird trusting me, which I would, setting it to "" will update it to empty.&lt;/p&gt;

&lt;p&gt;Feel free to experiment with it — Gemini has some restrictions on, let’s say, &lt;em&gt;too spicy&lt;/em&gt; content, but anything SAO-ish (minus the trauma...if you know you know) should be good to go.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT: Chapter Tabs Are clickable and that is how you can check out the details and generate the manga panels :DD&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🧰 Technical Library – How It All Works
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🧙‍♂️ Creating a Character
&lt;/h2&gt;

&lt;p&gt;When building an isekai story, the &lt;em&gt;main character&lt;/em&gt; defines everything.&lt;br&gt;&lt;br&gt;
So I made the character creation flow feel like an D&amp;amp;D stat sheet mixed with a imagination make prompt.&lt;/p&gt;

&lt;p&gt;You can configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name, Gender, Species&lt;/strong&gt; – (Human, Elf, Demon, Android, Spirit, Dragonkin, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Origin World&lt;/strong&gt; – where they came from (Earth, Cyber Realm, Spirit Plane…)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rebirth Type&lt;/strong&gt; – e.g., reincarnation, summoning, transmigration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Occupation &amp;amp; Power Type&lt;/strong&gt; – ex-salaryman turned hero? mage? cursed blade wielder?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overpowered Toggle&lt;/strong&gt; – decide if your character starts broken or builds slowly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appearance to some extent&lt;/strong&gt; – hight, tone, the vibe character gives, name, personality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moral question???&lt;/strong&gt; - haven't tested this one myself yet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional backstory&lt;/strong&gt; - for those peeps who really wanna get into it...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each setting directly affects how Gemini writes their &lt;strong&gt;arcs&lt;/strong&gt;, &lt;strong&gt;objectives&lt;/strong&gt; &lt;strong&gt;threads&lt;/strong&gt;, and &lt;strong&gt;dialogue tone&lt;/strong&gt; later on.&lt;br&gt;&lt;br&gt;
The cool part: it keeps track of &lt;em&gt;character evolution&lt;/em&gt; between arcs, so the AI doesn’t “reset” their personality every chapter.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌍 Creating the World
&lt;/h2&gt;

&lt;p&gt;The world template is half creative, half data-driven.&lt;br&gt;&lt;br&gt;
You can define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;World Type&lt;/strong&gt; – Fantasy, Sci-Fi, Cyberpunk, Steampunk, Mythic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Influence&lt;/strong&gt; – Original, Anime, Manga, Light Novel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tone&lt;/strong&gt; – Serious, Whimsical, Dark, Parody&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arc Count&lt;/strong&gt; – how long the story goes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional Personal Storyline&lt;/strong&gt; – if you feel like it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These parameters are then used in the story prompt to define the &lt;em&gt;laws of reality&lt;/em&gt;, magic system, and environment consistency across arcs.&lt;br&gt;&lt;br&gt;
Gemini uses this to decide things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How travel works (teleportation vs. carriages)&lt;/li&gt;
&lt;li&gt;How communication happens (telepathy vs. messenger hawks)&lt;/li&gt;
&lt;li&gt;How fast tech evolves between arcs&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h2&gt;
  
  
  🎭 Generating a Story Outline
&lt;/h2&gt;

&lt;p&gt;This is where the &lt;strong&gt;AI story engine&lt;/strong&gt; kicks in.&lt;br&gt;&lt;br&gt;
Once you hit “Create Story,” Gemini generates a &lt;strong&gt;Series Outline&lt;/strong&gt; consisting of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Story title and summary
&lt;/li&gt;
&lt;li&gt;Number of arcs (3–24, depending on “Arc Length” setting)
&lt;/li&gt;
&lt;li&gt;Thematic thread list (like &lt;em&gt;revenge&lt;/em&gt;, &lt;em&gt;forgiveness&lt;/em&gt;, &lt;em&gt;power balance&lt;/em&gt;)
&lt;/li&gt;
&lt;li&gt;Key emotional beats per arc&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  🧩 How the Story System Works
&lt;/h1&gt;

&lt;p&gt;At its core, the &lt;strong&gt;Isekai Manga Generator&lt;/strong&gt; functions like an automated manga writer obviously. Also this is where the choices would be cool. Because, while we do have the general overview of what would happen, we don't have it fully flashed out.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌀 Arcs – The Big Picture
&lt;/h2&gt;

&lt;p&gt;Every story has multiple &lt;strong&gt;Arcs&lt;/strong&gt; — a complete narrative phase that captures growth, conflict, and discovery.&lt;br&gt;&lt;br&gt;
Arcs are the backbone of the entire story, think of it as a manga volume or anime season.&lt;br&gt;&lt;br&gt;
They set the tone and direction...the hero’s challenge, the world’s new rules, and the shift that propels everything forward.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Objectives – The Driving Missions
&lt;/h2&gt;

&lt;p&gt;Inside every arc are &lt;strong&gt;Objectives&lt;/strong&gt; — the goals, challenges, or emotional trials that give purpose to the journey and the main character must achieve.&lt;br&gt;&lt;br&gt;
An objective: learning a forbidden spell, defeating a rival, or discovering the truth of smth idk.&lt;br&gt;&lt;br&gt;
They kinda gamify the website and make it so we have a goal to read towards, idk.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧵 Threads – The Continuity
&lt;/h2&gt;

&lt;p&gt;Running through all arcs are &lt;strong&gt;Threads&lt;/strong&gt;, the long-term subplots that connect everything together.&lt;br&gt;&lt;br&gt;
Threads might follow a character’s hidden past, a growing rivalry, a prophecy that unfolds slowly, or a mystery that deepens over time.&lt;br&gt;&lt;br&gt;
They make the world feel consistent and alive — ensuring that the story remembers its own history and builds anticipation for what’s next.  &lt;/p&gt;

&lt;p&gt;Each thread has its own mini progression, appearing and disappearing across arcs with a probable solution in one of the chapters.  &lt;/p&gt;




&lt;h2&gt;
  
  
  📖 Chapters – The Story in Motion
&lt;/h2&gt;

&lt;p&gt;Each objective unfolds through &lt;strong&gt;Chapters&lt;/strong&gt;, where the story comes alive in scenes of tension, humor, revelation, and growth.  &lt;/p&gt;

&lt;p&gt;They form pacing for the arc, alternating between discovery, conflict, and rest...like the natural flow of a manga’s storytelling. This one was pretty self explanatory. &lt;/p&gt;




&lt;p&gt;HEHE Lemme force GPT to make a diagram:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📘 Arc&lt;/strong&gt; → Defines the main phase of the story&lt;br&gt;&lt;br&gt;
  ↳ &lt;strong&gt;🧵 Thread&lt;/strong&gt; – Connects arcs with long-term subplots&lt;br&gt;&lt;br&gt;
  ↳ &lt;strong&gt;🎯 Objective&lt;/strong&gt; – Sets the mission or challenge for that arc&lt;br&gt;&lt;br&gt;
    ↳ &lt;strong&gt;📖 Chapter&lt;/strong&gt; – Expands the objective into narrative events&lt;br&gt;&lt;br&gt;
      ↳ &lt;strong&gt;🖼️ Page&lt;/strong&gt; – Translates each scene into visual storytelling&lt;/p&gt;

&lt;h1&gt;
  
  
  🏁 Wrapping Up Part 1
&lt;/h1&gt;

&lt;p&gt;So yeah — that’s the full system. For those who are still with me. &lt;br&gt;
From &lt;strong&gt;Arcs&lt;/strong&gt;, to &lt;strong&gt;Threads&lt;/strong&gt;, to &lt;strong&gt;Objectives&lt;/strong&gt;, all the way down to &lt;strong&gt;Pages&lt;/strong&gt; that make it visual.   &lt;/p&gt;

&lt;p&gt;This whole thing started as me joking about wanting my own isekai, but now it feels like I have the talent to think of a cool manga ...LOL I even used GPT for this and edited because I am on-call and super busy boy.  &lt;/p&gt;

&lt;p&gt;Anyway, that’s &lt;strong&gt;Part 1: The Story Engine.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Part 2 is where it gets real visual — &lt;strong&gt;AI-generated manga pages&lt;/strong&gt;, panel layouts, speech bubbles, and a little bit of chaos.   &lt;/p&gt;

&lt;p&gt;Feel free to try the app, play with your own world, and send me your best stories...Also can someone spend their money on Gemini and generate a story about reincarnating as Assembly code and overpowering all the other coding languages.&lt;/p&gt;

&lt;p&gt;I'll add some sc here at the bottom for our phone users. I didn't put in the effort to make it phone screen safe...&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.amazonaws.com%2Fuploads%2Farticles%2Fxlece0hhezhq851cf8ee.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.amazonaws.com%2Fuploads%2Farticles%2Fxlece0hhezhq851cf8ee.png" alt=" " width="800" height="975"&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.amazonaws.com%2Fuploads%2Farticles%2F7g1ki5739qmdj59kzlig.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.amazonaws.com%2Fuploads%2Farticles%2F7g1ki5739qmdj59kzlig.png" alt=" " width="800" height="1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BUT like log-in and try peeeeez&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://isekai-manga-5c872.web.app/auth/signin" rel="noopener noreferrer"&gt;&lt;strong&gt;ISEKAI MANGA EXTRAVAGANZA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Integrating Books, Clocks and Code ⏰</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Fri, 26 Sep 2025 08:14:59 +0000</pubDate>
      <link>https://forem.com/cloutboi/integrating-books-clocks-and-code-699</link>
      <guid>https://forem.com/cloutboi/integrating-books-clocks-and-code-699</guid>
      <description>&lt;p&gt;Sometimes projects don’t start with a grand vision. Sometimes they start because you’re reading a book at 11:47 PM and the narrator casually drops &lt;em&gt;“at exactly 11:47…”&lt;/em&gt; and your brain goes: &lt;em&gt;wait a second — that’s literally right now.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;That’s how &lt;strong&gt;Quock&lt;/strong&gt; was born (short for &lt;em&gt;Quote + Clock&lt;/em&gt;).  &lt;/p&gt;

&lt;p&gt;App Store: &lt;a href="https://apps.apple.com/app/id6751061327" rel="noopener noreferrer"&gt;https://apps.apple.com/app/id6751061327&lt;/a&gt;&lt;/p&gt;

&lt;h2&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.amazonaws.com%2Fuploads%2Farticles%2Fzry8bz0e9npurbpkhy79.png" alt=" " width="800" height="800"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The spark
&lt;/h3&gt;

&lt;p&gt;This literally: &lt;a href="https://www.authorclock.com/" rel="noopener noreferrer"&gt;https://www.authorclock.com/&lt;/a&gt;. It felt kind of magical when one lined up with the actual clock on my wall.  &lt;/p&gt;

&lt;p&gt;So naturally I asked myself the only logical developer question:&lt;br&gt;&lt;br&gt;
👉 &lt;em&gt;Can I appify this magic?&lt;/em&gt;  &lt;/p&gt;




&lt;h3&gt;
  
  
  The build
&lt;/h3&gt;

&lt;p&gt;I started scraping quotes with explicit time references. Then I chunked them into JSON files by 30-minute intervals. At runtime, the app checks the clock and pulls a quote that matches the moment.  &lt;/p&gt;

&lt;p&gt;So if it’s 3:15 AM, instead of your usual blank lock screen you might see:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“She was wide awake by &lt;strong&gt;3:15 AM&lt;/strong&gt;, listening to the rain hammer against the window.”  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s not just a time — it’s a &lt;em&gt;story&lt;/em&gt; of the time.  &lt;/p&gt;




&lt;h3&gt;
  
  
  The vibe
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Design:&lt;/strong&gt; Minimal, Kindle-esque, Times New Roman.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack:&lt;/strong&gt; Python scraper, JSON storage, SwiftUI widget.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files:&lt;/strong&gt; &lt;code&gt;all_quotes_YYYYMMDD_0030.json&lt;/code&gt; … &lt;code&gt;all_quotes_YYYYMMDD_0000.json&lt;/code&gt; — 30-minute coverage across the whole day.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Why bother?
&lt;/h3&gt;

&lt;p&gt;Because sometimes code doesn’t need to &lt;em&gt;solve&lt;/em&gt; anything. Sometimes it can just make the ordinary (checking the time) feel a little more extraordinary.&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.amazonaws.com%2Fuploads%2Farticles%2Fpne1cu5m0dis9jtkqoo5.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.amazonaws.com%2Fuploads%2Farticles%2Fpne1cu5m0dis9jtkqoo5.png" alt=" " width="800" height="1739"&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.amazonaws.com%2Fuploads%2Farticles%2Fu68ii91nv7heflxt64v5.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.amazonaws.com%2Fuploads%2Farticles%2Fu68ii91nv7heflxt64v5.png" alt=" " width="800" height="1739"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;So that’s my little mashup of books, clocks, and code. Quock isn’t finished, but it’s already doing its job: reminding me that even the passing of time can carry a narrative.  &lt;/p&gt;

&lt;p&gt;Would love to hear if anyone else has built projects that live somewhere between practical and poetic.  &lt;/p&gt;

</description>
      <category>gemini</category>
      <category>swift</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Workout Analyzer🏋️‍♀️</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Mon, 15 Sep 2025 00:12:55 +0000</pubDate>
      <link>https://forem.com/cloutboi/ai-workout-analyzer-4jdd</link>
      <guid>https://forem.com/cloutboi/ai-workout-analyzer-4jdd</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-ai-studio-2025-09-03"&gt;Google AI Studio Multimodal Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built a multimodal workout coach that takes in a video of your exercise, analyzes it, and gives you actionable feedback. When you submit a clip, the system does three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Global Review – it highlights overall issues in your form.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rep-by-Rep Analysis – each repetition gets tagged with faults, coaching cues, and suggestions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI-Powered Correction – instead of just telling you what’s wrong, the app uses generative AI to fix your form in the video, showing you the corrected version of yourself performing the movement properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The end result is like having a personal trainer who not only points out mistakes but also shows you exactly how to move better.&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.amazonaws.com%2Fuploads%2Farticles%2Fa914299pbqn7w937b3ky.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.amazonaws.com%2Fuploads%2Farticles%2Fa914299pbqn7w937b3ky.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Link to your Workout Renaissance: &lt;a href="https://workout-analyzer-frontend-rrituyzg6q-uc.a.run.app/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Link to the video of a Demo: &lt;a href="https://youtu.be/mEEUY-OMpIs" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github Repo: &lt;a href="https://github.com/jovanpet/ai-work-out-applet" rel="noopener noreferrer"&gt;repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To Run Locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/jovanpet/ai-work-out-applet.git
cd backend
make run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F8qkupttnqbmcbbsmhpyt.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.amazonaws.com%2Fuploads%2Farticles%2F8qkupttnqbmcbbsmhpyt.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Overall Analysis:&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.amazonaws.com%2Fuploads%2Farticles%2Fhf52bivd54w26997osy4.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.amazonaws.com%2Fuploads%2Farticles%2Fhf52bivd54w26997osy4.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Overall Suggestions:&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.amazonaws.com%2Fuploads%2Farticles%2Fncbe280ss4vry253k7ru.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.amazonaws.com%2Fuploads%2Farticles%2Fncbe280ss4vry253k7ru.png" alt=" "&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.amazonaws.com%2Fuploads%2Farticles%2Flytfxrcmds7fppuda6ww.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.amazonaws.com%2Fuploads%2Farticles%2Flytfxrcmds7fppuda6ww.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Per Rep View:&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.amazonaws.com%2Fuploads%2Farticles%2Fq83p07vs9ukm57hlhb0l.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.amazonaws.com%2Fuploads%2Farticles%2Fq83p07vs9ukm57hlhb0l.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Google AI Studio
&lt;/h2&gt;

&lt;p&gt;I leveraged Google AI Studio to power the core of my workout analysis pipeline. Specifically, I used:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;gemini-2.5-pro&lt;/strong&gt; for the heavy lifting on video understanding and structured feedback generation. This model analyzed each submitted workout video, segmented reps, flagged faults, and produced a JSON schema with both rep-level details and global coaching advice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;gemini-2.5-flash-image-preview&lt;/strong&gt; for visual correction previews. After faults were identified, I passed frames through this model to generate a corrected version of the user’s form — so instead of just text feedback, users could actually see themselves performing the exercise properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multimodal Features
&lt;/h2&gt;

&lt;p&gt;The core of this project relies on multimodal capabilities — combining video, image, and text understanding to create a more complete coaching experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Video Analysis – Gemini processes full workout videos, breaking them into reps, detecting faults, and generating structured JSON with rep-level insights.&lt;/li&gt;
&lt;li&gt;Image-Based Corrections – Key frames are re-rendered with improved posture, letting users visually compare their original form to the corrected version of themselves.&lt;/li&gt;
&lt;li&gt;Text Feedback – Alongside visuals, the system provides global coaching notes and rep-by-rep suggestions in clear, human-friendly language.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
    <item>
      <title>First App Journey (Learned the Hard Way About WatchConnectivity)</title>
      <dc:creator>Mr. Aang</dc:creator>
      <pubDate>Fri, 15 Aug 2025 16:04:58 +0000</pubDate>
      <link>https://forem.com/cloutboi/first-app-journey-learned-the-hard-way-about-watchconnectivity-2d4b</link>
      <guid>https://forem.com/cloutboi/first-app-journey-learned-the-hard-way-about-watchconnectivity-2d4b</guid>
      <description>&lt;p&gt;When I set out to build &lt;a href="https://apps.apple.com/us/app/locker-manager/id6748844277" rel="noopener noreferrer"&gt;&lt;strong&gt;Locker Manager&lt;/strong&gt;&lt;/a&gt;. The goal of the app was an easy way to store my gym locker code on my iPhone and then instantly view it on my Apple Watch. It sounded simple, but is anything ever truly ‘simple’ in the development world? This project taught me a lot about SwiftUI, WatchConnectivity, debugging across devices, and how much work it takes to ship something to the App Store once the development process was complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea: A Tiny Problem, A Personal Solution
&lt;/h2&gt;

&lt;p&gt;The app’s job was straightforward: the user enters a locker number and code on iPhone, saves it, and sends it to the Apple Watch for quick access. I wanted it to “just work,” even if the watch app wasn’t open at that exact moment. That requirement pushed me toward thinking about reliability and offline behavior right from the start, and it shaped every decision that followed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson One: &lt;code&gt;sendMessage&lt;/code&gt; Isn’t Reliable Enough
&lt;/h2&gt;

&lt;p&gt;I started with the obvious approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kt"&gt;WCSession&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;"lockerCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;replyHandler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It worked—until it didn’t. &lt;code&gt;sendMessage&lt;/code&gt; requires both apps to be active and reachable at the same time. If the watch app isn’t open, the message is lost. The fix was switching to &lt;a href="https://developer.apple.com/documentation/watchconnectivity/wcsession/1615681-transferuserinfo" rel="noopener noreferrer"&gt;&lt;code&gt;transferUserInfo&lt;/code&gt;&lt;/a&gt;, which queues the data until the watch app is ready to receive it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;queueLockerCodeForWatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;LockerCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;encodedData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="kt"&gt;JSONEncoder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"lockerCodeData"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;encodedData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="kt"&gt;WCSession&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transferUserInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to encode locker code"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, even if the user saves the code while the app is off, it still arrives when they open the watch app later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson Two: Testing Isn’t Always What It Seems
&lt;/h2&gt;

&lt;p&gt;Here’s the part they don’t put in the docs: &lt;code&gt;transferUserInfo&lt;/code&gt; does &lt;em&gt;not&lt;/em&gt; work in the watchOS simulator. I spent time wondering why nothing was being sent, adding print statements, and re-checking my delegate methods. Only after deep diving into Apple’s forums did I discover that you &lt;em&gt;must&lt;/em&gt; test WatchConnectivity on actual paired devices for certain transfer methods. As soon as I switched to my real Apple Watch, the data flowed instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson Three: Activation State Matters
&lt;/h2&gt;

&lt;p&gt;My &lt;code&gt;WCSession&lt;/code&gt; delegate now listens for activation and maintains a flag so I can debug connectivity problems. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;WCSession&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;activationDidCompleteWith&lt;/span&gt; &lt;span class="nv"&gt;activationState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;WCSessionActivationState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;?)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;DispatchQueue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sessionActivated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;activationState&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;activated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lastErrorMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;localizedDescription&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it clear when the watch isn’t ready, which avoids me chasing “bugs” that are really just connection issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson Four: App Store Polish
&lt;/h2&gt;

&lt;p&gt;Once the data transfer worked reliably, I thought I was done. But submitting to the App Store meant creating icons for iPhone and Apple Watch, filling out metadata, privacy policy, screenshots, and keywords. Even for a small app, this took almost as long as the development itself. The polish work—animations, UI tweaks...&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson Five: Deciding the App’s Flow and Features
&lt;/h2&gt;

&lt;p&gt;One of the hardest parts wasn’t the coding—it was deciding what the app should actually do. My original design let users save old locker codes and look back at them, which made sense to me at the time. After all, a user might like a particular random 4 number combination, right? But when I talked to my friends, the users, I realized that locker codes are usually ephemeral—once you’re done with your locker, that code is useless. This isn’t a password manager; it’s a convenience tool. Stripping away that history feature made the app simpler, cleaner, and more focused on its real purpose: quick, easy access to your current locker code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;What started as a “side project” ended up being course in WatchConnectivity, SwiftUI state management, and Apple’s publishing process. I learned that even the smallest apps have dozens of hidden challenges, and that sometimes the trickiest bugs aren’t in your code at all—they’re in how you test it.&lt;/p&gt;

&lt;p&gt;If you’re building your first iOS + watchOS app, start small, test on real devices, and don’t underestimate the time you’ll spend making it shine once the core feature works.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>mobile</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
