<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Regal&apos;s Blog</title><description>A communist cobra&apos;s blog posts.</description><link>https://cobra.monster/blog/</link><language>en-us</language><atom:link href="https://cobra.monster/rss.xml" rel="self" type="application/rss+xml"/><item><title>Art Fight 2026</title><link>https://cobra.monster/blog/2026-08-03_art-fight-2026</link><guid isPermaLink="true">https://cobra.monster/blog/2026-08-03_art-fight-2026</guid><description>My 9th year of Art Fight was a struggle, but I put out some amazing things.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/gallery/art-fight-2026&quot;&gt;Full gallery&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For a primer on what Art Fight is, check out &lt;a href=&quot;/blog/2025-08-09_art-fight-2025#real-quick-whats-art-fight&quot;&gt;last year’s post&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;2026-art-fight-season&quot;&gt;2026 Art Fight Season&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/teams.DduAfCPl_Z2tYYhe.webp&quot; alt=&quot;Screenshot of the art fight website, showing the 3 teams and their colored icons--all stylized theatre masks&quot; title=&quot;Hats off to the Art Fight admin team because the team art is always killer every year&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1337&quot; height=&quot;641&quot;&gt;&lt;/p&gt;
&lt;p&gt;This year the event was a little different! For the first time it was a 3-team arrangement. Teams &lt;strong&gt;Comedy&lt;/strong&gt;, &lt;strong&gt;Tragedy&lt;/strong&gt;, and &lt;strong&gt;Mystery&lt;/strong&gt;.&lt;br/&gt;
As usually I don’t really care that much about the actual competition, it’s just fun set-dressing.&lt;/p&gt;
&lt;p&gt;I picked Tragedy! I don’t think we’re gonna win!! So many people picked the &lt;em&gt;clown&lt;/em&gt; team (comedy) because of course.&lt;/p&gt;
&lt;h2 id=&quot;life-context&quot;&gt;Life Context&lt;/h2&gt;
&lt;p&gt;This was a tough year for me. My girlfriend and I have been battling the Chicago dog groomer job market for months now, and this was the month that our last ditch effort to land her a stable, dignified job fell through.&lt;/p&gt;
&lt;p&gt;Suffice to say we were incredibly stressed until the very end of the month. That, plus Anthrocon in Pittsburgh taking up the weekend of the 4th of July…I had a lot of things taking my time.&lt;/p&gt;
&lt;p&gt;That being said I still put out 12 pieces that I’m incredibly proud of.&lt;/p&gt;
&lt;h3 id=&quot;1-veryn&quot;&gt;1. Veryn&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Veryn.B-ntRfAW_ZncJWE.webp&quot; alt=&quot;Orange draconic anthro character on a simple purple background with white and grey skull, orange tendrils for hair with yellow bands and green straps around them. His arms are outstretched and there are gold + orange lines emanating from his figure.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1441&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;I was feeling a little rushed trying to get my first attack out for the year, but I’m still proud I found a super cool character! Like most pieces this year, I tried to manage my time (and low energy)…meaning not letting Perfect be the enemy of Good&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Overall vibe&lt;/li&gt;
&lt;li&gt;Color textures&lt;/li&gt;
&lt;li&gt;Foreshortening angles&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Depth/shading on skull&lt;/li&gt;
&lt;li&gt;Hands&lt;/li&gt;
&lt;li&gt;Expression&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Kyrozon’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/9ePK4FxoxYictoh6czqnCUhVKku1JRNtJU4RNcIUoTtswi3R5fKChQKCbomK.png?t=1783921537&quot; alt=&quot;Sketchy, shirtless Argent with huge muscles holding a cuppa coffee&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Just a lovely Argent with delightful muscles. He’s got hard shapes and I’m always pleased when folks give him a shot! &lt;a href=&quot;https://artfight.net/attack/16146838.18-coffee-time&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/src/components/Accordion/Accordion.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;h3 id=&quot;2-rieger&quot;&gt;2. Rieger&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Reiger.BqsWOXX4_pS9C1.webp&quot; alt=&quot;Large, muscular, brown and blue anthro T-rex wearing short pink shorts. He&apos;s flexing with both arms upraised, showing chest and abdominal musculature with a slight smirk towards the viewer, standing in front of a simple reddish purple background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;Again, pressed for time as I had a limited day out in Cincinnati, I wanted to see how high quality of a BEEFY scalie I could draw up in a single sitting and I’m pretty pleased!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Muscle anatomy&lt;/li&gt;
&lt;li&gt;Coloring&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Facial structure &amp;amp; expression&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;3-mantra&quot;&gt;3. Mantra&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Mantra.Br9LQV77_1TMXty.webp&quot; alt=&quot;Gradient-colored anthro cobra character with scales and hood colored pinks, purples, and blues over a somewhat-camo basic blue background. The cobra is looking to the left, long neck craned over, perched against his fist. His tail is curling up behind him a bit&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;This was a cool one I had a lot of fun with. I wanted to draw another cobra, and found this very colorful, varied character. I ended up kind of falling into a harsh comic-style-ish black line shading, and I think it kind of worked but I should’ve gone harder on it.&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Black line shading&lt;/li&gt;
&lt;li&gt;Simple expression, pose&lt;/li&gt;
&lt;li&gt;Coloring accents&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cobra neck looks a bit wonky&lt;/li&gt;
&lt;li&gt;Deeper shading&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Rew’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/D20UfBJN2Ml4Cd5wC2Hw0S7u4RnrzNFChknzucZ3KDlPzASvN7b0q3x7UqWu.png?t=1784742720&quot; alt=&quot;Headshot of Ristretto, my protogen, smiling and yelling off to the left&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Good golly I love getting Ristretto art everyone draws him so differently! &lt;a href=&quot;https://artfight.net/attack/17378481.speak-up&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;4-lumie-and-kiln&quot;&gt;4. Lumie (and Kiln)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Lumie.2W_F7rxl_Z1m1PkP.webp&quot; alt=&quot;A yellow and purple protogen with arm upraised, looking for someone--implied to be Kiln, another lava/liquid glass protogen who has become somehow trapped inside Lumie&apos;s lava lamp plates&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;I love love love my friends’ weird protogens. Lumie is a really cute lava lamp protogen that I’ve &lt;a href=&quot;https://artfight.net/attack/3312119.piimzza&quot; class=&quot;external&quot;&gt;drawn before&lt;/a&gt;, and Kiln is a unique “molten glass” character my friend Oblvon created.&lt;br/&gt;
I was sitting with friends at &lt;a href=&quot;/cafe-reviews/milli-by-metric&quot;&gt;Milli&lt;/a&gt; and just brainblasted this goofy idea to trap Kiln as the lava lamp lava in Lumie.&lt;/p&gt;
&lt;p&gt;For reasons still unknown I decided to go for a wildly difficult ultra-thin lineart style! I think it turned out pretty nice :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lineart&lt;/li&gt;
&lt;li&gt;The pose and idea overall&lt;/li&gt;
&lt;li&gt;Splitting up Kiln between the lava lamp spots&lt;/li&gt;
&lt;li&gt;The expressions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;More thin lineart practice (for more confidence)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Courtney’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/SMwmpQNKveWGrwzjITqt5gkAkpV8nsrtytB1DF1aPLSwW5Ie2zaJwX7KsXaL.png?t=1783809653&quot; alt=&quot;Wilson, my anthro leech character, squatting down next to a little hermit crab playing in a sand castle&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Oh my god he’s so cute the hermit crab destroys me &amp;lt;3 &lt;a href=&quot;https://artfight.net/attack/15927102.a-little-pal&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Oblvon’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/QGjnZNiYaI8AG3qSoQEkmkwyK1AOfAO6aCct7xR73xC5qV7lRNHTymGtu04v.png?t=1785150746&quot; alt=&quot;Dyrim in Cape Verde world cup kit, confidently holding a soccer ball and smiling at the viewer&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;This Dyrim piece makes me feel insane I love how Oblvon drew her so much…I definitely took some inspiration from this for my later pieces this year! &lt;a href=&quot;https://artfight.net/attack/17889498.wyrld-cup&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;5-jelly&quot;&gt;5. Jelly&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Jelly.eHsCSnFa_qHorK.webp&quot; alt=&quot;A fuzzy green anthro worm on a string character, bashfully sitting in the palm of a yellow and pink hand, holding its tail. The background is a vague foresty background with some shelf fungus and leaves floating in the background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1441&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;I knew I wanted to attack my very good friend Briva, but picking a character from her incredible roster is so hard…Ultimately I settled on Jelly because I’m obsessed with how she goofily breaks the rules. Is she average height? Or tiny? Hard to tell!&lt;/p&gt;
&lt;p&gt;I found a cute picture of a shrew resting in someone’s palm and felt inspired, so that became the reference for this. Of course I made Briva’s fursona the hand holding her too.&lt;/p&gt;
&lt;p&gt;The pose and anatomy tripped me up a few times but I’m very happy with the cute result!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The idea and execution&lt;/li&gt;
&lt;li&gt;Cuteness&lt;/li&gt;
&lt;li&gt;Selling the scene&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fluff/fur texture&lt;/li&gt;
&lt;li&gt;Expressions&lt;/li&gt;
&lt;li&gt;Shading&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Briva’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/8m62mRb05XSo19wUNc92u9B2xxgqly6Xz4hHho19RQWnUs9khOWio0wIYt4h.png?t=1783962474&quot; alt=&quot;My Grem2, Sigma, in a pinstripe suit, smiling mischievously at the viewer and extending hand in handshake.&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;An insanely cool piece and pose. I keep coming back to look at it it’s so unqiue and powerful. &lt;a href=&quot;https://artfight.net/attack/16201084.shall-we-shake-on-it&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;6-levi&quot;&gt;6. Levi&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Levi.BKrVhf2G_2bJ4Hk.webp&quot; alt=&quot;An anthro blue and orange velociraptor in swordsman clothes and leather armor. He has a tired expression, and is sighing as he holds a cup of hot tea. He sits at a bar or table in an implied tavern or bar.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;While I’m still proud of this piece, it was easily my biggest struggle this season. I think my approach of translating my friend’s comic style into my own was a bit ham-fisted and I should’ve loosened up in my approach.&lt;/p&gt;
&lt;p&gt;I think I did a good job respecting the character’s lore, role, etc. though! I tried to depict him in a between-adventures setting and I like how it came together, even as I was trying to keep myself from over-obsessing the piece.&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Scene/setting&lt;/li&gt;
&lt;li&gt;Gritty shading&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Facial expression&lt;/li&gt;
&lt;li&gt;Posing&lt;/li&gt;
&lt;li&gt;Stylization and scalie features&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Rayzr’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/5WSxEgnbMmmQHn082G1460pe4j026IAREHxy1gwfrSIK7AYqJ77GU64SC9PR.jpg?t=1785018474&quot; alt=&quot;A vertical spread of two of my characters, Vesuvius a red dragonborn, and Quelrin a Golden dragonborn. The top is Vesuvius showing off his muscular back, the bottom is Quelrin preparing a warlock spell. In the center of the explosive spread the two of them are kissing real hard it&apos;s awesome.&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;What can you possibly say about this other than holy shit &lt;a href=&quot;https://artfight.net/attack/17728633.twin-flames&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;7-lorwell-locksmith&quot;&gt;7. Lorwell Locksmith&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/LorwellLocksmith.B8iROJuY_2j2Kf6.webp&quot; alt=&quot;A White and dark-blue synth with mint green accents holding the board game &amp;#34;Fromage&amp;#34; while swishing his tail behind himself. He&apos;s asking if you want to play the game, indicated with a little cheese icon next to a question mark.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;This was actually the first piece I started this year, but I think I got overwhelmed by some anatomy things and I put it off til later.&lt;/p&gt;
&lt;p&gt;Definitely turned out to be one of my favorites this year! Synths are just really fun to draw, and I need to draw more.&lt;br/&gt;
Big fan of the &lt;em&gt;Fromage&lt;/em&gt; board game…I used a photo and then scribbled over it with rough color and I think that looks great :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Synth texture, features&lt;/li&gt;
&lt;li&gt;Anatomy&lt;/li&gt;
&lt;li&gt;Board game idea + execution&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hands/fingers&lt;/li&gt;
&lt;li&gt;More tech-details&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;8-red&quot;&gt;8. Red&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Red.CqlM-cJY_Zq0xmN.webp&quot; alt=&quot;Red and grey gaming-pad themed protogen giving a peace sign with his hand, smiling towards the left side of the screen. He&apos;s in front of a red background with a chromatic aberrated 8 pointed star&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;Simply a cool protogen I wanted to draw! I don’t actually have a lot to say about this one, as it kind of just fell into place very nicely, and I had a good, quick time from start to finish.&lt;/p&gt;
&lt;p&gt;I just like their design, and I tried a bit of brighter shading than normal to help bring out their color :3&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Comintoo’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/ekCnUh6lkZ9kpzxblWhUOMXe64vkbV6011r6IhQ5CZQKejRMlOx0g0swaYF1.png?t=1785377352&quot; alt=&quot;Fullbody chibi of Ristretto (brown coffee themed protogen) standing next to a big frappe type drink, smiling&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I love love love getting Ristretto art, especially when folks lean into the coffee theme :3 &lt;a href=&quot;https://artfight.net/attack/18193792.coffee-enjoyer&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Overall vibe of piece&lt;/li&gt;
&lt;li&gt;Simplicity and solid technique&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Drawing non-standard fingers&lt;/li&gt;
&lt;li&gt;Posing&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;9-raspberry&quot;&gt;9. Raspberry&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Raspberry.DDM8AKUh_1Yk2TV.webp&quot; alt=&quot;Kind of bean-shaped eel character with a goofy grin in front of a simple kelp forest-esque background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;My annual attack on the gf!! &lt;a href=&quot;https://artfight.net/attack/12342507.loooooooong-noodle&quot; class=&quot;external&quot;&gt;Last year&lt;/a&gt; I goofed and made this little guy VERY long. So of course this year I decided to go the other direction and chunk him up into a little bean.&lt;/p&gt;
&lt;p&gt;I love my girlfriend and her delightful creatures. She’s truly an animal lover through and through, and her characters &amp;amp; her style really reflect that.&lt;/p&gt;
&lt;p&gt;I genuinely love Raspberry. And not just because he’s been her discord profile icon for 3 years…though I’m sure that helps.&lt;br/&gt;
I really want to come up with my own type of silly animal mascot character like this.&lt;/p&gt;
&lt;p&gt;Anyways, art wise not a lot to say lol. I worked hard to ensure the markings etc. were accurate but I very much beefed the anatomy on purpose :3&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Girlfriend Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/87ls7qIkCd1t54ZxFou1fjYJEBOMUD3QzCAEaCrtfoMilM26CrgwzkIDJuwL.jpeg?t=1785289850&quot; alt=&quot;My cyberpunk dinosaur character, Dahlia, lounging in a dark purple room holding a martini glass, grinning at the viewer&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I love the gf’s style so much she’s just tremendously cool and awesome &lt;a href=&quot;https://artfight.net/attack/18077794.queen-of-clubs&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Matching the character’s colors&lt;/li&gt;
&lt;li&gt;Keeping it silly&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Loosening up for silly things like this and really getting goofy (more funky shapes)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;10-nicanor&quot;&gt;10. Nicanor&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Nicanor.DLIbe4wY_1cY6o4.webp&quot; alt=&quot;Extremely muscular dark grey komodo dragon martial artist in a fighting pose. He has a tattered yellow headband tied around his head and is wearing black shorts with some colored stripes. The background is a simple geometric shape with striped colors&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;In terms of effort, output, and finished product, I think this is my “big” piece for this year. I just really wanted to go all out on a BUFF character and really pull out all the stops, and I think I really pulled it off here.&lt;/p&gt;
&lt;p&gt;That being said, I still restrained myself a bit—limiting time overall and rejecting some of my initial, more ambitious pose ideas.&lt;/p&gt;
&lt;p&gt;I’m very proud of myself for pushing the muscle anatomy a bit past my comfort zone for a piece like this, and I love love how the shading turned out—especially for the veins and shoulder shine. It’s a technique I’ll definitely be bringing with me past Art Fight.&lt;/p&gt;
&lt;p&gt;I also think I did a good job with the facial expression! Komodo dragon character (mine included) have pretty simple faces, so I’m happy with how much personality I was able to impart with the few details I was working with.&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Kairune’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/GpvThYeviDuegMKbeRykOZUDJH0dsrotOZQJW1GaHceOjGM74NOpAs94u33l.png?t=1785607845&quot; alt=&quot;Fullbody piece of Wilson, my blue and green anthro leech character sipping a juice box&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Such a plaintive, cute, innocent Wilson piece! Him sippy &lt;a href=&quot;https://artfight.net/attack/18515967.leech-on-a-beach-whatll-he-do&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Muscle anatomy&lt;/li&gt;
&lt;li&gt;Lighting &amp;amp; shading&lt;/li&gt;
&lt;li&gt;Vein and muscle details&lt;/li&gt;
&lt;li&gt;Facial expression, details&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Foreshortening&lt;/li&gt;
&lt;li&gt;Clothing folds&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;11-keel&quot;&gt;11. Keel&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Keel.62pGlbt__1ozX0D.webp&quot; alt=&quot;Small, yellow kobold excitedly swinging off of a large pink naga character&apos;s rippling biceps&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;Another annual tradition: attacking Somite! Lol. Somite has some really fun characters that I just really enjoy challenging myself with. The hardest part each year is choosing who to draw!&lt;/p&gt;
&lt;p&gt;This time I challenged myself by drawing Keel, a kobold. Why is that challenging? I feel I have a weakness in drawing small characters and imparting &lt;em&gt;chaotic&lt;/em&gt; energy.&lt;br/&gt;
The pose I picked really helped with both of those!&lt;/p&gt;
&lt;p&gt;Even though it was a tough pose, I vibed it out pretty well. There really weren’t great references for this, so I’m quite pleased. Plus it served as an excuse to draw another BUFF SCALIE helllll yeahhh&lt;/p&gt;
&lt;p&gt;Also shout out to &lt;a href=&quot;https://bsky.app/profile/did:plc:vcvmi6adbzn6rtksqhjogq73&quot; class=&quot;external&quot;&gt;Rayzr&lt;/a&gt; whose advice on how to draw decent scalie feet keeps proving useful. It wasn’t the focus of this piece, but I think it really helped shore up a BIG weakness of mine.&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Kairune’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/JaAayPPJHOXZkz79dHojEaVUEg332iLmihdkohg6HAOSAAz0Jk2WyGQr8Nsc.png?t=1785658557&quot; alt=&quot;Argent holding a coffee in his tail, a communist paper in his hand, and pointing with his other hand out the window of the train he&apos;s riding&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Somite draws the most indulgent art for me I’m so blessed. Communism, coffee, Chicago, transit, AND gratuitous muscle all in one! &lt;a href=&quot;https://artfight.net/attack/18625812.commuting-coffee-cobra-pointing-cccp&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Posing dynamicism&lt;/li&gt;
&lt;li&gt;General anatomy, muscles&lt;/li&gt;
&lt;li&gt;Fun expression and levity&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Feet anatomy&lt;/li&gt;
&lt;li&gt;Expressive scalie faces&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;12-juniper&quot;&gt;12. Juniper&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Juniper.DmdrPdfW_Z238SV4.webp&quot; alt=&quot;Headshot of a pretty ram girl with deep tan skin and fluffy yellow wool&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2000&quot; height=&quot;2000&quot;&gt;&lt;/p&gt;
&lt;p&gt;A well-overdue attack on my good friend Juni! I really genuinely struggled to get the “ram” shape right (to my eye, at least). I’m happy with where it ended up but my word this was very out of my wheelhouse. Definitely need more practice!&lt;/p&gt;
&lt;p&gt;I don’t have an issue with headshots, but as an anatomy guy I love drawing bodies. This is a headshot purely because of time constraints, as my final Art Fight.&lt;/p&gt;
&lt;p&gt;I think I did a good job though, aside from how dark it turned out (my iPad playing color tricks on me again).&lt;br/&gt;
Excited to do even better with next year’s attack &amp;gt;:3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Expression&lt;/li&gt;
&lt;li&gt;“She looks like a ram”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Color&lt;/li&gt;
&lt;li&gt;Non-scalie expressive faces&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Once again life got busy and complicated, and Art Fight was a welcome, solitary blast of art and creativity. I don’t feel I jumped much in skill between now and last year, but that’s okay. I’m still having fun, and still trying new things.&lt;/p&gt;
&lt;p&gt;9 years!! Crazy. I love this event. It’s so simple and fun, but I really look forward to it each year.&lt;/p&gt;
&lt;p&gt;I really really wish it were any other time than the heart of summer though &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title>Peruvian Coffee Showcase</title><link>https://cobra.monster/blog/2026-06-11_tailwind-onyx-coffee-tasting</link><guid isPermaLink="true">https://cobra.monster/blog/2026-06-11_tailwind-onyx-coffee-tasting</guid><description>Random coffee nerd checks out a coffee industry nerd event</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Thanks to a new friend, I discovered an &lt;a href=&quot;https://www.tailwindroasting.com/&quot; class=&quot;external&quot;&gt;awesome local roaster&lt;/a&gt; that regularly hosts cool coffee events for the public!&lt;/p&gt;
&lt;p&gt;This is going to be a quick post mostly sharing photos from the event :3 enjoy!&lt;/p&gt;
&lt;h1 id=&quot;preamble&quot;&gt;Preamble&lt;/h1&gt;
&lt;p&gt;My barista friend Ryan and I went together without much of an idea what to expect. Fortunately, things were immediately off to a good start when we walked into the roastery and the first person we saw was our friend + Ryan’s colleague, Myra! Apparently she is in the process of transitioning to Tailwind Roasting, so she literally works there now. How cool!&lt;/p&gt;
&lt;p&gt;Anyways, the roastery has a separate office/tasting room, and in there we saw the Onyx&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; crew setting up for the cupping event. The front of the table had a magnificent spread of take-home swag for attendees.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/swag-shot.m6hIGmxo_ZVInSD.webp&quot; alt=&quot;Alpacas, stickers, tasting spoons, and branded mints on a long table&quot; title=&quot;Kind of embarrassed at how excited I was to receive a free cupping spoon lol&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/swag-shot-angle.5g1aTodw_1glyI.webp&quot; alt=&quot;Alpacas, stickers, tasting spoons, and branded mints on a long table (angle shot)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;obsessed with these little guys&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While the Onyx team finished grinding coffee and boiling water, we mingled—I talked to a coffee guy from Colorado who very kindly shared his industry/cupping/tasting/etc. knowledge with me throughout the event.\&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;eyy.BgBs6cHh.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Shout out to Jay, you’re a real one!&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;cupping-event&quot;&gt;Cupping Event&lt;/h1&gt;
&lt;p&gt;Before we began, Rachel of Onyx gave us a rundown of what coffees they’d prepared, explained that their company has until recently exclusively imported coffees from Guatemala, and that this is the first year that they’ve imported from their new Peruvian relationships.&lt;/p&gt;
&lt;h2 id=&quot;smell&quot;&gt;Smell!&lt;/h2&gt;
&lt;p&gt;She then gave a brief rundown of the coffees, and encouraged us to go through and smell the grounds before beginning.&lt;/p&gt;
&lt;p&gt;I only have 3 big takeaways from the smelling:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wow I fucking love coffee this stuff is so good&lt;/li&gt;
&lt;li&gt;Hooray I can instantly tell which one of these is decaf!&lt;/li&gt;
&lt;li&gt;Omg it’s so funny that exactly one of these coffees is a natural process (the rest were washed) and it was OBVIOUS&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;taste&quot;&gt;Taste!&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/tasting-1.dIZkmO7D_1gmxAY.webp&quot; alt=&quot;A bunch of folks (with blurred faces) gathered around the long table, doing various tastings&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;p&gt;The main event! The first time through we went in a line, testing the 2 Peruvian coffees first, then a series of the Guatemalan, ending with the funky natural process.&lt;br/&gt;
Each coffee had two cups each, and they were set up in front of fantastic detail sheet talking about the farms, the people, and of course the coffee itself.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/tasting-cups.PrKMg0Li_moo3E.webp&quot; alt=&quot;Close up of 2 of the tasting cups with some of the info sheet in frame&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/women-owned.Bxa6-hN-_Z15MiSU.webp&quot; alt=&quot;Coffee info sheet. It reads: Ella Todos Santos Women Owned Farms
Ella Todos Santos is a beautiful coffee from a beautiful community.
Meet the women of Mujeres Luchando por un Mejor
Futuro (&amp;#34;Women Fighting for a Better Future&amp;#34;). San
Martin, Todos Santos is a remote region in the rugged highlands of Huehuetenango. Because of its geographical isolation and difficult road infrastructure it is a tough four-hour drive from Huehuetenango City and a 12-hour drive from Guatemala City creating and sustaining a business here is an incredible challenge.
To overcome these hurdles and limited resources, a collective of 276 women banded together. To fund their projects, they created a local community bank and launched vital health and agricultural initiatives. The group is continuously growing, constantly seeking education and support to improve their community.
Out of this inspiring collective, we source the majority of this coffee from a dedicated core group of 36 women who focus entirely on coffee production.
While they have long utilized sustainable farming methods, the group officially earned their organic certification in 2025. Your purchase of this lot provides financial predictability for this incredible community of women. Thank you.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;936&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;This one was one of my favorites. Lovely story too! This is the kind of coffee you want to find and support!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There isn’t a whole lot to say, other than that it was a great time, I enjoyed the coffees, and I was even responsible enough to spit out most of it instead of destroying my body with caffeine at 4pm haha.&lt;br/&gt;
I’m also proud of myself for being able to taste the decaf coffee and identify that it was indeed the same coffee bean as the non-decaf one next to it :3&lt;/p&gt;
&lt;h3 id=&quot;other-cuppings&quot;&gt;Other Cuppings&lt;/h3&gt;
&lt;p&gt;My helpful guide Jay explained to me that this was a very casual cupping experience. In my past experience, I’d done a tasting where we were told what coffees were there (region, roast, and process), but not which ones were which.&lt;br/&gt;
Apparently Jay has been to cupping where not only was all information withheld, but the lights were also all red so as to prevent folks from visually differentiating the coffees and allowing that to color (heh) their perceptions of the taste.&lt;/p&gt;
&lt;p&gt;In this tasting we had full explanation of each coffee, as well as info sheets in front of each one. Fair to say more of an advertisement for Onyx than a “practice cupping/tasting” event, but that was what I expected anyways.&lt;/p&gt;
&lt;h1 id=&quot;future-coffee-stuff&quot;&gt;Future Coffee Stuff…?&lt;/h1&gt;
&lt;p&gt;I’m probably going to go back to Tailwind Roasters for either a cupping class or a roasting class, because it was a really cool space and I really enjoyed the people I met there. I will say though that for as much fun as I had, I felt a bit out of place being completely outside of the industry.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/take-home.D6ZxpgbA_JVVib.webp&quot; alt=&quot;My take home items from the event--an orange alpaca, a tasting spoon, a sticker, and a tin of mints on an unfortunate choice for a photo background&quot; title=&quot;I should&apos;ve retaken this photo but the orange alpaca almost vanishing into the coffee colored desk mat is kind of iconic&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;p&gt;I really love coffee. I love learning about it, brewing it, drinking it, and especially sharing it. And I can’t help but feel that I’m not…serious enough about it? I have some casual aspirations for opening my own cafe, but I don’t actually know if I’m up to the task. And I don’t really know what a good medium would be.&lt;/p&gt;
&lt;p&gt;It’s a little existential, but today left me feeling both fulfilled and inadequate. Because my life right now is very fulfilling and fun—full of friends and many cool hobbies and interests.&lt;br/&gt;
But at the same time, events like this make me wonder if I’m stretching myself thin here, and not engaging fully &lt;em&gt;enough&lt;/em&gt; with any one of my personality-defining hobbies, whether that’s coffee, urbanism, weightlifting, or anything else on my &lt;a href=&quot;/about&quot;&gt;about&lt;/a&gt; page.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/whine.DSM-Bh3S_1Ck74T.webp&quot; alt=&quot;whine.DSM-Bh3S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Is this what a midlife crisis is? I’m not even 40 yet! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;
&lt;hr/&gt;
&lt;p&gt;Or maybe I need to relax a bit, and take some advice from the graffiti and decor I found at &lt;a href=&quot;/cafe-reviews/printers-row-kingsbury&quot;&gt;Printers Row Coffee&lt;/a&gt; today&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/gator-sex.DwNFbBfW_ZbfqyH.webp&quot; alt=&quot;gator sex&quot; title=&quot;hell yeah...&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;I’m listening. I’m learning.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/divas.BgdizU4i_3qp2u.webp&quot; alt=&quot;double black industrial doors with a single black and white printout taped to it&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;936&quot; height=&quot;1249&quot;&gt;
&lt;img src=&quot;/_astro/divas-close.DqRV9DHo_1oayhq.webp&quot; alt=&quot;close-up of the printout. It is a person wearing a muppets Ms. Piggy head, and the tape above it says &amp;#34;Divas Only Beyond This Point!&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;936&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;p&gt;Much to think about.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;This is Onyx the &lt;a href=&quot;https://onyxcoffee.com/&quot; class=&quot;external&quot;&gt;coffee &lt;em&gt;importer&lt;/em&gt;&lt;/a&gt; not Onyx the &lt;a href=&quot;https://onyxcoffeelab.com/&quot; class=&quot;external&quot;&gt;coffee &lt;em&gt;roaster&lt;/em&gt;&lt;/a&gt; btw &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Snake in a Doggy Dog World</title><link>https://cobra.monster/blog/2026-05-28_dog-world</link><guid isPermaLink="true">https://cobra.monster/blog/2026-05-28_dog-world</guid><description>My second life as a dutiful uninformed dog professional observer boyfriend</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Via my lovely girlfriend, I’ve been deeply introduced to the world of professional dog grooming and dog showing. It’s pretty cool and interesting!&lt;br/&gt;
I’m putting a lot of effort into engaging with a hobby outside of my circle and direct interests, and it’s been more fun than I expected. And not just because I love my girlfriend :3&lt;/p&gt;
&lt;h1 id=&quot;personal-context&quot;&gt;Personal Context&lt;/h1&gt;
&lt;p&gt;The gf is a professional dog groomer, and her favorite breed of dog is Boxers. She’s not *just* a dog groomer, she is deeply passionate about it, and aspires to compete live at shows!&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;She explains it as “they’re just so goofy!” but I don’t get the Boxer love lol. I’m more a Poodle person myself but I certainly love and respect her enthusiasm :3&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;Since moving to Chicago with me, she has struggled to find a grooming salon that respects both her and her craft at her level. Amidst hopping between different salons as they fail to uphold her standards of care for dogs, grooming standards, or her dignity as a worker, we’ve also been going to dog shows and grooming expos all across the midwest.&lt;/p&gt;
&lt;p&gt;This blog post is going to be a little look at both of these as an outsider looking in.&lt;/p&gt;
&lt;h1 id=&quot;shows-and-expos&quot;&gt;Shows and Expos&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image.D1cQv85i_ZFlxGo.webp&quot; alt=&quot;Photo of a poodle grooming contest. Poodles of various size and color (white, red, and black) are being groomed on a stage by various women&quot; title=&quot;The standard poodles are impressive but the tinier the dog the more appealingly grabbable they are&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;Poodles are so cute and funny that little one in the back is killing me how are you so smalllll&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dog show = “best of breed” etc. style shows. The kind you see on TV. They’re usually centered around a single dog breed, and it’s pretty crazy seeing dogs and realizing “ohh THIS is what they’re supposed to look like”. People dress up nice, and it’s a more “official” affair.&lt;/p&gt;
&lt;p&gt;Grooming expo = live grooming contests and large vendor floors selling dog grooming equipment and products. Just like any convention, people are wearing comfy clothes and it’s a casual hodgepodge of movement and activities.&lt;/p&gt;
&lt;h2 id=&quot;shows&quot;&gt;Shows&lt;/h2&gt;
&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt;&lt;img src=&quot;/_astro/boxer-board-1.HTYdH-UK_XvJRU.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1296&quot; height=&quot;1728&quot;&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt;&lt;img src=&quot;/_astro/boxer-board-2.WF_Ia2O5_uAPmY.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1296&quot; height=&quot;1728&quot;&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I’ve only been to PCA (Poodle Club of America) in 2025, and the American Boxer Club (ABC) National Specialty Show this past month so far, and I don’t actually have any photos from PCA because we spent the entire time talking to a single poodle breeder (whoops!), so this section will mostly be about the Boxer show :3&lt;/p&gt;
&lt;p&gt;I’ve never seen so many Boxers in my life and especially none that looked as good as these ones. It’s not my place to get into it here, but shows (and grooming expos, sometimes) really showcase the gulf between mixed-breed and pure-bred dogs!&lt;/p&gt;
&lt;p&gt;As for what happened during the show, it’s pretty much what you’d expect: people parade around their fancy, well-bred dogs, and then they’re judged against one another.&lt;br/&gt;
It’s more exciting than I’m making it sound, but also as a non-dog-world person, I will fully admit it’s a little boring at times. I just don’t know what to look for to be &lt;em&gt;truly&lt;/em&gt; impressed.&lt;/p&gt;
&lt;p&gt;Me: “Cool Dog!!” &lt;img src=&quot;/_astro/thumbs_up_clw_y2.CrHazxcC_WH1l6.webp&quot; alt=&quot;thumbs_up_clw_y2.CrHazxcC.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;&lt;img src=&quot;/_astro/thumbs_up_clw_y2.CrHazxcC_WH1l6.webp&quot; alt=&quot;thumbs_up_clw_y2.CrHazxcC.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;&lt;img src=&quot;/_astro/thumbs_up_clw_y2.CrHazxcC_WH1l6.webp&quot; alt=&quot;thumbs_up_clw_y2.CrHazxcC.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/yikes.CiuleE7A_2hvr8o.webp&quot; alt=&quot;yikes.CiuleE7A.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Soapbox:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;All dogs are good dogs. Every dog deserves love, respect and a comfortable life&lt;/li&gt;
&lt;li&gt;Modern purebred dogs are extremely healthy; their genetic lineages are meticulously tracked to prevent in-breeding and passing unhealty traits or diseases&lt;/li&gt;
&lt;li&gt;Adoption is amazing. Buying pure-bred dogs is also amazing. Buying dogs from puppymills is the only incorrect choice&lt;/li&gt;
&lt;li&gt;No puppymill dog is evil, but the profit-motivated people running puppymills at the expense of dog health are evil&lt;/li&gt;
&lt;li&gt;Mixed-breed dogs are often great pets, but often have poor genetics leading to poor health outcomes, or poor behavioral foundations&lt;/li&gt;
&lt;/ol&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;expos&quot;&gt;Expos&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy.BKpDkwQs_2eW9W3.webp&quot; alt=&quot;More poodles being groomed at a live grooming competition. The table with the award trophies is in the foreground&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;p&gt;Grooming expos are huge, and also only 3 things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Large vending floor with booths set up selling vacuums, shampoos, clippers, smocks, etc.&lt;/li&gt;
&lt;li&gt;Live grooming stage showcasing grooming competitions (these take ~3hrs each)&lt;/li&gt;
&lt;li&gt;Various panels/classes&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The vendor booths obviously aren’t for me, the outsider. I follow the gf around, asking about the things she gets excited about, and cautiously asking “don’t you already have that?” every 10 min or so.&lt;/p&gt;
&lt;p&gt;I’ve only been to one panel, and it was really weird. It was state groomers association meeting listed as an informative “how to advocate for yourself as a groomer in our state” but it quickly became clear it was mostly for grooming shop &lt;em&gt;owners&lt;/em&gt; who wanted to maximize profits amidst changing labor laws.&lt;br/&gt;
Weird vibes!&lt;/p&gt;
&lt;p&gt;The grooming competition is the bread and butter of the event though. Participants bring in a dog ready to be groomed, and compete on stage grooming the dog from start to finish within a time limit (limit depends on the dog’s size).&lt;br/&gt;
Try as I might, I quickly get bored while watching because unlike the gf, I can’t extract significance from every moment of a groomer’s cutting/work. I have a dog-grooming-interest refresh rate of about 10 min, upon which she points out something impressive about a specific groom (among the 15-30 happening simultaneously).&lt;/p&gt;
&lt;p&gt;It’s pretty fun seeing so many impressive dogs though. Especially considering how well they’re trained to handle a long, public performance like that. And even without any grooming experience myself, it’s obvious how much skill is on display here. Like, it’s hard to overstate how impressive it is that someone can make a dog so perfectly, correctly *shaped*.&lt;/p&gt;
&lt;h1 id=&quot;dog-grooming-business&quot;&gt;Dog Grooming Business&lt;/h1&gt;
&lt;p&gt;It’s not my place to explain how dog grooming works and why it’s important, but I’ll sum it up with a pithy truth from the industry:&lt;/p&gt;
&lt;blockquote class=&quot;flex italic font-serif font-light relative my-10 border-slate-200 py-10&quot; data-astro-cid-jcog7qdd&gt; &lt;div class=&quot;ml-20 text-2xl font-serif italic&quot; data-astro-cid-jcog7qdd&gt; &lt;p class=&quot;slotContent&quot; data-astro-cid-jcog7qdd&gt; &lt;p&gt;Dog grooming isn’t just a haircut, it’s healthcare.&lt;/p&gt; &lt;/p&gt;  &lt;/div&gt; &lt;/blockquote&gt;
&lt;p&gt;Every dog needs grooming. And if your dog is getting shaved down bald every time you &lt;em&gt;do&lt;/em&gt; get it groomed, then you’re not going often enough.&lt;/p&gt;
&lt;p&gt;But anyways, what’s the deal with dog grooming shops?&lt;/p&gt;
&lt;h2 id=&quot;a-spectrum-of-quality-and-lack-of-regulation&quot;&gt;A Spectrum of Quality and Lack of Regulation&lt;/h2&gt;
&lt;p&gt;Legally, your dog is pretty much equivalent to a toaster. It’s property, and the regulation around managing your property is not very strong. Especially from a federal (US) level.&lt;/p&gt;
&lt;p&gt;The bar to groom dogs is surprisingly low. There are certifications and standards, but not only are they not legally required, the average consumer has no idea that they can even ask about those.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/smirk.HNdXZEqM_1gUvI6.webp&quot; alt=&quot;smirk.HNdXZEqM.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Extremely “United States” moment. But I shouldn’t be surprised. I worked as a phlebotomist for 2 years and no certification was needed in my state.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;As a result, you have many shops run by incompetent people with wildly varied training experience and overall motives. This results in most dog grooming shops being mediocre due to one of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lack of knowledge re: breed standard grooms&lt;/li&gt;
&lt;li&gt;Low priority placed on dog comfort &amp;amp; limits&lt;/li&gt;
&lt;li&gt;Illegal employment practices (1099 contractors instead of required W2 employment)&lt;/li&gt;
&lt;li&gt;Slow/inefficient bathing &amp;amp; grooming&lt;/li&gt;
&lt;li&gt;Just plain poor grooming technique&lt;/li&gt;
&lt;li&gt;General bad small-business management (HR, payroll, hiring, etc. etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And unfortunately for passionate, well-educated groomers like my gf, the lack of regulation and lack of consumer knowledge means that these shops manage to stay in business.&lt;br/&gt;
People know a good dog groom job, but they really don’t seem to know BAD grooms!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%203.B_iBwXtg_ZxID95.webp&quot; alt=&quot;A grey and white Schnauzer standing on a groom table. It has a very good, clean pet groom.&quot; title=&quot;Like a stately old man&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;997&quot; height=&quot;748&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%204.Di-apQFD_29lBVJ.webp&quot; alt=&quot;A white Schnauzer standing outside in a stretch position. Its skirt (lower hair) is excessively long with a harsh length cutoff compared to its body fur&quot; title=&quot;Scrungly but still a very cute dog :3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;722&quot; height=&quot;552&quot;&gt;
&lt;em&gt;Schnauzer grooms with various quality “skirts”: Good (top) and Bad (bottom).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The “bad” I’m talking about is things like unevenness, or not cutting shorter in certain areas of the dog to accentuate their breed features. Or neglecting to properly groom/cut their sanitary area properly.&lt;br/&gt;
All things I only know about via the gf. And aside from a few exceptions (poodles), every dog breed has a single breed-standard groom, and you evidently just learn them as you go.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;I suppose in its own way, identifying a good dog grooming shop is similar to how I identify a good &lt;a href=&quot;/cafe-reviews&quot;&gt;coffee shop&lt;/a&gt; :3 You know what to look for once you know what to look for!&lt;/p&gt;
&lt;h2 id=&quot;this-job-barket-is-hell&quot;&gt;This Job BARKet Is Hell&lt;/h2&gt;
&lt;p&gt;While not as bad as perhaps &lt;a href=&quot;/blog/2026-03-25_job-search-march-26&quot;&gt;my job search experience&lt;/a&gt;, the gf has been struggling to find a grooming shop here in Chicago that will provide her the Pay, Respect, and Grooming standards she desires from her passionate career.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%202.DYdZlxOX_ZJrpHL.webp&quot; alt=&quot;google maps screenshot of the Avondale/Logan Square area of Chicago, showcasing a &amp;#34;dog grooming&amp;#34; search result with many many results&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1080&quot;&gt;
&lt;em&gt;Gotta say I love all the punny salon names&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Next week she’ll be starting at yet another new grooming shop since moving here. There are a good many shops in town, many of which are hiring, but most of which are trash for one reason or another. And she really can’t tell until she goes in for an interview and test-groom…a time-consuming and soul-crushing experience when bad.&lt;/p&gt;
&lt;p&gt;If the dog grooming salon is large, it usually means it’s somewhat corporate. This means lower standards for grooms, higher daily dog quotas, and usually poor (if consistent) pay.&lt;/p&gt;
&lt;p&gt;If the salon is small, then you’re rolling the dice BUT more likely to find higher quality “boutique” quality grooms. At the very least, one can check a single person’s Instagram (the owner) to see their quality of work. And that will be 100% indicative of the shop’s quality.&lt;br/&gt;
The risk there of course, is personality clash and classic shitty small-business bullshit.&lt;/p&gt;
&lt;h3 id=&quot;the-obvious-difficult-solution&quot;&gt;The Obvious, Difficult Solution&lt;/h3&gt;
&lt;p&gt;Eventually we’re going to have to open her own grooming salon. It’s the only way to ensure she can produce the quality she wants to, and avoid terrible bosses.&lt;/p&gt;
&lt;p&gt;We have no idea how to do this so that’s a Much Later task…&lt;/p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;In the meantime, I hope she finds stability. I’m grateful for how much I’ve learned about the professional dog world from her.&lt;/p&gt;
&lt;p&gt;It’s extremely easy to take dogs for granted. Not just as pets, but also as highly intelligent, trainable creatures.&lt;/p&gt;
&lt;p&gt;I’m not nearly a dog snob (yet) but I have learned to expect more and better from dogs and their owners! It’s not hard to train your dog to properly respect boundaries and I think in much the same way that we should expect people on public transit to not fucking smoke or play loud music/videos aloud, we should reasonably expect dog owners to train their dogs to behave in public.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary.BjuNYp4g.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Oh and no, we don’t actually have a dog yet. We’re on a waitlist for a white mini-poodle from the breeder we met at PCA last year…would love for her litters to stop having black-coated puppies! It’s the dominant gene, apparently, so it’s probably going to be a bit of a wait :,)&lt;/p&gt; &lt;/blockquote&gt;</content:encoded></item><item><title>You Should Get A Better Mic</title><link>https://cobra.monster/blog/2026-04-05_you-should-get-a-mic</link><guid isPermaLink="true">https://cobra.monster/blog/2026-04-05_you-should-get-a-mic</guid><description>A chill guide for folks who use microphones to play games and talk to friends</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most people won’t be rude about microphone quality, especially when hanging out with friends. I am not most people. But fortunately, I’m also not an asshole, and I know that other folks’ money and interest in such things are not without limits.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who is this for?&lt;/strong&gt; If the extent of your microphone usage is “hanging out in vc with friends”, then this is for you! Because this is also me! I use my microphone for playing games in Discord, and (out of convenience) for work meetings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I am not a microphone or sound equipment expert. I’m just a nerd who did a lot of research into the subject these past 5 years. If you ARE an expert and reading this for some reason, please message me if I made any mistakes :3&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;eyy.BgBs6cHh.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Also I do not do affiliate links so if I link anything here, they’re as stripped and naked of links as I can get!&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;why-bother-with-this&quot;&gt;Why Bother With This?&lt;/h1&gt;
&lt;p&gt;This is a little tricky actually because unlike a good pair of headphones, a good microphone pretty much only benefits anyone listening to you; you yourself are not much affected. So is this just a magnanimous move to improve your friends’ calls with you? Partly yes, but I argue that there are very good personal benefits!&lt;/p&gt;
&lt;h2 id=&quot;you-deserve-better-than-a-headset&quot;&gt;You Deserve Better Than a Headset&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/turtleBeach.ClGovzyC_11js8U.webp&quot; alt=&quot;Turtle beach headphones. Black and green Xbox themed gaming headset on a white background&quot; title=&quot;I couldn&apos;t find a single non-product page image that wasn&apos;t attached to a stupidly high review-score post lol&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;1000&quot;&gt;
&lt;em&gt;These fuckers&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You should have a pair of headphones, whichever ones you like, and you should have a microphone. They should be separate devices. &lt;a href=&quot;https://www.windowscentral.com/gaming/pc-gaming/microphones-on-gaming-headsets-suck-and-that-needs-to-change&quot; class=&quot;external&quot;&gt;A headset is a worse version of both&lt;/a&gt; sold at a premium.&lt;/p&gt;
&lt;p&gt;They’re not even good headphones!&lt;/p&gt;
&lt;h3 id=&quot;you-also-deserve-to-wear-a-pair-of-comfy-cool-headphones-instead&quot;&gt;You also deserve to wear a pair of comfy, cool headphones instead&lt;/h3&gt;
&lt;p&gt;Honestly this is even more important than the microphone. Make sure you like listening to things at your computer. You shouldn’t have to give up a good listening experience just to use a microphone. Get yourself your favorite set of headphones, and then a &lt;em&gt;separate&lt;/em&gt; microphone. That’s it.&lt;br/&gt;
This is the “microphone” blog post but take this also as your friendly wake-up call to reevaluate your headphone situation. You don’t need to be an audiophile to appreciate good sound!&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/smirk.HNdXZEqM_1gUvI6.webp&quot; alt=&quot;smirk.HNdXZEqM.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Just wait until I get time to do an open-backed vs closed-back headphone blog post &amp;gt;:3&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;your-friends-deserve-to-hear-your-real-voice&quot;&gt;Your friends deserve to hear your real voice&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/bisque.DYx0751-_1pLGSm.webp&quot; alt=&quot;Hourly comics day-level effort Argent talking to a friend on the computer, saying &amp;#34;Yeah set the background color to bisque&amp;#34;. Response: &amp;#34;What?&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2000&quot; height=&quot;2000&quot;&gt;
&lt;em&gt;From &lt;a href=&quot;https://bsky.app/profile/cobra.monster/post/3meemk6dufs2i&quot; class=&quot;external&quot;&gt;hourly comics day&lt;/a&gt; this year&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They should also &lt;em&gt;want&lt;/em&gt; to hear your voice. Good friends will overlook microphone quality of course, but a better microphone removes unnecessary friction from a hangout.&lt;/p&gt;
&lt;p&gt;If it’s within budget, it’s great to make an investment into your speaking power, and in allowing your friends to truly hear you and the warmth of your affection for them and the shared moments you’re creating.&lt;/p&gt;
&lt;h2 id=&quot;good-mics-are-cool-as-hell&quot;&gt;Good mics are cool as hell&lt;/h2&gt;
&lt;p&gt;I picked my microphone because it looks cool as hell and feels great to grab and swing down in front of me. It also sounds great and blocks out &lt;a href=&quot;/about/mechanicalkeyboards&quot;&gt;keyboard&lt;/a&gt;, but genuinely even 5 years since buying it I love grabbing that thang, swinging it down in front of me, and jumping into voice chat.&lt;br/&gt;
Feels cool. Feels intentional. Locked the fuck in to &lt;a href=&quot;blog/2025-08-14_these-goofy-games-are-so-good-to-me&quot;&gt;fun friend time&lt;/a&gt; &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&quot;this-is-the-guide-section&quot;&gt;This is the guide section&lt;/h1&gt;
&lt;p&gt;Your choice of microphone boils down to two major decisions (then narrowed further by taste and cost):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How does your microphone connect to your computer? &lt;strong&gt;XLR&lt;/strong&gt; or &lt;strong&gt;USB&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Condenser microphone or Dynamic microphone?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;xlr-vs-usb&quot;&gt;XLR vs USB&lt;/h2&gt;
&lt;p&gt;Historically, this has been a very contentious question &lt;del&gt;on reddit&lt;/del&gt; online because of quality concerns, but as of 2026 USB mics have gotten very good!&lt;/p&gt;
&lt;p&gt;In my opinion, go with a USB mic UNLESS you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;really like a certain XLR-only mic&lt;/li&gt;
&lt;li&gt;plan on using other recording hardware (instruments etc.) now or in the future&lt;/li&gt;
&lt;li&gt;value fine-control of every aspect of your microphone input and processing&lt;/li&gt;
&lt;li&gt;want the aesthetic of a bunch of stuff plugged into your USB interface (see below)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/diagram.ByDH-syG_Z2fVf5t.webp&quot; alt=&quot;Custom USB &amp;#38; XLR microphone diagram, showing the two types of microphones connected to a computer via either USB or XLR, and what other options/connections that entails.&quot; title=&quot;I vibed out the condenser mic for some reason, but otherwwise behold my semi-accurate Rode procaster, cloudlifter, and Motu M2. &quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1666&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;Basically everything on the flow on the XLR side is just shipped inside the USB microphones themselves&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;XLR adds some complexity, but you also have the benefit of a &lt;strong&gt;USB Interface&lt;/strong&gt;, which allows you to plug in speakers, headphones, and other instruments to control all from one set of dials.&lt;br/&gt;
That personally appealed to me strongly enough to warrant the XLR path.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/shrug.CDkipBOB_1a428T.webp&quot; alt=&quot;shrug.CDkipBOB.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;I will add one extra note from my software dev perspective: this is also a choice between digital and analog. XLR mics are analog technology, and are therefore generally more robust, replaceable, and modular. USB mics rely on a lot of digital technology, and software to make them sound great.&lt;br/&gt;
This isn’t necessarily a bad thing, but as a guy who works with software for a living…any reliability that I can pass onto hardware instead of software is a big win for me.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;dynamic-vs-condenser-microphones&quot;&gt;Dynamic vs. Condenser Microphones&lt;/h2&gt;
&lt;p&gt;&lt;lite-youtube videoid=&quot;IDunOMDscOI&quot; title=&quot;Dynamic vs. Condenser Mics: What&apos;s the Difference? (PGOA 1.2)&quot; data-title=&quot;Dynamic vs. Condenser Mics: What&apos;s the Difference? (PGOA 1.2)&quot; style=&quot;background-image: url(&apos;https://i.ytimg.com/vi/IDunOMDscOI/hqdefault.jpg&apos;)&quot;&gt; &lt;a href=&quot;https://youtube.com/watch?v=IDunOMDscOI&quot; class=&quot;lyt-playbtn&quot;&gt; &lt;span class=&quot;lyt-visually-hidden&quot;&gt;Play&lt;/span&gt; &lt;/a&gt; &lt;/lite-youtube&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/node_modules/@astro-community/astro-embed-youtube/YouTube.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;em&gt;This mini-series of Bandrew’s is honestly all worth a watch&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Two different technological approaches to Microphones. They’re both good, but just have certain strengths in different areas.&lt;br/&gt;
In brief:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Passively powered&lt;/li&gt;
&lt;li&gt;Produce a more traditional “radio sound”&lt;/li&gt;
&lt;li&gt;Very durable/rugged&lt;/li&gt;
&lt;li&gt;May need a pre-amp&lt;/li&gt;
&lt;li&gt;Naturally pretty good at blocking out other sounds in the area&lt;/li&gt;
&lt;li&gt;Can handle huge swings in signal without blowing out. (If you’re prone to excitement/yelling when gaming etc. this is a good type of mic to look into.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Condenser&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Actively powered (via USB interface or built-in pre-amp)&lt;/li&gt;
&lt;li&gt;Produces a more “natural” voice sound&lt;/li&gt;
&lt;li&gt;More sensitive and produce louder signal (aka needs less gain)&lt;/li&gt;
&lt;li&gt;Tend to pick up more ambient noise/sound (including keyboards)&lt;/li&gt;
&lt;li&gt;Do not need pre-amps to boost signal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more info there’s a great writeup on &lt;a href=&quot;https://www.sweetwater.com/sweetcare/articles/what-difference-between-dynamic-condenser-microphones/&quot; class=&quot;external&quot;&gt;Sweetwater&lt;/a&gt; but I also highly recommend the Podcastage video linked above.&lt;/p&gt;
&lt;h2 id=&quot;what-do-i-need&quot;&gt;What do I need?&lt;/h2&gt;
&lt;p&gt;If you choose USB: just the microphone.&lt;br/&gt;
If you choose XLR: at &lt;em&gt;least&lt;/em&gt; the microphone and a USB interface. If you choose a &lt;strong&gt;Dynamic Microphone&lt;/strong&gt;, you might need a pre-amp (also known as a “Line Activator”).&lt;/p&gt;
&lt;h2 id=&quot;what-else-should-i-consider&quot;&gt;What else should I consider?&lt;/h2&gt;
&lt;p&gt;Note that aside from #1, these “optionals” are often either unnecessary or built into the mic itself.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A microphone boom arm&lt;/strong&gt;. This will get the microphone off of your desk (which helps with avoiding vibration interference) and also allow for easy positioning so that you can speak into it properly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-vibration microphone mount&lt;/strong&gt;—it uses small bungees to absorb vibration. My mic does not have anything like this built in, but I also found through experimentation that having one did not make a difference for me.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A pop filter&lt;/strong&gt;. Some microphones have these built in, but if not they’re cheap and easy to attach to your setup and will help cut out &lt;a href=&quot;https://en.wikipedia.org/wiki/Plosive&quot; class=&quot;external&quot;&gt;plosives&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;For an idea of what “plosives” sound like, one of my favorite microphone experts uses the test phrase: &lt;strong&gt;“Please Bring Pizza Pronto”&lt;/strong&gt;. Try saying that into your setup and ask listeners how much ‘popping’ they hear from you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;software&quot;&gt;Software&lt;/h3&gt;
&lt;p&gt;I’d also recommend a virtual audio mixer for fine-tuning your audio inputs and outputs. Especially if you’re on Windows which has famously terrible audio software.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/thinking.DseHzPjq_IvTQ2.webp&quot; alt=&quot;thinking.DseHzPjq.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Many USB mics these days come with their own management software, so if you get one of those maybe check if it’s any good!&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/voicemeeter.XaG_9JlP_24fUs.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2056&quot; height=&quot;962&quot;&gt;
&lt;em&gt;Right now I have everything at defaults, but I usually have some EQ settings on the right, and for fun I mess with the “Intellipan” above my mic input on the left.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My go-to is &lt;a href=&quot;https://vb-audio.com/Voicemeeter/&quot; class=&quot;external&quot;&gt;Voicemeeter&lt;/a&gt;. I use Voicemeeter &lt;strong&gt;Potato&lt;/strong&gt; specifically, but most of my friends use &lt;strong&gt;Banana&lt;/strong&gt; (yeah I know lol).&lt;/p&gt;
&lt;p&gt;They look complex because well, they are. I’m sorry. But it’s worth trying out if you want to separate volume control for your Browser vs. your Games vs. Discord vs. Spotify or whatever etc.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;But I need to reiterate&lt;/em&gt; the hardware is so much more important than the software here. You don’t &lt;em&gt;need&lt;/em&gt; this.&lt;/p&gt;
&lt;p&gt;&lt;lite-youtube videoid=&quot;52Rs7tqFYm8&quot; title=&quot;How-To Setup Voicemeeter Banana &amp;#38; Potato Correctly!!&quot; data-title=&quot;How-To Setup Voicemeeter Banana &amp;#38; Potato Correctly!!&quot; style=&quot;background-image: url(&apos;https://i.ytimg.com/vi/52Rs7tqFYm8/hqdefault.jpg&apos;)&quot;&gt; &lt;a href=&quot;https://youtube.com/watch?v=52Rs7tqFYm8&quot; class=&quot;lyt-playbtn&quot;&gt; &lt;span class=&quot;lyt-visually-hidden&quot;&gt;Play&lt;/span&gt; &lt;/a&gt; &lt;/lite-youtube&gt; &lt;em&gt;I always send this video to friends when they’re setting up Voicemeeter for discord etc. so just know there are great guides out there!&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&quot;so-which-one-do-i-get&quot;&gt;So which one do I get?&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Again, not affiliate links.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a rabbit hole so I’m going to avoid it by offering just a few as a starting point, and then a great YouTube channel for doing your own research. Because ultimately you should hear what they sound like before buying.&lt;/p&gt;
&lt;h2 id=&quot;microphones&quot;&gt;Microphones&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Microphone:&lt;/strong&gt; &lt;a href=&quot;https://samsontech.com/products/microphones/usb-microphones/q2u/&quot; class=&quot;external&quot;&gt;Samson q2u&lt;/a&gt;. It’s $100, works and sounds great, and has both USB and XLR connection options. Boom.&lt;br/&gt;
I’d also recommend the &lt;a href=&quot;https://rode.com/en-us/products/podmic&quot; class=&quot;external&quot;&gt;Rode Podmic&lt;/a&gt; (~$100) or the &lt;a href=&quot;https://rode.com/en-us/products/procaster&quot; class=&quot;external&quot;&gt;Rode Procaster&lt;/a&gt; ($~240). I have the Procaster myself, and on top of personal experience, in general I hear consistently good things about the quality of Rode products.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Condenser Microphone:&lt;/strong&gt; &lt;a href=&quot;https://www.elgato.com/us/en/p/wave-3&quot; class=&quot;external&quot;&gt;Elgato Wave 3&lt;/a&gt;. It’s about $170, USB-only, and was made specifically for spoken word (streaming, voice chat). You can get cheaper if you want, this one is just a tidy package with decent software included.&lt;/p&gt;
&lt;p&gt;Overall though, I think you should start with this video and figure out what kind of &lt;em&gt;sound&lt;/em&gt; you want from your microphone and then go from there.&lt;/p&gt;
&lt;p&gt;&lt;lite-youtube videoid=&quot;3ubIok6Mutg&quot; title=&quot;Different Microphone Tones (PGOA 1.5)&quot; data-title=&quot;Different Microphone Tones (PGOA 1.5)&quot; style=&quot;background-image: url(&apos;https://i.ytimg.com/vi/3ubIok6Mutg/hqdefault.jpg&apos;)&quot;&gt; &lt;a href=&quot;https://youtube.com/watch?v=3ubIok6Mutg&quot; class=&quot;lyt-playbtn&quot;&gt; &lt;span class=&quot;lyt-visually-hidden&quot;&gt;Play&lt;/span&gt; &lt;/a&gt; &lt;/lite-youtube&gt; &lt;em&gt;I really wish this video had existed during my initial search…&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;usb-interface&quot;&gt;USB Interface&lt;/h2&gt;
&lt;p&gt;I think the &lt;a href=&quot;https://motu.com/en-us/products/m-series/m2/&quot; class=&quot;external&quot;&gt;Motu M2&lt;/a&gt; gives the most bang for its buck (~$200). It’s the one I have and I really like that it’s got all the knobs I want, but also a pleasant little screen to show input and output levels. I know the  &lt;a href=&quot;https://us.focusrite.com/products/scarlett-2i2&quot; class=&quot;external&quot;&gt;Focusrite 2i2&lt;/a&gt; was pretty universally recommended for a while. I’m sure it’s still good now, but it’s one of those “better value options are available now” situations (including the M2).&lt;/p&gt;
&lt;lite-youtube videoid=&quot;D3ednXYd1pA&quot; style=&quot;background-image: url(&apos;https://i.ytimg.com/vi/D3ednXYd1pA/hqdefault.jpg&apos;)&quot;&gt; &lt;a href=&quot;https://youtube.com/watch?v=D3ednXYd1pA&quot; class=&quot;lyt-playbtn&quot;&gt; &lt;span class=&quot;lyt-visually-hidden&quot;&gt;Play&lt;/span&gt; &lt;/a&gt; &lt;/lite-youtube&gt; 
&lt;p&gt;For a better, still-brief writeup I recommend Chris Person’s article in Aftermath:&lt;/p&gt;
&lt;article class=&quot;link-preview&quot; data-astro-cid-ztfdmrby&gt;&lt;div class=&quot;link-preview__content&quot; data-astro-cid-ztfdmrby&gt;&lt;header data-astro-cid-ztfdmrby&gt;&lt;a class=&quot;link-preview__title&quot; href=&quot;https://aftermath.site/dont-buy-a-yeti-mic-please-logitech/&quot; data-astro-cid-ztfdmrby&gt;There&amp;#39;s No Good Reason To Buy A Yeti Mic - Aftermath&lt;/a&gt; &lt;small class=&quot;link-preview__domain&quot; data-astro-cid-ztfdmrby&gt;aftermath.site&lt;/small&gt;&lt;/header&gt;&lt;small class=&quot;link-preview__description&quot; data-astro-cid-ztfdmrby&gt;The Blue Yeti was the best USB mic for podcasters and streamers, but there is no reason to buy this microphone now.&lt;/small&gt;&lt;/div&gt;&lt;img src=&quot;https://storage.ghost.io/c/30/f5/30f5b1bb-84ee-4c26-b446-fb9a5e512994/content/images/size/w1200/2025/10/blue-yeti-image-3.jpg&quot; alt width=&quot;1200&quot; height=&quot;630&quot; data-astro-cid-ztfdmrby&gt;&lt;/article&gt;
&lt;h2 id=&quot;further-research&quot;&gt;Further Research&lt;/h2&gt;
&lt;p&gt;I love Bandrew from &lt;a href=&quot;https://www.youtube.com/@Podcastage&quot; class=&quot;external&quot;&gt;Podcastage&lt;/a&gt; and his reviews. I recommend checking out either his playlists sorted by price range, or just scrolling through reviews until a microphone catches your eyes.&lt;br/&gt;
His reviews are particularly awesome because he does long, well-timestamped sequences comparing the sound of a given mic to multiple, similar mics. Great for figuring out exactly what kind of sound you want!&lt;/p&gt;
&lt;h2 id=&quot;anti-recommendations&quot;&gt;Anti-Recommendations&lt;/h2&gt;
&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt;&lt;img src=&quot;/_astro/sm7b.C1AMfpv9_Z2tBlqi.webp&quot; alt=&quot;Shure SM7b dynamic microphone mounted to a boom arm&quot; title=&quot;I actually tried one out briefly, and no one could tell that I had switched off from my Procaster lol&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;1000&quot;&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt;&lt;img src=&quot;/_astro/blueYeti.B7J5n-ni_1k1cSi.webp&quot; alt=&quot;Blue (brand) Yeti microphone in a white product page setting next to its box&quot; title=&quot;Never liked the look of this thing. Just feels weirdly bulky.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;1296&quot;&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://www.makeuseof.com/do-streamers-need-shure-sm7b-microphone/&quot; class=&quot;external&quot;&gt;You probably don’t need to get an SM7b&lt;/a&gt;. It’s a fantastic microphone, and there’s a reason why so many streamers use it. But it’s very expensive ($400 right now). I wouldn’t consider it unless your voice is a major part of your career or hobbies.&lt;br/&gt;
Keep in mind that if you get the Shure SM7b you’ll likely need to pony up for a Line Activator as well. Shure offers the &lt;strong&gt;Shure SM7db&lt;/strong&gt; as a $100+ alternative with a built-in pre-amp, but I mean c’mon that’s a lot of money.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aftermath.site/dont-buy-a-yeti-mic-please-logitech/&quot; class=&quot;external&quot;&gt;You should also not get a Blue Yeti&lt;/a&gt;. It has long outgrown its role within its price range. Look around a bit more, or at least look toward the cheaper-wholly-an-upgrade Blue Yeti Nano model.&lt;/p&gt;
&lt;h1 id=&quot;my-personal-setup&quot;&gt;My personal setup&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/mySetup.BC7oCnZZ_Z45xgI.webp&quot; alt=&quot;Photo of my microphone on its stand, next to a computer monitor, above my USB interface. There are a few snake art posters in the backgorund beside window blinds&quot; title=&quot;Proud to say I only had to move one thing for this photo. My desk is actually pretty clean! :3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;And before you say anything that isn’t dust or dirt on my desk mat. It’s keyboard solder :D&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Microphone&lt;/strong&gt;: Rode Procaster (dynamic mic)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB Interface&lt;/strong&gt;: Motu M2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microphone Arm&lt;/strong&gt;: Blue Microphone Boom Arm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That’s it! I did buy a “Fethead” microphone line activator (pre-amp), but it turned out to be unnecessary. If I crank the gain on my M2 up to 100% my mic sounds perfectly fine.&lt;/p&gt;</content:encoded></item><item><title>My 2026 Frontend Dev Job Search Experience</title><link>https://cobra.monster/blog/2026-03-25_job-search-march-26</link><guid isPermaLink="true">https://cobra.monster/blog/2026-03-25_job-search-march-26</guid><description>It&apos;s bad, obviously, but it&apos;s also very annoying and kinda weird!</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;This turned into a behemoth of a blog post, so please feel free to skip ahead with the Contents links there if you just want specific info about my actual interviews, etc!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ve been on and off the job hunt since April 2025. I’m currently employed, and looking because&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I don’t trust that that will continue to last&lt;/li&gt;
&lt;li&gt;I’ve hit 4 years at my company, and I’ve always been told that “Software developers don’t get promotions, they get new jobs”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In any case, I’ve decided to log my experiences thus far as both a personal journaling exercise and to hopefully help out my fellow software devs who might be eyeing their own job search.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;As a small note, I’m going to try and keep this accessible to non-software dev nerds. So when you see me spell out what an “API is” that’s why&lt;/p&gt; &lt;/blockquote&gt;
&lt;hr/&gt;
&lt;p&gt;I’ll start with a quick “who is Regal? &lt;em&gt;professional edition&lt;/em&gt;” summary to contextualize the types of jobs I’m looking for. Then I’ll give a quick broad-view status update of my search results. Finally I’ll follow up with a list of the companies I’ve had interactions with so far, and how that has gone.&lt;/p&gt;
&lt;h1 id=&quot;my-particular-flavor-of-software-dev&quot;&gt;My Particular Flavor of Software Dev&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image.C4EEFCcT_bicXV.webp&quot; alt=&quot;screenshot of a section of my resume. text is as follows: LANGUAGES
C# CSS HTML Java JavaScript
SQL TypeScript
FRAMEWORKS
Angular Astro Bootstrap Express
Material-UI NextJS React
TECHNOLOGIES
Agile Axios AWS Contentful
Docker Github Copilot Jest
JQuery MySQL NodeJS Redux
RXJS Section 508 Storybook
Tailwind CSS ThreeJS Vite&quot; title=&quot;Why yes I did write my Resume in LATeX, thank you for noticing UwU&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;498&quot; height=&quot;572&quot;&gt;
&lt;em&gt;Yep it’s a lazy screenshot of my resume. Never do extra work, ever. lol.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In short, a Senior Frontend developer. In long, a C#-certified contractor who has never once written C# for work, and has pretty much only ever written Java, SQL, and HTML, CSS, Javascript/Typescript, and mostly works with React but sometimes NodeJS back-end stuff, and rarely sometimes in Angular.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/smirk.HNdXZEqM_1gUvI6.webp&quot; alt=&quot;smirk.HNdXZEqM.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Ironically this cobra hates writing Python &lt;img src=&quot;/_astro/snake.GifEiYaW_Z21vbwT.webp&quot; alt=&quot;snake.GifEiYaW.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;For my job searches I usually search “senior frontend engineer” or something like that. Sometimes “React” or “React developer” because I make myself sad when I find a great job posting but for &lt;em&gt;Angular&lt;/em&gt; and I have to remind myself that I haven’t touched Angular in almost 4 years.&lt;/p&gt;
&lt;h2 id=&quot;what-i-do&quot;&gt;What I do&lt;/h2&gt;
&lt;p&gt;The long and short is I look at pre-prepared webapp mockups, build User Interfaces (UIs) with Javascript frameworks, and hook them up to APIs (aka servers and services).&lt;/p&gt;
&lt;p&gt;My particular interests are in custom component libraries and accessibility. I’m not &lt;em&gt;amazing&lt;/em&gt; at accessibility but I try hard to get it right! And some clients are &lt;em&gt;very&lt;/em&gt; picky about this (as they should be!).&lt;/p&gt;
&lt;p&gt;My day-to-day is building out pages from the mockup documents, talking to designers and testers about features in the webapp, and dealing with bugs and bug fixes. I myself am amazed that my work can actually eat up a full 8hr workday so quickly but it really is just like solving puzzles of various levels of frustration all day with lunch and random usually-pointless meetings in the middle.&lt;/p&gt;
&lt;lite-youtube videoid=&quot;r6JXc4zfWw4&quot; title=&quot;It&apos;s really just this, to be honest&quot; data-title=&quot;It&apos;s really just this, to be honest&quot; style=&quot;background-image: url(&apos;https://i.ytimg.com/vi/r6JXc4zfWw4/hqdefault.jpg&apos;)&quot;&gt; &lt;a href=&quot;https://youtube.com/watch?v=r6JXc4zfWw4&quot; class=&quot;lyt-playbtn&quot;&gt; &lt;span class=&quot;lyt-visually-hidden&quot;&gt;Play&lt;/span&gt; &lt;/a&gt; &lt;/lite-youtube&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/node_modules/@astro-community/astro-embed-youtube/YouTube.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;br/&gt;
&lt;h1 id=&quot;the-state-of-the-search&quot;&gt;The State of the Search&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2010.dcJqpbPS_1MHG7w.webp&quot; alt=&quot;Email category screenshot. Currently reads: Job apps: 109. Job Rejection: 50. Job interview request: 7&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;454&quot; height=&quot;230&quot;&gt;
&lt;em&gt;My email organization has become my personal failure tracker :3&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This section is about the bullshit. The ways in which searching for a job as an experienced software developer in 2026 particularly sucks. It’s hard for everybody out there right now, but on top of fake jobs, getting ghosted, and every other plague of modern job hunting, I’ve consistently found 4 types of “oh hell no” throughout my search:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dubious startups&lt;/li&gt;
&lt;li&gt;AI and/or Crypto bullshit&lt;/li&gt;
&lt;li&gt;Egregious interview or application processes&lt;/li&gt;
&lt;li&gt;Insane applications&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;startups--are-they-for-suckers&quot;&gt;Startups — Are they for suckers?&lt;/h2&gt;
&lt;p&gt;It’s not just the uncertainty of working for a startup, it’s the &lt;em&gt;vibes.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy.oubxG8YD_Z16OIxH.webp&quot; alt=&quot;Screenshot of a careers page. An aggressive black and grey design page with text that reads &amp;#34;You&apos;re not everyone. You have no off switch. You&apos;re obsessed with revolutionizing healthcare.&amp;#34; And then a bunch of fluff text above a &amp;#34;go back&amp;#34; and &amp;#34;prove it&amp;#34; button set.&quot; title=&quot;C&apos;mon prove it. Fucking prove it. Prove that you&apos;re OBSESSED with healthcare. What are you a fucking pussy or wait why are there like 8 fake README.MD tabs what is this lol&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1968&quot; height=&quot;715&quot;&gt;
&lt;em&gt;The previous page had 3 buttons, “Let’s Go ↓”, “Process ↓”, and “Skip the line →”. The last of which takes you to this page you see here.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These are the places that promise you heaven and earth if you work for them. Pay ranges from ~$60k to ~$250k “depending on experience”, they don’t seem to offer equity, they have &amp;quot;&amp;quot;unlimited pto&amp;quot;&amp;quot;, and of course they have a *cool office in West Loop*.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/frustrated.Coe1-wSE_ZlHITm.webp&quot; alt=&quot;frustrated.Coe1-wSE.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;“West Loop” is a Chicago neighborhood and it sucks bigtime. One or two cool coffeeshops but it’s the pinnacle of gentrified tech-startup yuppie nightclub nonsense. Every single startup seems to have their office there, and “is the office in West Loop” is one of my actual litmus tests for instant rejection.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;Some of them offer tons of money, a rare few offer equity, many are just kinda cagey about *what* they’re even offering. But none of them seem to offer any explanation for why the thing they’re doing is better than any of the handful of legacy companies that already do whatever they’re offering.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%202.D6lAs-uv_ZImuBY.webp&quot; alt=&quot;Homepage for an AI-powered consulting startup. &amp;#34;Strategy in action for the AI era&amp;#34; and then bullshit.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2505&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;Ooh wow consulting…but with AI! Wow how novel&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’ve never worked for a startup. I’m wary of them, but I don’t rule them out completely. At the very least I’m super curious what they’re like…and I’ll detail below how some of those interviews have gone.&lt;br/&gt;
But as someone seeking job &lt;em&gt;stability&lt;/em&gt;, startups aren’t very high on my list.&lt;/p&gt;
&lt;h3 id=&quot;ai-and-crypto-nonsense&quot;&gt;AI and Crypto Nonsense&lt;/h3&gt;
&lt;p&gt;This one is hard to separate from the startups since every single startup anymore is selling some “AI-powered solution” or whatever. But there are certainly some that go HARD on the AI, and if they even have anything to do with crypto I know it’s a dead-end immediately.&lt;/p&gt;
&lt;p&gt;At some point in my job search I ended up on &lt;a href=&quot;https://wellfound.com/&quot; class=&quot;external&quot;&gt;Wellfound.com&lt;/a&gt;, a startup-specific job board, and the deluge of “AI powered-[noun]” companies flooding that site was all I needed to know that this side of the industry was a dead-end.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%204.DJ93XdyD_Z1lOvef.webp&quot; alt=&quot;Screenshot from Wellfound, listing &amp;#34;Ravenna Software: AI-powered Helpdesk for Internal Teams&amp;#34;, &amp;#34;Cooklist: Agentic Commerce for Grocery Retailers&amp;#34;, and &amp;#34;Frontier: Making frontline workers &amp;#38; warfighters superhuman with a voice AI wearable&amp;#34;&quot; title=&quot;Big fan of that tasty slime colored chef hat icon.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1495&quot; height=&quot;1239&quot;&gt;
&lt;em&gt;They all just have a weird vibe, y’know?&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/yikes.CiuleE7A_2hvr8o.webp&quot; alt=&quot;yikes.CiuleE7A.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Call me cynical but I don’t believe in these *AI-powered companies*. Every single one of these ideas boils down to “Pay us $100s a month to use a crappy React app that prompts ChatGPT for you” which is fucking stupid on its own but obviously has a major issue: the entire company is fully dependent on OpenAI etc. both not fucking up and continuing to offer their AI services at disrupter “blitzscaling” prices.&lt;/p&gt;&lt;p&gt;Maybe the long game is that they host their own instances of the models and hope to be the only game in town once the bubble pops, but is that sustainable…? I don’t fucking think so.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;take-a-proctored-test-before-we-look-at-your-application&quot;&gt;“Take a proctored test before we look at your application”&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%203.BGOewUTs_Z17KDBM.webp&quot; alt=&quot;JSFiddle screenshot. It is a React challenge. The bottom right is a simple app with colored rectangles and text. The task is to write React code so that a user can click on the colored items and have them be visually highlighted, and listed as clicked.&quot; title=&quot;Tiny olive apple sounds delicious ngl&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2606&quot; height=&quot;1670&quot;&gt;
&lt;em&gt;Honestly this one was kinda fun. I’d set it as the upper limit of what I’d do before even getting to the screening interview&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;AKA “Do some egregious bullshit in your spare time before we even deign to add your resume to our pile”. This specific example refers to my experience applying to a big bank (which I only even considered b/c a peer works there). I submitted an application and they immediately sent an email telling me I’d need to take a &lt;em&gt;proctored&lt;/em&gt; test before they’d consider my application.&lt;/p&gt;
&lt;p&gt;That’s crazy. And they certainly weren’t justifying it with their below-market salary offerings. Fuck off.&lt;/p&gt;
&lt;p&gt;The image above is an example of one, but I didn’t mind it. I was in a good, curious mood and it was kinda fun. Simple, accessible, no bullshit. OK!&lt;br/&gt;
But most of what I’m talking about is just so much worse. I see Glassdoor reviews of places complain that they’re just trying to get “free labor” out of applicants, which definitely isn’t true. But I get the sentiment.&lt;/p&gt;
&lt;p&gt;Ultimately I think that this can be OK but in the age of LLMs in coding (I do not use this outside of work), how can you really trust that someone actually *did* that little fiddle challenge?&lt;/p&gt;
&lt;h2 id=&quot;can-you-legally-fucking-ask-that&quot;&gt;Can you legally fucking ask that&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/isThisLegal.C80DdNxk_1cbzRM.webp&quot; alt=&quot;Screenshot of an application&apos;s uniquely long and racist &amp;#34;Diversity&amp;#34; questions. Highlights being &amp;#34;Visually identified sex at birth&amp;#34; and &amp;#34;visually identified ethnicity or race&amp;#34;&quot; title=&quot;A friend pointed out that this might be output from prompting some LLM for a &apos;diversity&apos; section of an application but that feels too generous&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2164&quot; height=&quot;1662&quot;&gt;
&lt;em&gt;Regional Ethnicity or Race is a dropdown with two options btw: “North African” or “Arab”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%206.FiIn8uAD_Z1EgypJ.webp&quot; alt=&quot;Discord screenshot of my friends reacting to the above image. ed! 🦆 — 1/20/26, 1:57 PM
VISUALLY IDENTIFIED SEX AT BIRTH??
Ochita — 1/20/26, 1:58 PM
thats. such a wild question hello?????
ed! 🦆 — 1/20/26, 1:59 PM
are you even allowed to ask that
drega🦈🎲 — 1/20/26, 1:59 PM
include attached image of genitals for verification&quot; title=&quot;Drega predicting the state of the 2027 American job market here&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;844&quot; height=&quot;512&quot;&gt;&lt;/p&gt;
&lt;p&gt;I don’t know what to even say lol what do you do with an application like this.&lt;/p&gt;
&lt;p&gt;I love that they’re always at the end too. You’ll put in your resume, giving all your personal information, and then whoops! This is a job for fascists whoopsie guess I need to “withdraw” the application after uploading all my info.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/shrug.CDkipBOB_1a428T.webp&quot; alt=&quot;shrug.CDkipBOB.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;In the grand scheme of things it doesn’t really matter, right because you just skip these. But job searching already sucks I don’t need the added “suddenly eugenics” pressure, thank you. Fuck off.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;And I know it’s standard practice in the US but I still laugh when I choose the “I don’t want to tell you” option and it reads like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%207.DxC-HRGx_aMGhs.webp&quot; alt=&quot;Screenshot of a Gender dropdown listing &amp;#34;Male&amp;#34;, &amp;#34;Female&amp;#34;, and highlighted: &amp;#34;I don&apos;t wish to disclose (United States of America)&amp;#34;&quot; title=&quot;🎶 And I&apos;m proud to be an Americaaaaan where at least I know I&apos;m definitely totally allowed to be honest about my non-heteronormative genderrrrrrr 🎵&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;748&quot; height=&quot;468&quot;&gt;
&lt;em&gt;Yeeehaw&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;honorable-mentions-i-guess&quot;&gt;Honorable Mentions, I guess&lt;/h3&gt;
&lt;p&gt;This is the only mostly-positive standout I’ve seen so far:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%208.B2NDZaI__Z1fVCaF.webp&quot; alt=&quot;Screenshot of a pronouns list with multi-select, including standard he/him, she/her etc. as well as neopronouns like Xe/Xem and Fae/Faer.&quot; title=&quot;Notable lack of it/its though...gatekeeping the real freaks I see. Pathetic.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1502&quot; height=&quot;770&quot;&gt;
&lt;em&gt;“We’d like to make sure we treat you right!” as we ignore your application and subsequently ghost you&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These ones just make me tilt my head like “what weird tax loophole are we exploiting here. Do I want to be a part of this?”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%209.D0ExsKhB_Z2538wT.webp&quot; alt=&quot;Screenshot of a Yes/No toggle on a job application. &amp;#34;Do you currently reside in any of hte following states: DE, HI, IA, KY, MS, NE, NM, SD, VT, WV, WY? Unfortunately we are unable to hire employees living in these states&amp;#34;&quot; title=&quot;Corn-hating alliance 🌽️🚫️&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1398&quot; height=&quot;360&quot;&gt;
&lt;em&gt;Hot new NY Times CONNECTIONS game where you find the strange labor law connection between Delaware, Hawaii, Iowa, and Wyoming&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&quot;detailing-my-specific-experiences-thus-far&quot;&gt;Detailing My Specific Experiences Thus Far&lt;/h1&gt;
&lt;p&gt;These are 5 places where I successfully began the interviewing process to some degree or another. I don’t harbor any particularly ill-will against any of these, and they were all learning experiences to some degree.&lt;br/&gt;
I’m honestly not even sure if it’s “useful” to share what I experienced here…but it might be fun! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/smile.BCuIwjhV_ZhdCcP.webp&quot; alt=&quot;smile emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&quot;1-sketchy-startup-eager-to-sell-out&quot;&gt;#1: Sketchy Startup Eager to Sell Out&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2011.B2aTkw-9_2hYf1N.webp&quot; alt=&quot;Glassdoor.com page for this company. Showing a 1.8/5 rating and a 15% approval of the CEO&quot; title=&quot;Engaged employer yeah I bet they fucking are&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1572&quot; height=&quot;1160&quot;&gt;
&lt;em&gt;Fucking lol at those ratings&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Genuinely surprised to get a callback at this place, but as my literal first call-back of the job search I was willing to give it a shot.&lt;br/&gt;
It’s a middleman commerce company and I guess the idea is OK, but I definitely got the impression of “surely they already have a way of handling this since this industry has been around for literally 100s of years”&lt;/p&gt;
&lt;p&gt;So basically I wasn’t sold on the idea and I think that the interviewers read it on my face whoops.&lt;/p&gt;
&lt;h2 id=&quot;vibe-check&quot;&gt;Vibe Check&lt;/h2&gt;
&lt;p&gt;Even selling me at its best, it just sounded like an OK startup with an office in the Loop (not being in West Loop is a plus!). I didn’t get any special impressions of the company culture or benefits etc. It all just sounded OK at best.&lt;/p&gt;
&lt;h2 id=&quot;interview&quot;&gt;Interview&lt;/h2&gt;
&lt;p&gt;I got past the screening, of course, but failed after the first interview with an engineer. It wasn’t a technical interview, just an HR-style one. But in it, he revealed that the near goal of the company was to find a buyer soon. I suppose I made the mistake of asking more about that because uhhh what happens to a new hire at the plucky startup that gets acquired?&lt;/p&gt;
&lt;p&gt;They didn’t call me back after that and I did not lose sleep over it.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary.BjuNYp4g.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Side-note: why does no one in the tech world have a decent microphone setup? Was I the only software dev to use their “remote/hybrid subsidy” or whatever to buy decent sound equipment?&lt;/p&gt;&lt;p&gt;This interview and every single one since then was so frustrating. Low quality webcams and mics…an added hurdle for no reason at all.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;2-old-company-loves-outdated-tests&quot;&gt;#2: Old Company Loves Outdated Tests&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2012.sLQ0xvhi_1A516w.webp&quot; alt=&quot;Screenshot of the &amp;#34;welcome to next steps&amp;#34; email I got. Notably with an embedded, auto-playing video of the hiring manager talking about the role.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1044&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;The video was genuinely endearing, especially since it only had audio on the left channel lol&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This was a random “eh why not” application and I was very surprised to get a callback here.&lt;/p&gt;
&lt;h2 id=&quot;vibe-check-1&quot;&gt;Vibe Check&lt;/h2&gt;
&lt;p&gt;Honestly the video was totally fine, and so low-quality for how established this company is that it actually kind of grabbed my attention.&lt;br/&gt;
Ultimately I realized that should have been treated as a red flag. I called the included recruiter phone number there at one point and had a very frustrating experience with the rep on the other end who provided no information and seemed almost confused that I would even call at all.&lt;/p&gt;
&lt;p&gt;So, kind of confusing, maybe low-tech? Definitely not a very empathetic feeling place.&lt;/p&gt;
&lt;h2 id=&quot;interview-1&quot;&gt;Interview&lt;/h2&gt;
&lt;p&gt;I did not get an actual interview because “next steps” was actually an aptitude test, and I guess I failed??&lt;/p&gt;
&lt;p&gt;They sent me a link to a 15-minute maximum aptitude test: “Criteria Cognitive Apptitude Test (aka CCAT)” (I just realized that the files.com email misspelled “aptitude” so that’s a great sign). 15 minutes is totally fine, and I actually enjoyed it. It had some fun puzzles.&lt;/p&gt;
&lt;p&gt;Genuinely I thought I aced it. But alas. No idea why it was so impactful though, this proved nothing at all about my skill as a software dev.&lt;br/&gt;
Though, I didn’t get the score so maybe I totally beefed it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you for taking the time to complete the assessment(s) for our Front End Engineer (Remote) position at [company]. After review, unfortunately we have decided not to proceed with your candidacy for this position.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I called the recruiting team number to ask for more info, but after sounding almost confused that I even found the number in the first place (that they emailed to me, remember) they just stonewalled me so *shrug*.&lt;/p&gt;
&lt;h1 id=&quot;3-over-eager-local-startup-does-personality-astrology-test&quot;&gt;#3: Over-Eager Local Startup Does Personality Astrology Test&lt;/h1&gt;
&lt;p&gt;This is a local Chicago startup. I’m still not 100% what their product is, but it was interesting enough that I went through the process, made it all the way through a gauntlet of in-person interviews before being cut right at the end.&lt;/p&gt;
&lt;h2 id=&quot;the-job&quot;&gt;The Job&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Role:&lt;/strong&gt; Senior Software Engineer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pay:&lt;/strong&gt; Somewhere between 140k-160k/yr&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office:&lt;/strong&gt; Hybrid: 2 days in-office (Tues + Thur)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Benefits:&lt;/strong&gt; Didn’t ask/get that far&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work Specifics:&lt;/strong&gt; Somewhat of a frontend “architect” role, I would have apparently worked closely with a specific higher manager to coordinate frontend design between multiple teams.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My personal enthusiasm was on the low end. I was mostly attracted to the fact that it’s a local startup, and that I’d have in-town coworkers for the first time since 2020. The offered pay was honestly disappointing but I was willing to go to the end and see what was offered and what I could negotiate.&lt;/p&gt;
&lt;h2 id=&quot;vibe-check-2&quot;&gt;Vibe Check&lt;/h2&gt;
&lt;p&gt;First off, they’re a startup in &lt;em&gt;Wicker Park&lt;/em&gt;. They’re real for that. I found the job listing on LinkedIn, but got sent to a sketchy site upon clicking “Apply”, and only after getting a rare “Verify the companies you’re applying to!” popup from LinkedIn, so that’s great.&lt;br/&gt;
I just applied directly on their site instead. And the application confirmation got sent to my spam folder. Wild.&lt;/p&gt;
&lt;p&gt;The CTO emailed me an interview request &lt;em&gt;8 minutes later&lt;/em&gt;, which goddamn. That felt nice. But a few times throughout the process I did get this feeling of increased urgency which raised a few flags for me.&lt;/p&gt;
&lt;p&gt;The introduction interview went very well. I rambled a bit, and actually this was the first time I was flat out asked for an “Elevator Pitch” and I have since then written and practiced one.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Turns out distilling your entire capitalistic worth down to a 30ish-second pitch is both difficult AND painfully introspective!&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;I moved onto the “Company Fit” interview with an HR rep.&lt;/p&gt;
&lt;h2 id=&quot;the-process&quot;&gt;The Process&lt;/h2&gt;
&lt;p&gt;After the initial interview I had the company “fit” interview with HR, which I genuinely enjoyed. I think it went pretty well! The last question was about compensation, and when I asked for my honest ideal range, she said:&lt;/p&gt;
&lt;blockquote class=&quot;flex italic font-serif font-light relative my-10 border-slate-200 py-10&quot; data-astro-cid-jcog7qdd&gt; &lt;div class=&quot;ml-20  font-serif italic&quot; data-astro-cid-jcog7qdd&gt; &lt;p class=&quot;slotContent&quot; data-astro-cid-jcog7qdd&gt; &lt;p&gt;That’s a fair bit higher than we normally offer for this role…however you have some pretty unique qualifications so I think we can make that work!&lt;/p&gt; &lt;/p&gt;  &lt;/div&gt; &lt;/blockquote&gt;
&lt;p&gt;Which in hindsight might have been them just saying whatever to keep the process going, much in the same way I was testing the waters…because the CTO pushed back against this in an awkward way later and I think that might’ve been a large part of why I wasn’t hired.&lt;/p&gt;
&lt;p&gt;But anyways, that went well. She said she’d talk with the CTO and have next steps or otherwise for me 2-days later. I got “next steps” a few hours later! :3&lt;/p&gt;
&lt;h3 id=&quot;the-personality-test&quot;&gt;The Personality Test&lt;/h3&gt;
&lt;p&gt;This was the Next Steps. I had to take a personality test thing and it was really weird…Most of the test was multiple choice where I had 4 statements or adjectives and I had to label one as what I MOST identified with and one I LEAST identified with.&lt;br/&gt;
Some examples:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2014.DqFOS8Jg_Z2vLxsB.webp&quot; alt=&quot;2. Choose which statement is most true or typical of you and which is least like you:
Resist issuing instructions. 	Most 	Least
I dislike dealing with specifics. 	Most 	Least
Portray a balanced and calm demeanor. 	Most 	Least
Enjoy collaborating with others. 	Most 	Least&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1234&quot; height=&quot;379&quot;&gt;
&lt;img src=&quot;/_astro/image%20copy%2013.B93exqTT_NnHNN.webp&quot; alt=&quot;3. Choose which statement is most true or typical of you and which is least like you:
Bring dynamism to your professional duties. 	Most 	Least
Utilize tried-and-true approaches to address
difficulties. 	Most 	Least
Lean towards reaching conclusions the sooner
the better. 	Most 	Least
Remain willing to assist people. 	Most 	Least&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1289&quot; height=&quot;493&quot;&gt;
&lt;em&gt;Credit: &lt;a href=&quot;https://www.jobtestprep.com/free-caliper-assessment-practice-test&quot; class=&quot;external&quot;&gt;JobTestPrep.com&lt;/a&gt; (I forgot to take screenshots of mine)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And then some of those fun pattern puzzles. I actually like those and I think that’s reflected in my highest-scoring section being “Abstract Reasoning Ability”. This particular test did not have a time-limit, but this section was similar to the #2 Company’s CCAT test, except that one had a short time-limit and made these puzzles a bit more high-stakes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2015.DILjrFrW_JGFxQ.webp&quot; alt=&quot;Abstract reasoning puzzle featuring cloud, raindrop, sun, and arrow images in a 3x3 grid. the bottom-right item is missing in the pattern&quot; title=&quot;4: The white cross-arrow. The 3rd column is arrows, and the arrow direction reflects that row&apos;s item&apos;s change (the sun grew in all directions) and the color is reasoned to be the color of one row forwards in the sequence (in this case white for clouds)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;960&quot; height=&quot;720&quot;&gt;
&lt;em&gt;Hover-text for answer UwU&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My results:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%205.BuHb-g51_Zzn4oh.webp&quot; alt=&quot;Photo of a personality test results page. Lists various traits and a number between 0 and 100. Abstract Reasoning Ability: 93
Accommodation: 83
Aggressiveness: 41
Assertiveness: 83
Cautiousness: 49
Ego-Drive: 84
Ego-Strength: 88
Empathy: 85
Energy: 71
External Structure: 49
Flexibility: 22
Gregariousness: 66
Idea Orientation: 84
Level-Headedness: 53
Openness: 84
Risk-Taking: 49
Self-Structure: 65
Skepticism: 32
Sociability: 71
Thoroughness: 52
Urgency: 47&quot; title=&quot;*Ghosts you for being too gregarious and not aggressive enough*&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2589&quot; height=&quot;2497&quot;&gt;
&lt;em&gt;Hire me, the Inflexible-but-open-minded Gregarious Reasoning God lol&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Anyways that’s pretty weird. Technical tests are one thing but online personality tests? Very strange. I guess I should be thankful I passed because I only got a copy of my results when I went to the in-person interview later.&lt;/p&gt;
&lt;h3 id=&quot;in-person-interview&quot;&gt;In-Person Interview&lt;/h3&gt;
&lt;p&gt;This was my first (and currently only) in-person interview I’ve ever had throughout my entire career. Pretty crazy to think about. It’s all been zoom and whatnot.&lt;/p&gt;
&lt;p&gt;Anyways I made the mistake of biking here on a wet day so my pants got kinda wet. But other than that, it was genuinely exciting getting to bike-commute to potential future-employment. I even had time to stop by &lt;a href=&quot;/cafe-reviews/thrd-coffee&quot;&gt;THRD&lt;/a&gt; for coffee :3c&lt;/p&gt;
&lt;p&gt;The 4-hour process broke down like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quick office tour&lt;/li&gt;
&lt;li&gt;Technical interview with 2 frontend guys&lt;/li&gt;
&lt;li&gt;Interview with CTO (again)&lt;/li&gt;
&lt;li&gt;Interview with 3 product people&lt;/li&gt;
&lt;li&gt;“Product Design” interview with an engineer and a product manager&lt;/li&gt;
&lt;li&gt;RESCHEDULED interview with PM and CEO because they were both sick&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The non-technical and non-product design interviews were very standard. I’ll go into more detail about the other two, but the standard interviews were just questions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Describe your experience and what kinds of technology you’ve built with&lt;/li&gt;
&lt;li&gt;Talk about things you made that you’re proud of&lt;/li&gt;
&lt;li&gt;Why are you looking for a new job&lt;/li&gt;
&lt;li&gt;*Questions related to my thoughts re: working for a startup for the first time*&lt;/li&gt;
&lt;li&gt;Describe a situation where (someone on your team disagreed with you/a problem arose and you found a unique solution/etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then more “fit” types of discussions/questions. I think the fact that I’d never worked at a startup before was a weak point…&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/shrug.CDkipBOB_1a428T.webp&quot; alt=&quot;shrug.CDkipBOB.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;At this point starting to wonder how the heck anyone is supposed to work at a startup, because they’re all cagey like this. Are startups for suckers? Is that why I keep bouncing off? Much to consider…&lt;/p&gt; &lt;/blockquote&gt;
&lt;h4 id=&quot;technical-interview&quot;&gt;Technical Interview&lt;/h4&gt;
&lt;p&gt;I was sat in a large meeting room for the whole day. For this interview, 2 engineers came in and one of them gave me his Macbook to do the challenge on.&lt;/p&gt;
&lt;p&gt;The challenge was to finish wiring up a simple React App without the aid of any AI tools or auto-fill. I was to make a simple search input field that would query an API as the user typed, and then to display results as they appeared below. The API utils were already made for me, I was just implementing it and the stateful logic on the client page.&lt;/p&gt;
&lt;p&gt;The trick was that the API data was kind of repetitive, and the API itself was designed to be slow. So further steps were things to improve the UX (minus CSS-related design, this was not required).&lt;br/&gt;
I think I did a good job with this. It was higher-pressure, but I remembered most things, and made light of having to look up things when I needed to (this was explicitly allowed), and one of the engineers helped me remember simple things when I described what I was trying to remember how to do.&lt;/p&gt;
&lt;p&gt;The one big miss I had was I forgot what a &lt;code&gt;return&lt;/code&gt; statement on a &lt;code&gt;useEffect()&lt;/code&gt; loop did. Because I rarely use this.&lt;br/&gt;
This turned out to be the crucial solution to “what do you do when you’ve finished typing, the results you want have showed up, but slower API responses come in later anyways and override your results”. I totally forgot that the &lt;code&gt;return&lt;/code&gt; statement would clean up the function and stop the on-going state updates.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Overall it was a little awkward, especially using someone’s work computer (he used Brave browser and did not close all his tabs…). But mostly awkward because I feel like I forgot a lot of basic shit I should know. A good sign I need to practice interviews!&lt;/p&gt;
&lt;h4 id=&quot;product-design-interview&quot;&gt;Product Design Interview&lt;/h4&gt;
&lt;p&gt;This one sucked and I have no idea what they were looking for. 2 people sat down with me, and asked me to write down on paper or whiteboard my plan for a design for an app.&lt;/p&gt;
&lt;p&gt;The app I was asked to design was an app for employers to find and sort through potential applicants.&lt;/p&gt;
&lt;p&gt;That’s kind of it. I didn’t get much more detail than that, and I think that was the biggest struggle—I had no idea what my limitations were nor what level of depth to go into…like, did they want me to pick my tech stack?&lt;br/&gt;
I think part of the issue was that this is such a common, simple idea that I didn’t really know what to add. Like, this is just Zip Recruiter or one of many other HR products. So I kind of muddled through describing an intake form for potential employees, and an admin console for the employer clients we would sell this product to.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/frustrated.Coe1-wSE_ZlHITm.webp&quot; alt=&quot;frustrated.Coe1-wSE.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Unless I’m missing something, I feel like I was set up to fail. I don’t know what they were asking, and I was explicit that I had never done something like this before—my development experience has been turning designs into viable products. As a Frontend Engineer at a big company I’ve never had the opportunity to choose the tech stack. That’s always chosen by the company or client or whomever based on “market factors” and like, price.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;verdict&quot;&gt;Verdict&lt;/h2&gt;
&lt;p&gt;About 5 days later I got a rejection email from the CTO. The heart of the feedback I got back was:&lt;/p&gt;
&lt;blockquote class=&quot;flex italic font-serif font-light relative my-10 border-slate-200 py-10&quot; data-astro-cid-jcog7qdd&gt; &lt;div class=&quot;ml-20  font-serif italic&quot; data-astro-cid-jcog7qdd&gt; &lt;p class=&quot;slotContent&quot; data-astro-cid-jcog7qdd&gt; &lt;p&gt;I wanted to let you know that we’ve decided to move forward with another candidate. &lt;/p&gt;&lt;p&gt;It wasn’t an easy decision, and in the end it came technical fit and overall start-up experience.&lt;/p&gt; &lt;/p&gt;  &lt;/div&gt; &lt;/blockquote&gt;
&lt;p&gt;See what I mean about the startup experience thing? I don’t get that. And “Technical Fit” does that mean forgetting about the &lt;code&gt;useEffect() return&lt;/code&gt; statement thing really fucked me or was it that “Product Design” thing…? I guess I’ll never know. Good experience though, and I’m glad I went through it.&lt;/p&gt;
&lt;p&gt;Also in hindsight that was so many interviews…And I still wasn’t done! Two more after that!! Crazy.&lt;/p&gt;
&lt;h1 id=&quot;4-legacy-company-wants-to-pay-me-crazy-well-to-drive-to-the-suburbs&quot;&gt;#4: Legacy Company Wants to Pay Me Crazy Well to Drive to the Suburbs&lt;/h1&gt;
&lt;p&gt;This one is short because this is the first and only instance so far where I seem to have failed the initial screening interview. I had a 30-min call scheduled where I boldly assumed that we’d both have webcams on (she did not), and it was a very standard, nice chat about a role that was a very good fit for me.&lt;/p&gt;
&lt;p&gt;I think the only negative is that it’s hybrid 2-days in office, but one of those days was going to be an hour drive to the suburbs. The pay range was crazy high in the $200k+ range so I think I would’ve done it anyways but sheesh.&lt;/p&gt;
&lt;p&gt;Anyways I’m not sure what happened but I didn’t hear anything for two weeks, I emailed her asking for follow-up and then got a very standard rejection so *shrug*.&lt;/p&gt;
&lt;h1 id=&quot;5-the-infinite-ambition-10-month-interview-tech-company&quot;&gt;#5: The Infinite-Ambition 10-month Interview Tech Company&lt;/h1&gt;
&lt;p&gt;I bombed the first part of the final interview here and it was Bad Bad. Both my mistake, and my mental health afterwards because I had SO much confidence. Truly an ego-shattering moment. But anyways.&lt;/p&gt;
&lt;p&gt;This company is a former-startup, now well-established. They do big things and pay Big Money. Their philosophy is that they want to pay San Francisco wages irrespective of where you live, because “why should living somewhere else lower the value of your work?”&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/flustered.DN5RHIEw_ZYzMYC.webp&quot; alt=&quot;flustered.DN5RHIEw.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;A GREAT fucking question&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;Fully remote. 2 company vacations. Unlimited PTO. Just…ideal in every single way. This truly felt like the perfect company for me and I tried very very hard here.&lt;/p&gt;
&lt;h2 id=&quot;process&quot;&gt;Process&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Email an application (no resume, just answers to 4 questions)&lt;/li&gt;
&lt;li&gt;Standard HR screening call&lt;/li&gt;
&lt;li&gt;Take-home coding assignment (details below). No turn-in deadline, but only maximum of 40hrs work on it allowed.&lt;/li&gt;
&lt;li&gt;Technical interview&lt;/li&gt;
&lt;li&gt;Interview with a director&lt;/li&gt;
&lt;li&gt;8hr “in person” virtual all-day interview - 2 technical interviews and 2 standard interviews&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A real gauntlet.&lt;/p&gt;
&lt;h3 id=&quot;email-application&quot;&gt;Email Application&lt;/h3&gt;
&lt;p&gt;The company caught my attention because they just asked some fun, interesting questions as their way of accepting applications. They asked:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What’s your personal website, and if you don’t have one, why not?&lt;/li&gt;
&lt;li&gt;Describe your journey as a software developer and a project you’re proud of&lt;/li&gt;
&lt;li&gt;What is your biggest goal/ambition outside of work?&lt;/li&gt;
&lt;li&gt;How have you heard about the company + this opportunity?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s it! I got a call-back email 5 days later.&lt;/p&gt;
&lt;h3 id=&quot;hr-screening&quot;&gt;HR Screening&lt;/h3&gt;
&lt;p&gt;Genuinely light and fun. I got to talk about my passion for coffee and wanting to open a coffee shop in town. The company rep lives in Portland, so she was actually familiar with &lt;em&gt;Proud Mary&lt;/em&gt; roasters (my fave at the time), and that was really neat :3&lt;br/&gt;
I was asked if I was familiar with PHP at all, and I said no. She said “Excellent. 95% of people we hire are not, and we like to see if you can learn on the go with it.” &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/thinking.DseHzPjq_IvTQ2.webp&quot; alt=&quot;thinking emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;She told me about the rest of the process and was very insistent that the take-home application had no upper time limit for completion.&lt;/p&gt;
&lt;h3 id=&quot;take-home-project&quot;&gt;Take-Home Project&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2016.BDoHhAM7_1VOgIy.webp&quot; alt=&quot;Screenshot of my take-home project main page. It says &amp;#34;Transactions&amp;#34; in big text at the top. There&apos;s a +Transaction button on the left, and a logout button on the right. The table is a big long table with columns for Transaction Dates, Merchant, Amount, and Comment. The data is kinda gobbeldy gook random stuff. There&apos;s a striped loading bar at the bottom indicating that the table is 85% loaded.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2539&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;I defaulted to green-theming and then went hard on it!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This beast!! Oh my god.&lt;/p&gt;
&lt;p&gt;First off…I received this project in June of 2025. I turned in my finished project at 37hrs total in February 2026. And they approved of it! So this thing was a winner and I’m still quite proud of that.&lt;/p&gt;
&lt;p&gt;The task was to build an full-stack app using their testing API. The Frontend was limited to vanilla HTML, CSS, and JS. JQuery was the only library allowed.&lt;br/&gt;
The backend was PHP &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;the-task&quot;&gt;The Task&lt;/h4&gt;
&lt;p&gt;To be successful, the app had to do a few things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Display a login page that uses a PHP endpoint to actually login (I was given valid login credentials)&lt;/li&gt;
&lt;li&gt;When logged in, the page should display and load a data-table without any page refreshes (aka a SPA using JQuery to manipulate the DOM)&lt;/li&gt;
&lt;li&gt;Load the data from the API in as performant way as possible within the limitations&lt;/li&gt;
&lt;li&gt;Allow the user to add a new record to the table by calling another API and submitting data. It should immediately appear on the table, and persist after a refresh (aka actually submitting to the server)&lt;/li&gt;
&lt;li&gt;Allow the user to log out&lt;/li&gt;
&lt;li&gt;Persist login on refresh&lt;/li&gt;
&lt;li&gt;Provide meaningful errors when login fails or anything else fails.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I’m paraphrasing but the actual instructions were extremely vague and open-ended, and there was a line in the instructions confirming that this was intentional. I was also instructed to keep notes about how much time I spent on the project, and what I did with my time.&lt;/p&gt;
&lt;h4 id=&quot;my-approach-the-code&quot;&gt;My Approach (the code)&lt;/h4&gt;
&lt;p&gt;Unsurprisingly, I had a lot of fun with the visual and UX design elements of the app. To that point, I started with the PHP stuff to get it out of the way. And god I really stumbled through this shit lol. But it more or less worked!&lt;/p&gt;
&lt;h5 id=&quot;php-&quot;&gt;PHP 💀&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2018.DFyQ0ogz_Z938jT.webp&quot; alt=&quot;The New Transaction modal pop-up in my take home app. It just lists the fields from the table in a pleasing way as an interactive form.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1249&quot;&gt;&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;&lt;img src=&quot;/_astro/crt_green_lines.DllE1TQZ_Z1WLoGh.webp&quot; alt=&quot;crt_green_lines.DllE1TQZ.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt; Some of my PHP code&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;php&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;Auth.php&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;php&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;php&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;php&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;session_start&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$headers &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;    &amp;#39;Access-Control-Allow-Origin: *&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;    &amp;#39;Access-Control-Allow-Methods: GET, POST&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;    &amp;#39;Access-Control-Allow-Headers: X-Requested-With&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;    &amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$userId &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $_POST&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;userId&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$password &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $_POST&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$url &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;#39;https://www.company.com/api&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$authToken &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;#39;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$configs &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; include&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;../config.php&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;extract&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$configs&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$post &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;#39;partnerName=&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $partnerName &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;#39;&amp;amp;partnerPassword=&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $partnerPassword &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;#39;&amp;amp;partnerUserID=&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $userId &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;#39;&amp;amp;partnerUserSecret=&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $password&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; curl_init&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_setopt&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; CURLOPT_URL&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$url&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$post&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_setopt&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_setopt&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; CURLOPT_POST&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_setopt&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; CURLOPT_HTTPHEADER&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $headers&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_setopt&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_setopt&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; CURLOPT_FAILONERROR&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;filter_var&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$userId&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; FILTER_VALIDATE_EMAIL&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; json_encode&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$userId&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        die&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;HTTP/1.1 401 Wrong username or password.&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    $response &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; curl_exec&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    extract&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;curl_getinfo&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$ch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    $data &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; json_decode&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$response&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;isset&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;authToken&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;]))&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        $authToken &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $data&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;authToken&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        $_SESSION&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;auth_token&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $authToken&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; json_encode&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        die&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;HTTP/1.1 401 Invalid Credentials&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; catch&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EED49F;font-style:italic&quot;&gt;Exception&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $e&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    die&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;HTTP/1.1 500 Internal Server Error&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;&lt;?php
session_start();

$headers = [
    &apos;Access-Control-Allow-Origin: *&apos;,
    &apos;Access-Control-Allow-Methods: GET, POST&apos;,
    &apos;Access-Control-Allow-Headers: X-Requested-With&apos;,
    &apos;Content-Type: application/json&apos;,
];

$userId = $_POST[&apos;userId&apos;];
$password = $_POST[&apos;password&apos;];
$url = &apos;https://www.company.com/api&apos;;
$authToken = &apos;&apos;;
$configs = include(&apos;../config.php&apos;);
extract($configs);

$post = &apos;partnerName=&apos; . $partnerName . &apos;&amp;#38;partnerPassword=&apos; . $partnerPassword . &apos;&amp;#38;partnerUserID=&apos; . $userId . &apos;&amp;#38;partnerUserSecret=&apos; . $password;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, &amp;#34;$url?$post&amp;#34;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
try {
    if (!filter_var($userId, FILTER_VALIDATE_EMAIL)) {
        echo json_encode($userId);
        die(header(&apos;HTTP/1.1 401 Wrong username or password.&apos;));
    }
    $response = curl_exec($ch);
    extract(curl_getinfo($ch));
    $data = json_decode($response, true);
    if (isset($data[&apos;authToken&apos;])) {
        $authToken = $data[&apos;authToken&apos;];
        $_SESSION[&apos;auth_token&apos;] = $authToken;
        echo json_encode(true);
    } else {
        die(header(&apos;HTTP/1.1 401 Invalid Credentials&apos;));
    }
} catch (Exception $e) {
    die(header(&apos;HTTP/1.1 500 Internal Server Error&apos;));
}&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/src/components/Accordion/Accordion.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;Honestly just getting a local PHP server running on my computer was hard enough, but yeah this was a struggle. I didn’t fall in love with PHP. But it was cool and genuinely exciting to learn something new like this.&lt;/p&gt;
&lt;h5 id=&quot;javascript-&quot;&gt;Javascript 😁&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2017.VBZuIP7Z_AwbI9.webp&quot; alt=&quot;My New Transaction modal from the take-home assessment&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1321&quot; height=&quot;1125&quot;&gt;&lt;/p&gt;
&lt;p&gt;I hadn’t had to use JQuery in ages but it was like riding a bike, and I just had to look up a few of the functions here and there.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;For those unfamiliar, JQuery is an ancient javascript library that just provides a bunch of shorthand functions to do things that javascript lets us do right out of the box. For instance, in Javascript if you wanted to select an element on the page, you’d do something like this:&lt;/p&gt;&lt;p&gt;&lt;code&gt;const header = document.getByElementId(&amp;quot;header&amp;quot;);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;In JQuery, you’d do the same thing with:&lt;/p&gt;&lt;p&gt;&lt;code&gt;const header = $(&amp;#39;#header&amp;#39;);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;It’s shorthand but only rewards people who already know what they’re doing. This company was testing me by limiting me to the simplest webdev tools possible, but they also (correctly) decided that JQuery would offer some ease and relief without compromising the core ideal.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;I did some very cool things. I’m particularly proud of the “New Transaction” modal (pictured above), and the clever way I handled the fact that the &lt;code&gt;GetTransactions&lt;/code&gt; API endpoint returned over 12,000 records over the course of 12 seconds &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/flushed.B8I4D_HK_1w1P7z.webp&quot; alt=&quot;flushed emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;&lt;img src=&quot;/_astro/crt_green_lines.DllE1TQZ_Z1WLoGh.webp&quot; alt=&quot;crt_green_lines.DllE1TQZ.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt; My Modal’s JS Code&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;modal.js&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; showSection &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;./cssHelpers.js&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(document)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;ready&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#new-transaction-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#new-transaction-modal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;display&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;flex&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    resetNewTransactionForm&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#reset-new-transaction-form-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    resetNewTransactionForm&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#close-new-transaction-modal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#new-transaction-modal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#cancel-new-transaction-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#new-transaction-modal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#logout-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#logout-modal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;display&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;flex&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.spinner-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  // Only allow numbers in Amt field&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.numerical-input&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;input&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#ED8796&quot;&gt;    this&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;value &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ED8796&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F5BDE6&quot;&gt;/\D/&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  // UX sugar for cents box&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#amountCents&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;focusout&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; val &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ED8796&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (val &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; val&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;length &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#ED8796&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;value &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; val&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#new-transaction-form&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;submit&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    e&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;preventDefault&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; hasError &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;    // Clear validation errors&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.errorMsg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; createdDate &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#date&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;createdDate) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      hasError &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#date&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;after&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;&amp;lt;span class=&amp;quot;errorMsg&amp;quot;&amp;gt;This field is required&amp;lt;/span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; merchant &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#merchant&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (merchant&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;length &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      hasError &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#merchant&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;after&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;&amp;lt;span class=&amp;quot;errorMsg&amp;quot;&amp;gt;This field is required&amp;lt;/span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; isExpense &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;input[name=&amp;quot;transaction-type&amp;quot;]:checked&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; amountWhole &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#amount&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; amountCents &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#amountCents&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;    // Must have at least one&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;amountWhole &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;amountCents) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      hasError &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#amt-input&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;after&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;#39;&amp;lt;span class=&amp;quot;errorMsg&amp;quot;&amp;gt;This field is required&amp;lt;/span&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;    // Expense is default, so for income, flip to negative.&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; amount &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;isExpense&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;expense&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;amountWhole&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; amountWhole&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;amountCents&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; amountCents&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;00&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; comment &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#comment&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $form &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ED8796&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $inputs &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; $form&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;input, password, submit, select, button, textarea&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; values &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      created&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; createdDate&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      merchant&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; encodeURIComponent&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(merchant)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      amount&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; amount&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      comment&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; encodeURIComponent&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(comment)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;hasError) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;ajax&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        url&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;api/createTransaction.php&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        crossDomain&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        type&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;POST&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        data&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; values&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        beforeSend&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;          // Clear status for new AJAX&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#submission-status&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#reload-page&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;          // Disable inputs while submitting&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          $inputs&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;prop&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;disabled&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        success&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;          // Hide Modal&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          resetNewTransactionForm&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          setSubmissionStatus&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;Transaction added!&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#reload-page&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;display&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;flex&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        error&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          setSubmissionStatus&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(error&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;statusText&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        complete&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          $inputs&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;prop&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;disabled&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#logout-form&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;submit&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    e&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;preventDefault&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;ajax&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      url&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;api/logout.php&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      crossDomain&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      type&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      beforeSend&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.messages&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.spinner-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      complete&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.spinner-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      success&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#transactionTableBody&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#logout-modal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        showSection&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#login-section&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      error&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.messages&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(error&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;statusText)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; setSubmissionStatus&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt; isError&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#submission-status&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(message)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#submission-status&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(isError &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;errorMsg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;successMsg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#submission-status&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(isError &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;successMsg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;errorMsg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; resetNewTransactionForm&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;isSuccess&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#new-transaction-form&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.errorMsg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  // Reset form on SUCCESS, so that additional transactions can be entered&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;isSuccess) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#submission-status&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;import { showSection } from &amp;#34;./cssHelpers.js&amp;#34;;

$(document).ready(function () {
  $(&amp;#34;#new-transaction-btn&amp;#34;).click(function () {
    $(&amp;#34;#new-transaction-modal&amp;#34;).css(&amp;#34;display&amp;#34;, &amp;#34;flex&amp;#34;);
    resetNewTransactionForm();
  });
  $(&amp;#34;#reset-new-transaction-form-btn&amp;#34;).click(function () {
    resetNewTransactionForm();
  });
  $(&amp;#34;#close-new-transaction-modal&amp;#34;).click(() =&gt; $(&amp;#34;#new-transaction-modal&amp;#34;).hide());
  $(&amp;#34;#cancel-new-transaction-btn&amp;#34;).click(() =&gt; $(&amp;#34;#new-transaction-modal&amp;#34;).hide());

  $(&amp;#34;#logout-btn&amp;#34;).click(() =&gt; $(&amp;#34;#logout-modal&amp;#34;).css(&amp;#34;display&amp;#34;, &amp;#34;flex&amp;#34;));
  $(&amp;#34;.spinner-btn&amp;#34;).hide();

  // Only allow numbers in Amt field
  $(&amp;#34;.numerical-input&amp;#34;).on(&amp;#34;input&amp;#34;, function () {
    this.value = this.value.replace(/\D/g, &amp;#34;&amp;#34;);
  });

  // UX sugar for cents box
  $(&amp;#34;#amountCents&amp;#34;).on(&amp;#34;focusout&amp;#34;, function () {
    const val = this.value;
    if (val &amp;#38;&amp;#38; val.length === 1) {
      this.value = &amp;#34;0&amp;#34; + val;
    }
  });

  $(&amp;#34;#new-transaction-form&amp;#34;).submit(function (e) {
    e.preventDefault();
    let hasError = false;
    // Clear validation errors
    $(&amp;#34;.errorMsg&amp;#34;).remove();

    const createdDate = $(&amp;#34;#date&amp;#34;).val();
    if (!createdDate) {
      hasError = true;
      $(&amp;#34;#date&amp;#34;).after(&apos;&lt;span class=&amp;#34;errorMsg&amp;#34;&gt;This field is required&lt;/span&gt;&apos;);
    }

    const merchant = $(&amp;#34;#merchant&amp;#34;).val();
    if (merchant.length &lt; 1) {
      hasError = true;
      $(&amp;#34;#merchant&amp;#34;).after(&apos;&lt;span class=&amp;#34;errorMsg&amp;#34;&gt;This field is required&lt;/span&gt;&apos;);
    }

    const isExpense = $(&apos;input[name=&amp;#34;transaction-type&amp;#34;]:checked&apos;).val();
    const amountWhole = $(&amp;#34;#amount&amp;#34;).val();
    const amountCents = $(&amp;#34;#amountCents&amp;#34;).val();
    // Must have at least one
    if (!amountWhole &amp;#38;&amp;#38; !amountCents) {
      hasError = true;
      $(&amp;#34;#amt-input&amp;#34;).after(&apos;&lt;span class=&amp;#34;errorMsg&amp;#34;&gt;This field is required&lt;/span&gt;&apos;);
    }
    // Expense is default, so for income, flip to negative.
    const amount = `${isExpense === &amp;#34;expense&amp;#34; ? &amp;#34;&amp;#34; : &amp;#34;-&amp;#34;}${amountWhole ? amountWhole : &amp;#34;&amp;#34;}${amountCents ? amountCents : &amp;#34;00&amp;#34;}`;

    const comment = $(&amp;#34;#comment&amp;#34;).val();

    var $form = $(this);
    var $inputs = $form.find(&amp;#34;input, password, submit, select, button, textarea&amp;#34;);
    const values = {
      created: createdDate,
      merchant: encodeURIComponent(merchant),
      amount: amount,
      comment: encodeURIComponent(comment),
    };

    if (!hasError) {
      $.ajax({
        url: &amp;#34;api/createTransaction.php&amp;#34;,
        crossDomain: true,
        type: &amp;#34;POST&amp;#34;,
        data: values,
        beforeSend: function () {
          // Clear status for new AJAX
          $(&amp;#34;#submission-status&amp;#34;).text(&amp;#34;&amp;#34;);
          $(&amp;#34;#reload-page&amp;#34;).hide();
          // Disable inputs while submitting
          $inputs.prop(&amp;#34;disabled&amp;#34;, true);
        },
        success: function (data) {
          // Hide Modal
          resetNewTransactionForm(true);
          setSubmissionStatus(&amp;#34;Transaction added!&amp;#34;, false);
          $(&amp;#34;#reload-page&amp;#34;).css(&amp;#34;display&amp;#34;, &amp;#34;flex&amp;#34;);
        },
        error: function (error) {
          setSubmissionStatus(error.statusText, true);
        },
        complete: function () {
          $inputs.prop(&amp;#34;disabled&amp;#34;, false);
        },
      });
    }
  });

  $(&amp;#34;#logout-form&amp;#34;).submit(function (e) {
    e.preventDefault();
    $.ajax({
      url: &amp;#34;api/logout.php&amp;#34;,
      crossDomain: true,
      type: &amp;#34;GET&amp;#34;,
      beforeSend: function () {
        $(&amp;#34;.messages&amp;#34;).text(&amp;#34;&amp;#34;);
        $(&amp;#34;.spinner-btn&amp;#34;).show();
      },
      complete: function () {
        $(&amp;#34;.spinner-btn&amp;#34;).hide();
      },
      success: function () {
        $(&amp;#34;#transactionTableBody&amp;#34;).empty();
        $(&amp;#34;#logout-modal&amp;#34;).hide();
        showSection(&amp;#34;#login-section&amp;#34;);
      },
      error: function (error) {
        $(&amp;#34;.messages&amp;#34;).text(error.statusText);
      },
    });
  });
});

function setSubmissionStatus(message, isError) {
  $(&amp;#34;#submission-status&amp;#34;).text(message);
  $(&amp;#34;#submission-status&amp;#34;).addClass(isError ? &amp;#34;errorMsg&amp;#34; : &amp;#34;successMsg&amp;#34;);
  $(&amp;#34;#submission-status&amp;#34;).removeClass(isError ? &amp;#34;successMsg&amp;#34; : &amp;#34;errorMsg&amp;#34;);
}

function resetNewTransactionForm(isSuccess = false) {
  $(&amp;#34;#new-transaction-form&amp;#34;)[0].reset();
  $(&amp;#34;.errorMsg&amp;#34;).remove();

  // Reset form on SUCCESS, so that additional transactions can be entered
  if (!isSuccess) {
    $(&amp;#34;#submission-status&amp;#34;).text(&amp;#34;&amp;#34;);
  }
}&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;I built a form AND implemented some simple-but-useful form validation :3 Not bad for a guy who has only ever done that with a full Angular or React framework!&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;&lt;img src=&quot;/_astro/crt_green_lines.DllE1TQZ_Z1WLoGh.webp&quot; alt=&quot;crt_green_lines.DllE1TQZ.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt; My Table-Chunking JS Code&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;createTable.js&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; formatAmount&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; setNoRecordsFound &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;./dataUtils.js&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; * Create Table&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; Rendering 10,000+ records all at once is extremely intensive. This function breaks that up into batches (&amp;quot;chunks&amp;quot;).&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; * Additionally contains CSS logic for rendering a custom progress bar loader that actually accurately represents page hydration status.&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; * ChunkSize is configurable, but 1,000 seems reasonably performant.&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#EED49F;font-style:italic&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#EE99A0&quot;&gt; data&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;returns&lt;/span&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; HTML&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; createTable&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  // Hide API loader&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#table-placeholder&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; tbody &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#transactionTableBody&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  tbody&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; chunkSize &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1000&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; index &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;length &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-bar-container&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; setNoRecordsFound&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; renderNextChunk&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-bar-container&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(index &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; chunkSize&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;length)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; chunk &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(index&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; end)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; html &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    chunk&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; positive &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; Number&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;amount) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      html &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; `&amp;lt;tr id=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transactionID&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      &amp;lt;td id=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transactionID&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-created&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      &amp;lt;td id=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transactionID&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-merchant&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;merchant&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      &amp;lt;td id=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transactionID&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-amount&amp;quot; class=&amp;quot;rightAlign &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;positive&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;positiveValue&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;negativeValue&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;formatAmount&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;amount&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      &amp;lt;td id=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transactionID&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-comment&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;transaction&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      &amp;lt;/tr&amp;gt;`&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    tbody&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(html)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; progress &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;((end &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;length) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-message&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`Loading table, please wait...&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;progress&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;%`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-bar&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;progress&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;%`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    index &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; end&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (index &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;length) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(renderNextChunk)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-message&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;Loading...Done!&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;      // Let the finished loading bar hang for happy UX&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      setTimeout&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-message&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;#loading-bar-container&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      },&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1500&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.main-page-btn&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;prop&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;disabled&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  renderNextChunk&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;import { formatAmount, setNoRecordsFound } from &amp;#34;./dataUtils.js&amp;#34;;

/**
 * Create Table
 *
 * @description Rendering 10,000+ records all at once is extremely intensive. This function breaks that up into batches (&amp;#34;chunks&amp;#34;).
 * Additionally contains CSS logic for rendering a custom progress bar loader that actually accurately represents page hydration status.
 * ChunkSize is configurable, but 1,000 seems reasonably performant.
 *
 * @param {any} data
 * @returns HTML
 */
export function createTable(data) {
  // Hide API loader
  $(&amp;#34;#table-placeholder&amp;#34;).hide();
  const tbody = $(&amp;#34;#transactionTableBody&amp;#34;);
  tbody.empty();
  const chunkSize = 1000;
  let index = 0;

  if (!data.length &gt; 0) {
    $(&amp;#34;#loading-bar-container&amp;#34;).hide();
    return setNoRecordsFound();
  }

  function renderNextChunk() {
    $(&amp;#34;#loading-bar-container&amp;#34;).show();

    const end = Math.min(index + chunkSize, data.length);
    const chunk = data.slice(index, end);

    let html = &amp;#34;&amp;#34;;
    chunk.forEach((transaction) =&gt; {
      const positive = Number(transaction.amount) &gt; 0;
      html += `&lt;tr id=${transaction.transactionID}&gt;
      &lt;td id=&amp;#34;${transaction.transactionID}-created&amp;#34;&gt;${transaction.created}&lt;/td&gt;
      &lt;td id=&amp;#34;${transaction.transactionID}-merchant&amp;#34;&gt;${transaction.merchant}&lt;/td&gt;
      &lt;td id=&amp;#34;${transaction.transactionID}-amount&amp;#34; class=&amp;#34;rightAlign ${positive ? &amp;#34;positiveValue&amp;#34; : &amp;#34;negativeValue&amp;#34;}&amp;#34;&gt;${formatAmount(transaction.amount)}&lt;/td&gt;
      &lt;td id=&amp;#34;${transaction.transactionID}-comment&amp;#34;&gt;${transaction.comment}&lt;/td&gt;
      &lt;/tr&gt;`;
    });

    tbody.append(html);

    const progress = Math.round((end / data.length) * 100);
    $(&amp;#34;#loading-message&amp;#34;).text(`Loading table, please wait...${progress}%`);
    $(&amp;#34;#loading-bar&amp;#34;).css(&amp;#34;width&amp;#34;, `${progress}%`);
    index = end;

    if (index &lt; data.length) {
      requestAnimationFrame(renderNextChunk);
    } else {
      $(&amp;#34;#loading-message&amp;#34;).text(&amp;#34;Loading...Done!&amp;#34;);
      // Let the finished loading bar hang for happy UX
      setTimeout(() =&gt; {
        $(&amp;#34;#loading-message&amp;#34;).text(&amp;#34;&amp;#34;);
        $(&amp;#34;#loading-bar-container&amp;#34;).hide();
      }, 1500);
      $(&amp;#34;.main-page-btn&amp;#34;).prop(&amp;#34;disabled&amp;#34;, false);
      return;
    }
  }
  renderNextChunk();
}&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;I don’t know why I kept with the word “Chunk” to describe what is clearly “Batching”…Anyways. Yeah I’ve never used &lt;code&gt;requestAnimationFrame()&lt;/code&gt; before! I felt super clever for figuring this out AND I cleverly used this to create an intuitive and honest loading bar (see first screenshot above) :3&lt;br/&gt;
I’m also proud of how I figured out that I could just build the table as large strings first and THEN append them as actual html.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;There’s a lot more I could say, but suffice to say this was a big undertaking. I tried very hard, and happily learned new things along the way. I ultimately got good feedback:&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;txt&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span&gt;Good:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Good performance optimization: chunking system renders 10,000+ transactions in batches using requestAnimationFrame with real-time progress indicators&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Well-organized modular code structure with clean separation of concerns across multiple files&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   API credentials properly isolated in configuration file&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Polished user experience: Modern UI with loading states, form validation, and intuitive modal interfaces&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Comprehensive documentation: Detailed README and thorough 37-hour time log showing methodical development approach&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;Observations:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Transaction display failure: New transactions require manual page refresh instead of immediate table updates as specified in requirements&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Authentication implementation: Used PHP sessions instead of required cookie-based authentication (authToken cookie)&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   Missing email validation: Login form accepts any text input without email format verification&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;-   auth.php - GET-style URL parameters for POST requests (CURLOPT_URL with query string) was used instead of CURLOPT_POSTFIELDS&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span&gt;Overall: While your technical skills and performance optimization are impressive, some requirements were missed that impacted the overall evaluation.&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;Good:

-   Good performance optimization: chunking system renders 10,000+ transactions in batches using requestAnimationFrame with real-time progress indicators
-   Well-organized modular code structure with clean separation of concerns across multiple files
-   API credentials properly isolated in configuration file
-   Polished user experience: Modern UI with loading states, form validation, and intuitive modal interfaces
-   Comprehensive documentation: Detailed README and thorough 37-hour time log showing methodical development approach

Observations:

-   Transaction display failure: New transactions require manual page refresh instead of immediate table updates as specified in requirements
-   Authentication implementation: Used PHP sessions instead of required cookie-based authentication (authToken cookie)
-   Missing email validation: Login form accepts any text input without email format verification
-   auth.php - GET-style URL parameters for POST requests (CURLOPT_URL with query string) was used instead of CURLOPT_POSTFIELDS

Overall: While your technical skills and performance optimization are impressive, some requirements were missed that impacted the overall evaluation.&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;I pretty much did great on everything I’d hoped to, had weaknesses in the part that they knew beforehand I’d likely struggle with.&lt;/p&gt;
&lt;h3 id=&quot;technical-interview-1&quot;&gt;Technical Interview&lt;/h3&gt;
&lt;p&gt;This consisted of 2 parts, a 30-min challenge and a series of various technical questions. I was told in my first interview that I really only needed to get 50%+ of the questions right to pass that bit, so the bigger part was the coding challenge.&lt;/p&gt;
&lt;h4 id=&quot;30-min-jquery-and-a-rotating-square&quot;&gt;30-min, JQuery, and a Rotating Square&lt;/h4&gt;
&lt;p&gt;I was asked to create a Javascript app that would run on the browser, and upon load would generate a grid of squares of dimensions NxN where N was a random number between 10 and 55.&lt;br/&gt;
The centermost square needed to be outlined in black, and it needed to have one side colored red. And if the left or right arrow keys were pressed, the square was to rotate in place, appropriate to the direction that was pressed.&lt;/p&gt;
&lt;p&gt;I was allowed to reference my take-home project (which I did to quickly grab some JQuery functions) and I was told a few things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Don’t use a CSS Grid, b/c it messes people up&lt;/li&gt;
&lt;li&gt;Go one step at a time&lt;/li&gt;
&lt;li&gt;Google (Kagi) whatever you want short of a specific solution to this problem&lt;/li&gt;
&lt;li&gt;Ask the interviewer for help at any time (this was strongly encouraged)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I managed to get it at the last second…and my word was I sweating. So much nasty dirty Javascript…switches and terribly hoisted variables augh but it worked!&lt;/p&gt;
&lt;h4 id=&quot;enough-questions-to-make-me-feel-stupid&quot;&gt;Enough Questions to Make Me Feel Stupid&lt;/h4&gt;
&lt;p&gt;It’s been almost 2 months so I don’t remember the exact questions, but they ranged from “Describe the difference between == and ===” to “what’s the difference between a javascript function and a javascript arrow/anonymous function”, as well as some backend questions that I wasn’t as prepared for.&lt;br/&gt;
It was fine though and I didn’t feel too nervous.&lt;/p&gt;
&lt;p&gt;Almost a full week later I finally got the email saying I moved to the next step.&lt;/p&gt;
&lt;h3 id=&quot;director-interview&quot;&gt;Director Interview&lt;/h3&gt;
&lt;p&gt;This was an hour long interview that went over by 20 minutes, which I (correctly) took as a good sign. I spoke with a nice guy who’d been with the company for 8 years.&lt;/p&gt;
&lt;p&gt;There isn’t a whole lot to say about this, except very notably he only asked two questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Why did you spend nearly 10 months on your take-home assessment?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;and then just&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Do you have any questions for me?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Insane. 5 minutes into an hour-long interview and it’s immediately psychological warfare &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Anyways it went fine, and he ended the interview confirming that I’d be moving forward to next, and final steps.&lt;/p&gt;
&lt;h3 id=&quot;final-interview&quot;&gt;Final Interview&lt;/h3&gt;
&lt;p&gt;I took off a whole day of work for this. I expected to be in the GRIND from 9am to 5pm doing this. This was the last hurdle before a life-changing career change…very probably the last job interview of my life! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;first-challenge&quot;&gt;First Challenge&lt;/h4&gt;
&lt;p&gt;The task: in 35 minutes, take my NxN grid challenge from the previous interview and turn it into a rudimentary Asteroids game. The tasks are broken down into 4 steps, and I was not expected to complete all of them in the time allotted:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The center square is now the spaceship. When pressing the A key, the ship should move in the direction it is facing. If it reaches the end of the grid, it should appear on the other side in classic game fashion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pressing spacebar should fire a laser. The laser is depicted as yellow squares stretching from the ship to the end of the grid in the direction it is facing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4 Asteroids also spawn. They’re green squares, and one spawns at each side of the grid. They should move towards the opposite side in a straight line one space every time the ship moves one space (one game tick)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The laser should be able to shoot an asteroid. A shot asteroid turns red, and on the next game tick is removed from the game.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a scoring system tracking asteroids destroyed, and a game over system for if the ship runs into an asteroid.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr/&gt;
&lt;p&gt;I failed to complete task #1.&lt;/p&gt;
&lt;p&gt;My nerves got to me and I did something very stupid. I locked in on the first problem: “I need to programmatically track the spaceship, and be able to move it across the grid” and instead of landing on the extremely obvious, easy solution (use X,Y coordinates on this grid), locked onto tracking “Parent” and “Child” relationships between my generated grid rows and grid items.&lt;/p&gt;
&lt;p&gt;This didn’t work. At all. And using an X,Y coordinate grid would have been infinitely easier.&lt;/p&gt;
&lt;p&gt;Maddeningly, my interviewer criticized me in the end for not asking her for help, and also for not googling better for my chosen solution. She said that she had to “push pretty hard” to get me off of this bad track of thinking.&lt;/p&gt;
&lt;p&gt;I disagree! I’ll own up to the fact that my nerves tunnel-visioned me onto a bad path. But I was not sufficiently informed that my interviewer was supposed to be treated like an actual resource, and I don’t think that’s on me. This was another vanilla JS and JQuery task, and the impression I got was “you should know how to use this”. But whatever.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;I still had to turn in my code. Which didn’t work, remember. And wait 5 minutes for them to “confer” and come back with their verdict. Unsurprisingly it was “We’d have preferred that you’d gotten further in the challenge, so we’ll be concluding the interview early here. Thank you, goodbye.”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/whine.DSM-Bh3S_1Ck74T.webp&quot; alt=&quot;Argent Whine sticker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;
&lt;em&gt;Me forreal&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Fucking blew it, man. Feels bad. Real bad.&lt;/p&gt;
&lt;h5 id=&quot;asteroids-after&quot;&gt;Asteroids After&lt;/h5&gt;
&lt;p&gt;The interviewer suggested to me that I finish the task anyways, just to practice. I gave myself another 30 min and did as much as I could, partly because “sure” but also very much because my mental state was in disarray and this was a great distraction.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2019.Cvpt98Q4_ZIjgu9.webp&quot; alt=&quot;Screenshot of my Astroid &amp;#34;Game&amp;#34;. It&apos;s a large red grid of squares with 4 green squares, 1 black square, and a line of yellow squares &amp;#34;shooting off&amp;#34; from the black square on a white background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;992&quot; height=&quot;874&quot;&gt;
&lt;em&gt;*sad pew pew sounds*&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I got as far as making the laser. I could probably eke out turning the asteroids red, but I was trying to be extra fair just in case. Idk. I clearly *can* do it. Just nerves.&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;&lt;img src=&quot;/_astro/crt_green_lines.DllE1TQZ_Z1WLoGh.webp&quot; alt=&quot;crt_green_lines.DllE1TQZ.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt; My Asteroids Code…Remember, 30 min time limit!!&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;main.js&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;javascript&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(document)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;ready&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;55&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; topAsteroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; rightAstroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; leftAsteroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; bottomAsteroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; center &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; asteroids &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [topAsteroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; rightAstroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; leftAsteroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; bottomAsteroid]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  // SETUP (runs once)&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  //   Sub-containers&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.container&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&amp;lt;div class=&amp;quot;n-container&amp;quot; id=sub-container-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; j &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; j &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; j&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; j &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#sub-container-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&amp;lt;div class=&amp;quot;n-box n-center&amp;quot; id=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#sub-container-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&amp;lt;div class=&amp;quot;n-box&amp;quot; id=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;  // Spawn asteroids&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  asteroids&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;asteroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; names &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; asteroidName&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;asteroid&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;asteroid&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`asteroid &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;names&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; currentPos&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  document&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;onkeydown&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;    // A key = 65&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;    // Space = 32&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPosCoord &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;attr&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPosCoordNum &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;Number&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoord[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; Number&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoord[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;])]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    switch&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (e&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;which) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      case&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        fireLaser&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoordNum&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; status)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      case&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 65&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        currentPos&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newPosId &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; incrementShipLocation&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoordNum&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; status)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        incrementAsteroids&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newShipLoc &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;newPosId&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;newPosId&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newShipLoc&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      case&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 37&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; // left&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0px 0px 0px 2px&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0px 0px 2px 0px&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0px 2px 0px 0px &amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;2px 0px 0px 0px&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;        //   top, right, bottom, left&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      case&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 39&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; // right&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0px 2px 0px 0px &amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;2px 0px 0px 0px&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0px 0px 0px 2px&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;          status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;          $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-center&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-width&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;0px 0px 2px 0px&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      default&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; // exit this handler for other keys&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    e&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;preventDefault&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt; // prevent the default action (scroll / move caret)&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; incrementAsteroids&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; topAsteroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.asteroid.down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; rightAstroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.asteroid.left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; leftAsteroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.asteroid.right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; bottomAsteroid &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.asteroid.up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; asteroids &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [topAsteroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; rightAstroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; leftAsteroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; bottomAsteroid]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; directions &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    asteroids&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;asteroid&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; id &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; asteroid&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;attr&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPosCoord &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPosCoordNum &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;Number&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoord[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; Number&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoord[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;])]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newPosId &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; incrementShipLocation&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(currentPosCoordNum&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; directions[index])&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newAstLoc &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;newPosId&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;newPosId&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;      $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(asteroid)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;asteroid&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      newAstLoc&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`asteroid`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      newAstLoc&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;directions&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; incrementShipLocation&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;currentPos&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt; direction&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-box&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;laser&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (change &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;        newLocation[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; newLocation&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; fireLaser&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;currentPos&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt; direction&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;    $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;.n-box&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;laser&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;currentPos&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;laser&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;currentPos&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;laser&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;currentPos&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;laser&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (direction &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;down&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; currentPos[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; N&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;        $&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`#&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;currentPos&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;laser&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;up&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; trackedPos&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#6E738D;font-style:italic&quot;&gt;// return Math.random() * (max - min) + min;&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;$(document).ready(function () {
  const N = Math.floor(Math.random() * (55 - 10) + 10);

  const topAsteroid = [Math.floor(Math.random() * (N - 1) + 0), 0];
  const rightAstroid = [N - 1, Math.floor(Math.random() * (N - 1) + 0)];
  const leftAsteroid = [0, Math.floor(Math.random() * (N - 1) + 0)];
  const bottomAsteroid = [Math.floor(Math.random() * (N - 1) + 0), N - 1];
  const center = (N * N) / 2;

  const asteroids = [topAsteroid, rightAstroid, leftAsteroid, bottomAsteroid];

  // SETUP (runs once)
  //   Sub-containers
  for (let i = 0; i &lt; N; i++) {
    $(&amp;#34;.container&amp;#34;).append(`&lt;div class=&amp;#34;n-container&amp;#34; id=sub-container-${i}&gt;&lt;/div&gt;`);
    for (let j = 0; j &lt; N; j++) {
      if (i === Math.floor(N / 2) &amp;#38;&amp;#38; j === Math.floor(N / 2)) {
        $(`#sub-container-${i}`).append(`&lt;div class=&amp;#34;n-box n-center&amp;#34; id=&amp;#34;${j}-${i}&amp;#34;&gt;&lt;/div&gt;`);
      } else {
        $(`#sub-container-${i}`).append(`&lt;div class=&amp;#34;n-box&amp;#34; id=&amp;#34;${j}-${i}&amp;#34;&gt;&lt;/div&gt;`);
      }
    }
  }
  // Spawn asteroids
  asteroids.forEach((asteroid, index) =&gt; {
    let names = [&amp;#34;down&amp;#34;, &amp;#34;left&amp;#34;, &amp;#34;right&amp;#34;, &amp;#34;up&amp;#34;];
    let asteroidName;
    $(`#${asteroid[0]}-${asteroid[1]}`).addClass(`asteroid ${names[index]}`);
  });

  let currentPos = () =&gt; [Math.floor(N / 2), Math.floor(N / 2)];
  document.onkeydown = function (e) {
    // A key = 65
    // Space = 32

    let currentPos = $(&amp;#34;.n-center&amp;#34;);
    let currentPosCoord = currentPos.attr(&amp;#34;id&amp;#34;).split(&amp;#34;-&amp;#34;);
    let currentPosCoordNum = [Number(currentPosCoord[0]), Number(currentPosCoord[1])];
    switch (e.which) {
      case 32:
        fireLaser(currentPosCoordNum, status);
        break;

      case 65:
        currentPos.removeClass(&amp;#34;n-center&amp;#34;);
        const newPosId = incrementShipLocation(currentPosCoordNum, status);
        incrementAsteroids();
        const newShipLoc = $(`#${newPosId[0]}-${newPosId[1]}`);
        newShipLoc.addClass(&amp;#34;n-center&amp;#34;);
        break;

      case 37: // left
        if (status === &amp;#34;up&amp;#34;) {
          status = &amp;#34;left&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;0px 0px 0px 2px&amp;#34;);
        } else if (status === &amp;#34;left&amp;#34;) {
          status = &amp;#34;down&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;0px 0px 2px 0px&amp;#34;);
        } else if (status === &amp;#34;down&amp;#34;) {
          status = &amp;#34;right&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;0px 2px 0px 0px &amp;#34;);
        } else if (status === &amp;#34;right&amp;#34;) {
          status = &amp;#34;up&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;2px 0px 0px 0px&amp;#34;);
        }
        //   top, right, bottom, left

        break;

      case 39: // right
        if (status === &amp;#34;up&amp;#34;) {
          status = &amp;#34;right&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;0px 2px 0px 0px &amp;#34;);
        } else if (status === &amp;#34;left&amp;#34;) {
          status = &amp;#34;up&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;2px 0px 0px 0px&amp;#34;);
        } else if (status === &amp;#34;down&amp;#34;) {
          status = &amp;#34;left&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;0px 0px 0px 2px&amp;#34;);
        } else if (status === &amp;#34;right&amp;#34;) {
          status = &amp;#34;down&amp;#34;;
          $(&amp;#34;.n-center&amp;#34;).css(&amp;#34;border-width&amp;#34;, &amp;#34;0px 0px 2px 0px&amp;#34;);
        }

        break;

      default:
        return; // exit this handler for other keys
    }
    e.preventDefault(); // prevent the default action (scroll / move caret)
  };
  function incrementAsteroids() {
    const topAsteroid = $(&amp;#34;.asteroid.down&amp;#34;);
    const rightAstroid = $(&amp;#34;.asteroid.left&amp;#34;);
    const leftAsteroid = $(&amp;#34;.asteroid.right&amp;#34;);
    const bottomAsteroid = $(&amp;#34;.asteroid.up&amp;#34;);
    const asteroids = [topAsteroid, rightAstroid, leftAsteroid, bottomAsteroid];
    const directions = [&amp;#34;down&amp;#34;, &amp;#34;left&amp;#34;, &amp;#34;right&amp;#34;, &amp;#34;up&amp;#34;];

    asteroids.forEach((asteroid, index) =&gt; {
      const id = asteroid.attr(&amp;#34;id&amp;#34;);
      let currentPosCoord = id.split(&amp;#34;-&amp;#34;);
      let currentPosCoordNum = [Number(currentPosCoord[0]), Number(currentPosCoord[1])];
      const newPosId = incrementShipLocation(currentPosCoordNum, directions[index]);
      const newAstLoc = $(`#${newPosId[0]}-${newPosId[1]}`);
      $(asteroid).removeClass(&amp;#34;asteroid&amp;#34;);
      newAstLoc.addClass(`asteroid`);
      newAstLoc.addClass(`${directions[index]}`);
    });
  }
  function incrementShipLocation(currentPos, direction) {
    $(&amp;#34;.n-box&amp;#34;).removeClass(&amp;#34;laser&amp;#34;);
    let newLocation = currentPos;
    if (direction === &amp;#34;up&amp;#34;) {
      const change = newLocation[1] - 1;

      if (change &lt; 0) {
        newLocation[1] = N - 1;
      } else {
        newLocation[1]--;
      }
      return newLocation;
    }
    if (direction === &amp;#34;left&amp;#34;) {
      const change = newLocation[0] - 1;

      if (change &lt; 0) {
        newLocation[0] = N - 1;
      } else {
        newLocation[0]--;
      }
      return newLocation;
    }
    if (direction === &amp;#34;right&amp;#34;) {
      const change = newLocation[0] + 1;

      if (change &gt; N - 1) {
        newLocation[0] = 0;
      } else {
        newLocation[0]++;
      }
      return newLocation;
    }
    if (direction === &amp;#34;down&amp;#34;) {
      const change = newLocation[1] + 1;

      if (change &gt; N - 1) {
        newLocation[1] = 0;
      } else {
        newLocation[1]++;
      }
      return newLocation;
    }
  }

  function fireLaser(currentPos, direction) {
    $(&amp;#34;.n-box&amp;#34;).removeClass(&amp;#34;laser&amp;#34;);
    if (direction === &amp;#34;up&amp;#34;) {
      for (let i = currentPos[1] - 1; i &gt;= 0; i--) {
        $(`#${currentPos[0]}-${i}`).addClass(&amp;#34;laser&amp;#34;);
      }
    }
    if (direction === &amp;#34;left&amp;#34;) {
      for (let i = currentPos[0] - 1; i &gt;= 0; i--) {
        $(`#${i}-${currentPos[1]}`).addClass(&amp;#34;laser&amp;#34;);
      }
    }
    if (direction === &amp;#34;right&amp;#34;) {
      for (let i = currentPos[0] + 1; i &lt; N; i++) {
        $(`#${i}-${currentPos[1]}`).addClass(&amp;#34;laser&amp;#34;);
      }
    }
    if (direction === &amp;#34;down&amp;#34;) {
      for (let i = currentPos[1] + 1; i &lt; N; i++) {
        $(`#${currentPos[0]}-${i}`).addClass(&amp;#34;laser&amp;#34;);
      }
    }
  }
});
let status = &amp;#34;up&amp;#34;;
let trackedPos;

// return Math.random() * (max - min) + min;&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h1 id=&quot;final-thoughtssobs&quot;&gt;Final Thoughts/Sobs&lt;/h1&gt;
&lt;p&gt;Very thankful that I’m not unemployed because this is soul-crushing, man. Not just #5 being the heart-wrenching failure that it was, but all of these other half-starts getting my hopes up, and stringing me along. It’s just real rough out there.&lt;/p&gt;
&lt;p&gt;Since last Spring (2025) I’ve submitted over 120 job applications. All of which had to at least pass the bar for my lowest standards, and many of which required extra info or small tasks before finishing the submission. I feel like the 10 call-backs I’ve gotten so far is actually pretty good, considering. But it still feels so overwhelmingly dismal.&lt;/p&gt;
&lt;p&gt;Shout-out to my friends and the cool folks in my Furry Fitness Server for cheering me along and keeping me sane with some of the bullshit. From my casual scroll-throughs of LinkedIn it feels like most job-seekers in my position are going about this in a much lonelier fashion and I feel for them.&lt;/p&gt;
&lt;p&gt;In the meantime, it’s finally getting nice outside again, so I’m gonna focus on enjoying my city and social life for a bit here because I need a fucking vacation from my job-search job!!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ArgentRest_Luzzy.SbwQ4zIN_ZjgPR4.webp&quot; alt=&quot;Argent max-relaxing on a palm tree on a beach&quot; title=&quot;I hope Lake Michigan is really nice and beachy this year&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4363&quot; height=&quot;3299&quot;&gt;
&lt;em&gt;Art by &lt;a href=&quot;https://bsky.app/profile/luzzyderay.bsky.social&quot; class=&quot;external&quot;&gt;Luzzy!&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Onyx Advent 2025</title><link>https://cobra.monster/blog/2026-01-13_onyx-advent</link><guid isPermaLink="true">https://cobra.monster/blog/2026-01-13_onyx-advent</guid><description>An extremely cool home-coffee experience that I&apos;ll nearly definitely do again</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://onyxcoffeelab.com/&quot; class=&quot;external&quot;&gt;Onyx Coffee&lt;/a&gt;, a 3rd-wave roaster HQ’d in Arkansas, has always had the best packaging and presentation in the game. I was never too impressed by their coffee offerings, however. But I think that may have changed.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/smile.BCuIwjhV_ZhdCcP.webp&quot; alt=&quot;smile.BCuIwjhV.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;This blog post is first just me praising how pretty and cool Onyx’s presentation is, but the meat and potatoes is going to be my ratings of all the coffee :3&lt;/p&gt;&lt;p&gt;I took off-the-cuff notes every day that I tried one of the coffees, and in honor of their honesty and out of respect of current-me’s time, I’m just going to reproduce them here verbatim.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;what-is-coffee-advent&quot;&gt;What is Coffee Advent?&lt;/h1&gt;
&lt;p&gt;Other roasters and providers have done this before, but it seems as though Onyx is the most recognized (or perhaps the best at marketing it).&lt;br/&gt;
In brief, Coffee Advent is 24 different coffees for each of the 24 days of December preceding Christmas. Each bag is 2oz of coffee, and the idea is that every day you brew a completely unique coffee from the day before.&lt;/p&gt;
&lt;p&gt;It’s a neat, simple idea. I think what really won me over was the combination of presentation and supporting media.&lt;/p&gt;
&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt; &lt;img src=&quot;/_astro/image.9XhzIBLa_qj66.webp&quot; alt=&quot;Black onyx box on a red-orange chair&quot; title=&quot;A beautiful box on a beautiful chair what more could you ask for?&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;936&quot; height=&quot;1249&quot;&gt; &lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt; &lt;img src=&quot;/_astro/image%20copy.Boi_58tS_zqwh.webp&quot; alt=&quot;Black onyx box opened revealing a black Snake design wrapped around golden lettering reading ONYX. On the bottom flap is another snake around the words &apos;experience advent&apos;&quot; title=&quot;You should have heard me holler when I opened the shipping box and this thing was decked out in Gold and Snakes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;936&quot; height=&quot;1249&quot;&gt; &lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Obviously the packaging is fantastic, but what really sold me was the playing cards and videos that came with it. Two decks of playing cards, one a full normal playing deck with custom coffee motifs. The other a 25-card deck hosting 1 card per coffee offering with the coffee info, a description, and a QR code to the website and accompanying videos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%202.Bq4-n7W2_1X0aaJ.webp&quot; alt=&quot;A series of black playing cards with custom ONyx coffee motifs and text atop a wildly bright pink and yellow glitch design desk mat&quot; title=&quot;I was too lazy to swap out my insane mouse mat, sorry.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;They’re high-quality too! Genuine Bicycle playing cards!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They had a special website for this event and I have some &lt;em&gt;opinions&lt;/em&gt; on how it’s coded. Thematically very cool. And neat that the cards match the physical cards I actually got with the package. Neat! The coffee nerd in me just wishes that throughout the event I’d had easier access to the *information* itself&lt;/p&gt;
&lt;p&gt;But I digress.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/OnyxCards.hP7XACzM_1bb4JS.webp&quot; alt=&quot;animation of the Onyx Advent site, showing scrolling between cards and opening the info video modals&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1785&quot; height=&quot;885&quot;&gt;
&lt;em&gt;Figures that it took til I recorded this in January 2026 for the site to actually work w/o a hitch&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/frustrated.Coe1-wSE_ZlHITm.webp&quot; alt=&quot;frustrated.Coe1-wSE.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;I don’t digress actually what the fuck. I couldn’t reliably open this on firefox, or safari. I had to open it on a chromium browser just to get it to work.&lt;/p&gt;&lt;p&gt;It’s a wobbly reactive app with a spread of cards for each day and I hate it. Trying to swipe between cards on mobile just made safari freak out and change tabs and stuff.&lt;/p&gt;&lt;p&gt;This has very cool design elements to it, but if it doesn’t work then what’s the point. Bad UX kills cool UI.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;the-coffee-review&quot;&gt;The Coffee Review&lt;/h1&gt;
&lt;p&gt;Reminder!! My original notes were very rough and taken off-the-cuff while brewing and drinking coffee each day…These are my casual, un-edited, first-impressions translated one-to-one from paper to my blog.&lt;/p&gt;
&lt;p&gt;I’ve refined their presentation below, but the contents are still rough (aka please be nice).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%203.Cs8QfAV2_TJkHj.webp&quot; alt=&quot;Small notepad with dots instead of lines filled with text alternating between black and blue, denoting Onyx coffee days and personal notes&quot; title=&quot;Why yes I *did* intentionally frame a bit of my Espresso keyboard in the photo crop, thank you for noticing~&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;My actual, paper notes. I’m actually proud of how I arranged this, but the contents are still pretty rough lol&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;grid grid-cols-2 prose-ul:p-0&quot;&gt; &lt;ul class=&quot;list-none&quot;&gt; &lt;li class=&quot;text-3xl underline font-semibold&quot;&gt;Coffee Info&lt;/li&gt; &lt;li class=&quot;flex items-center gap-1&quot;&gt;&lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-10 not-prose&quot;&gt; = Country &amp; Region&lt;/li&gt; &lt;li class=&quot;flex items-center gap-1&quot;&gt;&lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-10 not-prose&quot;&gt; = Coffee Varietal&lt;/li&gt; &lt;li class=&quot;flex items-center gap-1&quot;&gt;&lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-10 not-prose&quot;&gt; = Processing Method&lt;/li&gt; &lt;/ul&gt; &lt;ul class=&quot;list-none&quot;&gt; &lt;li class=&quot;text-3xl underline font-semibold&quot;&gt;My Notes&lt;/li&gt; &lt;li class=&quot;flex items-center gap-1&quot;&gt;&lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-10 not-prose&quot;&gt; = Coffee Video&lt;/li&gt; &lt;li class=&quot;flex items-center gap-1&quot;&gt;&lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-10 not-prose&quot;&gt; = Smell (before and after brewing)&lt;/li&gt; &lt;li class=&quot;flex items-center gap-1&quot;&gt;&lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-10 not-prose&quot;&gt; = Overall thoughts&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col gap-8 prose-headings:m-0 prose-p:m-0&quot;&gt; &lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;1.&lt;/span&gt; Colombia Aponte Village Honey &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Nariño, Colombia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Mixed&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Red Honey&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Lance Hedrick: was funny &amp;amp; very sincere &amp;amp; genuine&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Deep apple, Cherry&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Warm, cozy, very good red honey just not my fave. 8/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;2.&lt;/span&gt; Ethiopia Shakiso Female-Produced Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Guji, Ethiopia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Landrace&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Loud &amp;amp; Casual just about the producer&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;X&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Coffee great. [The gf] liked it. FLoral but chill about it. Fruity, light, but very approachable.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;3.&lt;/span&gt; Kenya Gakuyu-ini AA &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Kirinyaga, Kenya &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;SL28, SL34, Ruiru 12&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Kenya-Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;X&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;X&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Kind of boring, but tasty...Very washed, paltable...6/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;4.&lt;/span&gt; Uganda Long Miles Lunar Station &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Rwenzori Mountains, Uganda &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Mixed&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Earnest. &amp;quot;Sometimes you get a natural that&amp;#39;s like &amp;quot;Bwoop!&amp;quot;&amp;quot;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Smells incredible. So sweet.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Super soft mouthfeel. Sweet, kind of delicate. 8/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;5.&lt;/span&gt; Framily &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Guji, Ethiopia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Landrace&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Video had US Cycling team. Very cute&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Fantastic berry&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Extremely good as it cools. Perfect washed Ethiopia 10/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;6.&lt;/span&gt; Costa Rica Las Lajas Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Sabanilla de Alajuela, Costa Rica &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Catuai, Caturra, Bourbon&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Morgan Eckroth&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Deeply sweet chocolate + rich fruity like a fudge with cranberries&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Med-light body juicy fruity but w/ solid chocolate/grounded floor. Sides of tongue...&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;7.&lt;/span&gt; Uganda Kamogo Station &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Mt. Elgon, Uganda &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;SL14, SL34, Nyasaland&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Yeast-Innoculated Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;World Barista 2025 Champion Jack Simpson&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Floral &amp;amp; Spicy, but not overwhelming. Very Pleasant&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Comfy. Stonefruit bottom &amp;amp; rounded + tasty. Chocolate finish...maybe nut.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;8.&lt;/span&gt; Ethiopia Hambela Alaka Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Guji, Ethiopia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Landrace&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Jon Lampley tiktok style video. Good editing and very fast.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Deep chocolate that resolves to fruit.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Perfect comfy Ethiopia natural. Fruit forward &amp;amp; deep w/o being crazy. 10/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;9.&lt;/span&gt; El Salvador Santa Rosa &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Chalatenango, El Salvador &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Pacamara&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Jorge Raul Rivera -&amp;gt; owner of coffee&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Nothing crazy. General Pacamara &amp;quot;roasty&amp;quot; smell&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Very OK. Maybe a bad brew. Def good, just nothing special. A classy Med. roast 5/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;10.&lt;/span&gt; Guatemala El Socorro Purpuracca &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Palencia, Guatemala &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Purpuracea&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Jerry Truong USA 2025 Barista Champion&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Citrus, berry fruit. Apple.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;It&amp;#39;s the standard good &amp;quot;wahsed.&amp;quot; That kind of default apple flavor. 4/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;11.&lt;/span&gt; Colombia Edward Sandoval Chiroso &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Tolima, Colombia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Chiroso&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Zedd. Very &amp;quot;here are my espresso accessories&amp;quot;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Light &amp;amp; spiced&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Light,j floral, very fruity but rounded out by the wash. 9/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;12.&lt;/span&gt; Mexico Mazateca Mujeres &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Sierra Mazateca, Oaxaca, Mexico &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Typica, Bourbon, Mundo Novo&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Sam spillman - Cafe Mire(?). Great coffee prep video explanation of varietals&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Lightly fermented notes beneath coffee.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;It&amp;#39;s a really good central American washed coffee but w/ a kind of fermented, sweet sting changing it for the better. Juicy grapefruit. 8/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;13.&lt;/span&gt; Krampus &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Kirinyaga, Kenya &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;SL28, SL34, Ruiru 12&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Goofy &amp;quot;Krampus&amp;quot; spooky forest horror movie&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;syrupy tobacco. Not pungent...just good.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Tobacco first, but not offensive. A little smoky. Not a daily driver but interesting. 7/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;14.&lt;/span&gt; El Salvador Santa Rosa Honey &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Chalatenago, El Salvador &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Pacamara&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Red Honey&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Jose Raul Rivera (producer). Honest &amp;amp; simple&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Very light smell. Delicate &amp;quot;coffee&amp;quot; scent. Pleasant.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Rose, syrupy fruit but not heavy at all.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;15.&lt;/span&gt; Ethiopia Lalesa Ephtah Site Slow Dry Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Gedeb, Ethiopia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Landrace&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Dakota Graff. Chill explanation about the coffee &amp;amp; women-owned collective.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Very very deep sweetness. Almost buttery sweet (not saccharine)&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Deep sweetness. Almost peanut butter aftertaste. Super comfy &amp;amp; tasty. 10/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;16.&lt;/span&gt; Panama Hacienda Barbara Catuai Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Boquete, Panama &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Catuai&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Cole Torode in Panama. Sourcer.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Not strong, but very deeply natural &amp;amp; fruity.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Developed fruit roast. No spice, but &amp;quot;chocolate &amp;amp; compote&amp;quot; for sure.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;17.&lt;/span&gt; Kenya Kamunyaka AA &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Kirinyaga, Kenya &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;SL28, SL34, Ruiru 12&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Kenya-Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Peter Mbature. Cool earnest video about the coffee.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Very rich fruit + chocolate.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Top-notch comfy fruit. Mango for sure. 9/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;18.&lt;/span&gt; Ethiopia Bombe Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Bensa, Ethiopia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Landrace&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Kay Cheon - terrible audio (cutting off) but understandable. He&amp;#39;s on a mountain pouring this&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Crazy red fruit&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;explosive sweetness, rounded in that deep natural way 9/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;19.&lt;/span&gt; Colombia John Diaz Pink Bourbon &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Huila, Colombia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Pink Bourbon&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Pedro Eschavarria -&amp;gt; works w/ producers. Good simple video about coffee &amp;amp; prep.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Fruity citrus, some stone fruit&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Classic washed natural but w/ citrus finish. Not super floral, but more than berry 9/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;20.&lt;/span&gt; Honduras Sagastume Family Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Santa Barbara, Honduras &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Parainema&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Benjamin Paz (Honduras producer). Demonstration + info about the coffee&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;X&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Not great cuz I tried it in the new OXO rapid brewer for the first time&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;21.&lt;/span&gt; Colombia Jairo Arcila Lychee &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Quindío, Colombia &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Castillo&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Fruit-Innoculated Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Juan Camilio Zuluaga. Cool vibes from this guy. I see his company goat logo in the Demo + explanation&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Said &amp;quot;oh my god&amp;quot; aloud cuz so fruity. Kinda grapey or apple. Apricot.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;INSANELY cool. Rich &amp;amp; fruity! Like candy apple but not fermented 10/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;22.&lt;/span&gt; Kenya Elshadai Coffee Estate Natural &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_emea.DkMbfb1h_Z6kjBR.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Kiambu, Kenya &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;SL28, SL34, Ruiru 12&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Natural&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Morgan Eckroth again. Fine. She seems to really like this one.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Raisins, a malty sugar. Really cool.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Malty, a little fermented. A chill, not in-your-face candy flavor 9/10&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;23.&lt;/span&gt; Guatemala El Socorro Maracaturra &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Palencia, Guatemala &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Maracaturra&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Akie Bermiss. Passionate about light roasts. Brewred &amp;amp; talked about the roasts &amp;quot;playfulness&amp;quot;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Perfect light roast smell. Nothing crazy&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Full body, juicy fruit. Rounded chocolate&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col xs:grid grid-cols-3 gap-2 divide-yellow xs:divide-x  border-yellow p-4&quot;&gt; &lt;p class=&quot;font-bold text-2xl col-span-3 border-b border-r-0 border-yellow&quot;&gt; &lt;span class=&quot; border-slate-200&quot;&gt;24.&lt;/span&gt; Panama Hacienda Esmeralda Gesha &lt;/p&gt; &lt;div class=&quot;pr-4 flex flex-col xs:border-b-0 border-b pb-2 justify-between&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/earth_americas.B15TotmQ_2ItWF.webp&quot; alt=&quot;Earth Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt; Boquete Highlands, Panama &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/cherry.DmnMvzLc_Z1zuEV.webp&quot; alt=&quot;Cherry Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Gesha&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/water_drop.BPAGwwSC_1aTe5l.webp&quot; alt=&quot;Water Drop emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Washed&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col justify-between col-span-2&quot;&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/camcorder.DqOv_oE3_Z14IlEv.webp&quot; alt=&quot;Camcorder Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Rachel Peterson. Talking about creating coffee w/ simplicity. Using hoop.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/rose.j1tRADgJ_Z1TUdOS.webp&quot; alt=&quot;Rose Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Sharp sweetness. Fresh &amp;amp; fragrant&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;flex w-full prose-img:m-0 items-start gap-2&quot;&gt; &lt;img src=&quot;/_astro/thought_bubble.Df2ixk-h_1flARI.webp&quot; alt=&quot;Thought Bubble Emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose mt-1.5&quot;&gt; &lt;p class=&quot;&quot;&gt;Lemon, light stone fruit finish&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;hr class=&quot;not-prose border-yellow my-12&quot;/&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/shrug.CDkipBOB_1a428T.webp&quot; alt=&quot;shrug.CDkipBOB.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1512&quot; height=&quot;1512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;At this point even I’m wondering why I’m making the effort to share this. 24 different coffees, and even if I put maximal effort into describing them…what’s the point of doing so with just text like this?&lt;/p&gt;&lt;p&gt;I think I just want to share a bit of the process for its own sake, because it’s *my* process. I love coffee, but I have some imposter syndrome about the hobby, and certainly about really *knowing* the industry. I’m trying very hard to be more intentional about my continuing education, especially if I’m really ever going to &lt;a href=&quot;/blog/2026-01-11_year-of-creation/#opening-a-shop&quot;&gt;open my own cafe&lt;/a&gt; someday.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;onyx-advent-final-thoughts&quot;&gt;Onyx Advent Final Thoughts&lt;/h2&gt;
&lt;p&gt;The “review” thoughts I’ve shared are all over the place, but I assure you I had tons of fun with every coffee. The highlight, of course, was using 6 of them for the &lt;a href=&quot;/blog/2026-01-11_year-of-creation/#coffee-is-anyone-surprised&quot;&gt;home coffee cupping&lt;/a&gt; with a bunch of friends :3&lt;/p&gt;
&lt;p&gt;But no, aside from the website issues, I really loved this. I’m still working my way through the remaining coffee and I’m 100% keeping this beautiful box and these cards.&lt;/p&gt;
&lt;p&gt;I think the real standout though is a combination of the videos and the well-deserved attention going to the producers and procurers of the coffee.&lt;/p&gt;
&lt;p&gt;Great coffee is good on its own, but &lt;em&gt;truly ethical&lt;/em&gt; coffee tastes all the sweeter.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;Argent pointing YEAHHH&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/p&gt;</content:encoded></item><item><title>Year of Creation</title><link>https://cobra.monster/blog/2026-01-11_year-of-creation</link><guid isPermaLink="true">https://cobra.monster/blog/2026-01-11_year-of-creation</guid><description>Things are settled, this is going to be the year of making cool things!</description><pubDate>Sun, 11 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is my first New Years with a blog, so I think it’s only fair to make a corny “year of [goal]” post! I’m going to lay out my broad-strokes goals for the year, and then check in on them later this year :3&lt;/p&gt;
&lt;h1 id=&quot;cooking-more&quot;&gt;Cooking More&lt;/h1&gt;
&lt;p&gt;Very simple but the very first thing I want to focus on this year is cooking more AND eating out less. I already eat pretty healthy, even when I eat out at least half the time is at someplace nominally “healthy”.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/relief.DdzFrj6M_2jJmE5.webp&quot; alt=&quot;relief.DdzFrj6M.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;&lt;a href=&quot;https://www.expedite.news/p/is-slop-bowl-fair-analysis&quot; class=&quot;external&quot;&gt;Slop bowls&lt;/a&gt;…So many delicious &lt;a href=&quot;https://www.atlasobscura.com/articles/all-hail-the-slop-bowl&quot; class=&quot;external&quot;&gt;slop bowls&lt;/a&gt;…&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;So far I’m trawling through my messy “recipes” discord chat channel in my junky private server where I throw recipe links and videos, and honestly that’s been working out pretty well.&lt;br/&gt;
So far I’ve made three truly novel things this year, and I’m only excited to get a bit more ambitious as I go along!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hummus&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Chocolate&lt;/em&gt; Hummus&lt;/li&gt;
&lt;li&gt;Baked oat cake&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image.BACcZCgn_Z1wwIxJ.webp&quot; alt=&quot;Circular oat cake with blueberries and one slice missing inside of a metal baking tin, atop a glass stovetop&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2294&quot; height=&quot;1720&quot;&gt;
&lt;em&gt;Definitely room for improvement but pretty good for a first try!&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;intentionality&quot;&gt;Intentionality&lt;/h2&gt;
&lt;p&gt;I don’t consider myself a doomscroller, but I fall prey to a lot of *shrug* types of time-commitments. Mostly a lot of YouTube*, but also playing non-multiplayer infinitely-replayable games (i.e. roguelikes) just for the sake of passing time. This eats into a lot of my precious free time, and ultimately feels like I’m squandering the hard work I’ve put into building myself some stability.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;* I know I essentially just described doomscrolling behavior anyways, but I’m not sure if it really counts when 90%+ of the YouTube I watch is educational…nerdy-ass engineering videos and lately a lot of cooking.&lt;br/&gt;
(The other 10% is Dead by Daylight videos)&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;website-content&quot;&gt;Website Content&lt;/h1&gt;
&lt;p&gt;Unsurprisingly I intend to spend time this year working on this site! More specifically though I’d just like to add content to it in the form of reviews, blog posts, etc.&lt;/p&gt;
&lt;p&gt;This site went live in &lt;strong&gt;Spring 2025&lt;/strong&gt; and since then I’ve added a bunch of neat things that I’m quite proud of! But I haven’t quite added as much of my personal thoughts as I’d prefer to, so I’d really like to do that :3&lt;/p&gt;
&lt;h1 id=&quot;make-art&quot;&gt;Make Art!&lt;/h1&gt;
&lt;p&gt;I have GOT to draw more this year oh my gosh. Last year I pretty much only drew during July during &lt;a href=&quot;/blog/2025-08-09_art-fight-2025&quot;&gt;ArtFight&lt;/a&gt;…and while I made some incredibly neat pieces, it really was all I did until the end of the year and that’s kind of disappointing.&lt;/p&gt;
&lt;h2 id=&quot;new-tools&quot;&gt;New Tools&lt;/h2&gt;
&lt;p&gt;To that effect, I made a point of getting a few new supplies…&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy.DgHEArs4_2qlgXd.webp&quot; alt=&quot;A leather bound notebook on a brown coffee table beside a lighter brown notepad with 3 pens on top of it. Above are 18 colored fine-tip pens beside a leather pencil pouch&quot; title=&quot;I really didn&apos;t expect to end up with so much leather&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2294&quot; height=&quot;1720&quot;&gt;
&lt;em&gt;The real sleeper is that white pen. That thing is a crazy cool 4-way pen + mechanical pencil :o&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I love my coffee shop visiting habit, so what if I lowered the “empty canvas” anxiety with some casual traditional sketching? With added bonus of…doing traditional art again! :3&lt;/p&gt;
&lt;h1 id=&quot;coffee-is-anyone-surprised&quot;&gt;Coffee (is anyone surprised)&lt;/h1&gt;
&lt;p&gt;Social media followers may have already heard, but I’ve been hosting a few coffee cupping events at home for my friends! It’s been really neat. A fun activity for everyone involved, and a great opportunity for myself to delve deeper into coffee knowledge &amp;amp; education.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%202.Csb_ziAq_Z1zgbKm.webp&quot; alt=&quot;Pre-cupping setup. The Onyx coffee advent box is in the back. There are a bag and box of coffee in front of it, next to an amongus coffee mug (amug-us). Next to that is a spread out mini-deck of cards with coffee info written on them. To the right side are 8 shallow glass cups next to 8 spoons, a small red notebook, and pen. &quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2294&quot; height=&quot;1720&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%203.D4c2IkIQ_1wV1C4.webp&quot; alt=&quot;A coffee cupping. On top of a custom tea towel there are 8 sets of: shallow glass bowl full of liquid coffee, shallow wooden bowl with whole coffee beans. There are a few soup/cupping spoons scattered around. There is a large bottle of carbonated water in the center, by some red solo cups. This is all atop a wooden kitchen table. There are some hands holding papers + pencils in the periphery.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2294&quot; height=&quot;1720&quot;&gt;
&lt;em&gt;8 coffees was probably too many…but I couldn’t help myself! There were so many to share!&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;home-espresso&quot;&gt;Home Espresso&lt;/h2&gt;
&lt;p&gt;First off I really want to get back into making espresso. I have a great, capable machine that has every tool I need to pull excellent espresso. But my day-to-day I’m just brewing V60 pour-overs because ultimately if I want an easy but consistent cup of tasty coffee, the pour-over is just the way to go.&lt;br/&gt;
V60 for the coffee, espresso for the hobby. And I’d like 2026 to be the year I get back into the hobby in earnest.&lt;/p&gt;
&lt;p&gt;Part of my inspiration has been watching a lot of &lt;a href=&quot;https://www.youtube.com/@LanceHedrick&quot; class=&quot;external&quot;&gt;Lance Hedrick&lt;/a&gt; lately. He’s a very down-to-earth coffee &lt;del&gt;nerd&lt;/del&gt; expert who can really get me excited about trying harder with espresso by cutting out a lot of the chaff and noise of espresso “culture” externalities.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph.CPOicu5S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;You do not, in fact, need hundreds of dollars worth of equipment or even any fancy tools to brew great espresso.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;I love all of the crazy cool coffees I buy, and I think I need to be okay with the financial “risk” of using up those beans trying to dial-in great espresso! After all, it’s fun!&lt;/p&gt;
&lt;h2 id=&quot;furry-con-coffee-panel&quot;&gt;Furry Con Coffee Panel&lt;/h2&gt;
&lt;p&gt;I have GOT to talk to the furries about good coffee. And not only good coffee but good cafes and what makes it so integral to the Urban, Gay, Furry lifestyle!!&lt;/p&gt;
&lt;p&gt;This year at &lt;strong&gt;Midwest Furfest&lt;/strong&gt; here in Chicago* there was a coffee panel and it just wasn’t enough for me! It didn’t go deep enough, or get people &lt;em&gt;excited&lt;/em&gt; about coffee.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;* “Rosemont” is NOT Chicago but whatever&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I’m gonna do it! I’ve already got ideas on how to format it to be interesting and deep without it being alienating or overly-dense.&lt;br/&gt;
And I’ve already got an idea to get around the lack of sample-able coffee due to food and drink restrictions at these things. Behold:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%204.DfcCCg1a_1OjSV0.webp&quot; alt=&quot;Two glass perfume-aroma bottle things with ground coffee in their glass bodies. There is a squeeze bulb and a little horn.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1290&quot; height=&quot;1720&quot;&gt;
&lt;em&gt;Get a load of THIS fuckin’ thing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tasting coffee would be best, but 2nd best is a clean and safe way to pass around coffee &lt;em&gt;smells&lt;/em&gt;, and this is gonna be how I do it. Everything else is pending but I’m gonna give this a shot!&lt;/p&gt;
&lt;p&gt;Look for me at &lt;strong&gt;Anthrocon 2026&lt;/strong&gt; for the inaugural panel :3&lt;/p&gt;
&lt;h2 id=&quot;opening-a-shop&quot;&gt;Opening a Shop&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Argent-MichaelLee_AF22.BYjbTxJl_Z1B3R9W.webp&quot; alt=&quot;Argent and a cool purple + gold snake leaning against a wall sipping coffee. Text above says &amp;#34;Snakes in a coffee shop&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;2048&quot;&gt;
&lt;em&gt;The future… Credit &lt;a href=&quot;https://artfight.net/attack/3300949.snakes-in-a-coffee-shop&quot; class=&quot;external&quot;&gt;@MichaelLee&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a loftier goal, but I want to make the first steps towards coffee shop ownership! I really really want to open my own shop here in Chicago. I want to find a place, make it my own, brew amazing coffee, and create a community space I can be proud of! :3&lt;/p&gt;
&lt;p&gt;I’m gonna take it slow, but steady, and I think this year is the year I do the business research I need to build a solid foundation for the future when I actually have the resources to get something like this going.&lt;/p&gt;
&lt;h1 id=&quot;weightlifting--bulk-diet&quot;&gt;Weightlifting &amp;amp; Bulk Diet&lt;/h1&gt;
&lt;p&gt;After January I’m officially ending my 1.5-year long cut!! That is WAY too long for a cut diet, but I had things get in the way, taking me a while to get back on track. But I’m back, baybee! And man I am so proud of my progress.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/smirk.HNdXZEqM_1gUvI6.webp&quot; alt=&quot;smirk.HNdXZEqM.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;You can check out the latest physique photos I’ve shared on my Weightlifting page &lt;a href=&quot;/about/weightlifting/#current-physique&quot;&gt;here&lt;/a&gt;!&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;It’s been cool getting to really cut down and see how muscular I’ve become over the years, and now I’m hyper-motivated to switch to a controlled bulk and put on as much muscle as I possibly can! This year is going to be about sticking to my guns, not making excuses, and staying consistent both with workouts and diet.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ArgentFlex_CactusSnek_2025.BYezjmYx_27dxMF.webp&quot; alt=&quot;Argent smirking and posing with arms upraised in a sort of sit-up pose.&quot; title=&quot;Hot snek!!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4002&quot; height=&quot;3000&quot;&gt;
&lt;em&gt;I HAVE to become as hot and buff as my fursona it’s so important! Credit &lt;a href=&quot;https://bsky.app/profile/noncoralart.bsky.social&quot; class=&quot;external&quot;&gt;@NonCoralArt&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&quot;commie-book-club&quot;&gt;Commie Book Club&lt;/h1&gt;
&lt;p&gt;Finally, the big thing I HAVE to get back into creating(?) is lively communist discussions with peers!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%205.ytygAC8D_Z1fxmKq.webp&quot; alt=&quot;Rough comic from &amp;#34;hourly comics day&amp;#34; a few years ago. A 3-way split between Argent, a frog, and a splatoon squid, roughly suggesting &amp;#34;communist book discussion&amp;#34;&quot; title=&quot;I gotta remember to do more comics like this this is so cute...&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1720&quot; height=&quot;1720&quot;&gt;
&lt;em&gt;When you’re yelling at communists online, this is who you’re yelling at…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’ve already laid the ground work in my &lt;a href=&quot;https://discord.gg/zHVnKRb&quot; class=&quot;external&quot;&gt;Fitness Discord&lt;/a&gt; and I’m hyped to get some long time friends into cool theory discussions. Especially as the Imperialist nations of the world get more and more openly fascist…theory without practice isn’t enough, but it is absolutely something valuable you can do to feel involved and &lt;em&gt;active&lt;/em&gt; in resistance.&lt;/p&gt;
&lt;p&gt;Overall this is a pretty open looking year, so I’m excited to give it my all, and practice good self love by engaging with these things I care so much about.&lt;/p&gt;</content:encoded></item><item><title>Pilsen-Bridgeport Coffee Tour</title><link>https://cobra.monster/blog/2025-11-28_pilsen-bridgeport-coffee</link><guid isPermaLink="true">https://cobra.monster/blog/2025-11-28_pilsen-bridgeport-coffee</guid><description>Exploring two cool Chicago neighborhoods via coffee shops and &quot;adequate&quot; bike infrastructure!</description><pubDate>Fri, 28 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another coffee tour! This time, of the &lt;strong&gt;Pilsen&lt;/strong&gt; and &lt;strong&gt;Bridgeport&lt;/strong&gt; neighborhoods Southwest of the Loop. I picked a Saturday and a friend, and made the 50min bike ride in the brisk November Autumnal morning, and headed down to two neighborhoods I’ve barely yet visited.&lt;/p&gt;
&lt;p&gt;And unlike my &lt;a href=&quot;/blog/2025-09-06_uptown-edgewater-coffee&quot;&gt;last coffee tour&lt;/a&gt;, I’ve built some things on my website to streamline this process a bit :3 Enjoy the commentary but feel free to scroll down to the quick-n-dirty summary + scoring for each one!&lt;/p&gt;
&lt;p&gt;They’re in the style of my full &lt;a href=&quot;/cafe-reviews&quot;&gt;cafe reviews&lt;/a&gt;, just probably without a dedicated page.&lt;/p&gt;
&lt;h1 id=&quot;the-map&quot;&gt;The Map&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/map.D5ylzrEx_wufMN.webp&quot; alt=&quot;Google maps screenshot of the Pilsen and Bridgeport areas, showcasing a custom cafe list&quot; title=&quot;ignore the url at the bottom this was a lazy quick screenshot and Im far too lazy to change it now&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2446&quot; height=&quot;1662&quot;&gt;
&lt;em&gt;The goal was for somewhere both bikeable AND accessible by transit in the future&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&quot;the-outing&quot;&gt;The Outing&lt;/h1&gt;
&lt;h2 id=&quot;anticonquista&quot;&gt;Anticonquista&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image.CsPv4oDu_JcAE5.webp&quot; alt=&quot;A blue notebook labeled Anticonquista Cafe Family Farm Owned and Operated Coffee Roaster atop a green and blue woven mat beside a yellow plate with a brown cylindrical pastry&quot; title=&quot;crazy how well this low-effort picture turned out&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;&lt;/p&gt;
&lt;p&gt;The only shop on the trip today that I’d already visited, Anticonquista Cafe was high on my list to re-visit, especially with my friend.&lt;/p&gt;
&lt;p&gt;As a coffee snob, I wasn’t overly impressed with the quality of coffee this time or last, but it was &lt;em&gt;good&lt;/em&gt;, and more importantly, I am in love with their mission and the politics of their shop.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%202.DH24PAF__Z1WWkYW.webp&quot; alt=&quot;Orange wall featuring anticolonial posters and political buttons&quot; title=&quot;I don&apos;t have a favorite but I love all of the &apos;US OUT OF [country]&apos; ones. Very hype.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;They really don’t make agitprop like they used to!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As a huge proponent of combatting white Western chauvinism, places like this are a precious goldmine of accessible education and perspective.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2023.CHcbTuj3_lC9YG.webp&quot; alt=&quot;A hand-made ceramic mug filled to the brim with coffee on a small table beside a bluetooth speaker&quot; title=&quot;Great mug! way too much coffee hogugh&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;Never seen a handmade mug like this at a cafe&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I enjoyed my coffee, though it was yet another shop that gave me this^ when I asked for a small, 8oz americano so. I don’t know what’s up with that.&lt;br/&gt;
Solid though! Not mindblowing, but genuinely very comfy, tasty coffee.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%204.DyPCItUS_Z1llWx0.webp&quot; alt=&quot;Close-up photo of the &amp;#34;Song of the people&amp;#34; written in Spanish on the left, English on the right. It is a story about the death Tecún Umán of the Maya by colonial violence, and how &amp;#34;The Quetzal will only sing again when its people and land are truly free&amp;#34;&quot; title=&quot;Beautiful&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1198&quot; height=&quot;1114&quot;&gt;&lt;/p&gt;
&lt;p&gt;This place is utterly unique. It doesn’t fit in to my tidy “work from home” coffee shop paradigm, but it feels cool being there, and engaging with an honest business with a genuine anticolonial foundation. Very rad.&lt;/p&gt;
&lt;section class=&quot;p-4 border-2 border-yellow bg-boxPrimary flex text-slate-200 gap-2  flex-col justify-between&quot;&gt;&lt;div class=&quot;border-b mb-4&quot;&gt;&lt;h2 class=&quot;pb-2 text-2xl md:text-3xl lg:text-4xl 2xl:text-5xl font-black text-yellow not-prose&quot;&gt;Anticonquista&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;mb-4 sm:text-lg flex gap-2 items-center h-full&quot;&gt;&lt;div class=&quot;flex flex-col justify-end flex-3/4 md:text-xl pr-1 shrink h-full&quot;&gt;&lt;div class=&quot;flex flex-col lg:flex-row not-prose pb-4 gap-4&quot;&gt;&lt;p class=&quot;pb-2 grow self-start lg:border-r lg:pr-2&quot;&gt;A family-run shop defined by its anticolonialism, this shop serves coffee exclusively from their family farms, and features wall-to-wall anticolonial propaganda &amp;amp; decor plus community resources.&lt;/p&gt;&lt;ul class=&quot;self-center text-xs sm:text-base min-w-fit xl:text-2xl min-w-[75%] &quot; data-astro-cid-reaajaqk&gt; &lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#coffee&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/hot_drink.D_5bXb1O_ZFWHa3.webp&quot; alt=&quot;hot_drink.D_5bXb1O.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; coffee &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 6 / 10 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;No-holds-barred coffee quality rating&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#cafe&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunset_city.B7o5Qv9S_Z2mRVsV.webp&quot; alt=&quot;sunset_city.B7o5Qv9S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; cafe &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 4 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Quality of cafe re: design, theming, layout&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#price&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/green_money.DI3hd3md_112nND.webp&quot; alt=&quot;green_money.DI3hd3md.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; price &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2.5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;5 = very reasonable prices&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#productivity&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/laptop.CoGbsnwl_ZWWXFK.webp&quot; alt=&quot;laptop.CoGbsnwl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; productivity &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 3.5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Table size, outlet availability, wifi&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#vibes&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunrise_over_mountains.BLo5a_oR_Z10zz4C.webp&quot; alt=&quot;sunrise_over_mountains.BLo5a_oR.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; vibes &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Subjective &amp;#39;How does it feel being here?&amp;#39;&lt;/span&gt; &lt;/li&gt;  &lt;li class=&quot;flex flex-col pt-2 border-t&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;span class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/finish_flag.Aumo9UIa_1ur8ap.webp&quot; alt=&quot;finish_flag.Aumo9UIa.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt;
Total
&lt;/span&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none font-bold&quot; data-astro-cid-reaajaqk&gt;21 / 30&lt;/span&gt; &lt;/div&gt; &lt;/li&gt;
   &lt;/ul&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/src/components/CoffeeShopReviews/ReviewScore.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt; &lt;!-- For conditionally rendering an asterisk --&gt;&lt;/div&gt;&lt;span class=&quot;pt-2 border-t&quot;&gt;&lt;strong&gt;Order Suggestion: &lt;/strong&gt;Americano&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;cup-of-joe---pilsen&quot;&gt;Cup of Joe - Pilsen&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image.BC09sCjr_Z1V2fkH.webp&quot; alt=&quot;Extreme angle photo of the Cup of Joe coffee house. A white brick building with large reflective glass underneath the store name. On the right side is a Mexican candy skull decal that says &amp;#34;Welcome to Pilsen 60608&amp;#34;&quot; title=&quot;Strategic &apos;I dont want to look like a creep&apos; angle lmao&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;&lt;/p&gt;
&lt;p&gt;This place really surprised me! It’s a very small space, so it clearly serves as a tidy “grab food + coffee and go!” purpose in the area, but honestly the food and coffee were surprisingly good!&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/smirk.HNdXZEqM_1gUvI6.webp&quot; alt=&quot;smirk.HNdXZEqM.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Yes, a 5/10 is a “surprisingly good!” coffee by my ratings lol. I’m pretty decent at avoiding BAD coffee, so my rating system scales down.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%205.cTTgrBz1_ZApb7.webp&quot; alt=&quot;Photo of a glossy menu board, with the cafe&apos;s signature skeleton character (with steaming espresso cup head) pouring a cuppa&quot; title=&quot;I looove their mascot barista guy&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;&lt;/p&gt;
&lt;p&gt;Really cute branding and pretty dang solid pricing overall!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%203.tfLPHpBA_Z1Ke0i4.webp&quot; alt=&quot;Full shot of the cafe. People are standing ordering coffee on the left, and seated at the sparse cafe seating in the front and right. The wall is covered with Mexican art and photos of old cars&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2200&quot; height=&quot;1636&quot;&gt;
&lt;em&gt;This is the WHOLE cafe, minus the bar seating at the window&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I enjoyed my Americano, and the vibes were very nice. Not exactly a place to hunker down and get some work (or website coding) done, so I probably won’t be back unless I’m meeting an acquaintance nearby.&lt;/p&gt;
&lt;section class=&quot;p-4 border-2 border-yellow bg-boxPrimary flex text-slate-200 gap-2  flex-col justify-between&quot;&gt;&lt;div class=&quot;border-b mb-4&quot;&gt;&lt;h2 class=&quot;pb-2 text-2xl md:text-3xl lg:text-4xl 2xl:text-5xl font-black text-yellow not-prose&quot;&gt;A Cup of Joe - Pilsen&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;mb-4 sm:text-lg flex gap-2 items-center h-full&quot;&gt;&lt;div class=&quot;flex flex-col justify-end flex-3/4 md:text-xl pr-1 shrink h-full&quot;&gt;&lt;div class=&quot;flex flex-col lg:flex-row not-prose pb-4 gap-4&quot;&gt;&lt;p class=&quot;pb-2 grow self-start lg:border-r lg:pr-2&quot;&gt;A tiny community shop with good vibes and pretty good food. Maybe not an all-day work &amp;#39;n stay but cute enough to stop into for a quick cuppa, especially for the price!&lt;/p&gt;&lt;ul class=&quot;self-center text-xs sm:text-base min-w-fit xl:text-2xl min-w-[75%] &quot; data-astro-cid-reaajaqk&gt; &lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#coffee&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/hot_drink.D_5bXb1O_ZFWHa3.webp&quot; alt=&quot;hot_drink.D_5bXb1O.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; coffee &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 5 / 10 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;No-holds-barred coffee quality rating&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#cafe&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunset_city.B7o5Qv9S_Z2mRVsV.webp&quot; alt=&quot;sunset_city.B7o5Qv9S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; cafe &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Quality of cafe re: design, theming, layout&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#price&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/green_money.DI3hd3md_112nND.webp&quot; alt=&quot;green_money.DI3hd3md.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; price &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 4 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;5 = very reasonable prices&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#productivity&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/laptop.CoGbsnwl_ZWWXFK.webp&quot; alt=&quot;laptop.CoGbsnwl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; productivity &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 1 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Table size, outlet availability, wifi&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#vibes&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunrise_over_mountains.BLo5a_oR_Z10zz4C.webp&quot; alt=&quot;sunrise_over_mountains.BLo5a_oR.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; vibes &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 4 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Subjective &amp;#39;How does it feel being here?&amp;#39;&lt;/span&gt; &lt;/li&gt;  &lt;li class=&quot;flex flex-col pt-2 border-t&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;span class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/finish_flag.Aumo9UIa_1ur8ap.webp&quot; alt=&quot;finish_flag.Aumo9UIa.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt;
Total
&lt;/span&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none font-bold&quot; data-astro-cid-reaajaqk&gt;16 / 30&lt;/span&gt; &lt;/div&gt; &lt;/li&gt;
   &lt;/ul&gt;  &lt;!-- For conditionally rendering an asterisk --&gt;&lt;/div&gt;&lt;span class=&quot;pt-2 border-t&quot;&gt;&lt;strong&gt;Order Suggestion: &lt;/strong&gt;Small americano and a breakfast burrito&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;ctrl-z&quot;&gt;CTRL Z&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ctrl-z.BXRUZuI1_2oKfU6.webp&quot; alt=&quot;Full view of Ctrl Z cafe. Many people are seated at various unconventional seats throughout the cafe. A large, yellowing plant dominates the foreground. There is a bike hanging from the ceiling. The coffee bar is in the back.&quot; title=&quot;We gotta look into this &apos;hanging bikes from cafe ceilings&apos; trend what is that about&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2212&quot; height=&quot;1660&quot;&gt;
&lt;em&gt;This is the entire cafe, save for 4 window bar-seating spots to the right&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ctrl Z might be the biggest disappointment of the trip, but I don’t think it’s hopeless. I took the barista’s recommendation for a type of drink (the name of which I’ve forgotten), and it amounted to a very roasty, mid-tier pour-over.&lt;br/&gt;
Not &lt;em&gt;bad&lt;/em&gt; but I’d heard a lot of good things about this place so…&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%207.YEhm1U8J_Z1FSR17.webp&quot; alt=&quot;Black and white menu board with a security camera at its base on the shelf. To the bottom right are a bottle of water and glass bottle of coke&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;&lt;/p&gt;
&lt;p&gt;Incredibly competitive prices, so big fan of that. They offer a wide enough array of flavors and options that I feel like I could easily bring most friends here and find them something they’d like.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%208.DHKZ3NP8_Zro42y.webp&quot; alt=&quot;Coffee merch shelf. There are 6 bags of coffee beans on the mid and bottom shelves. The top shelf has 2 handmade purple mugs with steam baskets beside each one. An old school camera is in the center.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;All medium roasts…hmmm&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’m fast learning that there are a good many high-tier, Southeast Asian specialty coffee shops. Love the ubiquitous &lt;em&gt;ube&lt;/em&gt; syrups they all offer (ube is so so good, y’all), but also they tend to source/roast very interesting beans!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%209.C5ZyN4iU_9sTXK.webp&quot; alt=&quot;Photo of a variety of uncommon coffee brewing equipment, including 3 prominent cold-brew drip towers on the right. There is a pour-over station in the front. In the back are other glassware and coffee accoutrement&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;The could brew things are pretty rare, but invariably in my experience indicate a serious coffee shop&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They’re clearly serious about their preparation. And it’s still pretty tough finding a good pour-over in this town, so I plan on coming back. The drink I got on this trip just wasn’t super impressive!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2010.9rA_q3ov_1uhIdN.webp&quot; alt=&quot;Focused photo of a blue car door built into a table stand with 4 black stools with wooden stool toppers&quot; title=&quot;Still confused why they thought this was a good idea like yeah it&apos;s cool but it&apos;s a terrible terrible table&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;Points for creativity lol but I couldn’t sit here long&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting space with interesting coffee options…deserves a 2nd chance. Not super accessible by transit, but that’s why we’ve got bikes!&lt;/p&gt;
&lt;section class=&quot;p-4 border-2 border-yellow bg-boxPrimary flex text-slate-200 gap-2  flex-col justify-between&quot;&gt;&lt;div class=&quot;border-b mb-4&quot;&gt;&lt;h2 class=&quot;pb-2 text-2xl md:text-3xl lg:text-4xl 2xl:text-5xl font-black text-yellow not-prose&quot;&gt;Ctrl Z&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;mb-4 sm:text-lg flex gap-2 items-center h-full&quot;&gt;&lt;div class=&quot;flex flex-col justify-end flex-3/4 md:text-xl pr-1 shrink h-full&quot;&gt;&lt;div class=&quot;flex flex-col lg:flex-row not-prose pb-4 gap-4&quot;&gt;&lt;p class=&quot;pb-2 grow self-start lg:border-r lg:pr-2&quot;&gt;A strange, very small cafe with unique coffee offerings. Not a place to go and get work done, but unique coffee and funky seating good for a casual conversation.&lt;/p&gt;&lt;ul class=&quot;self-center text-xs sm:text-base min-w-fit xl:text-2xl min-w-[75%] &quot; data-astro-cid-reaajaqk&gt; &lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#coffee&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/hot_drink.D_5bXb1O_ZFWHa3.webp&quot; alt=&quot;hot_drink.D_5bXb1O.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; coffee &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 7 / 10 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;No-holds-barred coffee quality rating&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#cafe&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunset_city.B7o5Qv9S_Z2mRVsV.webp&quot; alt=&quot;sunset_city.B7o5Qv9S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; cafe &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Quality of cafe re: design, theming, layout&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#price&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/green_money.DI3hd3md_112nND.webp&quot; alt=&quot;green_money.DI3hd3md.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; price &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;5 = very reasonable prices&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#productivity&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/laptop.CoGbsnwl_ZWWXFK.webp&quot; alt=&quot;laptop.CoGbsnwl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; productivity &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 1.5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Table size, outlet availability, wifi&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#vibes&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunrise_over_mountains.BLo5a_oR_Z10zz4C.webp&quot; alt=&quot;sunrise_over_mountains.BLo5a_oR.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; vibes &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2.5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Subjective &amp;#39;How does it feel being here?&amp;#39;&lt;/span&gt; &lt;/li&gt;  &lt;li class=&quot;flex flex-col pt-2 border-t&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;span class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/finish_flag.Aumo9UIa_1ur8ap.webp&quot; alt=&quot;finish_flag.Aumo9UIa.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt;
Total
&lt;/span&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none font-bold&quot; data-astro-cid-reaajaqk&gt;15 / 30&lt;/span&gt; &lt;/div&gt; &lt;/li&gt;
   &lt;/ul&gt;  &lt;!-- For conditionally rendering an asterisk --&gt;&lt;/div&gt;&lt;span class=&quot;pt-2 border-t&quot;&gt;&lt;strong&gt;Order Suggestion: &lt;/strong&gt;Pour-over&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;bad-owl-coffee-roasters&quot;&gt;Bad Owl Coffee Roasters&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image.B02p9eMS_1qSMfS.webp&quot; alt=&quot;Front view of the cafe. White medium-large sized tables in the foreground to the left, bar seating to the right, and a coffee roaster in the back. The back left is the coffee prep bar with people standing in line.&quot; title=&quot;I knew what I was getting into with this, gonna be real honest&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2204&quot; height=&quot;1652&quot;&gt;
&lt;em&gt;Absolutely NOT a hoot&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ho boy. Hooo man.&lt;/p&gt;
&lt;p&gt;First off we gotta talk about the roasting machinery situation. I’ll refer to my rant in the &lt;a href=&quot;/cafe-reviews/caffe-umbria-armitage#coffee&quot;&gt;Caffe Umbria review&lt;/a&gt;, but TL;DR any coffee roaster with their machinery out in the open like this is &lt;em&gt;not&lt;/em&gt; serious.&lt;br/&gt;
On a more specific note here, what the hell is the deal with the two bar seats just facing the roaster?? If that thing is running anyone there is going to get &lt;em&gt;blasted&lt;/em&gt;. Plus it’s so loud!&lt;/p&gt;
&lt;p&gt;Okay I’m ranting again. Moving on.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2012.DdGm0MCA_1z9F4B.webp&quot; alt=&quot;Cafe entrance. Full glass panes with gold text reading the name of the shop&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;&lt;/p&gt;
&lt;p&gt;I heard good things about Bad Owl (from reddit) but just from my maps sleuthing I could tell it was probably nothing too special.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2013.BNUvyfA7_1PbpWf.webp&quot; alt=&quot;A &amp;#34;coffee flight&amp;#34;. A serving board with 4 cortado-sized cups with 4 different coffee drinks, one of which is obviously espresso, the rest are a mix of foam and milk.&quot; title=&quot;I love flights at like, craft beer places so I thought this&apos;d be fun...eh.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;Cute.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Full coffee flight review below, but suffice to say I was not impressed.&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Coffee Flight Review&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;p&gt;I talked to the barista, told them it was my first time here and wanted to order something that’d really show me the value of Bad Owl. They thought for a minute, and then recommended this coffee flight.&lt;br/&gt;
It had:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Espresso&lt;/li&gt;
&lt;li&gt;Cortado&lt;/li&gt;
&lt;li&gt;A banana nut latte cold brew (apparently they’re really popular)&lt;/li&gt;
&lt;li&gt;A non-coffee drink they likened to “butter beer”&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The espresso was OK. At tasting I told my friend “it’s the pinnacle of average medium-roast espresso”, as in, (generously) it’s just about as good as you can get from unremarkable espresso.&lt;/p&gt;&lt;p&gt;The cortado was awful. Just awful. The milk was flat, and the espresso tasted empty.&lt;/p&gt;&lt;p&gt;The banana thing was like, fine. But I don’t care about sweet cold brews so I’ll be neutral on that.&lt;/p&gt;&lt;p&gt;The butter beer thing was tasty because it was a sugary non-coffee sweet drink. Again, not coffee, so /shrug.&lt;/p&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/src/components/Accordion/Accordion.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2014.4hKBx2Zk_Z20xDDj.webp&quot; alt=&quot;Yellow coffee bag with intricate coffee foliage designs around it, and a sticker on the bottom-left that looks like AI-art.&quot; title=&quot;I&apos;ve since seen more bag art and it&apos;s just GOTTA be AI. Blech.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;There’s just something suspicious about that gecko…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I wish I could say I love their coffee bags because at first glance they’re very pretty and cool!&lt;br/&gt;
But I can’t shake the feeling that they’re made with AI art…and I just don’t trust that.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2015.DUf8OmZK_Z1w1pw4.webp&quot; alt=&quot;Side view of the coffee roaster behind thin plexiglass standees, adorned with fake vine plants&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;Why put it in the middle of the floor, but then “hide” it with cheap plastic plants?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The vibes are off. The coffee is off. I don’t really know who this is for, but at the very least not me.&lt;/p&gt;
&lt;section class=&quot;p-4 border-2 border-yellow bg-boxPrimary flex text-slate-200 gap-2  flex-col justify-between&quot;&gt;&lt;div class=&quot;border-b mb-4&quot;&gt;&lt;h2 class=&quot;pb-2 text-2xl md:text-3xl lg:text-4xl 2xl:text-5xl font-black text-yellow not-prose&quot;&gt;Bad Owl Coffee roasters&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;mb-4 sm:text-lg flex gap-2 items-center h-full&quot;&gt;&lt;div class=&quot;flex flex-col justify-end flex-3/4 md:text-xl pr-1 shrink h-full&quot;&gt;&lt;div class=&quot;flex flex-col lg:flex-row not-prose pb-4 gap-4&quot;&gt;&lt;p class=&quot;pb-2 grow self-start lg:border-r lg:pr-2&quot;&gt;A California roastery transplanted into a Chicago neighborhood. Feels anodyne and unserious, but wants to be taken seriously. Possibly good coffee, but yet to be impressed. Weird amount of fake plants juxtaposed to genuinely decent real pothos so idk what&amp;#39;s going on&lt;/p&gt;&lt;ul class=&quot;self-center text-xs sm:text-base min-w-fit xl:text-2xl min-w-[75%] &quot; data-astro-cid-reaajaqk&gt; &lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#coffee&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/hot_drink.D_5bXb1O_ZFWHa3.webp&quot; alt=&quot;hot_drink.D_5bXb1O.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; coffee &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 3 / 10 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;No-holds-barred coffee quality rating&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#cafe&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunset_city.B7o5Qv9S_Z2mRVsV.webp&quot; alt=&quot;sunset_city.B7o5Qv9S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; cafe &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Quality of cafe re: design, theming, layout&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#price&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/green_money.DI3hd3md_112nND.webp&quot; alt=&quot;green_money.DI3hd3md.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; price &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;5 = very reasonable prices&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#productivity&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/laptop.CoGbsnwl_ZWWXFK.webp&quot; alt=&quot;laptop.CoGbsnwl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; productivity &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 2 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Table size, outlet availability, wifi&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#vibes&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunrise_over_mountains.BLo5a_oR_Z10zz4C.webp&quot; alt=&quot;sunrise_over_mountains.BLo5a_oR.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; vibes &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 1 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Subjective &amp;#39;How does it feel being here?&amp;#39;&lt;/span&gt; &lt;/li&gt;  &lt;li class=&quot;flex flex-col pt-2 border-t&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;span class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/finish_flag.Aumo9UIa_1ur8ap.webp&quot; alt=&quot;finish_flag.Aumo9UIa.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt;
Total
&lt;/span&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none font-bold&quot; data-astro-cid-reaajaqk&gt;10 / 30&lt;/span&gt; &lt;/div&gt; &lt;/li&gt;
   &lt;/ul&gt;  &lt;!-- For conditionally rendering an asterisk --&gt;&lt;/div&gt;&lt;span class=&quot;pt-2 border-t&quot;&gt;&lt;strong&gt;Order Suggestion: &lt;/strong&gt;Latte with any syrup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;jackalope-coffee--tea-house&quot;&gt;Jackalope Coffee &amp;amp; Tea House&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/jackalope.Dl40MPWm_Yv6Xi.webp&quot; alt=&quot;Eclectic cafe busy with colors and prints, buttons, and other decorations all over the walls and countertops. Espresso prep space is in the background. The front of the counter has a prominent jackalope logo on a red circle background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2208&quot; height=&quot;1652&quot;&gt;&lt;/p&gt;
&lt;p&gt;The final stop on our little coffee tour, this was absolutely the overall highlight for me.\&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pretty dang good coffee&lt;/li&gt;
&lt;li&gt;Interesting media and trinkets everywhere you look&lt;/li&gt;
&lt;li&gt;Tons of space, and rooms of different volumes/activity&lt;/li&gt;
&lt;li&gt;Community board games&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It has it all!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2016.KkGKn2k2_ZmX0sa.webp&quot; alt=&quot;Wall covered in framed posters, predominantly of animals in various graphic and cartoony styles&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;I think I spent no less than 10 minutes just craning my neck looking at things&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There’s a lot I look for in a cool cafe. Coffee, sure, but also places that I’d enjoy taking my friends to! And Jackalope really feels right.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2017.DLeVA6PI_1fRd1f.webp&quot; alt=&quot;View of a black-painted wall covered in various tapestry and framed art. A doorway is visible to the left into more cafe space.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2018.BXbHedU4_1bgepp.webp&quot; alt=&quot;A pink and blue wall in the cafe space. More art on the walls, wooden tables in the foreground with vintage booth seating&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2198&quot; height=&quot;1636&quot;&gt;&lt;/p&gt;
&lt;p&gt;I don’t have a whole lot more to say about the cafe that the pictures don’t say for me. It’s just neat! And I’m serious, the coffee (and pistachio donut we got) was really really good!&lt;br/&gt;
Not 9/10 good, sure but I’m picky…and picky as I am, that regular-ass americano was no less than a 7/10!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2019.COW1PnXI_ZUvLn1.webp&quot; alt=&quot;Orange wall with a prominent Jackalope bust next to a full-body Mars Attacks! alien figure braced against the window&quot; title=&quot;I kinda yelled when I saw it. Loudly. It was embarrassing&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;Mars attacks!! Iconic af!&lt;/em&gt;&lt;/p&gt;
&lt;section class=&quot;p-4 border-2 border-yellow bg-boxPrimary flex text-slate-200 gap-2  flex-col justify-between&quot;&gt;&lt;div class=&quot;border-b mb-4&quot;&gt;&lt;h2 class=&quot;pb-2 text-2xl md:text-3xl lg:text-4xl 2xl:text-5xl font-black text-yellow not-prose&quot;&gt;Jackalope Coffee &amp;amp; Tea House&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;mb-4 sm:text-lg flex gap-2 items-center h-full&quot;&gt;&lt;div class=&quot;flex flex-col justify-end flex-3/4 md:text-xl pr-1 shrink h-full&quot;&gt;&lt;div class=&quot;flex flex-col lg:flex-row not-prose pb-4 gap-4&quot;&gt;&lt;p class=&quot;pb-2 grow self-start lg:border-r lg:pr-2&quot;&gt;An eclectic cafe with tons of space, style, and charm but doesn&amp;#39;t compromise on the coffee quality. It feels utterly unique and authentic, full of neat tchotchkes&lt;/p&gt;&lt;ul class=&quot;self-center text-xs sm:text-base min-w-fit xl:text-2xl min-w-[75%] &quot; data-astro-cid-reaajaqk&gt; &lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#coffee&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/hot_drink.D_5bXb1O_ZFWHa3.webp&quot; alt=&quot;hot_drink.D_5bXb1O.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; coffee &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 7 / 10 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;No-holds-barred coffee quality rating&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#cafe&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunset_city.B7o5Qv9S_Z2mRVsV.webp&quot; alt=&quot;sunset_city.B7o5Qv9S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; cafe &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Quality of cafe re: design, theming, layout&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#price&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/green_money.DI3hd3md_112nND.webp&quot; alt=&quot;green_money.DI3hd3md.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; price &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 3 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;5 = very reasonable prices&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#productivity&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/laptop.CoGbsnwl_ZWWXFK.webp&quot; alt=&quot;laptop.CoGbsnwl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; productivity &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 3.5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Table size, outlet availability, wifi&lt;/span&gt; &lt;/li&gt;&lt;li class=&quot;flex flex-col w-full flex-nowrap nth-of-type-[5]:pb-2&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;a href=&quot;#vibes&quot; class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/sunrise_over_mountains.BLo5a_oR_Z10zz4C.webp&quot; alt=&quot;sunrise_over_mountains.BLo5a_oR.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt; vibes &lt;/a&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none&quot; data-astro-cid-reaajaqk&gt; 5 / 5 &lt;/span&gt; &lt;/div&gt;
          &lt;span class=&quot;overflow-y-hidden transition-all duration-500 ease-in-out max-h-0 opacity-0 rating-key text-xs sm:text-base&quot; data-astro-cid-reaajaqk&gt;Subjective &amp;#39;How does it feel being here?&amp;#39;&lt;/span&gt; &lt;/li&gt;  &lt;li class=&quot;flex flex-col pt-2 border-t&quot; data-astro-cid-reaajaqk&gt; &lt;div class=&quot;flex justify-between&quot; data-astro-cid-reaajaqk&gt; &lt;span class=&quot;capitalize flex-none&quot; data-astro-cid-reaajaqk&gt; &lt;img src=&quot;/_astro/finish_flag.Aumo9UIa_1ur8ap.webp&quot; alt=&quot;finish_flag.Aumo9UIa.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto w-5 sm:w-7&quot;&gt;
Total
&lt;/span&gt; &lt;span class=&quot;d grow border-b-2 border-yellow float-left relative block border-dotted h-3.5 mx-1&quot; data-astro-cid-reaajaqk&gt;&lt;/span&gt; &lt;span class=&quot;text-right flex-none font-bold&quot; data-astro-cid-reaajaqk&gt;23.5 / 30&lt;/span&gt; &lt;/div&gt; &lt;/li&gt;
   &lt;/ul&gt;  &lt;!-- For conditionally rendering an asterisk --&gt;&lt;/div&gt;&lt;span class=&quot;pt-2 border-t&quot;&gt;&lt;strong&gt;Order Suggestion: &lt;/strong&gt;A small americano&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;h1 id=&quot;closing-thoughts&quot;&gt;Closing Thoughts&lt;/h1&gt;
&lt;p&gt;This was even more fun than the previous coffee outing, partly because I biked, but also I think I just found cafes more representative of their respective neighborhoods (with the one exception), and that made a big difference.&lt;/p&gt;
&lt;h2 id=&quot;just-northside-things&quot;&gt;Just Northside Things&lt;/h2&gt;
&lt;p&gt;Chicago is a historically segregated city, and only the delusional would suggest it isn’t still struggling with that history.&lt;br/&gt;
As a somewhat-recent transplant to Chicago (2022) and as a communist who lives on the wealthier, whiter Northside of Chicago, how do I contend with that? What do I do to both resist the chauvinist, alienating effects of that material reality?&lt;/p&gt;
&lt;p&gt;I don’t have a great answer to that. But I feel that the &lt;em&gt;lowest&lt;/em&gt; hanging fruit would be to visit and engage with the other neighborhoods in the city. And I strongly believe that community coffee shops are an excellent stepping stone for an outsider to mingle!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2020.Bydw4OHv_2nIpeK.webp&quot; alt=&quot;Exposed bricks with shelves hosting anticolonial literature for sale in Anticonquista cafe&quot; title=&quot;more cafes should sell books fr fr&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;So many great books here. I nabbed that copy of The Red Deal!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For someone on the Northside, what would bring you all the way to Pilsen or Bridgeport? For the average person, probably either a special event or friends.&lt;/p&gt;
&lt;p&gt;And I suppose that’s true for me too. I first visited Pilsen a few months ago when South Loop friends took me on a bike ride from the loop over to &lt;strong&gt;Anticonquista&lt;/strong&gt;. Ever since then I’d been trying to come up with a good excuse to travel over there.&lt;/p&gt;
&lt;h2 id=&quot;a-bit-of-the-local-fabric&quot;&gt;A bit of the local fabric&lt;/h2&gt;
&lt;p&gt;Cruising through a few streets between coffee shops is hardly a thorough exploration of a neighborhood but it really planted a seed in me. I have two good coffee shops worth coming back to, but I also have countless sights of things I biked past that my friend and I called out–things worth another visit.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2021.CgMSwUmb_28B8r7.webp&quot; alt=&quot;A reflective glass storefront to a local art gallery and print shop&quot; title=&quot;if you squint you might see the gay-ass kink art on the walls uwu&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2218&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;We briefly stopped into Hoofprint here to check out the art :3&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Biking down 18th St in Pilsen was a joy, passing all the vibrant Mexican-American art adorning the shops and restaurants along the street.&lt;br/&gt;
Crossing the bridge over to Bridgeport, almost missing &lt;em&gt;Ctrl Z&lt;/em&gt; coffee shop for how simply it slotted into an old factory building…things like that really stuck with me.&lt;/p&gt;
&lt;p&gt;I’m proud to call Chicago my home, and I’ve only ever been rewarded for exploring outside my hyperlocal sphere and seeing what else the city has to offer, and how all my cool neighbors live and support one another with hot brews and cool spaces UwU&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/image%20copy%2022.BFibh03P_23rQmL.webp&quot; alt=&quot;A white travel cup of coffee with black lid on a wooden counter in front of a window at Cup of Joe Pilsen&quot; title=&quot;woaw cofee&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1248&quot; height=&quot;1664&quot;&gt;
&lt;em&gt;Comfort in simplicity…also still thinking about the really cool black &amp;amp; blue e-bike my friend and I saw while at Cup of Joe. @ that cyclist: hiiii thanks for chatting with us your bike is sick I hope I wasn’t too weird asking questions about your e-bike I just thought it was neat&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Uptown-Edgewater Coffee Tour</title><link>https://cobra.monster/blog/2025-09-06_uptown-edgewater-coffee</link><guid isPermaLink="true">https://cobra.monster/blog/2025-09-06_uptown-edgewater-coffee</guid><description>I decided to spend my Saturday morning touring around some Northside Chicago coffee shops</description><pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;some-background&quot;&gt;Some Background&lt;/h1&gt;
&lt;p&gt;I’m obviously a pretty big &lt;a href=&quot;/about/coffee&quot;&gt;coffee nerd&lt;/a&gt;, and if you follow me online you know I talk a lot about the cafes I like to visit. I hadn’t been in Chicago long before I’d scoped out all the best shops…judging from a purely “where’s the best Coffee” perspective.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;eyy.BgBs6cHh.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;&lt;a href=&quot;/about/coffee#best-chicago-coffee-shops&quot;&gt;“Best Coffee” list here, btw! :3&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;But there’s more to cafes than just the coffee, and I think it’s high time I put more effort into appreciating them. A good cafe is the avenue into the heart of its neighborhood…so today I chose a neighborhood (well, a few) and scoped out the cafes beforehand.&lt;br/&gt;
The goal was simple exploration, but the added hope was finding new places good to meet friends at—especially for drawing or doing work together :3&lt;/p&gt;
&lt;h2 id=&quot;the-map&quot;&gt;The Map&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/map.Bc60M9Gj_Z81f2R.webp&quot; alt=&quot;Screenshot of Google Maps with a custom list pinning coffee shops&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1288&quot; height=&quot;1242&quot;&gt;
&lt;em&gt;Posted to &lt;a href=&quot;https://bsky.app/profile/cobra.monster/post/3ly5fqhepn22u&quot; title=&quot;Thank god I don&apos;t care enough to embed the map or something wacky&quot; class=&quot;external&quot;&gt;Bluesky&lt;/a&gt; the night before&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I started out just googling around on Maps. Fortunately with the 4 new Red Line CTA stations open, it was going to be super easy to use them to get around pretty quick. And turns out there were a lot of cafes near the stations!&lt;/p&gt;
&lt;h2 id=&quot;rating-system&quot;&gt;Rating System&lt;/h2&gt;
&lt;p&gt;Going to keep this simple and rate things out of 5! Quick explanation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Coffee&lt;/strong&gt; = coffee quality &lt;em&gt;relative&lt;/em&gt; to just this trip only! (Spoilers but none of these shops served as high quality coffee as my regular haunts)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cafe&lt;/strong&gt; = the physical space itself, size/layout and especially seating options&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Price&lt;/strong&gt; = rated based on quality of what was served. 5/5 means you’re getting a steal of a price for what they’re offering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community&lt;/strong&gt; = how much the cafe feels like it’s a unique part of its neighborhood, as opposed to ‘just another coffee shop’&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vibes&lt;/strong&gt; = subjective overall “how likely am I to return and possibly bring friends here”&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;the-outing&quot;&gt;The Outing&lt;/h1&gt;
&lt;p&gt;I decided to start at &lt;em&gt;pHlour Bakery,&lt;/em&gt; and then figured I’d hop from place to place, getting a cup of coffee from each, taking a few pictures, then choosing where to go next. Trying to hit up as many places as I reasonably could.&lt;/p&gt;
&lt;p&gt;I also invited two friends to come with me. After an info mixup (“Meet me at &lt;em&gt;Berwyn&lt;/em&gt; station” was mixed up with &lt;em&gt;Bryn Mawr&lt;/em&gt;), we got started!&lt;/p&gt;
&lt;h2 id=&quot;phlour-bakery&quot;&gt;pHlour Bakery&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6566.ihk4anNl_ZW4eQf.webp&quot; alt=&quot;Dining area pHlour bakery&quot; title=&quot;Wonder how busy it gets?&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;5712&quot; height=&quot;4284&quot;&gt;&lt;/p&gt;
&lt;p&gt;While not a cafe, pHlour fits into the scene by being a very prolific pastry supplier &lt;em&gt;to&lt;/em&gt; cafes across the city. The fact that their main bakery happened to be next to the Bryn Mawr station just made it a really convenient starting place for my little trip.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6569.Duh1_nLu_1dOKOY.webp&quot; alt=&quot;Tomato-Basil danish and blueberry scone on a plate&quot; title=&quot;Don&apos;t talk to me about scones I&apos;ll talk your ear off&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3024&quot; height=&quot;4032&quot;&gt;
&lt;em&gt;mmm scone&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I got there at opening, so I had the pick of the litter. I got myself a tomato-basil danish, and a blueberry scone. The Danish was really savory and nice, and the scone was incredible. I love scones, and this is easily in the top 3 I’ve ever had! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/smile.BCuIwjhV_ZhdCcP.webp&quot; alt=&quot;smile emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coffee: N/A&lt;/strong&gt; Only ordered food&lt;br/&gt;
&lt;strong&gt;Cafe: 2/5&lt;/strong&gt; Simple, but clean and pleasant enough&lt;br/&gt;
&lt;strong&gt;Price: 3/5&lt;/strong&gt; Pretty much exactly what you’d expect&lt;br/&gt;
&lt;strong&gt;Community: 1/5&lt;/strong&gt; As they are mostly a supplier to other cafes, inside dining is minimal&lt;br/&gt;
&lt;strong&gt;Vibes: 2/5&lt;/strong&gt; Totally fine, just not really a hangout place. Get your stuff and walk next door to the train&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6568.DM7cLFx5_2iB7qn.webp&quot; alt=&quot;Neon sign on a wallpapered wall that reads &amp;#34;pro gluten&amp;#34;&quot; title=&quot;I had finished my danish and was halfway through the scone before I looked up and saw this. Definitely an early morning.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3024&quot; height=&quot;4032&quot;&gt;
&lt;em&gt;Sent this to my gluten-free parents and they got a real kick out of it&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;sip--savor&quot;&gt;Sip &amp;amp; Savor&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6571.BgItGAU__1nOjMN.webp&quot; alt=&quot;Photo from the back of Sip &amp;#38; Savor looking outwards. There&apos;s bar seating to the left, and many small 2-person cafe tables to the right and elsewhere&quot; title=&quot;Couldn&apos;t take a GREAT pic w/o including way too many random strangers.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;
&lt;em&gt;I’m trying to figure out what this space might’ve been before a cafe, but I can’t quite nail the vibe&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What’s the opposite of “starting things off with a bang”? Maybe “tripping at the starting line?” In any case, &lt;strong&gt;Sip &amp;amp; Savor&lt;/strong&gt; is all that and more (less?).&lt;/p&gt;
&lt;p&gt;I’m being dramatic, but it wasn’t a good start when I asked the barista for a macchiato and he said:&lt;/p&gt;
&lt;p&gt;“Uh hmm…I don’t think we have a &lt;strong&gt;button&lt;/strong&gt; for that.”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/whine.DSM-Bh3S_1Ck74T.webp&quot; alt=&quot;Argent Whine&quot; title=&quot;no mean me!!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/p&gt;
&lt;p&gt;A button!! That means…they use a super-automatic coffee machine! Aaaa…dang. Now I know I’m a coffee snob at heart, but I’m chill and polite, so I asked the barista for his suggestion, and got an americano. He told me it’d be a medium-dark roast, and that they couldn’t do my preferred 8oz size so…yeah. (It was really bad)&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Super-automatic espresso machines are awesome, by the way. Especially for home, but I don’t disagree with them in some commercial settings! There’s a lot to be said about having a programmable “press one button and get a specific type of latte/cappuccino” machine, especially in a high-volume environment. They’re just not for me :3&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6570.BsAW3pMz_A5Qgr.webp&quot; alt=&quot;Cafe back, showing booth seating and couches around a natural-wood coffee table&quot; title=&quot;Genuinely very nice area. Couch just kinda sucked.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;
&lt;em&gt;The back of the cafe is pretty nice at least.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The cafe itself was overall solid though. A lot of space, and good seating options. They even had some couches (a rarity at my usual coffee shop locations), but I wasn’t impressed by the comfort, honestly.&lt;/p&gt;
&lt;p&gt;They do have a tv running a loop of Animal Crossing videos though…!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6573.Bz2Mf-y__Z1DJzuD.webp&quot; alt=&quot;wall-mounted tv with some animal crossing visuals playing&quot; title=&quot;A little wretched&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4284&quot; height=&quot;5712&quot;&gt;
&lt;em&gt;I genuinely like this, though it felt kind of out of place&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coffee: 1/5&lt;/strong&gt; Burnt and unremarkable americano with too much water&lt;br/&gt;
&lt;strong&gt;Cafe: 3/5&lt;/strong&gt; Good variety of seating, but the space feels too big for what’s being offered&lt;br/&gt;
&lt;strong&gt;Price: 3/5&lt;/strong&gt; Pretty much exactly what you’d expect&lt;br/&gt;
&lt;strong&gt;Community: 3/5&lt;/strong&gt; The signboards were cute and had personality, and the space felt reasonably tailored to the area&lt;br/&gt;
&lt;strong&gt;Vibes: 2/5&lt;/strong&gt; Just like, fine! Nothing special or really notable&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-lost-hours&quot;&gt;The Lost Hours&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6578.BgFyJa-2_1OGJkn.webp&quot; alt=&quot;Front view of the cafe. Pastry shelves are visible with chalk boards and shelves in the back.&quot; title=&quot;Do y&apos;all appreciate my high-effort &apos;minimize people + their faces in the frame&apos; techniques?&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;5712&quot; height=&quot;4284&quot;&gt;&lt;/p&gt;
&lt;p&gt;I had high expectations for this place, based purely on &lt;a href=&quot;https://www.the-lost-hours.com/&quot; class=&quot;external&quot;&gt;their website&lt;/a&gt;, which has some of my favorite design decisions I’ve ever seen on an otherwise-polished site:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/timetoescape.8MP0TL6i_ZkgQuK.webp&quot; alt=&quot;Front page of the website, with prominent text in the background reading &amp;#34;Time to escape&amp;#34; behind a glass with espresso&quot; title=&quot;You have no idea how long it took to get a fucking gif to work on this site lmao&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1859&quot; height=&quot;1140&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/lostHours2.C_6imXPk_Z23VyFc.webp&quot; alt=&quot;Section titled &amp;#34;flavor to savor&amp;#34; with 3 photos beneath, a coffee mug labeled &amp;#34;Worth every drop&amp;#34;, a barista &amp;#34;Artista Baristas&amp;#34;, and a pile of croissants &amp;#34;Pastry Pleasures&amp;#34;&quot; title=&quot;I can only aspire to become an artista barista myself...!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1802&quot; height=&quot;1084&quot;&gt;
&lt;em&gt;Just fantastic.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’ll cut to the chase: the coffee was pretty bad, but the cafe itself hit every other mark possible.&lt;/p&gt;
&lt;p&gt;So you walk in, and the cafe immediately feels like a community space. It was comfortably busy, and super cozy. The cafe has that kind of variety of comfy-cozy seating that tells you that not only did the cafe prioritize comfort over aesthetic, but that they likely engaged with the community to source the furniture in the first place.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6576.CudxZkoF_Gwp20.webp&quot; alt=&quot;Two brownish armchairs in the sunlit front of the cafe&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;5712&quot; height=&quot;4284&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6575.CFCtGKaQ_oYnVB.webp&quot; alt=&quot;Side area of the cafe, with a complex shelf with books and coffee supplies&quot; title=&quot;I know the pictures aren&apos;t great, but I didn&apos;t want to make folks uncomfortable :3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4284&quot; height=&quot;5712&quot;&gt;
&lt;em&gt;I didn’t get better pictures than this, but there are many more tables and couches!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Very cool. As for drink, I took my barista’s recommendation and ordered a sweet latte drink…it was &lt;em&gt;$7.00&lt;/em&gt; and consisted of espresso, chai, and various syrups. It was an overwhelming sweet mess, and demonstrations the classic Cafe Syrup Issue.&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;&lt;img src=&quot;/_astro/ice_cream.DO_1XVgV_Z2kPyfz.webp&quot; alt=&quot;ice_cream.DO_1XVgV.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;Cafes and Coffee Syrups&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;p&gt;The &lt;strong&gt;Cafe Syrup Issue&lt;/strong&gt; is what I call it when I find a cafe that has tons of flavor syrups &lt;em&gt;and&lt;/em&gt; specifically leans heavily into them as a standout feature of their coffee quality.&lt;/p&gt;&lt;p&gt;This is from a cafe I visited during a road trip:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/_astro/syrupCafe.DdH0lNmE_ZBAsLl.webp&quot; alt=&quot;Cafe photo prominently feature a massive chalkboard with an enormous list of &amp;#34;recipes&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1665&quot; height=&quot;1249&quot;&gt;
&lt;em&gt;The chalkboards are just lists of syrup combinations…&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I understand that people can find these kinds of drinks tasty, but to me it just isn’t coffee anymore. It’s a sugar drink with coffee as a convenient caffeine source. Nothing special, and with very few exceptions, no artistry involved.&lt;/p&gt;&lt;p&gt;And to be clear, neither &lt;em&gt;The Lost Hours&lt;/em&gt; nor any of the cafes on this list today are &lt;em&gt;THAT&lt;/em&gt; bad. There’s an element of this issue, but it’s much much worse elsewhere I assure you.&lt;/p&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/src/components/Accordion/Accordion.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;Apparently they source their coffee from local roaster, &lt;a href=&quot;https://happymondaycoffee.com/&quot; class=&quot;external&quot;&gt;Happy Monday Coffee&lt;/a&gt;, which popped up in my initial search but I quickly moved past mostly due to the fact that they only sell coffee blends and no single-origin coffees.&lt;/p&gt;
&lt;p&gt;Now judging by a syrupy drink alone feels disingenuous, so I also ordered a straight espresso and it was under-extracted and undrinkable. Not sure if it was an issue with dialing in that day or what, but not impressed.&lt;br/&gt;
Score is below, but just wanted to note that aside from the coffee itself, I &lt;em&gt;really&lt;/em&gt; like everything else going on here! It’s a lovely cafe, with friendly staff and clearly a successful outreach towards the local community. Super cozy and the seating is comfy as heck. Maybe the tea is good too! It’s really only the coffee not doing it for me.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coffee: 1/5&lt;/strong&gt; Syrup hell and crazy under-extracted espresso. Not impressed&lt;br/&gt;
&lt;strong&gt;Cafe: 5/5&lt;/strong&gt; Great seating variety, big space, good acoustics. Pretty perfect. Only negative I’d say is it has big, east-facing windows with no shades, so it was very  bright and hot&lt;br/&gt;
&lt;strong&gt;Price: 1/5&lt;/strong&gt; Too much money for too mediocre of coffee. But especially not a fan of $7 for just syrups&lt;br/&gt;
&lt;strong&gt;Community: 5/5&lt;/strong&gt; Great space, friendly staff, good location, and all of it summed up by a very earnest website&lt;br/&gt;
&lt;strong&gt;Vibes: 4/5&lt;/strong&gt; Totally subjective, but the vibes were great but even ignoring coffee, it’s just not quite my perfect type of space. Very very good though!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;everybodys-coffee&quot;&gt;Everybody’s Coffee&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6581.B4ezegf2_ZOwKHV.webp&quot; alt=&quot;12 small canvases of balloon animal art on a wooden wall above a table&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;
&lt;em&gt;Rotating art displays! Always a good sign :3&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I wasn’t sure what to think of this place…with a name like “Everybody’s Coffee” I leaned towards ‘casual about coffee’. However as I traveled there, I checked their website and was delighted to find they listed a ton of single-origin roasts! &lt;img src=&quot;/_astro/purple_heart.B7tiELgq_DhO7G.webp&quot; alt=&quot;purple_heart.B7tiELgq.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;Argent Uwu&quot; title=&quot;I can has good coffee uwu?&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/p&gt;
&lt;p&gt;And I’ll cut to the chase: it was indeed very good!! For &lt;em&gt;$2.77&lt;/em&gt; I got an 8oz drip coffee with a single-origin natural-process Colombian (medium-light roast) and it was fantastic &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;. 100% easy-drinking “could enjoy this all day” kind of drink. Lovely lovely.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6584.BH87EQGn_Z1UAV2Q.webp&quot; alt=&quot;Full view of indoor cafe area, some patrons backs are to the camera. Seated at a high natural-log table, facing forwards towards the front of the cafe. Windows to the left&quot; title=&quot;Healthy &apos;local old man&apos; presence here that day, so you know it&apos;s gotta have something solid about it&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;5712&quot; height=&quot;4284&quot;&gt;
&lt;em&gt;And what a nice space&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Took a seat in the back and marveled at the lovely cafe space. No couches, but every other type of seating was there! High tables, low 2-person tables. Outdoor seating (completely filled that day), and the building seems to be a larger community center type of space, so perhaps there was more!&lt;br/&gt;
A few negative points for acoustics which I don’t hold against them. The building just has a lot of echoey exposed ducts etc. and I feel like they did a pretty reasonable job filling the space with furniture, so aside from maybe some panels or something it’s as good as it gets.&lt;/p&gt;
&lt;p&gt;But overall the vibe was a great mix of cozy and productive-comfortable. The high-table I sat at had special cabling routed through it to make sure that patrons could access power outlets! Like this place wants to be a comfortable cafe space, but they put some good priority into making it a great &lt;em&gt;workspace&lt;/em&gt;. Oh and it’s open late!! Huge bonus.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6582.B-tThcDl_1pNoKD.webp&quot; alt=&quot;4 art canvases depicting 2 women, a tentacle explosion, a balloon animal, and a comic-style woman holding a banana&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6583.EJVe_sI4_Zw2LMw.webp&quot; alt=&quot;1 large canvas depicting an orange balloon animal above a 2-person cafe table&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3024&quot; height=&quot;4032&quot;&gt;
&lt;em&gt;Art is by local artist: &lt;a href=&quot;https://www.thisisgenearthur.com/&quot; class=&quot;external&quot;&gt;Gene Arthur&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Local artist displays are always a great sign! Love this art, and it helped me feel cozy and welcome here :3&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coffee: 5/5&lt;/strong&gt; Beautiful single-origin! Clean and well-brewed&lt;br/&gt;
&lt;strong&gt;Cafe: 4/5&lt;/strong&gt; Docked a single point due to lack of couches (not a cafe I’d sit and read in for a long time) but definitely a great space for groups, or solo productive work&lt;br/&gt;
&lt;strong&gt;Price: 5/5&lt;/strong&gt; Unbeatable price. Only tried drip though! No idea what other coffee costs there whoops&lt;br/&gt;
&lt;strong&gt;Community: 4/5&lt;/strong&gt; Solid community space, especially with the art&lt;br/&gt;
&lt;strong&gt;Vibes: 5/5&lt;/strong&gt; Perfect vibes for me, especially since Wilson Ave really calms down by this point and it feels “active but quiet” outside and around it&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;nabala-cafe&quot;&gt;Nabala Cafe&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6585.CIX_Fomn_Z1tUvxt.webp&quot; alt=&quot;Front of Nabala cafe, focus on two sage green chairs and the large window with olive branch decals and a Palestinian flag&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3024&quot; height=&quot;4032&quot;&gt;
&lt;em&gt;Free Palestine!! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Immediate incredible vibes from this shop! And not just because of Palestinian solidarity! Beautiful shop with variety of seating options, lovely decor, Palestine flags just &lt;em&gt;everywhere&lt;/em&gt; which you love to see, and tons of community amenities. &lt;strong&gt;And they serve Middle Eastern coffee and food&lt;/strong&gt; like!! What more could I possibly ask for?!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6586.DrBb7JUO_Z37TEs.webp&quot; alt=&quot;Front of the cafe, some patrons backs facing the camera. Yellow high table has some community fliers/info on it, and the barista counter is visible in the back.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6587.DTc2RX-M_Stzsw.webp&quot; alt=&quot;Full cafe view of Nabala cafe. Olive-painted wall on left, big windows elsewhere. Varied seating and tables. Palestinian flag in display&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;&lt;/p&gt;
&lt;p&gt;This cafe blew me away. Now I know my background means I’ll more heavily weight places with Turkish coffee, hummus, and za’atar but just look at this place. It screams intentionality, community, and a strong fucking identity.&lt;/p&gt;
&lt;p&gt;The cafe has a solid variety of seating, ranging from comfy armchairs, more casual sitting-room style chairs, cafe tables, high tables, and two large group tables with bench seating. Pretty much everything you could ask for, save a full couch.&lt;br/&gt;
The lighting is incredibly welcoming and they make great use of it with so many plants.&lt;/p&gt;
&lt;p&gt;Around the shop they have community resources, including a sizeable community book exchange, and this great little shelf full of board games, community art supplies, and even a gourd seed bank for folks to propagate some gourds of their own. I’ve never seen a community art supply thing like this before, how nice :3&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6590.CChRM78J_BxHOx.webp&quot; alt=&quot;Small shelf packed with board games, art supplies, and surrounded by plants.&quot; title=&quot;bananagrams...everywhere. why is it everywhere...lmao&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4284&quot; height=&quot;5712&quot;&gt;&lt;/p&gt;
&lt;p&gt;As for the coffee, I ordered a Turkish coffee and treated myself to a hummus plate. Delighted to find that the hummus came with oil and za’atar as well! A little disappointed that the coffee came in a to-go cup…but then delighted again that it was prepared with cardamom &lt;em&gt;by default&lt;/em&gt; (the Palestinian way!), which made me feel so at home you can’t even imagine.&lt;/p&gt;
&lt;p&gt;Oh and it was good! Very very good Turkish coffee. I think a step below Oromo Cafe elsewhere in the city, but that might just be due to the plastic lining of those to-go cups. Not a fan.&lt;br/&gt;
Hummus was incredible! Za’atar was solid and the oil was good (not amazing). No Turkish delight with my coffee by default but that’s fine, I wouldn’t mind paying for it next time.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6588.DpJMncBa_Z1DMFSF.webp&quot; alt=&quot;Turkish coffee in a to-go cup next to a nice plate with 2 loaves of pita bread, hummus, za&apos;atar mix, and olive oil&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4284&quot; height=&quot;5712&quot;&gt;
&lt;em&gt;If the coffee came in a more traditional demitasse cup or something this would be a top 10 photos of the year contender&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I could go on for ages, but I’ve been wanting to come here for a while. They opened a bit over a year ago, and I’ve walked past when they were doing community outreach events and Palestine fundraisers…so it’s high time I started getting involved myself!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coffee: 5/5&lt;/strong&gt; Only had the Turkish which was very good, but 5/5 for also having incredible food :3 Though I will note that even I can’t drink Turkish coffee all day long so I’d need other options if I were to stay longer haha&lt;br/&gt;
&lt;strong&gt;Cafe: 5/5&lt;/strong&gt; Incomprehensibly perfect. Can’t gush enough about it&lt;br/&gt;
&lt;strong&gt;Price: 3/5&lt;/strong&gt; Honestly I was too excited and didn’t notice the price. I think it was like, average?? Normal?&lt;br/&gt;
&lt;strong&gt;Community: 5/5&lt;/strong&gt; Unbeatable. Obvious reasons.&lt;br/&gt;
&lt;strong&gt;Vibes: 5/5&lt;/strong&gt; For me at least, perfect. Not super ideal for a bigger group, but solo or with one friend? Absolutely ideal.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;heritage-outpost&quot;&gt;Heritage Outpost&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6594.BI6X9Kdf_Z1kKqNg.webp&quot; alt=&quot;Large lobby type area with a series of armchairs and big work tables. Large curved old-school skylights above. An elevator bank in the back&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;
&lt;em&gt;Hard to judge the vibes of an old-lobby-turned-bougie-apartments because it was genuinely nice chilling there&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This one won’t take too long because the last coffee shop of the day is actually an offshoot of one of my long-established faves in Lincoln Park: &lt;strong&gt;Heritage Bikes &amp;amp; Coffee&lt;/strong&gt;. This one made the list because of the unique space it’s in, but the coffee itself I don’t have a ton to say about, so I’ll get that over with quickly:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6595.CvNB_P7T_KTVzy.webp&quot; alt=&quot;Cheeky photo of the &amp;#34;outpost&amp;#34;. It&apos;s a small room off to the side from a larger lobby area, with space just for some shelves, the barista bar, and some simple bar seating&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;5712&quot; height=&quot;4284&quot;&gt;
&lt;em&gt;The actual cafe is pretty small. You’re really supposed to grab-n-go&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They serve &lt;a href=&quot;https://onyxcoffeelab.com/&quot; class=&quot;external&quot;&gt;Onyx Coffee&lt;/a&gt;, a reputable 3rd-wave roaster out of Arkansas. Heritage serves their quality blends in espresso and drip (no pour-overs), and they serve pastries from pHlour (I believe).&lt;br/&gt;
I love their Lincoln Park location, and go there for the space, the bike shop it’s attached to, and the kind staff. The coffee isn’t incredible, it’s just “above average” enough that I can enjoy being there. And that quality was replicated here at this “Outpost”. I got a small decaf americano and it was very nice. Easy drinking. Nothing to write home about.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/IMG_6593.UCFyUG9a_D3KlK.webp&quot; alt=&quot;Lobby area from another angle, showcasing two varied couches, some armchairs, and a large low-set coffee table&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;
&lt;em&gt;Impressive variety of couches, honestly&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The big draw was this lobby space. You walk in, and there’s a front desk with an attendant who receives visitors and deliveries for the residents who live here. The cafe is to the left. A bit to the right is a hallway leading to a restaurant-bar. The back center is all public-seating, with a 3-elevator bank in the very back for residents.&lt;/p&gt;
&lt;p&gt;Going in I thought I was going to be uncomfortable in this space, in the same way that you’re never really comfortable in a hotel lobby, but honestly it wasn’t bad!&lt;/p&gt;
&lt;p&gt;Good variety of seating, and the steady stream of residents moving in and out of the building wasn’t too disruptive. The few other people there with coffee were treating the space like a library and quietly working at laptops.&lt;/p&gt;
&lt;p&gt;Overall not bad, though I don’t think I’ll go out of my way to come here on my own. More of a “if I’m in the neighborhood, I guess”. Especially since I’m already familiar with the coffee and enjoy their main location much more.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coffee: 3/5&lt;/strong&gt; Totally fine, nothing spectacular&lt;br/&gt;
&lt;strong&gt;Cafe: 2/5&lt;/strong&gt; Cafe itself non-existent, but the lobby space was totally fine. Just kind of odd&lt;br/&gt;
&lt;strong&gt;Price: 3/5&lt;/strong&gt; Average&lt;br/&gt;
&lt;strong&gt;Community: 1/5&lt;/strong&gt; Any “community” felt fake in that luxury-apartment “community” kind of way. Not hostile, but definitely not what I’d call a welcoming space&lt;br/&gt;
&lt;strong&gt;Vibes: 2/5&lt;/strong&gt; Fine, but odd&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;concluding-thoughts&quot;&gt;Concluding Thoughts&lt;/h1&gt;
&lt;p&gt;This post has taken me 6 full days to write, so I’m going to cut myself off a bit and not rehash the rest of the post &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Obviously &lt;em&gt;Nabala Cafe&lt;/em&gt; and &lt;em&gt;Everybody’s Coffee&lt;/em&gt; were my two faves of the excursion, and I kind of expected that result. The main drive of this activity was to explore two neighborhoods I’ve barely visited, and to compare different cafe &amp;amp; community vibes in quick succession &lt;del&gt;also an excuse to check out the new red line stations&lt;/del&gt;.&lt;/p&gt;
&lt;p&gt;Aside from the Outpost, every cafe had something going for it…or at least a vision that I could appreciate, and that’s really neat! I have aspirations to open my own coffee shop in Chicago someday, and much less “competition” I’m looking for inspiration and building an internal library of ideas for what works and what doesn’t…&lt;/p&gt;
&lt;p&gt;But also I just want more places to take friends to. Because dangit all the good coffee is on the West Side for some reason and it can be tricky getting over there quickly.&lt;/p&gt;
&lt;h2 id=&quot;future-outings&quot;&gt;Future Outings&lt;/h2&gt;
&lt;p&gt;The biggest takeaway was that this was &lt;em&gt;so much fun&lt;/em&gt; and I’ve gotta do it again. Combining neighborhood exploration with transit rides and meeting friends AND new cafes…yeah I mean what a mix! I have my eyes on the &lt;strong&gt;Pilsen&lt;/strong&gt; neighborhood next, as I’ve already gotten some strong cafe recommendations from friends there &lt;img src=&quot;/_astro/eyes.CODr4szK_Z6FP3U.webp&quot; alt=&quot;eyes.CODr4szK.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt;&lt;/p&gt;
&lt;p&gt;I’ve also got to do this format again for my visits to other cities. I did this a bit when I visited Pittsburgh for Anthrocon this summer, and man even just the 3 shops I went to were awesome! This is a fun format, I’ve gotta expand it!&lt;/p&gt;
&lt;p&gt;Thank you for reading my coffee ramble &lt;img src=&quot;/_astro/purple_heart.B7tiELgq_DhO7G.webp&quot; alt=&quot;purple_heart.B7tiELgq.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-8 inline-block m-auto&quot;&gt; if you have any comments or ideas for how I could make this better or more fun, please &lt;a href=&quot;/links/#socials&quot;&gt;hit me up online&lt;/a&gt;! And hey you should go out and visit your local shops! Nearly every city in the world has a coffee scene, and even if the coffee isn’t crazy special, the community and cafe just might be :3&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;Argent Eyy&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/p&gt;</content:encoded></item><item><title>These Goofy Games Are So Good To Me</title><link>https://cobra.monster/blog/2025-08-14_these-goofy-games-are-so-good-to-me</link><guid isPermaLink="true">https://cobra.monster/blog/2025-08-14_these-goofy-games-are-so-good-to-me</guid><description>Friendslop Me; Just Fuck Me Up</description><pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;friendslop-isnt-real-but-it-can-delight-you&quot;&gt;“Friendslop” isn’t real, but it &lt;em&gt;can&lt;/em&gt; delight you&lt;/h1&gt;
&lt;p&gt;This blog post will have exactly one apology for unironically using the word “friendslop” and this is it: &lt;sub&gt;sowwy uwu&lt;/sub&gt;&lt;/p&gt;
&lt;p&gt;Listen if you haven’t played any of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/3527290/PEAK/&quot; class=&quot;external&quot;&gt;PEAK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/3241660/REPO/&quot; class=&quot;external&quot;&gt;REPO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/2881650/Content_Warning/&quot; class=&quot;external&quot;&gt;Content Warning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/1966720/Lethal_Company/&quot; class=&quot;external&quot;&gt;Lethal Company&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/3146520/WEBFISHING/&quot; class=&quot;external&quot;&gt;Webfishing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You’re missing out!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/girlhelptoilet.4E6jounH_ZWK2vB.webp&quot; alt=&quot;two repo bots interacting. One is in a toilet&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1085&quot; height=&quot;1070&quot;&gt;
&lt;em&gt;No money but yes toilet&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-appeal-is-probably-obvious&quot;&gt;The appeal is probably obvious&lt;/h2&gt;
&lt;p&gt;I mean, playing games with friends is fun! Obviously. I’m really only thinking about it now because these games are such a stark contrast to the friend games I grew up playing…Things like &lt;em&gt;Halo&lt;/em&gt; or &lt;em&gt;Call of Duty&lt;/em&gt; or even &lt;em&gt;Final Fantasy: Crystal Chronicles&lt;/em&gt;. All great games that I formed fantastic memories playing with friends in high school and college.&lt;br/&gt;
Even somewhat recently I tried &lt;em&gt;PUBG&lt;/em&gt; and even &lt;em&gt;Apex Legends&lt;/em&gt;, but those didn’t stick. The only games I regularly play with friends are these funky fun sloppy friend games.&lt;/p&gt;
&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;/_astro/contentwarningrat.BDSs8g9f_1fRjjU.webp&quot; alt=&quot;Content Warning character holding a Rat drawing&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;607&quot; height=&quot;663&quot;&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;/_astro/contentwarningsadge.g-aSSipY_Z23XX2y.webp&quot; alt=&quot;Content Warning character at an extreme angle looking goofy and sad&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;929&quot; height=&quot;981&quot;&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Maybe we’re all just tired adults now, and playing something truly competitive or with “real” stakes is just too much mental or emotional effort.&lt;br/&gt;
Maybe we just want to have a relatively interesting task to perform together, whereupon we can hang out in a box and bark at each other.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/barkbucket.JIrHj9xz_Z1z8a3a.webp&quot; alt=&quot;3 repo bots barking at each other in a bucket&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1440&quot;&gt;
&lt;em&gt;barkbarkbark bark barkbark&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Maybe this is all a circuitous discussion topic that just comes back to Capitalist Society Isolation, Alienation, and Loneliness™ because every game I’ve ever seen described as Friendslop boils down to in some way: “a colorful wrapper-task around just talking to your friends in virtual space”&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/yikes.CiuleE7A_2hvr8o.webp&quot; alt=&quot;yikes.CiuleE7A.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Oh god…is “Golf with your Friends” friendslop? That feels weird. It’s a mini-golf game…but if you’re just talking and futzing around then…slop…?? Feels wrong to call that friendslop since it’s a simulacrum of a real life activity (mini-golf). Unless real-life mini-golf is also friendslop…&lt;/p&gt;&lt;p&gt;Have we been slopping this entire time? How deep does this go? Good lord.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;so-what-makes-one-of-these-games-good&quot;&gt;So what makes one of these games good?&lt;/h1&gt;
&lt;p&gt;I’m not a serious gamer, but I’m a busy guy who’s picky about how he spends his free time! I’ve had a good think about what makes these games gripping enough for me to organize social events with friends to play them &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/smile.BCuIwjhV_ZhdCcP.webp&quot; alt=&quot;smile emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;theres-gotta-be-skill-expression&quot;&gt;There’s gotta be Skill Expression&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/horsepuppykingofthelosers.BZF68ndC_2eubrE.webp&quot; alt=&quot;REPO end-game screen: Horsepuppy King of the Losers!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1513&quot; height=&quot;914&quot;&gt;
&lt;em&gt;maybe not this time&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Starting off with perhaps the most controversial point, but in my opinion one strength of good friendslop games is being able to get &lt;em&gt;better&lt;/em&gt; at the game.&lt;/p&gt;
&lt;p&gt;Competitive games have it built in, but the competitive nature can itself drive a wedge between you and your friends’ gaming experience together (ranks, or just the serious intensity of matches). Games like PEAK and REPO can pull you in by being goofy friend games, but they hold you close by offering you ways to get GOOD at them.&lt;/p&gt;
&lt;p&gt;Skill expression means being able to teach each other things, or show off techniques you’ve learned, on top of being able to more readily progress through the game itself.&lt;br/&gt;
The smart balance is when you can have that skill expression, but also build a game where it’s not needed or especially where &lt;em&gt;equal&lt;/em&gt; skill expression isn’t needed for the group experience to be enjoyable.&lt;/p&gt;
&lt;h2 id=&quot;its-gotta-have-some-scrungle&quot;&gt;It’s gotta have some scrungle&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/muah.WxvxRJDh_1AGYpT.webp&quot; alt=&quot;Content warning guys smashed together in a corner&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;785&quot; height=&quot;723&quot;&gt;
&lt;em&gt;Video games with intimacy &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/pleading.ChXpJIOc_1D9JAD.webp&quot; alt=&quot;pleading emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I say this with only love in my heart but if your friendslop game doesn’t have some scrungle to its style…some roughness some &lt;em&gt;ugly&lt;/em&gt; stuff going on? I probably don’t trust it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/raincloudregalwebfishing.BnxQYFqm_uQTqO.webp&quot; alt=&quot;Webfishing screenshot of my little guy with a rainy cloud above him&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;747&quot; height=&quot;837&quot;&gt;
&lt;em&gt;the poor guy has all of 5 pixels to his name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Not to lean too much into the “if it’s not indie it’s not good” generalization, but smaller team games tend to have more jank, or lean into it more as part of their intentionally rough-around-the-edges style, and it can lead to some very appealing interactions. Comedy springboards! Or just an excuse to pause and share a screenshot with other buds.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/drawmelikeoneofyourfrenchropes.BfrhoFfp_1JQOw.webp&quot; alt=&quot;PEAK scout climbing a rope on the ground in a draw me like your french girls kinda way&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1270&quot; height=&quot;1064&quot;&gt;
&lt;em&gt;*scuttles @ u*&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;genuine-uwu-energy-somewhere-in-there&quot;&gt;Genuine UwU energy somewhere in there&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/sadradiantregal_webfishing.riyBMqCF_1x6meR.webp&quot; alt=&quot;Webfishing screenshot of my little guy holding a fish, but with a sobbing face&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1795&quot; height=&quot;1356&quot;&gt;&lt;/p&gt;
&lt;p&gt;I don’t even know how to articulate this one because it might just be a &lt;em&gt;me&lt;/em&gt; thing but it’s so important for a game to allow me to act cute with friends.&lt;br/&gt;
Emotes, funny faces, or just an art style that lends itself to it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/repobathtubbuds.Cvf9J1z6_Z1E6Bjj.webp&quot; alt=&quot;2 REPO bots sitting in a bathtub in horror-like lighting&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;
&lt;em&gt;If the REPO bots don’t give off UwU energy, just wait until you play with someone you respect; the flappy trashcan heads and googly eyes are radioactive with cuteness energy&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;its-gotta-be-funny&quot;&gt;It’s gotta be funny!&lt;/h2&gt;
&lt;p&gt;Like, intentionally. At least a little. The best fun is obviously the organic jokes made up with friends, but these games do such a nice job of leaning into it in their own styles.&lt;br/&gt;
It’s like platform development, you’ve gotta give people a springboard for the comedy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The funniest thing I’ve found in PEAK (the most recent friendslop) lately is force-feeding my friends poisonous fruit. For whatever reason, the game has a built-in mechanic allowing you to feed food items to your friends without their permission. Useful when they’re legitimately in trouble, but outside of that they can’t stop me from feeding them whatever else!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Herein the “friend” part of this really pulls its weight because most of the comedy of these games will come across as grief to strangers. Only you and your friends know how to really tickle each other with goofy game griefing mechanics like “intentionally poisoning each other” etc.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/fruitoffering.CxG9GM6l_u4v76.webp&quot; alt=&quot;harshly lit PEAK scout smiling, offering you a golden fruit&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;741&quot; height=&quot;979&quot;&gt;
&lt;em&gt;trade offer…!&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-horrors&quot;&gt;The Horrors…?&lt;/h2&gt;
&lt;p&gt;To me, the truly funny through-line to these games is the underlying horror aspect. So many of them are just…surviving or experiencing horror-able things with friends.&lt;br/&gt;
When you stop and think, I suppose it makes sense because if a multiplayer game isn’t: competitive, cozy, or a literal party game, then the only thing left must be…horror? &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/thinking.DseHzPjq_IvTQ2.webp&quot; alt=&quot;thinking emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/thehorrors.XFTjd67E_ZpDI1C.webp&quot; alt=&quot;a horrifying REPO image of a REPO bot with eyes glowing and a monster mask thing on its face. Text at the top says Melty Shaky Car.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;
&lt;em&gt;As a screenshot it’s kinda terrifying. As a memory, this fucking hilarious&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Experiencing horrors from the safety of a video game with friends is a pretty banger combination. It naturally devolves into a comedy of errors, usually beset by attempts at a comedy of being-a-silly-little-guy.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/baabaabuckshot.MVI28uSR_3ri0w.webp&quot; alt=&quot;Small REPO bot sitting menacingly on a window sill holding a shotgun in front of them&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;920&quot; height=&quot;640&quot;&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Anyways, this was all just a ramble and excuse to share some fun screenshots from some games. Thank you for reading, and if you’ve read this far I’d genuinely love to hear about some of your experiences with these games! :3&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/crabUwU.Dq7kEy4F_1Ai0p9.webp&quot; alt=&quot;A blue PEAK character holding their passport wearing a crab hat and with giant sparkly eyes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;540&quot; height=&quot;394&quot;&gt;
&lt;em&gt;uwu&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Huge 💜 to all my friends for making these experiences so beloved. Y’all are everything to me, thank you for sharing these experiences with me.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Extra shout-out to &lt;a href=&quot;https://bsky.app/profile/ochimochi.bsky.social&quot; class=&quot;external&quot;&gt;Ochi&lt;/a&gt; for helping remind me tonight that I should just blog about whatever, whenever! I’m still learning to treat this as My Space :3&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Art Fight 2025</title><link>https://cobra.monster/blog/2025-08-09_art-fight-2025</link><guid isPermaLink="true">https://cobra.monster/blog/2025-08-09_art-fight-2025</guid><description>My 8th year of Art Fight was fuckin awesome</description><pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;real-quick-whats-art-fight&quot;&gt;Real quick: what’s art fight?&lt;/h1&gt;
&lt;p&gt;Art Fight is an annual event each July hosted on the Art Fight website. You can read the details from the site’s &lt;a href=&quot;https://artfight.net/info/about&quot; class=&quot;external&quot;&gt;about section&lt;/a&gt; if you wish, but the &lt;strong&gt;TL;DR&lt;/strong&gt; is: it’s a month-long competition wherein you score points for your team by drawing fanart of other peoples’ characters, scored based on level of &lt;em&gt;finish&lt;/em&gt; (rather than subjective quality).&lt;/p&gt;
&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;/_astro/beanLads.Dog2ZIqQ_ouqkQ.webp&quot; alt=&quot;Goofy furry drawing atop a photo of the Chicago Bean&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;/_astro/Nymeria_af24_8.9.25.BsZZrJ0t_Z1Kj8me.webp&quot; alt=&quot;Headshot painting of a dragon character in the Disco Elysium style&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1199&quot; height=&quot;1600&quot;&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This “finish, not quality” approach means that Art Fight is a fantastic opportunity to let loose! Try new things…but most importantly, just chill and not obsess over each and every piece you make.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/whine.DSM-Bh3S_1Ck74T.webp&quot; alt=&quot;whine.DSM-Bh3S.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;^Guy who can’t take his own advice and predictably falls prey to perfectionism every single year.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;And this is not a small event. There were &lt;strong&gt;602,781&lt;/strong&gt; registered active participants this year!&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h1 id=&quot;2025-art-fight-season&quot;&gt;2025 Art Fight Season&lt;/h1&gt;
&lt;p&gt;This season was Crystals vs. Fossils, and at time of writing the winner hasn’t been declared yet, but I’m confident that my fellow Fossils pulled out the win &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As with every year though, I ultimately don’t really care about the competition. The point is the art, and the fun of surprising people with art!&lt;/p&gt;
&lt;h2 id=&quot;the-art&quot;&gt;The Art!&lt;/h2&gt;
&lt;p&gt;I put out &lt;em&gt;15&lt;/em&gt; pieces this season! My most ever &amp;gt;:3 and I’m proud of each of them!!&lt;/p&gt;
&lt;p&gt;Below I’ll be including each of the 15 pieces, plus some thoughts as well as what I feel is strong and weak about each piece.&lt;/p&gt;
&lt;p&gt;Also! If this piece is a revenge or has a revenge piece associated with it, I’ll share that in an Accordion :3&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Revenge” in Art Fight refers to an art piece (“attack”) made in response to one someone has received.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;1-person&quot;&gt;1. Person&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Person.sik7ejap_111URQ.webp&quot; alt=&quot;Green and white cat anthro riding a white bike in front of a stylized explosion background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;My first attack was for my cool local friend &lt;a href=&quot;https://bsky.app/profile/somepersonover.bsky.social&quot; class=&quot;external&quot;&gt;Jasper&lt;/a&gt;, of their fursona, “Person”! I wanted to do something fun and full of action, but I was &lt;em&gt;gripped&lt;/em&gt; by the desire to draw them on their brand new bike! Because it’s so cool and so very &lt;del&gt;they/&lt;/del&gt;&lt;em&gt;them.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yes, I certainly decided to draw an entire bicycle for my first effort-agnostic art event drawing…What can I say, an idea is an idea!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Perspective&lt;/li&gt;
&lt;li&gt;Lineart&lt;/li&gt;
&lt;li&gt;Vibe&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Foreshortening&lt;/li&gt;
&lt;li&gt;Shading&lt;/li&gt;
&lt;li&gt;Anthro cat faces/anatomy&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Jasper’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/BUv1VxAVTwPb4O2KHgpJJyDHtoSQ6Aeik1UUgw3xE8AK896i6mkp7X64s7d0.png?t=1753214731&quot; alt=&quot;Slick angled drawing of Argent shredding with a sick bicycle move&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Jasper’s style is so fucking sick. I only wish I could look even half as cool on a bike &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/weary.BjuNYp4g_Z2tP6xh.webp&quot; alt=&quot;weary emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt; &lt;a href=&quot;https://artfight.net/attack/11928960.bike-back&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;2-alaska&quot;&gt;2. Alaska&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Pavlentine.BUlpTE8Q_1bJ6z6.webp&quot; alt=&quot;Bust of a female grey cobra wearing a green cavalier hat and wielding a rapier.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1867&quot; height=&quot;1400&quot;&gt;&lt;/p&gt;
&lt;p&gt;For my second piece, I wanted to do something painterly and dramatic! So I honed in on Pavlentine’s Alaska, a cool rapier-wielding cobra!&lt;/p&gt;
&lt;p&gt;I was a little rushed because although Art Fight just started, I would almost immediately have to set it down to go to Anthrocon in Pittsburgh.&lt;br/&gt;
That being said, I think I did a pretty good job! I painted in color mostly on a single layer, and I’m pretty pleased with how the face came out :3&lt;/p&gt;
&lt;p&gt;Anyways make sure to check out &lt;a href=&quot;https://bsky.app/profile/pavlentine.bsky.social&quot; class=&quot;external&quot;&gt;Pavlentine on Bluesky&lt;/a&gt; b/c they have a really cool pixel art style and obviously a very cool cobra OC &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/smirk.HNdXZEqM_1gUvI6.webp&quot; alt=&quot;smirk emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Paint texture&lt;/li&gt;
&lt;li&gt;Expression&lt;/li&gt;
&lt;li&gt;Eye&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Values&lt;/li&gt;
&lt;li&gt;Metal texturing&lt;/li&gt;
&lt;li&gt;Scale textures&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;3-jeh-jeh-rocket&quot;&gt;3. Jeh Jeh Rocket&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Jeh%20Jeh%20Rocket.BKvwKlD9_2uJBMB.webp&quot; alt=&quot;Stylized orange and yellow Charizard anthro character, gesturing with foreshortened hand towards the viewer. He is reclining on a beach setting, shirtless, and generally muscular.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;Jeh Jeh Rocket was on my list from last year, and honestly he’s just a cool, hot, buff scalie character and I liked his vibe.&lt;/p&gt;
&lt;p&gt;Tried some new stuff, and generally not fully proud of the result…but I am proud of myself for trying some ambitious Foreshortening and posing, and especially proud of myself for calling it &lt;em&gt;done&lt;/em&gt; even though not perfect.&lt;/p&gt;
&lt;p&gt;Jeh Jeh Rocket belongs to &lt;a href=&quot;https://bsky.app/profile/gatorfruitt.bsky.social&quot; class=&quot;external&quot;&gt;GatorFruitt&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Head/Neck anatomy&lt;/li&gt;
&lt;li&gt;Hands&lt;/li&gt;
&lt;li&gt;Simple beach background&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Anatomy confidence&lt;/li&gt;
&lt;li&gt;Foreshortening dynamicism&lt;/li&gt;
&lt;li&gt;Shading&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;4-pinecone&quot;&gt;4. Pinecone&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Pinecone.DqkNMUuE_gumVr.webp&quot; alt=&quot;Anthro male deer character, eyes closed, wearing a green shirt, hugging a plushie My Little Pony Rainbow Dash plush item in front of a simple background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;This might be my most personally-significant piece this year because this is for a good friend I’m finally re-connecting with after almost 10 years. &lt;a href=&quot;https://bsky.app/profile/pineconethedeer.bsky.social&quot; class=&quot;external&quot;&gt;Pinecone&lt;/a&gt; has just recently more fully joined the furry fandom, and most impressively, took me up on my suggestion &lt;a href=&quot;https://artfight.net/~PineconeTheDeer&quot; class=&quot;external&quot;&gt;to do art fight&lt;/a&gt;!!&lt;br/&gt;
I’ve linked his Art Fight above but if you don’t have an account to view them, I need to share a few of his here:&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Some of Pinecone’s Art Fight 2025 Attacks + Revenge &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/smile.BCuIwjhV_ZhdCcP.webp&quot; alt=&quot;smile emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;p&gt;My man did &lt;em&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/em&gt; attacks in his first ever Art Fight and they’re all tremendous! These 2 might be my overall faves though:&lt;/p&gt;&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/Kpjq3p7qfG2qxq0mIQMe8xjGtzu1XmrAvpBwVy8tpWgZDPTyYSKioJQNKWTX.jpg?t=1752364586&quot; alt=&quot;Cartoony deer character in a green shirt and jeans walking with a deer-in-headlights expression&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;This one is just so stylishly cute. &lt;a href=&quot;https://artfight.net/attack/11005734.kevin&quot;&gt;Art Fight link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/3SaiEI1tKcfUycWyXRTCPRhIyTajbhXoETUU7AUo1CgAdjM15924UUGAjOdP.jpg?t=1752864876&quot; alt=&quot;Centaur deer character holding a lyre&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I can’t believe my man drew a taur this well goddamn. &lt;a href=&quot;https://artfight.net/attack/11584971.doga&quot;&gt;Art Fight link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;I think it’s both funny and cool that he focused so hard on deer characters since his fursona (and only oc at the moment) is a deer! He told me he just tag-searched for deer until he found one he wanted to try drawing. Very Real.&lt;/p&gt;&lt;p&gt;But of course, he also did me the incredible honor of attacking me back for drawing his deer by drawing &lt;em&gt;Argent!&lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/O6YEH02TOFcHUqfSJJe7TH6xsZ30k1Gx6gH7n6mHtWFY8OqLaC5WOdcKFRgL.jpg?t=1753563529&quot; alt=&quot;Vibrant vignette drawing of Argent, an anthro blue cobra male, sitting at a work desk with a macbook, coffee, and there is a bus in the background&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I was absolutely blown away by this. I still am!! It’s gorgeous &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/pleading.ChXpJIOc_1D9JAD.webp&quot; alt=&quot;pleading emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt; &lt;a href=&quot;https://artfight.net/attack/12245842.argent&quot;&gt;Art Fight link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;I’m just so delighted and impressed by him. I can’t wait to see what else he does! :3&lt;/p&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;p&gt;With that context, this piece kind of speaks for itself. The Rainbow Dash plushie is a nod to our shared Brony past, and the fact that not only is she best pony (according to him 💎) but he actually sewed his own RD plush all those years ago!&lt;br/&gt;
It felt like including a nod to that here was a way of sharing enthusiasm for his continued creative drive and growth, especially as he continues to find new ways to express himself :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pose&lt;/li&gt;
&lt;li&gt;Plushie design and texture&lt;/li&gt;
&lt;li&gt;Hands&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Deer anatomy&lt;/li&gt;
&lt;li&gt;Antlers&lt;/li&gt;
&lt;li&gt;Emotional expression of face + eyes&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;5-persn&quot;&gt;5. Persn&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Persn.CX0O43sL_Z2bvv5b.webp&quot; alt=&quot;Egregiously muscular green and purple dragon thingy with floating eyeball dots&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;Listen.&lt;/p&gt;
&lt;p&gt;Playing PEAK with &lt;a href=&quot;https://bsky.app/profile/somepersonover.bsky.social&quot; class=&quot;external&quot;&gt;Jasper&lt;/a&gt; got us in a silly mood and I came up w/ the idea to draw something just terrible of their Art Sona…? Brand mascot…? Unclear.&lt;/p&gt;
&lt;p&gt;Most of the joke is the thumbnail.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/th_yAY6EUpPLDJKa5eIryIDTftSeLdBdCgXMCoY7tWU9tBSirxOf4ueKvRdwi92.png?t=1752468875&quot; alt=&quot;thumbnail of the above image, but just the simple head&quot;/&gt;
&lt;em&gt;This is what anyone on Art Fight sees until they click and see the full image…I think it’s hilarious lmao.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But yeah idk Persn is just a really cool goofy character, and I genuinely love them a lot. And I wanted to be a little evil and use my disgusting muscle furry art powers to turn them into a monster.&lt;br/&gt;
Success.&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Muscle!!! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;I’m fucking hilarious&lt;/li&gt;
&lt;li&gt;Wings look pretty good ngl&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:
&lt;strong&gt;N/A&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;6-harley-klawz&quot;&gt;6. Harley Klawz&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Harley.B8_rYj2W_1aFB6G.webp&quot; alt=&quot;Grey, white, and black anthro werewolf woman with 4 ears, growling and gesturing towards the viewer in front of an abstract background&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2000&quot; height=&quot;2000&quot;&gt;&lt;/p&gt;
&lt;p&gt;I think this might be my greatest triumph this season. I am woefully inexperienced drawing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fur&lt;/li&gt;
&lt;li&gt;Werewolves&lt;/li&gt;
&lt;li&gt;Intense emotions, poses&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And yet! I feel like I kinda pulled it off! It was so important to me that I made a proper revenge piece against my friend &lt;a href=&quot;https://bsky.app/profile/harleyklawz.bsky.social&quot; class=&quot;external&quot;&gt;Harley&lt;/a&gt;, and I pushed through the “oh god I don’t know how to draw werewolves” dread and put out something I’m really proud of :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hand pose&lt;/li&gt;
&lt;li&gt;Textured shading/hatching&lt;/li&gt;
&lt;li&gt;Simple efficacy of facial expression&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hair volume, texture&lt;/li&gt;
&lt;li&gt;Wolf teeth/mouth&lt;/li&gt;
&lt;li&gt;Clothing&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Revenge for Harley’s attack! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/afJEIl543hnVHD9gx58N4KN8Og6k54xLT34NfchGn5w2b6GaZqmMX2ztURcg.png?t=1751508562&quot; alt=&quot;Super goofy image of Argent YELLING as he does an Atlas ball squat, lifting up a gorgeously rendered, comically huge golden boulder&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Getting this piece so early into Art Fight was fucking hilarious. It definitely set a mood. I’m infinitely amused and delighted :3 &lt;a href=&quot;https://artfight.net/attack/9239141.lift-gold&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; &lt;script type=&quot;module&quot; src=&quot;/opt/build/repo/src/components/Accordion/Accordion.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;h3 id=&quot;7-raca-rumrazza&quot;&gt;7. Raca Rumrazza&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Raca%20Rumrazza.DBgizLdf_Z1dro12.webp&quot; alt=&quot;Halfbody of anthro yellow lizard with grey face, a cowboy hat, and a cybernetic right arm. He&apos;s actively loading a revolver one round at a time, while smoking a cigarette.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;A revenge piece for the undisputed &lt;em&gt;raddest&lt;/em&gt; Argent piece I got this year…! I saw this super cool cyborg scalie with &lt;em&gt;zero&lt;/em&gt; attacks and knew I had to break that terrible trend &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/triumph.CPOicu5S_Z1yoa4w.webp&quot; alt=&quot;triumph emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Had a lot of fun with this piece though I did spend way too much time researching revolvers and getting the pose right…worked out in the end though!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://bsky.app/profile/hammondaloo.bsky.social&quot; class=&quot;external&quot;&gt;Hammond&lt;/a&gt; has a ton of cool characters and he popped the fuck off with Art Fight this year. And not just because he attacked me with &lt;em&gt;TWO&lt;/em&gt; pieces this year…! Scoundrel!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lizardiness&lt;/li&gt;
&lt;li&gt;Coloring&lt;/li&gt;
&lt;li&gt;Revolver&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pose is a bit stiff&lt;/li&gt;
&lt;li&gt;BG way too boring&lt;/li&gt;
&lt;li&gt;Hands feel funky&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Revenge for Hammond’s attacks! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;flex flex-col&quot;&gt;&lt;div class=&quot;flex gap-2 my-4 text-center items-center justify-center prose-p:m-0 prose-figure:m-0 w-full&quot;&gt;&lt;div class=&quot;max-w-[47%] flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/3fK2WUEkpRdrStGMAbeFzYCrUFXiL1g7xU04itxhs0vWIVnenF4tJhhc1nnS.png?t=1751548957&quot; alt=&quot;Extremely saturated, colorful Argent doing sick skateboard tricks!&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I’m astounded by how cool Argent looks with 90s era highlighter bleed color exposure lmao! &lt;a href=&quot;https://artfight.net/attack/9348543.sick-as-hell&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;max-w-[47%] prose-p:m-0 prose-figure:m-0 flex flex-col&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/SS61CPz9vvFT2xgFVZ6m1g6N77bPnVWQJvxVkTmYWr0Og1r9GNWixkxrqlCt.png?t=1753838182&quot; alt=&quot;My red and gold bird boy Dio looking annoyed at whomever is wasting his time&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I can’t believe he attacked me &lt;em&gt;again&lt;/em&gt; barely after I caught my breath…Grateful that Dio got some attention :3 &lt;a href=&quot;https://artfight.net/attack/12522527.over-it&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;8-sammy&quot;&gt;8. Sammy&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Sammy.BHAcZm6D_ZxJhzP.webp&quot; alt=&quot;Navy blue and orange-yellow Protogen character headshot&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;I spent a lot of Art Fight this season searching for cool Protogen characters to attack, and honestly really struggled. Fortunately &lt;a href=&quot;https://artfight.net/~Genziao&quot; class=&quot;external&quot;&gt;Genziao’s&lt;/a&gt; Sammy character managed to break through the fog and offer me something really fun to draw!&lt;/p&gt;
&lt;p&gt;I don’t know why but I gravitated towards a fancy headshot this time. And I’m most happy about how great it looks from a reasonable distance. Up close there’s a lot of roughness…but it works! :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cleanness of final piece&lt;/li&gt;
&lt;li&gt;Coloring and blending&lt;/li&gt;
&lt;li&gt;Tasteful background and headshot crop&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Glassiness of Protogen mask&lt;/li&gt;
&lt;li&gt;Hair color, texture&lt;/li&gt;
&lt;li&gt;Lineart cleanliness&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Genziao’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/hX7AAXC4FUVVhRCkjxXDSAjYJmG14F51qB0rrty1rstAnkOwQfyFstvTEbb7.jpeg?t=1753489602&quot; alt=&quot;Aesthetic silly headshot of my protogen, Ristretto, throwing a peace sign and smiling&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;My precious beautiful little silly guy Ristretto…Genziao responded with this insanely quickly and yet it’s so quality! Powerful…&lt;a href=&quot;https://artfight.net/attack/12182614.ristretto&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;9-sarc&quot;&gt;9. Sarc&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Sarc.Df9jGOXY_Z1PO697.webp&quot; alt=&quot;Two overly simplified chibi representations of Argent (anthro cobra male) and Sarc (grey female kobold with a huge head crest)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2863&quot; height=&quot;3057&quot;&gt;&lt;/p&gt;
&lt;p&gt;I feel a little bad because I was drawing this literally across the table from &lt;a href=&quot;https://bsky.app/profile/llllsarcllll.bsky.social&quot; class=&quot;external&quot;&gt;Sarc&lt;/a&gt;, who themselves was finishing an &lt;em&gt;incredible&lt;/em&gt; attack against me…It’s goofy, it’s silly, it’s fun, and still I feel like I should’ve done something higher quality for a friend like her.&lt;br/&gt;
But! It’s still art, and unlike random folks on Art Fight it’s always socially acceptable to draw for your friends :3&lt;/p&gt;
&lt;p&gt;Anyways, not a lot to say about this shitpost piece but I had a lot of fun drawing Sarc as a wretched little creature :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Shitposting style&lt;/li&gt;
&lt;li&gt;Tasteful Tits&lt;/li&gt;
&lt;li&gt;Goofy poses&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement: &lt;strong&gt;N/A&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Sarc’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/3zQl33T6Xrei2W0IsSi0KpJqzd4TLaitXnZoMd3lZo7ZsXogKcUFrh8hEXAh.jpeg?t=1753484378&quot; alt=&quot;Incredibly physical depiction of Argent doing cable-based exercises in 3 different poses in front of a Vaporwave background screenshot from one of my own websites&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Just speechless. Even still. Each pose is so powerful and sensual. I’m utterly flattered. &lt;a href=&quot;https://artfight.net/attack/12176684.so-anyway-i-started-blastin&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;10-donnie&quot;&gt;10. Donnie&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Donny.BlfC3-d8_2rUwHe.webp&quot; alt=&quot;Retail clothing scene with Argent and Donny (snakes) in the foreground. Argent clearly struggling to fit in a hoodie. In the background another snake, Cy, struggles to stuff his hood through the hoodie hole&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;I knew at least once I had to draw a #SnakeSquad pic, so I chose &lt;a href=&quot;https://bsky.app/profile/komodonnie04.bsky.social&quot; class=&quot;external&quot;&gt;Donnie’s&lt;/a&gt; namesake snake, as well as &lt;a href=&quot;https://bsky.app/profile/featheredsnek.bsky.social&quot; class=&quot;external&quot;&gt;Coatl’s&lt;/a&gt; Cy!&lt;/p&gt;
&lt;p&gt;Donnie is drawn with such cool, fresh fashion that the idea of “Argent isn’t fashionable” immediately came to mind. Not long after I got the “Cobra hoods would make hoodies tricky” idea and the rest just came outta that.&lt;/p&gt;
&lt;p&gt;Very pleased with this one! Good art skill but also quick and cute with a pretty functional background scene to boot :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Background quality + efficacy&lt;/li&gt;
&lt;li&gt;Expressions/posing&lt;/li&gt;
&lt;li&gt;Overall art quality&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pushing goofy poses/expressions further&lt;/li&gt;
&lt;li&gt;Clothing details to depict stretch and bad-fit&lt;/li&gt;
&lt;li&gt;More snakes&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;11-raspberry&quot;&gt;11. Raspberry&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Raspberry.BNZcAYwp_Z1e9U83.webp&quot; alt=&quot;Vague kelp forest background. Foreground is a goofy ribbon eel, mega-lengthened for comedic effect.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;Every year I draw something for my &lt;a href=&quot;https://bsky.app/profile/tropicoastal.bsky.social&quot; class=&quot;external&quot;&gt;lovely girlfriend&lt;/a&gt; because 1. I love her but 2. and most importantly, she has &lt;em&gt;fantastic&lt;/em&gt; characters.&lt;/p&gt;
&lt;p&gt;Raspberry is one of my absolute favorites. He’s just a silly little guy!! And I wanted to be &lt;em&gt;very&lt;/em&gt; silly with him. So I sat at my favorite bike + coffee shop and banged out this funky piece.&lt;/p&gt;
&lt;p&gt;I’m really quite pleased with how well I illustrated his curvy ribbony body, especially with keeping the colors accurate!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;His cute face&lt;/li&gt;
&lt;li&gt;The ribbon shape, and curvature&lt;/li&gt;
&lt;li&gt;Those funky lil legs&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Better “kelp forest”&lt;/li&gt;
&lt;li&gt;Goofier, cuter face…&lt;/li&gt;
&lt;li&gt;Smoother coloring + shading&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;12-ott-hiemnal-valentine&quot;&gt;12. Ott Hiemnal Valentine&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/OttHimnel.jbvc789r_ZDnntk.webp&quot; alt=&quot;Painterly portrait of an abstract Dragon god with a floating laserdisk halo.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;Probably my &lt;em&gt;magnus opum&lt;/em&gt; for this year. I spent probably close to 8 hours total on this piece across 2 weeks. Ott’s design is just incredibly fun and cool, and I felt inspired to really push my painting skills.&lt;/p&gt;
&lt;p&gt;This piece is actually my first attempt at a value-painting attempt. Everything painted in greyscale until layering color overtop. Very grateful to my friend &lt;a href=&quot;https://bsky.app/profile/koboldorion.bsky.social&quot; class=&quot;external&quot;&gt;Orion&lt;/a&gt; for offering their assistance. I would not have pushed my values nearly far enough without their input!&lt;/p&gt;
&lt;p&gt;Also just grateful for &lt;a href=&quot;https://bsky.app/profile/scrumptiousbean.bsky.social&quot; class=&quot;external&quot;&gt;Bean’s&lt;/a&gt; insane OC he is SO COOL augh. Inspiring just looking at him!!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First values-painting attempt!&lt;/li&gt;
&lt;li&gt;The hands&lt;/li&gt;
&lt;li&gt;The final product, esp with framing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;More confident shapes&lt;/li&gt;
&lt;li&gt;Darker darks!&lt;/li&gt;
&lt;li&gt;Planning/Posing&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;13-noodle--bean&quot;&gt;13. Noodle &amp;amp; Bean&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Noodle_Bean.-pCzMfYC_ZKjBf7.webp&quot; alt=&quot;Very simplified bean cat and noodle snake in 4 varied Chicago tourist vignettes: Sears tower, Chicago hotdog, The Bean, and riding the L&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2732&quot; height=&quot;2048&quot;&gt;&lt;/p&gt;
&lt;p&gt;I found &lt;a href=&quot;https://bsky.app/profile/casualbean.bsky.social&quot; class=&quot;external&quot;&gt;Casual Bean’s&lt;/a&gt; delightful OC collection, thanks to my friend Pinecone who drew Noodle earlier. After the painting effort of Ott Hiemnal, I really wanted something goofy and fun!&lt;/p&gt;
&lt;p&gt;The Chicago theme kinda fell into place, I think this piece started just as a cute napping piece, but the thought:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;…bean…bean…Chicago..Bean…Chicago Bean!!!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;hit me like a truck and I had to go with it lol. Just a lot of goofy fun with this one :3&lt;/p&gt;
&lt;p&gt;Oh and yes I &lt;em&gt;did&lt;/em&gt; figure out how to import the special ligatures fontface for the Chicago Star (just like the rest of my website) as well as the official Big Shoulders typeface just for that title card haha.&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The 4 scene ideas&lt;/li&gt;
&lt;li&gt;Simplified Sears Tower&lt;/li&gt;
&lt;li&gt;Letting loose and not over-engineering&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;More confident simplified shapes&lt;/li&gt;
&lt;li&gt;Goofier expressions and poses&lt;/li&gt;
&lt;li&gt;Better hotdog drawing skills&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;14-diamondback&quot;&gt;14. Diamondback&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Diamondback.DKMvGE4m_oBuBl.webp&quot; alt=&quot;A super cool, buff opossum anthro character in green mask and wrestler costume leans forwards toward the viewer with a cheeky grin. An inset at the top left implies that the viewer is a knocked-out Argent.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;I just &lt;em&gt;had&lt;/em&gt; to draw Diamondback. &lt;a href=&quot;https://yiff.life/@goodjobrammy&quot; class=&quot;external&quot;&gt;Ed&lt;/a&gt; is a very cool friend and has even cooler characters! And obviously if Argent was gonna wrestle any of them, he’d surely lose.&lt;/p&gt;
&lt;p&gt;For this piece it was just so important that I drew Diamondback looking Cool Buff and “Wrestler”. I quickly decided on a challenging “leaning towards the viewer” type of extreme angle…and while I didn’t nail it, I think I did OK.&lt;/p&gt;
&lt;p&gt;Also pretty pleased with the expression! I very gratefully had a nice reference from a previous attacker to help me with the face…again, non-scalie furries are a weakness!&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Overall vibe/energy&lt;/li&gt;
&lt;li&gt;Hair and ears&lt;/li&gt;
&lt;li&gt;Shading&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pushing the pose&lt;/li&gt;
&lt;li&gt;Better face/head shape&lt;/li&gt;
&lt;li&gt;Outfit textures/lighting&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Ed’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/Cci7JlPgxAW9ZvTNnSTTg4EFv5CvONceWMqyXcRmLP32e70JuxiGW0YUFQbe.jpg?t=1754022507&quot; alt=&quot;Black and white drawing of Argent and Diamondback at a coffee shop--Argent is waving to someone off screen, Di is covetously measuring Argent&apos;s bicep with tailor&apos;s tape&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;I can’t believe Ed had time to bash out this incredible revenge…but also one so good?? The musculature is crazy good and the energy of Di is hilarious &lt;a href=&quot;https://artfight.net/attack/12776362.coffee-after&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h3 id=&quot;15-ruheg&quot;&gt;15. Ruheg&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/Ruheg.Cq3C2yXO_Z2smd1m.webp&quot; alt=&quot;Full-body piece featuring a cool, buff, pink Naga snake. He&apos;s simply posing and flashing a peace sign with his fingers to the camera.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2732&quot;&gt;&lt;/p&gt;
&lt;p&gt;My final piece this year! Finished with 2 hours to spare, I didn’t think I’d have enough time to polish this as much as I did but I guess when I’m drawing scalie characters it’s a lot easier to get comfortable haha.&lt;/p&gt;
&lt;p&gt;(Nearly) every year &lt;a href=&quot;https://bsky.app/profile/sixinchfinch.bsky.social&quot; class=&quot;external&quot;&gt;Somite&lt;/a&gt; and I exchange blows on Art Fight, and I contributed to it at the eleventh hour here with something just kinda fun and &lt;em&gt;beefy&lt;/em&gt; for my own sake haha.&lt;/p&gt;
&lt;p&gt;Just had fun rendering big muscles! And the hand turned out real nice…glad I thought to add some fingerprint stylization at the end because it really adds a lot :3&lt;/p&gt;
&lt;p&gt;Proud of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Anatomy&lt;/li&gt;
&lt;li&gt;HShading&lt;/li&gt;
&lt;li&gt;Snakiness&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Room for improvement:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Scale textures&lt;/li&gt;
&lt;li&gt;Less obvious “didn’t have time to draw a 2nd hand” pose&lt;/li&gt;
&lt;li&gt;Whatever is going on below the waist of a naga &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/thinking.DseHzPjq_IvTQ2.webp&quot; alt=&quot;thinking emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;@container/accordion accordion flex flex-col my-5 border-l-8 border-yellow&quot;&gt; &lt;details data-accordion-item class=&quot;ac-accordion-item bg-[#510505] p-4&quot; data-astro-cid-znzmc3bl&gt; &lt;summary class=&quot;ac-accordion-item-title&quot; data-astro-cid-znzmc3bl&gt; &lt;span data-astro-cid-znzmc3bl&gt;&lt;span&gt;Somite’s Revenge! ⚔️&lt;/span&gt;&lt;/span&gt; &lt;img src=&quot;/_astro/arrow_right.Nodnnj9J_f8DGd.webp&quot; alt=&quot;arrow&quot; data-astro-cid-znzmc3bl=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;max-w-6 not-prose transform duration-500 ease arrow&quot;&gt; &lt;/summary&gt; &lt;div class=&quot;ac-accordion-item-content&quot; data-astro-cid-znzmc3bl&gt; &lt;div&gt;&lt;div class=&quot;max-w-[95%] m-auto gap-2 my-4 prose-p:m-0 prose-figure:m-0&quot;&gt;&lt;div&gt;&lt;p&gt;&lt;img src=&quot;https://images.artfight.net/attack/tPwqZIV5APyrs2C7Kj3Cltv1m0ITgJVnxoNrtUYOVTPqza8MTYDt7bBGOL5d.png?t=1754071205&quot; alt=&quot;Daneer, an anthro male deer with golden antlers, teeing off in golf swing, prominent booty facing the camera&quot;/&gt;&lt;/p&gt;&lt;/div&gt;&lt;figure class=&quot;text-center text-sm&quot;&gt;&lt;span&gt;Absolutely unbelievable that Somite had time to put this out. The timestamp literally lists it as 5 seconds &lt;em&gt;past&lt;/em&gt; the end of the event…absolute madlad. Incredible pose and quality for that time!! So delighted to get a last-minute Daneer piece :3 &lt;a href=&quot;https://artfight.net/attack/12913473.revenge&quot;&gt;Artfight Link&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt; 
&lt;h2 id=&quot;closing-thoughts&quot;&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;Due to life events but especially development efforts for *this website*, I hadn’t done much drawing in the past year…Once July started creeping up I threw all my chips into an explosive Art Fight revival moment for myself, and I’m pretty pleased with the results!&lt;/p&gt;
&lt;p&gt;Art fight means a lot to me. This was my 8th year, and I’m grateful for the site and the folks who work hard to keep the event going. It’s become a kind of time capsule of my own interests and artistic development, and that’s really neat.&lt;/p&gt;
&lt;p&gt;But most of all I’m grateful to all my wonderful friends and future-friends who made it another fun year of back-to-back attacks against one another :3&lt;/p&gt;
&lt;p&gt;I haven’t drawn since the event ended, but I’m still feeling that drive. I want to draw more! Improve my painting, and be more involved with the furry community in general—through art and otherwise! &lt;span class=&quot;inline-block w-8 not-prose -mb-1&quot;&gt;&lt;img src=&quot;/_astro/smile.BCuIwjhV_ZhdCcP.webp&quot; alt=&quot;smile emoji&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;div class=&quot;link-preview link-preview--no-metadata&quot; data-astro-cid-ztfdmrby&gt;&lt;a href=&quot;https://artfight.net/attack/7308667.chicago-squad&quot; data-astro-cid-ztfdmrby&gt;https://artfight.net/attack/7308667.chicago-squad&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;div class=&quot;link-preview link-preview--no-metadata&quot; data-astro-cid-ztfdmrby&gt;&lt;a href=&quot;https://artfight.net/attack/7581199.nymeria&quot; data-astro-cid-ztfdmrby&gt;https://artfight.net/attack/7581199.nymeria&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;div class=&quot;link-preview link-preview--no-metadata&quot; data-astro-cid-ztfdmrby&gt;&lt;a href=&quot;https://artfight.net/event/11&quot; data-astro-cid-ztfdmrby&gt;https://artfight.net/event/11&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Astro Overall 🚀</title><link>https://cobra.monster/blog/2025-06-14_astro-overall</link><guid isPermaLink="true">https://cobra.monster/blog/2025-06-14_astro-overall</guid><description>I&apos;m 6 months and 2-websites deep into using Astro. How is it?</description><pubDate>Sat, 14 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;With so many javascript frameworks out there that the joke about it has become itself a joke, does this one stand out? I think so! It has a strong design philosophy and doesn’t deviate from it.&lt;/p&gt;
&lt;h1 id=&quot;what-is-astro&quot;&gt;What is Astro?&lt;/h1&gt;
&lt;p&gt;From their website,&lt;/p&gt;
&lt;blockquote class=&quot;flex italic font-serif font-light relative my-10 border-slate-200 py-10&quot; data-astro-cid-jcog7qdd&gt; &lt;div class=&quot;ml-20 text-3xl font-serif italic&quot; data-astro-cid-jcog7qdd&gt; &lt;p class=&quot;slotContent&quot; data-astro-cid-jcog7qdd&gt; &lt;p&gt;Astro is a JavaScript web framework optimized for building fast, content-driven websites.&lt;/p&gt; &lt;/p&gt; &lt;p class=&quot;slotContent text-base&quot; data-astro-cid-jcog7qdd&gt;
–&lt;a href=&quot;https://astro.build/&quot;&gt;Astro Docs&lt;/a&gt; &lt;/p&gt; &lt;/div&gt; &lt;/blockquote&gt;
&lt;p&gt;Which is both uselessly vague and also honest in that the best parts take a bit more explanation than a pithy quote can provide. But here’s my attempt:&lt;/p&gt;
&lt;blockquote class=&quot;flex italic font-serif font-light relative my-10 border-slate-200 py-10&quot; data-astro-cid-jcog7qdd&gt; &lt;div class=&quot;ml-20 text-3xl font-serif italic&quot; data-astro-cid-jcog7qdd&gt; &lt;p class=&quot;slotContent&quot; data-astro-cid-jcog7qdd&gt; &lt;p&gt;Astro is a “Static-Site Generator Framework” that excels in creating simple, speedy HTML/CSS-only websites in a modern, comfortable Frontend Developer atmosphere.&lt;/p&gt; &lt;/p&gt; &lt;p class=&quot;slotContent text-base&quot; data-astro-cid-jcog7qdd&gt;
–&lt;span&gt;Me UwU&lt;/span&gt; &lt;/p&gt; &lt;/div&gt; &lt;/blockquote&gt;
&lt;p&gt;In my opinion, the 3 best features of Astro are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;“Zero Javascript, By Default”&lt;/li&gt;
&lt;li&gt;Content Collections&lt;/li&gt;
&lt;li&gt;Astro Islands Architecture&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;zero-javascript-kind-of&quot;&gt;Zero Javascript (kind of)&lt;/h2&gt;
&lt;p&gt;Astro sites are built with &lt;code&gt;.Astro&lt;/code&gt; files, which are a combination of &lt;code&gt;tsx&lt;/code&gt; and Markdown. In the &lt;a href=&quot;https://dev.to/dailydevtips1/what-exactly-is-frontmatter-123g&quot; class=&quot;external&quot;&gt;frontmatter&lt;/a&gt; section you’re able to import components, create interfaces, handle Props, etc. while the rest of the file writes like a &lt;code&gt;tsx&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;The only thing shipped though is plain ol’ HTML and CSS. If you want to ship javascript to the client, it must be contained in &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;
&lt;p&gt;What this means is you get comfy benefits of writing in a modern React-like &lt;code&gt;tsx&lt;/code&gt; file, but don’t actually ship bulky React files to the client. Websites load faster, but you also can’t build fully “reactive” sites as a consequence.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Grateful that I can still use Tailwind lmao&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;Example Astro file: Button.astro&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;color:#EED49F;font-style:italic&quot;&gt; Props&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  url&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; url &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Astro&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;font-medium text-lg  w-max&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;border-yellow hover:bg-yellow rounded-md border-2 hover:text-black p-2 hover:cursor-pointer&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;slot&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;---
interface Props {
  url: string;
}
const { url } = Astro.props;
---

&lt;a class:list={[&amp;#34;font-medium text-lg  w-max&amp;#34;]} href={url}&gt;
  &lt;button class:list={[&amp;#34;border-yellow hover:bg-yellow rounded-md border-2 hover:text-black p-2 hover:cursor-pointer&amp;#34;]}&gt;
    &lt;slot /&gt;
  &lt;/button&gt;
&lt;/a&gt;&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h3 id=&quot;a-bunch-of-page-links-in-a-react-app-trench-coat&quot;&gt;A Bunch of Page Links in a React-App Trench Coat&lt;/h3&gt;
&lt;p&gt;As a React developer, Astro means no hooks or stateful management. No hot-reloading of pages in the “single-page application” style I’m used to. Astro forces you to treat every page as a static entity; if you want to change what the end-user is looking at, they must navigate to a new page.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/thinking.DseHzPjq_IvTQ2.webp&quot; alt=&quot;thinking.DseHzPjq.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-16&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Astro compensates for this with &lt;a href=&quot;https://docs.astro.build/en/guides/view-transitions/&quot; class=&quot;external&quot;&gt;View Transitions&lt;/a&gt; support, which has made page navigation so seamless, many of my friends/testers didn’t even notice when buttons were actually navigating their browser.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;I love this. I genuinely love React hooks and state, but working without it…and trying to emulate some interactivity anyways has been a very engaging puzzle-solving process.&lt;br/&gt;
For instance, on the &lt;a href=&quot;/books&quot;&gt;Books Page&lt;/a&gt; I created the “Default View” and “Compact View” tabs with these limitations. So far as any casual end-user can tell, they’re just tabs like any other more “interactive” site, but they’re literally just styled tabs! The current view’s tab is styled to be prominent, the other is dim. Clicking the dim one navigates to a new page. Astro’s &lt;strong&gt;View Transitions&lt;/strong&gt; (usually) transition smoothly to the other view’s equally flat, simple, HTML/CSS page so quickly that it feels like you didn’t navigate at all. It’s very clever!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/DefaultView_6.14.25.DVGNhIq6_Z1PEX0I.webp&quot; alt=&quot;Default View Books Page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;433&quot; height=&quot;354&quot;&gt;&lt;em&gt;Screenshot closeup of the “tabs”&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;content-collections-and-routing&quot;&gt;Content Collections and Routing&lt;/h2&gt;
&lt;p&gt;Routing with Astro is dead simple: any HTML file placed in the mandatory &lt;em&gt;pages/&lt;/em&gt; directory becomes a route. There is a way to make this dynamic…my blog posts are automatically routed just by virtue of where I place the files. But all of the main pages of my site here are explicitly routed through the &lt;code&gt;pages/&lt;/code&gt; file structure.&lt;/p&gt;
&lt;p&gt;This isn’t something unique to Astro, but as part of a static-site generator design philosophy it makes a lot of sense, especially if you leverage Astro’s &lt;a href=&quot;https://docs.astro.build/en/guides/content-collections/&quot; class=&quot;external&quot;&gt;Content Collections&lt;/a&gt; feature.&lt;/p&gt;
&lt;h3 id=&quot;collections&quot;&gt;Collections&lt;/h3&gt;
&lt;p&gt;In brief, collections let you programmatically create + route new pages on your site as you create more content following predetermined schemas.&lt;/p&gt;
&lt;p&gt;Blog posts (like this one) are explicitly one of the best use-cases. You specify a collection via a zod schema object in the &lt;code&gt;config.ts&lt;/code&gt; file within the mandatory &lt;code&gt;content/&lt;/code&gt; directory.&lt;br/&gt;
Properties specified here are set in the frontmatter of the Markdown file, and then these can be accessed within &lt;code&gt;.Astro&lt;/code&gt; files to modify behavior, style page templates…etc.&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;My blog post config schema&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; posts &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; defineCollection&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;content&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;  schema&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; ({&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt; image&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; })&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      title&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      subtitle&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      date&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      tags&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;reference&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;tags&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;optional&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      blogExclude&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;boolean&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;optional&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;      emoji&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; z&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;preprocess&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EE99A0;font-style:italic&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; `@assets/mutantEmoji/&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt; image&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#8AADF4;font-style:italic&quot;&gt;optional&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;const posts = defineCollection({
  type: &amp;#34;content&amp;#34;,
  schema: ({ image }) =&gt;
    z.object({
      title: z.string(),
      subtitle: z.string(),
      date: z.date(),
      tags: z.array(reference(&amp;#34;tags&amp;#34;)).optional(),
      blogExclude: z.boolean().optional(),
      emoji: z.preprocess((val) =&gt; `@assets/mutantEmoji/${val}`, image()).optional(),
    }),
});&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;In the end, when I want to make a new blog post, I just add a new markdown file to the &lt;code&gt;content/posts/&lt;/code&gt; directory, and fill the frontmatter fields with the required information (title, subtitle, tags, etc.). That file automatically has a new unique route on my site, and the page is formatted automatically by filling in the templates I created in my Blog Layout page.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/relief.DdzFrj6M_2jJmE5.webp&quot; alt=&quot;relief.DdzFrj6M.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;It is a LOT of work upfront nailing down your schemas and especially building your template blog/content-display page…but my god it is so convenient and satisfying to use.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h3 id=&quot;routing-complexity&quot;&gt;Routing Complexity&lt;/h3&gt;
&lt;p&gt;I won’t get into depth here&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, but the dynamic routing capabilities of Astro get kind of nutty. Routing is dead simple…until it isn’t.&lt;/p&gt;
&lt;p&gt;In my &lt;a href=&quot;/books&quot;&gt;Books Page&lt;/a&gt;, it looks like there are only 2 pages. The list page, and then the individual book-post page. But because all interactivity is just routing, it means that to have &lt;strong&gt;2 Views&lt;/strong&gt; and &lt;strong&gt;Tag Filtering&lt;/strong&gt;, I need a dynamic folder for the &lt;code&gt;[view]&lt;/code&gt; side of things, and then a further nested &lt;code&gt;[...tags]&lt;/code&gt; catch for filtering by tags on top of the views (not to mention an &lt;code&gt;og/&lt;/code&gt; directory for generating custom open-graph images).&lt;br/&gt;
It works! Really well, in fact. But figuring this out took a long time and is a part of Astro I’d push a new user away from until they get more comfortable with routing overall.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/bookDirectory_6.14.25.D3PafOXO_2hlaDR.webp&quot; alt=&quot;Book Directory&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;361&quot; height=&quot;275&quot;&gt;&lt;em&gt;A lot of structure just to display a list of books.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;astro-islands&quot;&gt;Astro Islands&lt;/h2&gt;
&lt;p&gt;This is probably the most important but least-interesting to me, personally. In short, you &lt;em&gt;can&lt;/em&gt; make actual React, Svelte, Solid (etc.) components in your Astro app. The idea is “Islands of Interactivity” or more colloquially, “selective hydration”.&lt;/p&gt;
&lt;p&gt;I’ll skip ahead to an example: the only significant Island I’ve made here is my &lt;strong&gt;Accordion component&lt;/strong&gt;. It was too complicated &lt;del&gt;(aka I couldn’t be bothered)&lt;/del&gt; trying to figure out how to manage a performant, good-looking accordion feature in my site with just &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag javascript. So I made it in React instead. When I import it into my Astro (or Markdown) files I have to specify whether it’s loaded immediately, or on-view…etc.&lt;/p&gt;
&lt;p&gt;It’s really cool! Makes Astro flexible, and I think so long as you don’t over-do it and only rely on it when it feels like the best solution, then it’s just great to have.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/yikes.CiuleE7A_2hvr8o.webp&quot; alt=&quot;yikes.CiuleE7A.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;I’m just imagining new React Developer “useState hell” but with Astro Islands…&lt;/p&gt; &lt;/blockquote&gt;
&lt;h1 id=&quot;opinions-on-astro&quot;&gt;Opinions on Astro&lt;/h1&gt;
&lt;p&gt;It’s probably pretty obvious that I’m a pretty big fan of Astro overall. For brevity’s sake, here are my highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I get to design webpages like I’m doing React development (conditional rendering my beloved)&lt;/li&gt;
&lt;li&gt;I don’t have to think about routing (with rare exceptions)&lt;/li&gt;
&lt;li&gt;Explicitly encourages component architecture-driven design and building templates&lt;/li&gt;
&lt;li&gt;My sites load and run so quick and smooth that my friends can’t even tell they’re changing pages&lt;/li&gt;
&lt;li&gt;It makes using Markdown files within my broader site easy and intuitive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I really like Astro! It fits my webdev personality pretty nicely, and it’s the perfect combination of open-ended and opinionated for my purposes.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;eyy.BgBs6cHh.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;I was going to do a “Pros/Cons” thing but all of the Cons are pretty much explicitly outlined by Astro’s overall premise…I really didn’t find enough jank to feel like there are Cons that don’t boil down to “you shouldn’t be using Astro to begin with.”&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2 id=&quot;my-biggest-astro-struggle-so-far&quot;&gt;My Biggest Astro Struggle So Far&lt;/h2&gt;
&lt;p&gt;Not a negative (as I enjoy solving a problem like this), but it took a lot more work than I expected: Open Graph image generation. I wanted so badly to be able to generate custom images with text on them for my blog (without AI).&lt;br/&gt;
Spoilers: I did it! But it was really tricky.&lt;/p&gt;
&lt;p&gt;I’ll go into more detail in a future blog post, but suffice to say it took a lot of googling and ended with me having to design the OG image template as embedded HTML within a React file. Awful! But like, fine, you know? And in the end I’m able to share my blog posts with unique, neat OG preview images without any extra work :3&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/ogImage_6.14.25.iBZ67E2A_Z1Te1X1.webp&quot; alt=&quot;Open Graph image for this blog post&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;630&quot;&gt;&lt;em&gt;The OG image for this blog post! Generated before even posting the new blog post&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;who-should-use-it&quot;&gt;Who should use it?&lt;/h2&gt;
&lt;p&gt;Most folks could probably use and enjoy Astro, but I will say that there are plenty of other simpler static-site generators such as &lt;a href=&quot;https://www.11ty.dev/&quot; class=&quot;external&quot;&gt;Eleventy&lt;/a&gt;. If you literally just want to build a blog, I think Astro out of the box is overkill. Or at the very least, a bit over-complicated.&lt;/p&gt;
&lt;p&gt;It’s very easy to say that if you enjoy webdev and want both full control &lt;em&gt;and&lt;/em&gt; an enjoyable framework to play with, Astro is a lot of fun. I have run into very few roadblocks caused directly by either Astro’s design philosophy or build quality.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;An attempt was made. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Sardine Summer, Baybee 🌞 🐟</title><link>https://cobra.monster/blog/2025-06-05_sardine-summer</link><guid isPermaLink="true">https://cobra.monster/blog/2025-06-05_sardine-summer</guid><description>It&apos;s Summer in Chicago and idk how but I&apos;m gonna celebrate and make some plans 😎</description><pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For the first time in a very long time, I feel like I’ve got the whole summer ahead of me, mine for the taking. And I’m not sure what to do with it!&lt;/p&gt;
&lt;h1 id=&quot;summers-of-yore&quot;&gt;Summers of Yore&lt;/h1&gt;
&lt;p&gt;The last few years have kind of sucked for various reasons, or have just been busy in Not Fun ways.&lt;br/&gt;
Last year I spent most of June visiting family, and even had a weekend with friends out on the lake. It was a great time, but I spent a &lt;em&gt;full month&lt;/em&gt; away from Chicago during what I quickly learned is the BEST time to be in Chicago 🙄&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/lakeHouse_6.5.25.DirkJe6K_ZA05yE.webp&quot; alt=&quot;Lake and dock photo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;5712&quot; height=&quot;4284&quot;&gt;
&lt;em&gt;To be fair, it’s a pretty good time to be at a lake too.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&quot;the-game-plan&quot;&gt;The Game Plan&lt;/h1&gt;
&lt;p&gt;On the docket for this summer so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🦊 Anthrocon 2025&lt;/li&gt;
&lt;li&gt;🏟️ See a Cubs game (I haven’t been to a baseball game since I lived in St. Louis a decade ago!)&lt;/li&gt;
&lt;li&gt;🏙️ Architecture riverboat tour with parents&lt;/li&gt;
&lt;li&gt;🍗 Bristol Ren Fair&lt;/li&gt;
&lt;li&gt;🚴‍♂️ Bike rides (especially Critical Mass)&lt;/li&gt;
&lt;li&gt;🎨 Art Fight (not really a traditional Summer Activity™ but it’s always during July…)&lt;/li&gt;
&lt;li&gt;🏳️‍🌈 Pride Parade!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;a-bit-of-a-reset&quot;&gt;A bit of a reset&lt;/h2&gt;
&lt;p&gt;Most of what I’ll be doing though is relaxing. With my job search and my Spring spent working on this (and other) websites, I haven’t had much time for my other hobbies. I haven’t drawn a thing a since December,&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; and I’m very behind on my reading.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hopefully soon after posting this blog post, the new &lt;a href=&quot;/books/default&quot;&gt;Books section&lt;/a&gt; of my website will be done :3c&lt;br/&gt;
Be sure to check it out if you want to see what I’m reading, and what I’ve read!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m also hoping to grind out the last 5% of body fat from my current cut diet. As of time of writing I’m at ~17% and the goal is 12% by the end of August. Probably can do it sooner! But we’ll see…cutting like this is so difficult. Gonna have to resist a lot of good summer cookout food 🥲 &lt;del&gt;Maybe I should give Sardine Summer a shot huh&lt;/del&gt;&lt;/p&gt;
&lt;h2 id=&quot;argent-real&quot;&gt;Argent Real&lt;/h2&gt;
&lt;p&gt;With a goal of “finished by Anthrocon”, probably the coolest thing I’m doing this summer is turning into IRL Argent 👀&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/argentReal_6.5.25.DjyV9sIc_1KTAWH.webp&quot; alt=&quot;Partially-completed Argent fursuit head&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4284&quot; height=&quot;5712&quot;&gt;
&lt;em&gt;Courtesy of the gf! Argent is her 3rd fursuit head she’s made, and I think she’s doing an incredible job :3&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Just look at those shapes!! That’s SNAKE!! That’s me! Wrwow.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/uwu.CMyTtta8_EG5OJ.webp&quot; alt=&quot;uwu.CMyTtta8.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;Thanks for reading! If you have any cool Chicago summer activity ideas please &lt;a href=&quot;/links#socials&quot;&gt;let me know 👀…&lt;/a&gt; I’m still new enough to the city that I know I haven’t even scratched the surface here.&lt;/p&gt; &lt;/blockquote&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Okay that’s &lt;a href=&quot;https://bsky.app/profile/cobra.monster/post/3lpmvp72ujc23&quot; class=&quot;external&quot;&gt;not quite true&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>I Made A Website</title><link>https://cobra.monster/blog/2025-04-03_i-made-a-website</link><guid isPermaLink="true">https://cobra.monster/blog/2025-04-03_i-made-a-website</guid><description>It&apos;s this one! You&apos;re reading on it!</description><pubDate>Sat, 05 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inspired by so many &lt;a href=&quot;/links#88x31&quot;&gt;amazing furry websites&lt;/a&gt;, I decided that my first big 2025 project would be to finally make a Proper Personal Website™.&lt;/p&gt;
&lt;h1 id=&quot;planningdevelopment&quot;&gt;Planning/Development&lt;/h1&gt;
&lt;p&gt;Honestly I did the worst thing possible and just started coding without actually designing. On top of that I picked the tech stack before really anything else haha. This was 100% a bad idea BUT it was still kinda fun.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The tech stack is just TailwindCSS, AstroJS and a tiny bit of React :3&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;astrojs&quot;&gt;AstroJS&lt;/h2&gt;
&lt;p&gt;Shoutout to my friend &lt;a href=&quot;https://bsky.app/profile/throudin.dev&quot; class=&quot;external&quot;&gt;Throudin&lt;/a&gt; for helping me lock in on &lt;a href=&quot;https://astro.build/&quot; class=&quot;external&quot;&gt;AstroJS&lt;/a&gt; for this site. I’d heard about it on Fireship’s pretty convincing &lt;a href=&quot;https://www.youtube.com/watch?v=dsTXcSeAZq8&amp;#38;pp=ygURZmlyZXNoaXAgaW8gYXN0cm8%3D&quot; class=&quot;external&quot;&gt;YouTube Video&lt;/a&gt; but Throudin helped me give it a real solid try, and it rocks. Ironically it probably made my “code first, design second” approach more accessible…contributing to the ineffeciency. But once I got going it was only good.&lt;/p&gt;
&lt;h3 id=&quot;everything-is-an-astro-file&quot;&gt;Everything is an Astro File&lt;/h3&gt;
&lt;p&gt;Similar to React, any file with rendered content was just an Astro file. Using &lt;a href=&quot;https://daily-dev-tips.com/posts/what-exactly-is-frontmatter/&quot; class=&quot;external&quot;&gt;Frontmatter&lt;/a&gt; for compile-time Javascript and importing components, then just JSX style code for the rest of the file. It reads pretty comfortably and writing it feels intuitive.&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure&gt;&lt;figcaption data-rehype-pretty-code-title data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;Error Page Component&lt;/figcaption&gt;&lt;pre style=&quot;background-color:#24273a;color:#cad3f5&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot;&gt;&lt;code data-language=&quot;jsx&quot; data-theme=&quot;catppuccin-macchiato&quot; style=&quot;display:grid&quot;&gt;&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Image &lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;astro:assets&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; argentWhine &lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;@assets/argent/stickers/babanasaur/whine.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;color:#EED49F;font-style:italic&quot;&gt; Props&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  subtitle&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;  goBack&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt; boolean&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#C6A0F6&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; title&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; subtitle&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; goBack &lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F5A97F&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt; Astro&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt; &lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;flex flex-col justify-center items-center h-full grow&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;text-9xl text-slate-200 font-black&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;text-6xl text-slate-200 font-black capitalize&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;subtitle&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#F5BDE6&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;argentWhine&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; alt&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;Argent Whine&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;max-w-64&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;a&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#EED49F&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#EED49F&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      &amp;quot;rounded-md text-slate-200 p-2 bg-redDarkest hover:cursor-pointer hover:bg-redDark ring-2 ring-yellow mt-5 text-3xl&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;      `&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;goBack&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;block&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt; &amp;quot;hidden&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;    ]&lt;/span&gt;&lt;span style=&quot;color:#939AB7&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#EED49F&quot;&gt;    href&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6DA95&quot;&gt;&amp;quot;/links&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#CAD3F5&quot;&gt;Need Some Directions?&amp;lt;/a&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;  &amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#8AADF4&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#8BD5CA&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;button type=&quot;button&quot; title=&quot;Copy code&quot; aria-label=&quot;Copy code&quot; data=&quot;---
import { Image } from &amp;#34;astro:assets&amp;#34;;

import argentWhine from &amp;#34;@assets/argent/stickers/babanasaur/whine.png&amp;#34;;

interface Props {
  title?: string;
  subtitle?: string;
  goBack?: boolean;
}

const { title, subtitle, goBack = false } = Astro.props;
---

&lt;div class=&amp;#34;flex flex-col justify-center items-center h-full grow&amp;#34;&gt;
  &lt;h1 class=&amp;#34;text-9xl text-slate-200 font-black&amp;#34;&gt;{title}&lt;/h1&gt;
  &lt;h2 class=&amp;#34;text-6xl text-slate-200 font-black capitalize&amp;#34;&gt;{subtitle}&lt;/h2&gt;
  &lt;Image src={argentWhine} alt=&amp;#34;Argent Whine&amp;#34; class=&amp;#34;max-w-64&amp;#34; /&gt;
  &lt;a
    class:list={[
      &amp;#34;rounded-md text-slate-200 p-2 bg-redDarkest hover:cursor-pointer hover:bg-redDark ring-2 ring-yellow mt-5 text-3xl&amp;#34;,
      `${goBack ? &amp;#34;block&amp;#34; : &amp;#34;hidden&amp;#34;}`,
    ]}
    href=&amp;#34;/links&amp;#34;&gt;Need Some Directions?&lt;/a
  &gt;
&lt;/div&gt;&quot; class=&quot;rehype-pretty-copy&quot; onclick=&quot;navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&apos;rehype-pretty-copied&apos;);window.setTimeout(() =&gt; this.classList.remove(&apos;rehype-pretty-copied&apos;), 3000);&quot;&gt;&lt;span class=&quot;ready&quot;&gt;&lt;/span&gt;&lt;span class=&quot;success&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;style&gt;:root {--copy-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 48 48&apos;%3E%3Cpath fill=&apos;%23adadad&apos; d=&apos;M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75&apos;/%3E%3C/svg%3E&quot;);--success-icon: url(&quot;data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 24 24&apos;%3E%3Cpath fill=&apos;%2366ff85&apos; d=&apos;M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z&apos;/%3E%3C/svg%3E&quot;);}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);&amp; span {width: 100%;aspect-ratio: 1 / 1;}&amp; .ready {background-image: var(--copy-icon);}&amp; .success {display: none; background-image: var(--success-icon);}}&amp;.rehype-pretty-copied {&amp; .success {display: block;} &amp; .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;&amp; .ready { display: none; }&amp; .success { display: block; }}&lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h3 id=&quot;content-collections&quot;&gt;Content Collections&lt;/h3&gt;
&lt;p&gt;Probably the coolest thing about Astro is its &lt;a href=&quot;https://docs.astro.build/en/guides/content-collections/&quot; class=&quot;external&quot;&gt;Collections&lt;/a&gt; API. On this site all of the blog posts, about page sub-pages, tags, and 88x31 badges are generated on the site via the Collection system.&lt;br/&gt;
By essentially standardizing the format of these forms of data, I can do my favorite Typescript thing ever with them: &lt;code&gt;map()&lt;/code&gt; into an array! My favorite thing about React, Angular, all these JS frameworks is being able ot cut down on the tedium of hardcoding things.&lt;/p&gt;
&lt;h3 id=&quot;recommendation&quot;&gt;Recommendation&lt;/h3&gt;
&lt;p&gt;I 100% recommend AstroJS especially for any static site. It’s just great to use, and its development is active and responsive.&lt;/p&gt;
&lt;h1 id=&quot;the-future&quot;&gt;The Future&lt;/h1&gt;
&lt;p&gt;Aside from (hopefully) regular blog posts, I’m not sure what else I’ll add to this site, if anything. I have some pre-made unfinished links on the &lt;a href=&quot;/links&quot;&gt;Links Page&lt;/a&gt; suggesting future things but who knows. WebDev is not my favorite hobby since it’s ever-present in my professional career…The creativity and problem solving are fun, but I really just want to finish to go back to &lt;a href=&quot;/about/digitalArt&quot;&gt;drawing&lt;/a&gt; and &lt;a href=&quot;/about/weightlifting&quot;&gt;working out&lt;/a&gt; lol.&lt;/p&gt;
&lt;div class=&quot;ml-2 bg-redDark/40 w-fit p-1 flex gap-2&quot;&gt; &lt;img src=&quot;/_astro/eyy.BgBs6cHh_26rwrj.webp&quot; alt=&quot;eyy.BgBs6cHh.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot; class=&quot;w-fit not-prose max-w-32&quot;&gt; &lt;/div&gt; &lt;blockquote class=&quot;emojiBlockQuote bg-redDark/40 italic border-yellow border-l-8&quot;&gt; &lt;p&gt;The one big exception is if my friends ask for help with &lt;em&gt;their&lt;/em&gt; websites I’m gonna be 1000% ON for that!!&lt;/p&gt; &lt;/blockquote&gt;</content:encoded></item></channel></rss>