2025-07-28 15:41:34
Hey friends!
I can't believe it's the last week of July already. I hope you're staying cool and building things you like. Onwards!
Was this forwarded to you? You can subscribe here!
So many ranges, so little time: A cheatsheet of animation-ranges for your next scroll-driven animation
A Friendly Introduction to SVG
Why I'm Writing Pure HTML & CSS in 2025
EsJS: Lenguaje de programación en Español
This week I went to and spoke at the latest Chicago mechanical keyboard meetup! It was really fun. I hadn't been to a keyboard meetup in a few years, and it was such a good time geeking out with people about keyboards, meeting internet friends, and seeing what people have built. I wrote a small recap post here!
Unlock Your Career Potential with Keenesse
Feeling stuck, or ready for your next big move?
Keenesse offers personalized career coaching to help you gain crystal-clear career goals, pinpoint exciting advancement opportunities, and master crucial skills like resume optimization, interview mastery, and confident negotiation – all to land your dream role in a competitive market.
Our expert team of seasoned tech industry coaches provides tailored support at every career stage, from ambitious students to accomplished executives.
Ready? Schedule your free, no-obligation consultation today at keenesse.com.
Last week, I had you figure out how long it would take to make a mechanical keyboard! Click clack David, Colin, Elke, Jen, Ten, Sameer, Charles, Ender, Amine, and Paul!
This week's question:
Given an array of side lengths, write a function to determine they can form a hexagon with three side-length pairs (as in, three pairs of equal sides needed). Return true
if possible.
Examples:
canFormHexagon([2, 3, 8, 8, 2, 3])
> true
canFormHexagon([1, 2, 3, 4, 5, 6])
> false
canFormHexagon([2, 2, 2, 2, 2, 2, 2])
> false
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Love is for the ones who love the work
More than you wanted to know about how Game Boy cartridges work
Do not download the app, use the website
Priority Compass
Death by AI
What do you call a group of disorganized cats?
A cat-tastrophe!
That's all for now, folks! Have a great week. Be safe, make good choices, and hydrate!
Special thanks to Ezell, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-07-21 13:32:42
Howdy y'all!
I hope you had a good week. Mine was fun celebrating birthdays of family and friends, and messing around with some side projects. Let's boogie.
Was this forwarded to you? You can subscribe here!
Designing Scroll Behavior: When to Save a User's Place
Setting Line Length in CSS (and Fitting Text to a Container)
Drawing a Koala with HTML and CSS (video)
Get the index of an element within its parent
This week kind of flew by. I did a lot of walking around Chicago with my family and just tried to be mostly offline, which has been good for my brain.
...that being said I'm also working on some side projects that I'll hopefully ship in the next few days, ha! I also wrote about a handy little GitHub Copilot Chat trick if you wanna check it out.
Level up your app’s auth for your customers and AI agents. Whether you have a B2B or B2C use case or both, Auth0 is a full IdP that provides robust security like MFA, continuous threat monitoring, plus flexible APIs, and over 30 SDKs. You get complete control over the user experience, from sign-up flows to advanced authorization.
Secure your AI Agents, so that you can protect your users. Auth for GenAI can help you do this with advanced user authentication and fine-grained control over data access. Our Token Vault feature simplifies managing API tokens for third-party services, streamlining access for your AI applications, helping you build securely. Try Auth for GenAI today.
Last week, I had you navigate a string with Vim commands! I just can't quit you, Ender, Jen, David, Winnie, Elke, Ten, Ben, Kriszti, Tarang, Andy, Sameer, Wesley, Andrew, and Jeremias!
This week's question:
You’re assembling a custom mechanical keyboard. Each required part has a delivery time in days and an assembly time in hours. You can only assemble a part after it arrives, and you can only work on one part at a time. Given an array of parts where each part is { name, arrivalDays, assemblyHours }
, return the minimum total hours needed to finish assembling all parts, starting from hour 0.
Example:
minAssemblyTime([
{ name: "keycaps", arrivalDays: 1, assemblyHours: 2 },
{ name: "switches", arrivalDays: 2, assemblyHours: 3 },
{ name: "stabilizers", arrivalDays: 0, assemblyHours: 1 },
{ name: "PCB", arrivalDays: 1, assemblyHours: 4 },
{ name: "case", arrivalDays: 3, assemblyHours: 2 }
])
> 74
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
A Typical Workday at a Japanese Hardware Tool Store (video)
AI doesn't make devs as productive as they think, study finds
‘The way a child plays is the way they live’: how therapists are using video games to help vulnerable children
PC Sirius60 + Oblivion v3.1 + HMX Canglan v2 + acrylic plate + TX AP stabs
To the person who stole my place in line...
I'll be after you, now!
That's all for now, folks! Have a great week. Be safe, make good choices, and be open to new ideas!
Special thanks to Ezell, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-07-14 16:09:44
Hey friends!
I hope you had a good week! Mine was pretty full of non-internet work around the house and with the family, which felt good and needed. Anyway, back to jamming with console cowboys in cyberspace!
Was this forwarded to you? You can subscribe here!
CSS Intelligence: Speculating On The Future Of A Smarter Language
Quantum Internet Is (Slowly) Becoming a Reality
CSS conditionals with the new if()
function
A revisit of the Every Layout sidebar with :has() and selector performance
I have watched the movie KPop Demon Hunters multiple times this week and I'm obsessed with it and the soundtrack. If you haven't seen it, it's on Netflix! I actually recommend you don't look it up and just watch it knowing as little as possible about it. It's really, really good, and I legitimately think it's the best movie of the year so far (and my favorite movie that has come out in the past few years)!
Outside of excellent cinema, I blogged about tools on top of other tools! Shout out to Neha's Nebulous Code newsletter, where she also talked about tools (including PocketCal)!
The AI Agent for Professional Software Developers
When you ship to production, vibes won’t cut it. Augment Code's powerful AI coding agent meets professional software developers exactly where they are, delivering deep context into even the gnarliest of codebases and learning how you, your team, and your codebase work.
Whether you’re starting a new project or getting up to speed on a codebase that is new to you, Augment Code is here to help you build what's next.
Last week, I had you find a firework show's grand finale! Boom boom Ender, Elke, Winnie, Ten, Sameer, Amine, Parthipan, Varenya, Paul (who made a fun digital fireworks show!), Patrycja, and Kriszti!
This week's question:
Given a multi-line string and a sequence of Vim navigation commands (h
for left, j
for down, k
for up, and l
for right), and starting at the top-left character, write a function that processes the commands and returns the character under the cursor. If the cursor tries to move out of bounds, keep it at the last valid position.
Example:
const string = `Hello, world!
how are ya?`; // or "Hello, world!\nhow are ya?"
const commands = 'jlhll';
getCharAfterVimCommands(string, commands)
> 'w'
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Aguayos: Exploring the beauty of migratory flows within Latin America and the Caribbean
Trial, Triumph, and the Art of the Possible: The Remarkable Story Behind Beethoven’s “Ode to Joy”
Inventing Japanese Braille
Hand Engineering 2000mini SE + Alu Plate + Cherry MX2A Black + KKB Soju = Keyboard Typing Test
What kind of books do skunks read?
Best-smellers!
That's all for now, folks! Have a great week. Be safe, make good choices, and watch KPop Demon Hunters please I need to geek about this with more people!
Special thanks to Ezell, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-07-07 12:57:11
Hey y'all,
I hope your week was a good one, and you had a somewhat light work week with the U.S. holiday. Let's learn!
Was this forwarded to you? You can subscribe here!
The Backrooms: CSS Edition
Writing Code Was Never The Bottleneck
An unnecessary but satisfying optimization
glass3d generator
Personally speaking, this was a hard week, my friends. I don't want to get into it so I will leave it at: hug your loved ones. If you care about someone, call them and tell them!
🚀 Meet Flow CI Engine: Fully Managed Mac CI, Reimagined
Tired of wrangling with CI infrastructure for your Apple projects?
Flow CI Engine is a developer-first, fully managed CI platform running on real Mac hardware.
Powered by renewable energy, 100% carbon-neutral, and operated from a Swiss ISO/IEC 27001-certified data center. Benefit from automated scaling, consistent build speed, and a security-first architecture, all without the overhead of managing Macs.
Simple, scalable pricing. Only in Switzerland.
Ready to level up your Mac builds? Learn more & request your invite or see details + pricing.
Last week, I had you find the last non-repeating character in a string. Awesomeeee work Usman, Aren, Winnie, Ten, Muhammad, Neefertiti, Paul, David, Amine, Tarang, Sameer, Ross, Ender, Kriszti, Andrew, SidGod, Ollie, Jake, Kwlio, Neha, Elke, and Austin!
This week's question:
Given an array of fireworks representing a series going off, write a function to find the "grand finale" of the show! A grand finale is defined as the longest subarray where the average size
is at least 5, the minimum velocity
is 3, and the difference between the min and max height
is no more than 10. Return the starting index of the grand finale.
Example:
const fireworks = [
{height: 10, size: 6, velocity: 4},
{height: 13, size: 3, velocity: 2},
{height: 17, size: 6, velocity: 3},
{height: 21, size: 8, velocity: 4},
{height: 19, size: 5, velocity: 3},
{height: 18, size: 4, velocity: 4}
];
> grandFinaleStart(fireworks)
> 2
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Pockets are a Significant, Untapped Market
DNworks Noodle.zip + Alu Plate + BSUN Jade Rosales + GMK Hooty = Keyboard Typing Test (video)
Wikipedia:WikiProject AI Cleanup/AI catchphrases
How email tracking works behind the scenes
What do you call a fly without wings?
A walk!
That's all for now, folks! Have a great week. Be safe, make good choices, and donate to causes you care about!
Special thanks to Ezell, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-06-30 14:13:03
Hey friends!
We made it to the end of June! I hope you're staying cool in this hot hot weather (and if it's not wildly warm where you are... you are blessed). Let's boogie.
Was this forwarded to you? You can subscribe here!
Moar Serverless 2025 talk recordings (videos)
Git Notes: git's coolest, most unloved feature
Color Everything in CSS
Why visual website builders didn't take off (video)
Phew, this week my baby crossed the two month mark, which is mind-blowing! I feel like it's been so fast and so slow all at once. We're trying to take advantage of summer time with him and our toddler by going to parks and museums as much as we can. It's very challenging as we learn how to be a family of four, but it's been fun, too.
In side-project land, I'm currently trying to use Expo to deploy a React Native app to my phone and... it is going poorly. I think it's my fault, but it's hard to say because it's a new stack for me, but it's fun at least! I hoped to fix it before sending this issue, but alas I broke something. Hopefully I'll have something shipped before the next one? Maybe?
Developers & leaders: here’s how you can give your fintech frontend teams a boost
The best fintechs aren’t just moving fast now – they’re moving smart.
This guide breaks down what’s changing and what CTOs should do about it:
🔹 Full-stack is the new default (hello, dev ownership).
🔹 Accessibility isn’t optional (thanks, EU regs).
🔹 AI is quietly reshaping frontend workflows.
Co-authored by The Software House CTO, Adam Polak, with insights from 689 devs in 83 countries.
Last week, I had you deal with overlapping sirens. Wee woo wee woo James, Will, Burton, Winnie, David, Ten, Elke, Patrycja, Varenya, Neha, Michel, and Ender!
This week's question:
Find the last non-repeating character in a given string. If all characters repeat, return an empty string.
Example:
> nonRepeat('candy canes do taste yummy')
> 'u'
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
A New Pyramid-Like Shape Always Lands the Same Side Up
The High Cost of Being Low Maintenance
Custom (open source) acrylic macropad
Architect Dad Transforms Son’s Small Sydney Apartment (video)
I accidentally drank a bottle of invisible ink. Now I'm in hospital, waiting to be seen!
That's all for now, folks! Have a great week. Be safe, make good choices, and be grateful!
Special thanks to Ezell, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-06-23 12:16:21
Hey friends!
It's a new week! I hope yours was a good one and you got enough sleep. And if you didn't... welcome to sleepytown, the water's fine! Anyway, let's boogie.
Was this forwarded to you? You can subscribe here!
Simplifying auth flows in Expo Router with protected routes
Grainy Gradients
Coding a 3D Audio Visualizer with Three.js, GSAP & Web Audio API
Animating zooming using CSS: transform order is important… sometimes
This week I finished reading Babel by R.F. Kuang! I enjoyed it, though it was pretty intense. I had started it a while back and just haven't had time to finish it (...because I had a baby), and it was fun to finally get some time to go through it.
I'm trying to encourage reading for my toddler, too. My current experiment with that is I have books scattered throughout our home, so I can be reading something on my own if I'm not reading one of her books to her. As a result, I'm just in the middle of a bunch of stories. I'm now reading Project Hail Mary, Truly Madly Guilty, and The Way of Kings!
Also, I did some maintenance on PocketCal this week! If you would like to support the project now, there's a "pay what you want" (lifetime!) Pro license that you can get to make up to 10 event groups. Woo hoo!
Code reviews are important but take time. CodeRabbit is your AI co-pilot. It adds instant review comments and shows what each pull request might affect.
It doesn’t just flag problems. It suggests one-click fixes. You can also set custom code quality rules using AST Grep patterns. This helps catch small bugs that other static analysis tools often miss.
CodeRabbit has reviewed over 10 million pull requests. It’s installed on 1 million repos and used by more than 70,000 open-source projects. It’s free for all open-source repos.
Last week, I had you put monarchs in order. It was a funky one! A royally good job to Elke, Chris, David, Muhammad, Ten, Pedro, Tarang, Raymond, Winnie, Colin, Patrycja, and Neha!
This week's question:
You’re given an array of siren objects, each with a start and end time in seconds, representing when the siren is active. Write a function to return the minimum number of sirens you need to remove so that no two sirens overlap.
Example:
removeSirens([
{ start: 1, end: 5 },
{ start: 3, end: 7 },
{ start: 6, end: 8 },
{ start: 8, end: 10 }
]);
> 1
removeSirens([
{ start: 0, end: 3 },
{ start: 2, end: 4 },
{ start: 5, end: 7 },
{ start: 6, end: 8 },
{ start: 8, end: 10 }
])
> 2
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Cozy Comfort
Blue Ridge EC with 45g DynaCap Domes Typing Sounds (video)
Making a Kazoo from a Highlighter Marker (video)
ChatGPT May Be Eroding Critical Thinking Skills, According to a New MIT Study
Yeah, Geology rocks, but Geography is where it's at!
That's all for now, folks! Have a great week. Be safe, make good choices, and stretch your legs on a nice walk!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon