<?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: Andy Schelb</title>
    <description>The latest articles on DEV Community by Andy Schelb (@plaidscientist).</description>
    <link>https://dev.to/plaidscientist</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%2F4100476%2Fecefadf5-815f-4bed-abbf-12b22d2847b2.jpg</url>
      <title>DEV Community: Andy Schelb</title>
      <link>https://dev.to/plaidscientist</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/plaidscientist"/>
    <language>en</language>
    <item>
      <title>I tried to add a simple hit counter to my app and ended up learning why "simple" free APIs quietly fail on mobile</title>
      <dc:creator>Andy Schelb</dc:creator>
      <pubDate>Wed, 16 Sep 2026 14:09:00 +0000</pubDate>
      <link>https://dev.to/plaidscientist/i-tried-to-add-a-simple-hit-counter-to-my-app-and-ended-up-learning-why-simple-free-apis-quietly-1lnd</link>
      <guid>https://dev.to/plaidscientist/i-tried-to-add-a-simple-hit-counter-to-my-app-and-ended-up-learning-why-simple-free-apis-quietly-1lnd</guid>
      <description>&lt;p&gt;Social proof is good when you have a new app. I wanted people to know that others were using the app. I literally asked Claude for a 90s style website counter. I used the example of the famous burger sign that says, "billions served." &lt;/p&gt;

&lt;p&gt;&lt;a href="https://fandom.com" rel="noopener noreferrer"&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%2Ftqc8a1psjmcgdmxdokc3.webp" alt="RocDonald's Sign from The Flintstones 1994 Film" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image source: &lt;a href="https://fandom.com" rel="noopener noreferrer"&gt;The Flintstones Wiki on Fandom&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
side note- this movie was so magical when I was a little kid!&lt;/p&gt;

&lt;p&gt;Turned out to be a good little rabbit hole, so I figured it was worth writing&lt;br&gt;
up on its own — not just "here's a counter," but what actually broke along&lt;br&gt;
the way and why.&lt;/p&gt;

&lt;p&gt;🔗 See it in action: &lt;a href="https://theplaidscientist.github.io/dailydoodle/" rel="noopener noreferrer"&gt;https://theplaidscientist.github.io/dailydoodle/&lt;/a&gt;&lt;br&gt;
💻 Code: &lt;a href="https://github.com/theplaidscientist/dailydoodle" rel="noopener noreferrer"&gt;https://github.com/theplaidscientist/dailydoodle&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Attempt 1: a free, no-signup counter API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/plaidscientist/i-vibe-coded-my-first-app-ever"&gt;Daily Doodle&lt;/a&gt;&lt;br&gt;
is a static site on GitHub Pages — no backend, no server I control. So the&lt;br&gt;
first move was a free public counter service&lt;br&gt;
(&lt;a href="https://countapi.mileshilliard.com/" rel="noopener noreferrer"&gt;countapi.mileshilliard.com&lt;/a&gt;) — no&lt;br&gt;
account, no API key, just a &lt;code&gt;GET&lt;/code&gt; request that increments a number tied to a&lt;br&gt;
key I made up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://countapi.mileshilliard.com/api/v1/hit/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;COUNTER_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;counterEl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&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;Worked immediately on desktop. Yay! It's working! This is gonna be so cool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then it quietly stopped working on mobile
&lt;/h2&gt;

&lt;p&gt;I switched to my phone before sending the link to my friend and realized it was still at triple ---. No matter what I did, I couldn't get the counter to update.. &lt;/p&gt;

&lt;p&gt;The counter would just... not move on mobile. No error the user would ever&lt;br&gt;
see, because I'd deliberately built it to fail silently (dashes on screen&lt;br&gt;
instead of a broken-looking blank) rather than break the actual app if the&lt;br&gt;
counter service ever had a bad day.&lt;/p&gt;

&lt;p&gt;First fix I tried: fire the request two ways at once — the normal &lt;code&gt;fetch()&lt;/code&gt;&lt;br&gt;
call, plus a fallback using an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag pointed at the same endpoint,&lt;br&gt;
since some ad blockers treat image requests differently than fetch/XHR calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pixel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pixel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://countapi.mileshilliard.com/api/v1/hit/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;COUNTER_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?_=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Didn't help. Which was actually useful information — if both request types&lt;br&gt;
fail identically, that's not a request-type problem, that's the whole&lt;br&gt;
&lt;em&gt;domain&lt;/em&gt; being blocked at the network level (an ad blocker, a mobile&lt;br&gt;
carrier's filtering, a DNS-level blocklist like NextDNS/AdGuard). Generic&lt;br&gt;
counter/analytics-sounding domains get swept up in filter lists a lot more&lt;br&gt;
than people realize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt 2: Firebase instead
&lt;/h2&gt;

&lt;p&gt;The fix wasn't cleverer code — it was picking a backend domain that's&lt;br&gt;
essentially never blocklisted, because too much of the internet depends on&lt;br&gt;
it. Firebase fit: &lt;code&gt;firebaseio.com&lt;/code&gt; is Google infrastructure that a huge&lt;br&gt;
number of mainstream apps rely on, so blocklists generally leave it alone.&lt;/p&gt;

&lt;p&gt;Setup, for anyone who wants to do this on their own static site:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a free project at &lt;a href="https://console.firebase.google.com" rel="noopener noreferrer"&gt;Firebase Console&lt;/a&gt;
(no credit card needed for the free Spark plan)&lt;/li&gt;
&lt;li&gt;Add a &lt;strong&gt;Realtime Database&lt;/strong&gt;, start it in test mode (public read/write —
fine for something as low-stakes as a number)&lt;/li&gt;
&lt;li&gt;Use Firebase's REST API directly, no SDK, no auth needed in test mode:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Read the current count&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;DB_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/counters/dailyDoodle.json`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;counterEl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Increment it atomically (safe even if two people spin at once)&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;DB_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/counters/dailyDoodle.json`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PUT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.sv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;increment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&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;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;counterEl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&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;That &lt;code&gt;.sv: { increment: 1 }&lt;/code&gt; bit is Firebase's server-side increment — the&lt;br&gt;
math happens on their server, not in the browser, so there's no race&lt;br&gt;
condition if two people hit spin at the same moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest tradeoff
&lt;/h2&gt;

&lt;p&gt;Test mode means the database is publicly writable by anyone who finds the&lt;br&gt;
URL — genuinely fine for a number nobody can really abuse in a meaningful&lt;br&gt;
way, but worth knowing if you're reusing this pattern for anything with&lt;br&gt;
actual sensitive data. &lt;/p&gt;

&lt;h2&gt;
  
  
  Sources / further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://countapi.mileshilliard.com/" rel="noopener noreferrer"&gt;countapi.mileshilliard.com&lt;/a&gt; — the
free counter service I started with&lt;/li&gt;
&lt;li&gt;&lt;a href="https://firebase.google.com/docs/database/rest/start" rel="noopener noreferrer"&gt;Firebase Realtime Database REST API docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://console.firebase.google.com" rel="noopener noreferrer"&gt;Firebase Console&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have you had this problem? Did you solve it similarly or differently? &lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>firebase</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Does anyone have suggestions on who I should follow? I’m completely brand new, and every article I read so far feels very technologically deeper than my current skills. Drop comments for suggestions. I’m just a beginner.</title>
      <dc:creator>Andy Schelb</dc:creator>
      <pubDate>Wed, 09 Sep 2026 20:44:31 +0000</pubDate>
      <link>https://dev.to/plaidscientist/does-anyone-have-suggestions-on-who-i-should-follow-im-completely-brand-new-and-every-article-i-1hg2</link>
      <guid>https://dev.to/plaidscientist/does-anyone-have-suggestions-on-who-i-should-follow-im-completely-brand-new-and-every-article-i-1hg2</guid>
      <description></description>
      <category>beginners</category>
      <category>discuss</category>
      <category>learning</category>
    </item>
    <item>
      <title>I vibe-coded my first app ever — a daily drawing-prompt spinner (Beginner + Advanced modes, sound, the works)</title>
      <dc:creator>Andy Schelb</dc:creator>
      <pubDate>Wed, 09 Sep 2026 14:09:00 +0000</pubDate>
      <link>https://dev.to/plaidscientist/i-vibe-coded-my-first-app-ever-a-daily-drawing-prompt-spinner-beginner-advanced-modes-sound-181g</link>
      <guid>https://dev.to/plaidscientist/i-vibe-coded-my-first-app-ever-a-daily-drawing-prompt-spinner-beginner-advanced-modes-sound-181g</guid>
      <description>&lt;p&gt;I was at dinner and my friend asked me if I'd ever vibe coded. He was like you really should try it. It's incredible what you can do. I took web design in high school, but in the year 2000 it was all about learning HTML tags. That was the most coding I've ever done.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Daily Doodle&lt;/strong&gt; — a drawing-prompt spinner. Pick which categories&lt;br&gt;
you want in play, hit spin, and it mashes them together into something like&lt;br&gt;
"a Pencil Anime-style drawing of a Detective Octopus wearing a Hoodie, with a&lt;br&gt;
Boombox, riding a Scooter, looking Happy, in the Woods." No two spins land&lt;br&gt;
the same, and it's built to actually get used, not just looked at once.&lt;/p&gt;

&lt;p&gt;🔗 Try it: &lt;a href="https://theplaidscientist.github.io/dailydoodle/" rel="noopener noreferrer"&gt;https://theplaidscientist.github.io/dailydoodle/&lt;/a&gt;&lt;br&gt;
💻 Code: &lt;a href="https://github.com/theplaidscientist/dailydoodle" rel="noopener noreferrer"&gt;https://github.com/theplaidscientist/dailydoodle&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%2F1x5hpfr3guql6kxdmgio.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%2F1x5hpfr3guql6kxdmgio.png" alt=" " width="433" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Nine categories, all toggleable: Animal, Occupation, Prop, Vehicle, Style,&lt;br&gt;
Medium, Outfit, Mood, Setting. Each one is fully editable — add your own&lt;br&gt;
items, clear a category out completely, or restore the original starter&lt;br&gt;
list if you mess with it too much.&lt;/p&gt;

&lt;p&gt;Two modes so it doesn't overwhelm anyone on first visit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Beginner&lt;/strong&gt; — just the original three (Animal, Occupation, Prop), no
toggles, nothing to configure. Load it and spin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced&lt;/strong&gt; — all nine categories, each with its own on/off switch, so
you build exactly the level of chaos you want.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few other things that ended up in there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A live counter (backed by Firebase) tracking total spins across everyone
who's used it, styled to match the rest of the app instead of looking
like a bolted-on stat&lt;/li&gt;
&lt;li&gt;Retro synthesized sound effects — a boop-boop-boop while it spins, a tada
when it lands — built entirely with the Web Audio API, so there's no
audio file to load and nothing to license&lt;/li&gt;
&lt;li&gt;An "avoid repeats until all shown" option, so a category won't repeat an
item until everything in it has come up once&lt;/li&gt;
&lt;li&gt;A copy button that grabs the result as shareable text, plus a collapsed
"recent doodles" list holding your last 3 spins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When my oldest was little. They'd always ask me for ideas of things to draw. I'm a massive Walt Disney World fan and I've read almost anything I can on the subject of the creation and maintenance of the most magical place on earth.  &lt;/p&gt;

&lt;p&gt;I remember reading this quote from the head of Disney Imagineering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“There are two ways to look at a blank sheet of paper. It can be the most frightening thing in the world, because you have to make the first mark on it. Or it can be the greatest opportunity in the world, because you get to make the first mark—you can let your imagination fly in any direction, and create whole new worlds!”&lt;/p&gt;

&lt;p&gt;— &lt;strong&gt;Marty Sklar&lt;/strong&gt;, Creative Leader of Walt Disney Imagineering, from his memoir &lt;a href="https://www.scribd.com/document/634991348/Dream-It-Do-It-My-Half-Century-Creating-Disneys-Magic-Kingdoms-Sklar-Marty" rel="noopener noreferrer"&gt;&lt;em&gt;Dream It! Do It!: My Half-Century Creating Disney's Magic Kingdoms&lt;/em&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was his go to when in 1974 when taking over Walt Disney Imagineering to help the team overcome paralysis and self-doubt. &lt;/p&gt;

&lt;h2&gt;
  
  
  Github, Pull, Push, and endless screenshots asking, Am I doing this right?
&lt;/h2&gt;

&lt;p&gt;I'd not coded before. I pulled some software for my 3d printers from github years and years ago, so it existed and what it was vaguely for, but I didn't have any idea how to use it. &lt;/p&gt;

&lt;p&gt;I was super nervous that my human touch would be the part where the ideas would break. &lt;/p&gt;

&lt;p&gt;The stack is about as simple as it gets: one &lt;code&gt;index.html&lt;/code&gt; file, vanilla&lt;br&gt;
JavaScript, no framework, no build step, no local dev environment — I edit&lt;br&gt;
it directly in the GitHub web UI. In the beginning I was copy and pasting full html files to edit the site because I wasn't sure how to use github desktop. &lt;/p&gt;

&lt;p&gt;It's hosted completely free on GitHub Pages, and the whole thing — including&lt;br&gt;
the live counter — costs nothing to run.&lt;/p&gt;

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

&lt;p&gt;This is the second entry in &lt;strong&gt;Plaid Labs&lt;/strong&gt;, a little hub of web experiments&lt;br&gt;
I keep building and then figuring other people might want too. First one was&lt;br&gt;
&lt;a href="https://dev.to/plaidscientist/i-built-a-checklist-for-droid-tycoon-fusion-recipes-so-id-stop-scrolling-screenshots-g71"&gt;Droid Tycoon Fusion Cookbook&lt;/a&gt;,&lt;br&gt;
a fan checklist for tracking fusion recipes — more on the way.&lt;/p&gt;

&lt;p&gt;Are you also new to coding/app creation? Put your newbie experience posts below in the comments and I'll read them and comment back! &lt;/p&gt;

</description>
      <category>showdev</category>
      <category>buildinpublic</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built a checklist for Droid Tycoon fusion recipes so I’d stop scrolling screenshots</title>
      <dc:creator>Andy Schelb</dc:creator>
      <pubDate>Wed, 02 Sep 2026 15:21:46 +0000</pubDate>
      <link>https://dev.to/plaidscientist/i-built-a-checklist-for-droid-tycoon-fusion-recipes-so-id-stop-scrolling-screenshots-g71</link>
      <guid>https://dev.to/plaidscientist/i-built-a-checklist-for-droid-tycoon-fusion-recipes-so-id-stop-scrolling-screenshots-g71</guid>
      <description>&lt;p&gt;Recently in Droid Tycoon, a Star Wars game built in Fortnite, they added a feature where you could fuse multiple droids together. They kept the recipes a secret, but people started making lists. I grabbed a screenshot from the forum, but when I kept using the markup tool on my phone it never saved right. Probably because I was multitasking between my TV and my phone.&lt;br&gt;
I thought I just need a simple checklist so I know what droid blueprints to target off the belt.&lt;br&gt;
So I built Droid Tycoon Fusion Cookbook — a simple checklist for tracking Droid Tycoon’s fusion recipes. Check off the parts you’ve collected, and the result glows green the moment you’re ready to fuse it.&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%2Fk24vwu7h2om09wscwlkc.gif" 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%2Fk24vwu7h2om09wscwlkc.gif" alt="Fusion Cookbook demo" width="640" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 Try it: &lt;a href="https://theplaidscientist.github.io/fusioncookbook/" rel="noopener noreferrer"&gt;https://theplaidscientist.github.io/fusioncookbook/&lt;/a&gt;&lt;br&gt;
💻 Code: &lt;a href="https://github.com/theplaidscientist/fusioncookbook" rel="noopener noreferrer"&gt;https://github.com/theplaidscientist/fusioncookbook&lt;/a&gt;&lt;br&gt;
What it does&lt;br&gt;
Droid Tycoon’s fusion system has 17 not-so-secret recipes for new hybrid droids, across four rarity tiers, each one combining three specific parts into a new droid. Cross-referencing a static image against “wait, do I have two GONKs or one?” got old fast. So the tool is just:&lt;br&gt;
    • Tap each part as you collect it&lt;br&gt;
    • All three parts checked → the result lights up green, no more digging back through a screenshot&lt;br&gt;
    • Tap the result once you’ve actually fused it in-game → the row strikes through and fades, so what’s left on your list is only what’s left to do&lt;br&gt;
I kept having the issue where I had ⅔ of any equation, but nothing I could actually use.&lt;br&gt;
The build:&lt;br&gt;
Nothing fancy on purpose — it’s a single index.html, vanilla JavaScript, no framework, no build step. I just wanted an easy persistent checklist that wasn’t dependent on my paying too much attention.&lt;br&gt;
The one detail I actually like: progress saves to localStorage, keyed per recipe, so closing the tab or restarting your phone doesn’t lose your checkmarks — but nothing leaves your device and there’s no account to manage. Add it to your home screen via browser and it behaves like its own tiny app.&lt;/p&gt;

&lt;p&gt;It’s an unofficial fan tool — not affiliated with Epic Games, Lucasfilm, or Disney — just something I wanted to exist and didn’t see anywhere else.&lt;br&gt;
What’s next&lt;br&gt;
This is the first in a series I’m doing on Plaid Labs, a little hub of web experiments I keep building for myself and then figure other people might want too — there’s also Daily Doodle, a drawing-prompt generator, with more on the way.&lt;br&gt;
Have you ever built something to make your video game more fun? What was it?&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
