<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Questadon</title>
  <subtitle>Questions, experiments, and creations as Sarah Brown (that&#39;s me) adventures through code and dice rolls.</subtitle>
  <link href="https://questadon.com/feed.xml" rel="self" />
  <link href="https://questadon.com/" />
  <updated>2026-02-02T00:00:00Z</updated>
  <id>https://questadon.com/</id>
  <author>
    <name>Sarah Brown</name>
  </author>
  <entry>
    <title>AI Rule Reference Tool for Nimble TTRPG</title>
    <link href="https://questadon.com/projects/ai-rule-search-tool-for-nimble-ttrpg/" />
    <updated>2025-04-23T00:00:00Z</updated>
    <id>https://questadon.com/projects/ai-rule-search-tool-for-nimble-ttrpg/</id>
    <content type="html">&lt;h2 id=&quot;the-final-(for-now)-result&quot; tabindex=&quot;-1&quot;&gt;The Final (for now) Result&lt;/h2&gt;
&lt;p&gt;I built a &lt;strong&gt;hosted searchable web app&lt;/strong&gt; that uses Python and Flask to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingest and chunk PDFs&lt;/li&gt;
&lt;li&gt;Run fast keyword and fuzzy searches&lt;/li&gt;
&lt;li&gt;Display results in an easy-to-read web UI&lt;/li&gt;
&lt;li&gt;Highlight relevant matches&lt;/li&gt;
&lt;li&gt;Provide citation-style links back to the original PDF section&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s not a full chatbot or vector-powered retrieval system—it&#39;s &lt;strong&gt;deliberately simpler and faster&lt;/strong&gt;. I wanted something my group could use on the fly during sessions, with no money down.&lt;/p&gt;
&lt;p&gt;Hosted on Render: &lt;a href=&quot;https://nimble-rules.onrender.com/search&quot;&gt;Nimble Rules Search&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Give it a bit to spin up! Then use password: Hopscotch&lt;/p&gt;
&lt;p&gt;Poke through my build here, too, if you&#39;d like: &lt;a href=&quot;https://github.com/sae-br/nimble-rules&quot;&gt;Nimble Rules - GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-i-set-out-to-build&quot; tabindex=&quot;-1&quot;&gt;What I Set Out to Build&lt;/h2&gt;
&lt;p&gt;So with my long-running online TTRPG group, we play using a game system that&#39;s pretty new called Nimble. Unlike other Table-Top Role Playing Games like Dungeons and Dragons, there aren&#39;t many tools or references made for this one. Since we are all learning the system together, I wanted an easy way to &lt;strong&gt;look up specific rules from the Nimble rules PDFs during gameplay&lt;/strong&gt;—without constantly flipping through 100-page rulebooks or opening the different files and wondering which ones my answer would be in. I also wanted to make it lightweight, private for just my group&#39;s use, and &lt;strong&gt;hostable for free&lt;/strong&gt;, without needing to train an expensive AI model or rely on external APIs.&lt;/p&gt;
&lt;h2 id=&quot;options-i-explored-(and-why-i-didn%E2%80%99t-use-them)&quot; tabindex=&quot;-1&quot;&gt;Options I Explored (and Why I Didn’t Use Them)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool/Option&lt;/th&gt;
&lt;th&gt;Why I Looked at It&lt;/th&gt;
&lt;th&gt;Why I Didn’t Use It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT API&lt;/td&gt;
&lt;td&gt;Natural language support&lt;/td&gt;
&lt;td&gt;$$$ and not self-hosted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT4All&lt;/td&gt;
&lt;td&gt;Local LLM inference&lt;/td&gt;
&lt;td&gt;Too heavy for this use case&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pinecone/Weaviate&lt;/td&gt;
&lt;td&gt;Vector DB for semantic search&lt;/td&gt;
&lt;td&gt;Overkill for keyword-based queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangChain&lt;/td&gt;
&lt;td&gt;Full retrieval pipeline&lt;/td&gt;
&lt;td&gt;Added too much complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatPDF / PDF.ai&lt;/td&gt;
&lt;td&gt;Fast for individuals&lt;/td&gt;
&lt;td&gt;Not private or customizable or free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I realized I didn&#39;t actually need natural language processing—&lt;strong&gt;keyword and fuzzy matching was enough&lt;/strong&gt;. The goal wasn’t “conversational,” just &lt;strong&gt;fast, accurate rule recall&lt;/strong&gt;. I might expand on this in the future, but as a starting tool, I wanted to simplify my goal here.&lt;/p&gt;
&lt;h2 id=&quot;tools-and-tech-used&quot; tabindex=&quot;-1&quot;&gt;Tools and Tech Used&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt; (core script + backend logic)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flask&lt;/strong&gt; (lightweight web server)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PyMuPDF&lt;/strong&gt; (&lt;code&gt;fitz&lt;/code&gt;) for PDF parsing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FuzzyWuzzy&lt;/strong&gt; (for fuzzy matching)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML/CSS&lt;/strong&gt; (basic templating)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VS Code&lt;/strong&gt; for development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Render.com&lt;/strong&gt; (free tier deployment)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt; for vibe coding and learning&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-i-learned&quot; tabindex=&quot;-1&quot;&gt;What I Learned&lt;/h2&gt;
&lt;p&gt;This was one of my first practical experiments applying lightweight AI techniques for personal use. I learned a ton about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keeping scope tight&lt;/li&gt;
&lt;li&gt;Deploying apps (I had never uploaded to GitHub before!)&lt;/li&gt;
&lt;li&gt;Creating a front-end interface&lt;/li&gt;
&lt;li&gt;Chunking and adjusting weighting&lt;/li&gt;
&lt;li&gt;NLPs in general, what&#39;s out there and what they can do&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;updates-i&#39;m-considering&quot; tabindex=&quot;-1&quot;&gt;Updates I&#39;m Considering&lt;/h2&gt;
&lt;p&gt;I might like to update this project with features like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Natural Language Processing for search&lt;/li&gt;
&lt;li&gt;A streamlined way to upload new PDF versions&lt;/li&gt;
&lt;li&gt;A &amp;quot;clear search&amp;quot; option&lt;/li&gt;
&lt;li&gt;A front-end that&#39;s actually designed&lt;/li&gt;
&lt;li&gt;Obviously Nimble won&#39;t be happy to give their PDFs away for free via my search tool; I wonder if I can figure out a way to make it a searchable tool anyone beyond my group can use but not put their IP at risk?&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Have you built something similar? How did you do it differently? Whether it&#39;s another PDF reference tool or just another tool for a TTRPG like Nimble, I&#39;d be super curious to take a peek and learn what worked for you!&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Planting the first seed</title>
    <link href="https://questadon.com/digital-garden/first-garden-note/" />
    <updated>2025-04-23T00:00:00Z</updated>
    <id>https://questadon.com/digital-garden/first-garden-note/</id>
    <content type="html">&lt;p&gt;Welcome to the beginning of &lt;strong&gt;Questadon&lt;/strong&gt;, my little plot of cloud-soil where I’ll be documenting what I learn, make, and experiment with. A place where I can try things out, document the weird and wonderful bits of the process, and hopefully connect with others doing the same.&lt;/p&gt;
&lt;p&gt;My goal is simple: &lt;strong&gt;use this site as a no-budget learning project where I house my other learning and creative projects—and maybe some random thoughts along the way!&lt;/strong&gt; I&#39;m hoping to build things that are thoughtful, fast, and sustainable. And end up with stuff that I actually personally use!&lt;/p&gt;
&lt;h2 id=&quot;why-i%E2%80%99m-doing-this&quot; tabindex=&quot;-1&quot;&gt;Why I’m doing this&lt;/h2&gt;
&lt;p&gt;So, I&#39;m primarily a designer and marketer; I’ve been creating websites for years (2008, yikes) using platforms like Webflow. I had never been really interested in the nuts and bolts of programming, but hello 2025 and crazy-times-in-the-world, suddenly I find myself feeling a lot more digital-DIY-inclined.&lt;/p&gt;
&lt;p&gt;I want the things I make to reflect how I work and what I value. That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keeping things &lt;strong&gt;lean and performant&lt;/strong&gt; (small page sizes, optimized images, reasonable JS, eventually light/dark mode)&lt;/li&gt;
&lt;li&gt;Building on other people&#39;s work—no need to reinvent the wheel for the sake of it, use what&#39;s already out there and put it together in new ways that work for me&lt;/li&gt;
&lt;li&gt;Crediting the amazing people, tools, and small companies I learn from along the way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The core constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No/minimal money down&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environmentally mindful&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning-focused above all&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make stuff I want!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y&#39;all, I don&#39;t know what I&#39;m doing here. If you&#39;re doing something similar, say hi! Seeing people working on stuff that makes the digital world safer, more environmentally-sustainable, more accessible to all, and better for humans in general—that stuff gives me hope.&lt;/p&gt;
&lt;h2 id=&quot;my-starting-point&quot; tabindex=&quot;-1&quot;&gt;My starting point&lt;/h2&gt;
&lt;p&gt;Where am I starting from? I&#39;m relatively familiar with HTML and CSS, and I’ve just taken my first dip into Python and JavaScript. My learning will be assisted by AI, I&#39;m gonna vibe-code my way through a lot of this (yep, really inviting the hate from that comment), but as I immerse myself in these projects I&#39;ll be looking to learn from other sources as well.&lt;/p&gt;
&lt;p&gt;I&#39;m starting with just building this website, though I have a couple other projects already in progress. What I&#39;ve done so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Picked &lt;strong&gt;Obsidian&lt;/strong&gt; to track my learning and outline content&lt;/li&gt;
&lt;li&gt;Chose &lt;strong&gt;11ty&lt;/strong&gt; as my static site generator for this website&lt;/li&gt;
&lt;li&gt;Planned a &lt;strong&gt;Digital Garden&lt;/strong&gt; (posts like this, built as a learn-in-public journal)&lt;/li&gt;
&lt;li&gt;Consolidated some &lt;strong&gt;Projects&lt;/strong&gt; I&#39;ve already been working on—builds, experiments, useful tools&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;This is only the beginning—but I’m already learning a lot. And that’s kind of the whole point.&lt;/p&gt;
&lt;p&gt;Let’s see where this takes me.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ye Ole Youtube GA Tracking (According to Bards from 2013)</title>
    <link href="https://questadon.com/digital-garden/youtube-ga-tracking-according-to-bards/" />
    <updated>2025-05-09T00:00:00Z</updated>
    <id>https://questadon.com/digital-garden/youtube-ga-tracking-according-to-bards/</id>
    <content type="html">&lt;p&gt;Okay, one of my favourite things lately is crawling under the hoods of websites to find jewels like this, which was written back in 2013 (and therefore might be super outdated but entertaining nonetheless).&lt;/p&gt;
&lt;p&gt;It&#39;s a bit like geocaching, eh? Devs leave fun little treasures somewhere, and someone finds it 13 years later and is just delighted. Humans can be great.&lt;/p&gt;
&lt;p&gt;Looks like Lunametrics belongs to a different company now, but props to Sayf Sharif and whoever else may have crafted yon rousing ditty. Thy notes hath mightily informed me of the mad reasonings behind thy creation.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;//To Track Thy Youtube Upon Google Analytics&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Regardless the number of Players upon thy stage&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Performed by LunaMetrics http://www.lunametrics.com @lunametrics &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//and Sayf Sharif @sayfsharif&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Who beg thy forgiveness for the lack of the regular expression&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Forget thou not to subscribeth to our bloge: http://www.lunametrics.com/blog/&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//CURTAIN&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Forsooth here doth we instantiate thy youtube player api &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//as it was written by the Google&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; tag &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;script&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
tag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;src &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;//www.youtube.com/iframe_api&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; firstScriptTag &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementsByTagName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;script&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
firstScriptTag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parentNode&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;insertBefore&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; firstScriptTag&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Then as a drop of rain we create two heavenly arrays&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//who may hold in thy endless bossom our value&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; videoArray &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; playerArray &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//twixt the jquery we fly to watch as the eagle does the mouse&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//for the wanderous devil known as the iframe&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;trackYouTube&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//What am i, but nothing?&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//Harken to the iframes of the page&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//thy loathesome demon gallavanting upon&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//our innocent sweet html&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;jQuery&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;iframe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//but what is this?&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//an iframe! Avast!&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; video &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//it has a source!&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//Lo we can see it&#39;s innards&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//as Han was wont to slice the tauntaun&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; vidSrc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			vidSrc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; video&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;src&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//We shall check the source&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//there are but two responses&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//lo ere the response incorrect&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;//we shall ignore it.&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;vidSrc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;vidSrc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;http://www.youtube.com/embed/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//It is a YouTube video!&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//Rip apart it&#39;s source to obtain it&#39;s&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//vile beating heart, the youtube id&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; youtubeid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vidSrc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;youtubeid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;?rel=0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
						&lt;span class=&quot;token comment&quot;&gt;//cut off last 6 digits as hannibal did to atreides&lt;/span&gt;
						&lt;span class=&quot;token comment&quot;&gt;//and offer them to your gods&lt;/span&gt;
						cutlength &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
						youtubeid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;cutlength&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//we now place the beating heart of the youtube id&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//in our first heavenly array&lt;/span&gt;
					videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//and then mark the vile iframe beast&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//with the id of this video so that all&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//may know it, and reference it&lt;/span&gt;
					&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//And for this, I am no longer nothing, I am more&lt;/span&gt;
					i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;			
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;vidSrc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://www.youtube.com/embed/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//Again! But this time it is wearing armor&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//Lo, the beast video may think it is &lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//protected, but not from our might&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//rip out it&#39;s heart again&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; youtubeid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vidSrc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;youtubeid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;?rel=0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
						&lt;span class=&quot;token comment&quot;&gt;//again cut off last 6 digits as hannibal did to atreides&lt;/span&gt;
						&lt;span class=&quot;token comment&quot;&gt;//but this time burn them as an offering to the four winds&lt;/span&gt;
						cutlength &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
						youtubeid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;cutlength&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//and once again place this demonic youtube id&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//into the possession of the array where it shall hold&lt;/span&gt;
					videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//and again mark the vile id onto the iframe&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//so all may know it.&lt;/span&gt;
					&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; youtubeid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//once more my worth increases, i am again incremented&lt;/span&gt;
					i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;					
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//An iframe, but not one we see as that containing&lt;/span&gt;
					&lt;span class=&quot;token comment&quot;&gt;//a source of the youtube. These we shall let pass&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;	
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//The beginning!&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//Sometimes buried deep within the story&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//but here we start our tale in earnest&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//begin our quest to find the foul iframes&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;//so infected with the source of the youtube&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;trackYouTube&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;jQuery&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//When the API of YouTube doth load, it will call&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//as if by magic&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//this function or code. &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//be ready&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;onYouTubeIframeAPIReady&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//Now the battle is engaged&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//we sweep through our array and reference the&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//beating hearts of the youtube id&#39;s&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//We then create a new holy object into our&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//second array, by referencing each beating&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//youtube id heart, and tell it wence it&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//shall act upon events&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; videoArray&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		playerArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;YT&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Player&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token literal-property property&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token string-property property&quot;&gt;&#39;onReady&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; onPlayerReady&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token string-property property&quot;&gt;&#39;onStateChange&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; onPlayerStateChange
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;		
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Should one wish our monstrous video to play upon load&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//we could set that here. But for us. We shall let it&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//sleep. Sleep video. Await thy time.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;onPlayerReady&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//event.target.playVideo();&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//When our caged monster wishes to act&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//we are ready to hold it&#39;s chains&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//and enslave it to our will.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;onPlayerStateChange&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
	&lt;span class=&quot;token comment&quot;&gt;//it tries to trick us with a number one greater than&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//that of our arrays. But we outsmart it.&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//with math.&lt;/span&gt;
	videoarraynum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//Should the video rear it&#39;s head&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;YT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PlayerState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;PLAYING&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		_gaq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;_trackEvent&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Videos&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Play&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;videoarraynum&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 
	&lt;span class=&quot;token comment&quot;&gt;//should the video tire out and cease&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;YT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PlayerState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ENDED&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		_gaq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;_trackEvent&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Videos&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Watch to End&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;videoarraynum&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 
	&lt;span class=&quot;token comment&quot;&gt;//and should we tell it to halt, cease, heal.&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;YT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PlayerState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;PAUSED&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		_gaq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;_trackEvent&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Videos&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Pause&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;videoarraynum&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//and should the monster think, before it doth play&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//after we command it to move&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;YT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PlayerState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;BUFFERING&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		_gaq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;_trackEvent&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Videos&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Buffering&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;videoarraynum&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//and should it cue&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;//for why not track this as well.&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;YT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;PlayerState&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;CUED&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		_gaq&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;_trackEvent&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Videos&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Cueing&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; videoArray&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;videoarraynum&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 





&lt;span class=&quot;token literal-property property&quot;&gt;Note&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; This tracks multiple videos on a web page by their id&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Random Project Idea Generator</title>
    <link href="https://questadon.com/projects/idea-generator/" />
    <updated>2025-05-16T00:00:00Z</updated>
    <id>https://questadon.com/projects/idea-generator/</id>
    <content type="html">&lt;h2 id=&quot;the-final-result&quot; tabindex=&quot;-1&quot;&gt;The Final Result&lt;/h2&gt;
&lt;p&gt;My very first JavaScript learning project started as a quote generator with a button. But then I turned it into something more fun and &amp;quot;me&amp;quot;—a &lt;strong&gt;random project idea machine&lt;/strong&gt; that combines three elements to generate prompts like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“An alarm system for small business owners preparing for the end times.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Each time you click the button, a new combination is generated from three curated lists. I also integrated it cleanly into my &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; site, styled it, and added logic to avoid repeat results.&lt;/p&gt;
&lt;p&gt;You can see it live &lt;strong&gt;at the bottom of my homepage!&lt;/strong&gt; Give it a whirl!&lt;/p&gt;
&lt;h2 id=&quot;what-i-set-out-to-build&quot; tabindex=&quot;-1&quot;&gt;What I Set Out to Build&lt;/h2&gt;
&lt;p&gt;Initially I just wanted to practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing basic JavaScript functions&lt;/li&gt;
&lt;li&gt;Selecting elements with &lt;code&gt;getElementById&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Using event listeners&lt;/li&gt;
&lt;li&gt;Randomizing items from an array&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I started by creating a basic quote generator that displayed a random inspirational quote from an array.&lt;/p&gt;
&lt;p&gt;I used &lt;a href=&quot;https://medium.com/@nambilucia/lets-build-a-simple-random-quote-generator-in-vanilla-js-50b13fcd9c39&quot;&gt;this article tutorial for a random quote generator&lt;/a&gt; to get me started, because it was recent and uses vanilla javascript. Thanks Lucia Nambi! 🙌&lt;/p&gt;
&lt;p&gt;I went through all the code and had AI walk me through the concepts used (and it assigned me a bunch of practices for converting traditional functions to arrow functions, because I was really getting stuck on that.)&lt;/p&gt;
&lt;p&gt;Once I understood how this separate little app worked on its own, I wanted to integrate it into my site and make it more &amp;quot;me&amp;quot;.&lt;/p&gt;
&lt;p&gt;I&#39;m not much of a quote person. So I was like, what if instead it was an idea generator?&lt;/p&gt;
&lt;p&gt;And I figured from what I had learned about &lt;code&gt;Math.floor(Math.random() * quotes.length)&lt;/code&gt; there had to be a way to do this for three sets of information and then just display them all as a single string.&lt;/p&gt;
&lt;p&gt;There was. Yay!&lt;/p&gt;
&lt;h2 id=&quot;how-i-built-it&quot; tabindex=&quot;-1&quot;&gt;How I Built It&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I created three separate arrays (&lt;code&gt;ideas1&lt;/code&gt;, &lt;code&gt;ideas2&lt;/code&gt;, &lt;code&gt;ideas3&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;I used a single function (&lt;code&gt;getRandomItem&lt;/code&gt;) to select a random item from each&lt;/li&gt;
&lt;li&gt;I displayed the full result using &lt;code&gt;innerHTML&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I added a reusable function to &lt;strong&gt;avoid repeating the same value twice in a row&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once it worked in a standalone folder, I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Created a Nunjucks partial (&lt;code&gt;quote-box.njk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Inserted it as an include on my Eleventy homepage&lt;/li&gt;
&lt;li&gt;Moved the script into &lt;code&gt;/assets/quote.js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Styled it using scoped class names (&lt;code&gt;.quote-section&lt;/code&gt;, &lt;code&gt;.quote-output&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Tweaked line widths with &lt;code&gt;max-width: 30ch&lt;/code&gt; for better multi-line balance&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-i-learned-about-javascript&quot; tabindex=&quot;-1&quot;&gt;What I Learned About JavaScript&lt;/h2&gt;
&lt;p&gt;This project taught me a lot about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DOM manipulation (&lt;code&gt;document.getElementById&lt;/code&gt;, &lt;code&gt;innerHTML&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Array use cases (especially selecting random items)&lt;/li&gt;
&lt;li&gt;Arrow functions vs. traditional functions&lt;/li&gt;
&lt;li&gt;Anonymous functions and callbacks&lt;/li&gt;
&lt;li&gt;The difference between &lt;code&gt;console.log()&lt;/code&gt; (for developers) vs. DOM updates (for users)&lt;/li&gt;
&lt;li&gt;How to avoid immediate repeats with index tracking&lt;/li&gt;
&lt;li&gt;Writing helper functions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also got more comfortable with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Structuring reusable components for static sites&lt;/li&gt;
&lt;li&gt;Separating concerns: logic in JS, layout in HTML, style in CSS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;code-snippets&quot; tabindex=&quot;-1&quot;&gt;Code Snippets&lt;/h2&gt;
&lt;p&gt;Here&#39;s what I ended up using, in case anyone cares for the quick look!&lt;/p&gt;
&lt;p&gt;quote-box.njk&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-section&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-h2&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;What to build? Find your next idea below!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-container&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-output&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-output&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;A scheduling app for calisthenics trainers who don&#39;t have thumbs.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quote-button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Fresh Idea&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;quote.js&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; button &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;quote-button&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; output &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;quote-output&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ideas1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;A baby name generator&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A haunted calendar&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A crowdsourced treasure map&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A vintage meme archive&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A judgmental productivity app&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A calorie calculator&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A smartwatch app&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A platformer game&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A financial dashboard&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A customer support chatbot&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A dating simulator&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A personality test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A virtual pet&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;An alarm system&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;A to-do list&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ideas2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;for marine biologists&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for Walmart greeters&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for small business owners&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;for high school teachers&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;for nice folks&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;for romantasy authors&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for competitive knitters&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for astronauts&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for introverted teens&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for dragons&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;for food bloggers&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for UX designers&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for conspiracy theorists&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;for lost souls&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ideas3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;trying not to fall asleep in a Zoom call.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;renting out their backyard tree fort.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;preparing for the end times.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;trying to impress their cat.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;who overthink everything.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;looking for love.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;who want to learn to play ukulele.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;with trust issues.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;obsessed with soup.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;training for American Ninja Warrior.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;learning to meditate.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;building community.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;fleeing the algorithm.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;planning a vacation.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token string&quot;&gt;&quot;organizing their neopet collection.&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getRandomItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lastIndex&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; index&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    index &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;index &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; lastIndex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; index&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; last1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last3&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

button&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;click&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;part1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i1&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getRandomItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ideas1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;part2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i2&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getRandomItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ideas2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;part3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i3&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getRandomItem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ideas3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  last1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; i1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  last2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; i2&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  last3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; i3&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fullIdea &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;part1&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;part2&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;part3&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  output&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fullIdea&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;styles.css&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/* Quote Box */&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.quote-section&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 2rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-align&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; center&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.quote-container&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;padding-bottom&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-bg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.quote-h2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1.25rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 600&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-secondary&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.quote-output&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 2rem auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1.6rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 600&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;max-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 30ch&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* sets a readable line length */&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-align&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; center&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;line-height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1.4&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.quote-button&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-primary&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.75rem 1.5rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 30px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; pointer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; background-color 0.2s ease-in-out&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.quote-button:hover&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-accent-dark&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Article Rebrand Tool (Python + .docx Parsing)</title>
    <link href="https://questadon.com/projects/article-rebrander-python-Word-document-converter/" />
    <updated>2025-05-24T00:00:00Z</updated>
    <id>https://questadon.com/projects/article-rebrander-python-Word-document-converter/</id>
    <content type="html">&lt;h2 id=&quot;the-final-(for-now)-result&quot; tabindex=&quot;-1&quot;&gt;The Final (for now) Result&lt;/h2&gt;
&lt;p&gt;I built a &lt;strong&gt;Python batch conversion tool&lt;/strong&gt; that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parses &lt;code&gt;.docx&lt;/code&gt; Word articles with old branding&lt;/li&gt;
&lt;li&gt;Extracts and preserves paragraph styles, headings, tables, hyperlinks, bold/italic/underline formatting&lt;/li&gt;
&lt;li&gt;Rewrites each document into a new branded Word template&lt;/li&gt;
&lt;li&gt;Outputs fully restructured, consistently formatted &lt;code&gt;.docx&lt;/code&gt; files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s not fancy, but it’s functional—&lt;strong&gt;no Word macros, no manual editing, no open/save/reopen/reformat/repeat.&lt;/strong&gt; You drop files into a folder, run the script, and boom: clean new versions ready to go!&lt;/p&gt;
&lt;p&gt;Here’s the repo: &lt;a href=&quot;https://github.com/sae-br/article-rebrand&quot;&gt;Article Rebrand - GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It’s not polished to perfection (yet), but it did help me crank through &lt;strong&gt;160 documents&lt;/strong&gt;, which feels p-rettyyyy dang satisfying. In its current version, I definitely did need to give them the manual review, but I figure maybe it can be improved for something in the future!&lt;/p&gt;
&lt;h2 id=&quot;what-i-set-out-to-build&quot; tabindex=&quot;-1&quot;&gt;What I Set Out to Build&lt;/h2&gt;
&lt;p&gt;I had a batch of old Word articles that needed to be rebranded to match a new template—complete with updated paragraph styles, cleaner layout, and no weird formatting artifacts from the early 2000s.&lt;/p&gt;
&lt;p&gt;Some had tables. Some had merged cells. Some had hyperlinks. Some used bullet lists. This is one of those tasks I&#39;ve done or assigned to people and it&#39;s just super tedious. So I tried making Python do it for me instead.&lt;/p&gt;
&lt;h2 id=&quot;tools-and-tech-used&quot; tabindex=&quot;-1&quot;&gt;Tools and Tech Used&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;python-docx&lt;/strong&gt; (for reading and writing &lt;code&gt;.docx&lt;/code&gt; files)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docx2python&lt;/strong&gt; (for reading Word textboxes)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lxml / XML tags&lt;/strong&gt; (for formatting hyperlinks and table borders)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VS Code&lt;/strong&gt; (for building it)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt; (first time posting a doc tool!)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-it-can-do-(current-state)&quot; tabindex=&quot;-1&quot;&gt;What It Can Do (Current State)&lt;/h2&gt;
&lt;p&gt;✅ Automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extracts and rewrites:
&lt;ul&gt;
&lt;li&gt;Titles&lt;/li&gt;
&lt;li&gt;Headings&lt;/li&gt;
&lt;li&gt;Paragraphs&lt;/li&gt;
&lt;li&gt;Bold / italic / underline styles&lt;/li&gt;
&lt;li&gt;Tables (with basic formatting)&lt;/li&gt;
&lt;li&gt;Hyperlinks&lt;/li&gt;
&lt;li&gt;Unordered lists (bullets)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❌ Still needs manual help with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ordered lists (numbered steps don’t auto-detect, so currently I&#39;ve got them outputting to unordered lists)&lt;/li&gt;
&lt;li&gt;Complex table formatting (merged cells, varied column widths, etc)&lt;/li&gt;
&lt;li&gt;Mixed formatting inside hyperlinks&lt;/li&gt;
&lt;li&gt;No image support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s good enough to &lt;em&gt;clean up a big pile of documents quickly&lt;/em&gt;, but not perfect.&lt;/p&gt;
&lt;h2 id=&quot;what-i-learned&quot; tabindex=&quot;-1&quot;&gt;What I Learned&lt;/h2&gt;
&lt;p&gt;Honestly? A TON, cuz this was way out of my depth. I think this is one I&#39;ll come back to later on and have lots of &amp;quot;ohhhhh, THAT&#39;s why that worked&amp;quot; moments.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How Word documents are built under the hood (hello XML rabbit hole)&lt;/li&gt;
&lt;li&gt;How to process structured text using &lt;code&gt;python-docx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;That hyperlinks in Word are surprisingly complicated&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;future-improvements&quot; tabindex=&quot;-1&quot;&gt;Future Improvements&lt;/h2&gt;
&lt;p&gt;Things I’d like to tackle next:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proper support for numbered lists&lt;/li&gt;
&lt;li&gt;Smarter handling of tables&lt;/li&gt;
&lt;li&gt;Maybe image support?&lt;/li&gt;
&lt;li&gt;Add a third step (or separate program?) to batch convert the .docx to .pdf to round out the process after manual review&lt;/li&gt;
&lt;li&gt;Real error handling and logs perhaps?&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;If you’ve done something similar—maybe rebranding Word docs, building document processing pipelines, or working with styled exports—I’d love to hear how you handled the hard parts. And if you have suggestions on how to fix any of the stuff I couldn&#39;t figure out, PLEASE BE MY HERO AND SAY SOMETHING.&lt;/p&gt;
&lt;p&gt;Okay, that&#39;s a wrap for now.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Rebranding Word Documents to Use a New Branded Template (A First Attempt at python-docx and docx2python)</title>
    <link href="https://questadon.com/digital-garden/rebranding-word-documents-using-pythondocx/" />
    <updated>2025-05-24T00:00:00Z</updated>
    <id>https://questadon.com/digital-garden/rebranding-word-documents-using-pythondocx/</id>
    <content type="html">&lt;p&gt;I made this because I had 160 articles to rebrand for work, and figured I&#39;d make a personal project of it. But gosh, this pushed way beyond what I&#39;ve worked with before.&lt;/p&gt;
&lt;p&gt;The goal was to reformat old .docx articles into a clean new branded style using a Word template, all as a batch.&lt;/p&gt;
&lt;p&gt;I learned about the python-docx library, low-level XML manipulation, and building structured content transformation pipelines... this was all super new for me and probably more advanced than I SHOULD have gone at my current level. But hey, pretty in character for me to throw myself into the deep end and try not to drown. ;)&lt;/p&gt;
&lt;p&gt;I&#39;ve got a parser.py to detect elements of the old docs and a writer.py to create the new docs, and a convert.py for single file tests and convert_batch.py for all 160 (no limit I&#39;m aware of?).&lt;/p&gt;
&lt;p&gt;Here&#39;s the &lt;a href=&quot;https://github.com/sae-br/Article-Rebrand&quot;&gt;GitHub folder&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;libraries-and-tools-i-used&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;Libraries and Tools I Used&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;python-docx&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;python-docx&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://pypi.org/project/python-docx/&quot;&gt;Documentation&lt;/a&gt; - &lt;a href=&quot;https://pypi.org/user/scanny/&quot;&gt;Many thanks to Scanny!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I used this library to read and write Word .docx files. Most of the document structure work happened with this.&lt;/p&gt;
&lt;p&gt;Key things I worked with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Document(...)&lt;/code&gt; – to create or load a .docx&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.add_paragraph()&lt;/code&gt; and &lt;code&gt;.add_run()&lt;/code&gt; – to insert styled text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.add_table()&lt;/code&gt; – to generate and format tables&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.paragraphs[0]._element.getparent().remove(...)&lt;/code&gt; – this was used to delete placeholder content from my Word template&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were a few things I wanted to do that python-docx can’t handle out of the box—like clickable hyperlinks, table cell borders, and padding. So I dropped down into the WordprocessingML XML layer, which I still don&#39;t think I quite understand yet, to be honest.&lt;/p&gt;
&lt;p&gt;Key functions and objects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;OxmlElement(...)&lt;/code&gt; – to create custom XML tags like &lt;code&gt;&amp;lt;w:hyperlink&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;w:r&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;w:tcBorders&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parse_xml(...)&lt;/code&gt; – to convert a raw XML string into an element&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qn(...)&lt;/code&gt; – to apply the correct namespace prefix to tags&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;docx2python&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;docx2python&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://pypi.org/project/docx2python/&quot;&gt;Documentation&lt;/a&gt; - &lt;a href=&quot;https://pypi.org/user/ShayHill/&quot;&gt;Many thanks to ShayHill!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Used only for extracting the title text from textboxes, since python-docx can’t read headers or textboxes very well.&lt;/p&gt;
&lt;p&gt;This was a good learning stretch for me and helped me understand how Word documents are really structured under the hood.&lt;/p&gt;
&lt;h2 id=&quot;design-elements-my-article-rebrander-can-(and-can&#39;t)-handle&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;Design Elements My Article Rebrander Can (and Can&#39;t) Handle&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;paragraph-types&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;Paragraph Types&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The parser detects these block types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;heading2, heading3&lt;/li&gt;
&lt;li&gt;paragraph&lt;/li&gt;
&lt;li&gt;list_item (used for both bulleted and numbered lists for now)&lt;/li&gt;
&lt;li&gt;table&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each type is output with the correct style name from my template (like “Body Text”, “List Paragraph”, etc). This gave me full control over the final formatting.&lt;/p&gt;
&lt;h3 id=&quot;lists&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;Lists&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Unordered and ordered list detection was trickier than expected. I spent like 2 hours trying things that kept not working for the ordered lists.&lt;/p&gt;
&lt;p&gt;For now, I settled on treating all list items as list_item, and styled them uniformly as unordered lists. Hyperlinked text inside list items is also supported.&lt;/p&gt;
&lt;p&gt;Partial win here.&lt;/p&gt;
&lt;h3 id=&quot;tables&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;Tables&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Tables are generated row by row, and for each cell:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Borders are added (light grey)&lt;/li&gt;
&lt;li&gt;Internal margins/padding are applied&lt;/li&gt;
&lt;li&gt;Text formatting (bold, italic, underline) is preserved&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This only works for simple tables. For example merged cells, column widths, and specific table formatting isn&#39;t preserved.&lt;/p&gt;
&lt;p&gt;Another partial win!&lt;/p&gt;
&lt;h2 id=&quot;things-i&#39;m-learning-as-a-programming-noob&quot; tabindex=&quot;-1&quot;&gt;&lt;strong&gt;Things I&#39;m Learning as a Programming Noob&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;This project helped me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand how to use python-docx for both reading and writing Word content&lt;/li&gt;
&lt;li&gt;Dive into XML-based formatting using OxmlElement&lt;/li&gt;
&lt;li&gt;Improve my ability to modularize code and handle complex document structures&lt;/li&gt;
&lt;li&gt;Debug layout issues that didn’t come from syntax errors but from subtle Word styling quirks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I encountered some small pieces for the first time as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wrote my first README.md file&lt;/li&gt;
&lt;li&gt;Learned what a .gitignore is and used one&lt;/li&gt;
&lt;li&gt;I didn&#39;t realize you can&#39;t comment in a JSON file, but now I know!&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;tested out GitHub Copilots and to be honest, it wasn&#39;t a win for me.&lt;/strong&gt; It misunderstood my instructions and gave incorrect responses for almost all the things I wanted it to do, so I fell back on my good faithful non-optimal ChatGPT. Which sent me in circles on the ordered list issue for a long time but helped me find the libraries, figure out how to implement them, and get to where I got with this!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This was a stretch project for me and a rewarding one—I built something genuinely useful, and got much better at handling real-world Python code in the process.&lt;/p&gt;
&lt;p&gt;I don&#39;t know if I SAVED myself time on converting those articles, ha, but I learned a heck of a lot more than I would have by monotonously doing them all manually one by one.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ice-Fishing Mini Game (5e Compatible, Rules-Light)</title>
    <link href="https://questadon.com/projects/ice-fishing-mini-game/" />
    <updated>2026-01-28T00:00:00Z</updated>
    <id>https://questadon.com/projects/ice-fishing-mini-game/</id>
    <content type="html">&lt;p class=&quot;lead&quot;&gt;A two-part winter festival mini-game for your table: an ice fishing competition followed by a creature battle royale. Perfect for a holiday one-shot or a fun side activity in your campaign.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://questadon.com/img/gZuXXbspZ9-450.webp 450w, https://questadon.com/img/gZuXXbspZ9-900.webp 900w, https://questadon.com/img/gZuXXbspZ9-1800.webp 1800w&quot; sizes=&quot;900px&quot;&gt;&lt;img src=&quot;https://questadon.com/img/gZuXXbspZ9-450.png&quot; alt=&quot;Preview of the creature cards&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;1200&quot; srcset=&quot;https://questadon.com/img/gZuXXbspZ9-450.png 450w, https://questadon.com/img/gZuXXbspZ9-900.png 900w, https://questadon.com/img/gZuXXbspZ9-1800.png 1800w&quot; sizes=&quot;900px&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Every year, my online group holds a special event called Fishapalooza, where each of us &amp;quot;hosts&amp;quot; a stall or runs a one-shot taking place at a festival all about FISH. Sometimes it&#39;s on a tropical island, sometimes it&#39;s in a cute bustling port town, and one year we did it in December so we set it in the polar north at Christmas. This is a very silly mini-game anyone can slide into their party&#39;s adventure for some fierce yet nonviolent festival fun.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&#39;s included:&lt;/strong&gt; This post contains all the rules you need to run this event. While we were playing using Nimble, this is just as compatible with D&amp;amp;D and easily tweaked for other systems. I also made digital creature cards and tokens this—download links are at the bottom. &lt;a href=&quot;https://questadon.com/projects/ice-fishing-mini-game/#downloads&quot;&gt;++ Skip to downloads&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;part-1%3A-ice-fishing-race&quot; tabindex=&quot;-1&quot;&gt;Part 1: Ice Fishing Race&lt;/h2&gt;
&lt;h3 id=&quot;setting-the-scene&quot; tabindex=&quot;-1&quot;&gt;Setting the Scene&lt;/h3&gt;
&lt;p&gt;Out on the frozen ocean, holes have been cut into the ice. Hefty fishing rods with odd-shaped hooks wait nearby—upon closer inspection, the hooks seem to have some kind of paralytic catch-and-release system installed.&lt;/p&gt;
&lt;p&gt;A crowd of spectators is gathering to watch the competition. The holes are surprisingly big... what could be lurking below the ice?&lt;/p&gt;
&lt;h3 id=&quot;how-it-works&quot; tabindex=&quot;-1&quot;&gt;How It Works&lt;/h3&gt;
&lt;p&gt;This is a timed event: &lt;strong&gt;how many fish can you catch in 4 rounds?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each round, players:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Describe their approach.&lt;/strong&gt; Ask them: &amp;quot;What stat is your character rolling with? How are you trying to catch fish?&amp;quot; The stranger the better, really—let that RP shine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Roll the dice.&lt;/strong&gt; The result determines which creature they catch (see table below).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Record the catch.&lt;/strong&gt; Track what each player catches—they&#39;ll need these creatures for Part 2.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;catch-table&quot; tabindex=&quot;-1&quot;&gt;Catch Table&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Roll&lt;/th&gt;
&lt;th&gt;Creature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1–5&lt;/td&gt;
&lt;td&gt;Nothing!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6–8&lt;/td&gt;
&lt;td&gt;Tohohoad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9–11&lt;/td&gt;
&lt;td&gt;Pirhanukka&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12–15&lt;/td&gt;
&lt;td&gt;Chrab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16–19&lt;/td&gt;
&lt;td&gt;Snanta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;td&gt;Octomas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;We played with low-level characters. Adjust the ranges to suit your party!&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;running-the-event&quot; tabindex=&quot;-1&quot;&gt;Running the Event&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Make it dramatic!&lt;/strong&gt; When someone catches a new creature for the first time, describe it with flair. The teeth are gnashing! The tentacles are tentacle-ing!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Track catches on a shared table.&lt;/strong&gt; Here&#39;s an example:&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Player&lt;/th&gt;
&lt;th&gt;Tohohoad&lt;/th&gt;
&lt;th&gt;Pirhanukka&lt;/th&gt;
&lt;th&gt;Chrab&lt;/th&gt;
&lt;th&gt;Snanta&lt;/th&gt;
&lt;th&gt;Octomas&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bash&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verinya&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zid&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hank&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Speed things up after Round 1.&lt;/strong&gt; Have each player roll their remaining 3 rounds at once, and go through them one person at a time. Just make sure anyone who pulls up a new creature gets the full fanfare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accidents happen.&lt;/strong&gt; If a stray NPC gets snapped up by something with teeth... well, it&#39;s a dangerous place.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After everyone&#39;s caught (and released) their catches, have the spectators cheer and usher them into a nearby tent.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;part-2%3A-creature-battle-royale&quot; tabindex=&quot;-1&quot;&gt;Part 2: Creature Battle Royale&lt;/h2&gt;
&lt;h3 id=&quot;setting-the-scene-1&quot; tabindex=&quot;-1&quot;&gt;Setting the Scene&lt;/h3&gt;
&lt;p&gt;Inside the large tent, it&#39;s dark except for a small pedestal illuminated at the centre of the room. Magic wisps around it. As you approach, you recognize the pedestal as a recreation of the shoreline outside, but less frozen over, with tiny icebergs floating in the water.&lt;/p&gt;
&lt;p&gt;Leaning in closer, little shapes wiggle around in the water—you recognize miniature conjurations of the creatures you caught outside.&lt;/p&gt;
&lt;p&gt;The spectators around you, hushed as you entered, now begin to slowly chant: &amp;quot;Fight! Fight! Fight!&amp;quot;&lt;/p&gt;
&lt;h3 id=&quot;fish-fight!&quot; tabindex=&quot;-1&quot;&gt;Fish Fight!&lt;/h3&gt;
&lt;p&gt;Players use the creatures they caught in Part 1 to battle it out in a tiny magical arena. &lt;strong&gt;The player with the last creature standing wins!&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;setup&quot; tabindex=&quot;-1&quot;&gt;Setup&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Share the creature cards so everyone can see each creature&#39;s stats and abilities.&lt;/li&gt;
&lt;li&gt;I drew up a very simple map the day of, with mostly water but some icebergs and shoreline.&lt;/li&gt;
&lt;li&gt;Populate your arena with tokens for each player&#39;s catches. (I used Owlbear Rodeo with my online group, and put coloured rings around tokens to show which player owns each creature. To each their own for choice of VTT!)&lt;/li&gt;
&lt;li&gt;Give your players a verbal rundown of the simplified combat rules below, then roll initiative!&lt;/li&gt;
&lt;li&gt;Use the initiative order to have each player choose where their fish begin in the arena. (I just assigned corners since I had 4 players.)&lt;/li&gt;
&lt;li&gt;FIGHT TO THE (magically simulated) DEATH!&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;simplified-combat-rules&quot; tabindex=&quot;-1&quot;&gt;Simplified Combat Rules&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Three action points per round.&lt;/strong&gt; On your turn, you can use an action point to have a creature move or attack, in any combination. You can spend all your Action Points on 1 creature or use them on different creatures. If you take a reaction (Octomas) while it&#39;s someone else&#39;s turn, you have one less Action Point the next time you take your turn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No attack rolls.&lt;/strong&gt; If you&#39;re in reach, just roll damage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Movement:&lt;/strong&gt; All creatures can swim. Some can also move on land/ice (check their stat card for &amp;quot;speed&amp;quot; vs &amp;quot;swim&amp;quot;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abilities:&lt;/strong&gt; Each creature has special actions noted on their card.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;We were using Nimble not D&amp;amp;D at the time; the action point system above is based on how combat works in Nimble!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-prize&quot; tabindex=&quot;-1&quot;&gt;The Prize&lt;/h2&gt;
&lt;p&gt;What does the winner get? It could be a pile of gold. It could be a cake shaped like one of their creatures. In our game, it was...&lt;/p&gt;
&lt;h3 id=&quot;pink-pufflepill-gillfish&quot; tabindex=&quot;-1&quot;&gt;Pink Pufflepill Gillfish&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Wondrous Item, Requires Attunement&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A pink fish the size of a fingernail floats demurely in the water before you—possibly the cutest fish you have ever seen. When swallowed alive, the Pink Pufflepill Gillfish grants its power to the swallower.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attunement:&lt;/strong&gt; A creature attunes to this item by swallowing it alive, gaining the following benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Charisma Boost.&lt;/strong&gt; Your Charisma score becomes 19 while you have the fish in your body. This has no effect if your Charisma is already 19 or higher.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aquatic Charm.&lt;/strong&gt; You have advantage on Charisma checks when interacting with underwater creatures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spellcasting.&lt;/strong&gt; You can use an action to cast one of the following spells: &lt;em&gt;Entangle&lt;/em&gt;, &lt;em&gt;Invisibility&lt;/em&gt;, or &lt;em&gt;Polymorph&lt;/em&gt;. Once used, each spell can&#39;t be cast again until the next dawn. Charisma is your spellcasting ability for these spells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gills.&lt;/strong&gt; You grow a pair of gills that allow you to breathe underwater.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cursed.&lt;/strong&gt; When a creature swallows the fish, they are cursed. They automatically attune to the fish and cannot remove it from their body. While attuned, the creature gains the following flaw: &lt;em&gt;&amp;quot;You cannot resist cute things.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;downloads&quot; tabindex=&quot;-1&quot;&gt;Downloads&lt;/h2&gt;
&lt;p&gt;Download the creature stat cards and tokens for use in your VTT or for printing below. Files are PNGs, downloaded as a zipped folder.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://drive.google.com/uc?export=download&amp;amp;id=1Qqb2l1cx-crmxUld8r2KUQWFiMO1OJ2d&quot;&gt;Creature Cards&lt;/a&gt; — Stats and abilities for all five creatures&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drive.google.com/uc?export=download&amp;amp;id=1GIGk0vdNiYnxNns0lgfvRWTrVCxt5c2Z&quot;&gt;Creature Tokens&lt;/a&gt; — For use in Owlbear Rodeo, Foundry, Roll20, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: I ran this one time, and we had fun! Has not been playtested beyond that—but if you give it a spin and have some thoughts, let me know! ++ hello@questadon.com&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>On AI, Grief, and Restabilizing Society</title>
    <link href="https://questadon.com/digital-garden/ai-and-grief/" />
    <updated>2026-02-02T00:00:00Z</updated>
    <id>https://questadon.com/digital-garden/ai-and-grief/</id>
    <content type="html">&lt;p&gt;I’ve been noticing something in the way people talk about AI.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;I used to like my job, now all I do is review what AI spits out.&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;...AI has sucked the creative energy out of my soul.&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Nobody is going to pay for this now that they can just have AI do it.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&#39;s a lot to be said about the fear and anger surrounding the AI conversation. But today what was landing for me is the grief.&lt;/p&gt;
&lt;p&gt;And I think grief matters more than we’re admitting.&lt;/p&gt;
&lt;p&gt;Because half of us don&#39;t even realize we&#39;re grieving, and when people mention AI, we don’t actually end up in dialogue. We end up talking past each other—or talking at each other—while assuming the problem is about opinions, ethics, or policy, or education. There ARE problems there to tackle. But it&#39;s very difficult to get to real dialogue without first acknowledging grief.&lt;/p&gt;
&lt;h2 id=&quot;grief-doesn%E2%80%99t-always-look-like-sadness&quot; tabindex=&quot;-1&quot;&gt;Grief Doesn’t Always Look Like Sadness&lt;/h2&gt;
&lt;p&gt;When people say they’re afraid of AI, or angry about it, or dismissive of it, or overly euphoric about it, I do think a lot of them are responding to a sense that something familiar is slipping.&lt;/p&gt;
&lt;p&gt;For some, it’s grief over:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The loss of a craft they worked years to master&lt;/li&gt;
&lt;li&gt;Their work not being valued in the same way and how that has affected their financial situation&lt;/li&gt;
&lt;li&gt;The destabilization of identity tied to skill, peer-standing, or valued expertise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For others, it’s grief over:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A world that already feels too fast and less humane&lt;/li&gt;
&lt;li&gt;The erosion of clear boundaries between human and machine&lt;/li&gt;
&lt;li&gt;The feeling that they didn’t choose this acceleration&lt;/li&gt;
&lt;li&gt;The future they pictured that they felt more confident about understanding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And for still others, it may be grief mixed with relief... which is often even harder to talk about honestly.&lt;/p&gt;
&lt;p&gt;People exhibit grief differently: anger, aggression, withdrawal, anxiety, tribalism, denial, extreme life changes, erratic behaviour, depression.&lt;/p&gt;
&lt;p&gt;And what I&#39;m thinking on today is how hard it is to talk at a topical level with people who are clearly affected on a personal level. Which... and we all need to be more realistic about this... is everyone now. Because this is a global change that has either affected the person you&#39;re talking to or friends/family of the person you&#39;re talking to in significant ways.&lt;/p&gt;
&lt;h2 id=&quot;why-the-ai-debate-keeps-breaking-down&quot; tabindex=&quot;-1&quot;&gt;Why the AI Debate Keeps Breaking Down&lt;/h2&gt;
&lt;p&gt;Most AI discourse is framed as a debate about outcomes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is this good or bad?&lt;/li&gt;
&lt;li&gt;Should this be regulated or embraced?&lt;/li&gt;
&lt;li&gt;Is this ethical or dangerous?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;But grief doesn’t really respond well to debate.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When someone is grieving, and we respond with counterarguments, what we communicate—unintentionally!—is that the feeling itself is illegitimate. That the problem is their reasoning, not their loss.&lt;/p&gt;
&lt;p&gt;That’s often when conversations harden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Curiosity turns into defensiveness&lt;/li&gt;
&lt;li&gt;Questions turn into moral positioning&lt;/li&gt;
&lt;li&gt;People stop listening, because they no longer feel seen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then we’re surprised that “dialogue” doesn’t lead anywhere.&lt;/p&gt;
&lt;p&gt;Most people don&#39;t know how to talk with people who are grieving. A lot of people avoid it entirely. It&#39;s complicated!&lt;/p&gt;
&lt;h2 id=&quot;recognizing-grief-doesn%E2%80%99t-mean-stopping-progress&quot; tabindex=&quot;-1&quot;&gt;Recognizing Grief Doesn’t Mean Stopping Progress&lt;/h2&gt;
&lt;p&gt;But we&#39;re not in a situation where we can avoid talking about it either. This is a real change that is happening to us and around us, and we have to find a way to engage in it.&lt;/p&gt;
&lt;p&gt;So I&#39;m not saying we should just walk on eggshells around this topic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recognizing grief doesn’t mean stopping progress, rejecting technology, or even agreeing on what comes next.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I think it&#39;s just about changing the posture of the conversations we have with people.&lt;/p&gt;
&lt;p&gt;When grief is named, a different kind of question becomes possible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What are you afraid of losing?&lt;/li&gt;
&lt;li&gt;What part of this feels destabilizing to you?&lt;/li&gt;
&lt;li&gt;What do you wish people would acknowledge before trying to convince you?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And these questions are NOT just for people who seem obviously angry or depressed. Someone who&#39;s excited about the possibilities AI is opening up for them may also be grieving the loss of close relationship with people who see this topic really differently.&lt;/p&gt;
&lt;p&gt;Those kinds of questions don’t solve anything on their own, of course. But they do something really important: they create the conditions where people can actually think together.&lt;/p&gt;
&lt;h2 id=&quot;the-piece-we-need-to-move-forward-together&quot; tabindex=&quot;-1&quot;&gt;The Piece We Need to Move Forward Together&lt;/h2&gt;
&lt;p&gt;There’s a temptation—especially among people excited by AI—to treat hesitation or resistance as ignorance, or a failure to adapt. And there’s an equal temptation among critics to treat adoption as moral failure or thoughtlessness.&lt;/p&gt;
&lt;p&gt;Both can miss the reality in the middle.&lt;/p&gt;
&lt;p&gt;The world has changed around us in massive ways. Like the global pandemic, or World War 1 or 2, no one has totally escaped the effects of these irreversible changes.&lt;/p&gt;
&lt;p&gt;And if that’s true, then &lt;strong&gt;the work in front of us isn’t just technical, ethical, or economic. It’s also relational.&lt;/strong&gt; And not just in a &amp;quot;hold my hand&amp;quot; kind of way—I mean that the relational work we have to do is an ESSENTIAL part of stabilizing our future together.&lt;/p&gt;
&lt;h2 id=&quot;when-we-minimize-loss%2C-we-widen-the-divide&quot; tabindex=&quot;-1&quot;&gt;When We Minimize Loss, We Widen the Divide&lt;/h2&gt;
&lt;p&gt;One of the easiest traps to fall into, especially in moments of rapid change, is scoffing at people who seem to have plenty and yet feel destabilized by losing something.&lt;/p&gt;
&lt;p&gt;A software developer was making big money, but got laid off and hasn&#39;t been able to find work again, or had to take a much lower paying job.&lt;/p&gt;
&lt;p&gt;It’s tempting to say: &amp;quot;Why are you complaining? Try working two jobs like I have had to for 10 years!&amp;quot; Or, &amp;quot;They kinda had it coming, real life isn&#39;t that easy.&amp;quot; We often reflexively mock grief over loss that looks comparatively small (or even seems fair).&lt;/p&gt;
&lt;p&gt;But that reflex doesn’t create equality or achieve justice. It just creates more distance.&lt;/p&gt;
&lt;p&gt;It doesn&#39;t help us or them when we harden the lines between “us” and “them.” If we turn grief into a competition, we ensure no one really feels safe naming what they’re losing. And that&#39;s unhelpful for all of us.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grief isn’t proportional in the way we want it to be.&lt;/strong&gt; It’s relational. People grieve what their lives have been built around—identity, meaning, stability—even when those lives appear privileged or secure by other measures.&lt;/p&gt;
&lt;p&gt;Acknowledging that doesn’t excuse systems of inequality. It doesn’t erase real disparities in power, safety, or opportunity.&lt;/p&gt;
&lt;p&gt;Acknowledging that actually creates an opportunity to close the gaps effectively. I feel pain. You feel pain. If we stop measuring pain and pointing fingers for a moment, we give people on both sides a chance to process how to embrace a new identity and their current reality.&lt;/p&gt;
&lt;p&gt;If we were facing this with fewer enemies, with more of a sense of shared ownership—not in &amp;quot;getting things back to the way they were&amp;quot; but in embracing reality as it is, we might find ourselves in a different kind of conversation.&lt;/p&gt;
&lt;h2 id=&quot;finding-solid-footing-in-the-ai-era-together&quot; tabindex=&quot;-1&quot;&gt;Finding Solid Footing in the AI-Era Together&lt;/h2&gt;
&lt;p&gt;That doesn&#39;t mean people will agree, and it doesn&#39;t solve the very real ethical, economic, and ecological issues we&#39;re trying to untangle surrounding AI.&lt;/p&gt;
&lt;p&gt;But I&#39;d wager it&#39;s a better starting point for those conversations. Strong viewpoints make a lot more sense with context that goes beyond statistics.&lt;/p&gt;
&lt;p&gt;We&#39;ve got enough divisive issues we&#39;re facing today—and these are incredibly destabilizing.&lt;/p&gt;
&lt;p&gt;Becoming more self-aware about our grief and curious (not as a thought-experiment; genuinely curious) about how the rapid changes around AI are affecting people feels like a pretty important part of restoring stability and energy to the world—and honestly, to ourselves as well.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;I&#39;m not at all claiming this is stuff other people haven&#39;t thought about. I am actually curious about what people who HAVE thought about this are noticing. Are there practical steps we could be taking (in communities, in work teams, in boardrooms, in schools) to set a different tone for the dialogue around AI adoption and the impact it&#39;s having? What has been working? What hasn&#39;t?&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
</feed>