2025-12-29 15:56:40
Oh my word, we MADE IT to the end of the year! This is my last issue of 2025, and I'll be seeing y'all in 2026! I hope you have a wonderful end to your year, and kick off the new one with a bang. Let's wrap things up!
Was this forwarded to you? You can subscribe here!
The HTML Elements Time Forgot
Toggle position: sticky to position: fixed on Scroll
To Make Software Is To Translate Human Intent Into Computational Precision
ACM Open Access
I finished up Blogvent where I write everyday with this post about styling markdown blockquotes, and this one about making a "nature documentary" about a developer at the end of the year. I also posted this about the GitHub Podcast, too. You can check out my Blogvent wrap-up post as well to see all of them from this month!
I'm personally pretty cool with 2025 ending. It was a year of big ups (I had a baby!) and big downs (personal things, the state of the world, etc etc etc), and... I'll probably blog about it. I'm ready for a new year.
All this being said, thank you for reading this newsletter and being a part of this little corner on the internet. It makes my day when I hear people actually read my words, genuinely, and I'm grateful for you!
I WILL SEE YOU NEXT YEAR! Heheheheheh.
Get personalized career coaching with Keenesse
Keenesse offers 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. Also, if you have a professional development budget you want to use before the end of the year, now's the time!
Last week, I had you check if an array was alternating! Bing bong good job Will, Stephen, Sergio, Eduardo, Amine, Matt, Krace, OphusDev, Toni, Andrew, Andrew (again), Stephen, Martin, John, Pedro, Ten, Micah, Jihchi, Miguel, Tianon, David, and Christian!
This week's question:
Given a string that contains only digits from 0 to 9 and a number n, replace each consecutive run of n with its length.
Examples:
> replaceRepeats('1234500362000440', 0)
> 1234523623441
> replaceRepeats('000000000000', 0)
> 12
> replaceRepeats('123456789', 1)
> 123456789
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
No, your brain doesn’t suddenly 'fully develop' at 25.
Leverage Points: Places to Intervene in a System
62 years in the making: NYC's newest water tunnel nears the finish line
Soleil — A Solar Powered Keyboard (video)
If you want a job in the moisturizer industry, the best advice I can give is to apply daily.
That's all for now, folks! Have a great week. Be safe, make good choices, and happy new year!
Special thanks to Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-12-22 18:08:36
Ho ho ho!
I hope you had a good week! Mine was so, so busy, and I'm really excited to chill with my family and friends for Christmas this week. Until then, let's boogie!
Was this forwarded to you? You can subscribe here!
The JavaScript Bundler Grand Prix
In Praise of HTML and CSS
30 Years of <br> Tags
That Time I Tried Explaining HTML and CSS to My 5-Year Old Niece
This week was so busy that my brain felt like it slowed to a halt. Tons of work (keep an eye on the GitHub YouTube channel this week), wrangling babies, travel, pre-holiday plans, family moving... it's been a lot. But! The blogging continues!
My month of Blogvent (where I write a blog post every day in December) is still going strong. Here's this week's posts!
Merry Christmas and Happy Holidays, y'all!
No sponsor this week. Please do check out some of my writing on my blog, try out my apps Ductts, PocketCal, or any of the others listed on my GitHub profile!
If you'd like to support this newsletter, check out my Patreon or my GitHub Sponsors page! Thank you!!
Last week, I had you make a Latin square! Bonum officium Andrew, Stephen, Krace, Toni, Zach, Amine, Daniel, Ten, Micah, Jihchi, and David!
This week's question:
An alternating array is a list of any length in which two (not necessarily different) values are alternating (all even-indexed items are equal, and all odd-indexed items are equal). Given an array, return true if it is alternating.
Examples:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
[10,5,10,5,10] -> True
[2,2,3,3] -> False
[5,4,3,5,4,3] -> 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)
The best science images of 2025 — Nature’s picks
Backing up Spotify
The Lighthouse Directory
Fictional Brands Archive
MelGeek Pixel Palette
My friend told me that pepper is the best seasoning for a roast, but I took it with a grain of salt.
That's all for now, folks! Have a great week. Be safe, make good choices, and happy holidays!
Special thanks to Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-12-15 17:39:43
Hey friends!
I hope you had a good week! Mine was so busy, I'm still recovering from how fast time flew. Let's learn!
Was this forwarded to you? You can subscribe here!
Discover Dialog
CSS Wrapped 2025
Goodbye to CFE.dev (video)
Full-circle: a time traveler's perspective on Vue (video)
Craft software that makes people feel something
In case you missed it, I'm doing Blogvent again this year, where I write a blog post every day in December. Here's this week's posts!
Let me know what you think, or if you have any topic suggestions you'd like to hear from me!
Video APIs shouldn't be the hard part of your project. Mux makes it simple: upload a video, get a playback URL. Add thumbnails, storyboards, transcripts, or AI workflows — whatever you need.
Whether you're tinkering on a weekend hack or shipping to production, you get the same reliable video delivery trusted by Patreon and Substack.
Got a side project you're proud of? We're sponsoring DEV's Worldwide Show and Tell Challenge. Record a quick pitch video, upload it to Mux (free account, no card needed), and enter for a shot at $3,000 in prizes. Submissions close January 4th.
Last week, I had you make a data structure for a deck of cards! You win Andrew, Miguel, Stephen, Krace, Parker, Paul, Micah, Jihchi, Toni, Zach, Amine, and Ten!
This week's question:
Write a function to generate a Latin Square given a positive integer n. The values can be any n distinct values, and don't have to be consistent for different n.
Examples:
latinSquare(1)
[[1]]
latinSquare(2)
[[1, 2], [2, 1]]
latinSquare(4)
[[1, 2, 3, 4], [2, 1, 4, 3], [3, 4, 1, 2], [4, 3, 2, 1]]
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Mycorrhizal network
Magenta: The colour that doesn't exist
Baionlenja Synovia with lubed Cherry MX Browns Typing Sounds (video)
Em Dash Appreciation Society for Humans
Why do bears have hairy coats?
Fur protection!
That's all for now, folks! Have a great week. Be safe, make good choices, and hang in there, the end of the year is coming!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-12-08 16:48:50
Helllllooo!
I hope you had a good week! I celebrated my birthday with family and friends and it was a really great time. Let's learn!
Was this forwarded to you? You can subscribe here!
Controlling dialogs and popovers with the Invoker Commands API
Beej's Guide to Learning Computer Science
voici.js: A Node.js library for pretty printing your data on the terminal
Using LLMs at Oxide
GSAP snow globe
I'm doing Blogvent again this year, where I write a blog post every day in December. It's always a bit challenging to come up with ideas for posts (I'm always very optimistic when I start and then have regrets later), BUT we're doing it!
Let me know what you think, or if you have any topic suggestions you'd like to hear from me!
Also, I had a really great conversation with Dalia Abo Sheasha about our jobs (me at GitHub, her at Microsoft, specifically for GitHub Copilot on Visual Studio) on our weekly livestream this past week. Check it out here!
What if your coding agents could manage themselves?
sudocode is what happens when your coding agents manage their own tickets. It's a lightweight orchestration layer that automates the logistics of managing coding agents, so you can direct the work instead of babysitting AI.
Equip yourself with tools to automate context handoff, run agents in parallel, and visualize outputs in real-time. Eliminate the chaos of AI-assisted development.
Fully local. Open source. Works with any coding agent and IDE.
Supercharge your coding agents →
Last week, I had you output HTML colors! Y'all did great Amine, John, Paul, Miguel, Stephen, Toni, Ten, George, and Ben!
This week's question:
Make a data structure for a deck of cards, and implement a shuffle() method, and a draw(n) method (where you draw n cards). Calling draw() when the deck is empty returns an empty array.
Example usage:
const deck = new Deck();
deck.shuffle();
console.log(deck.draw(5)); // Example: ['10♠', 'K♥', '3♣', 'J♦', '7♠']
console.log(deck.draw(5).length); // 5
console.log(deck.draw(2)); // Example: ['5♣', 'A♠']
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
XKCD: Fifteen Years
A summary of things I learned from my time on Bear
What It Sounds Like | Synchronized Roller Coasters (video)
Keykobo Great Barrier Reef keycaps on the Cosmo Bauer Lite
I drove a long way in winter weather to get parts to fix my computer.
It was a hard drive!
That's all for now, folks! Have a great week. Be safe, make good choices, and read more!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-12-01 17:02:14
Hey friends!
November FLEW by for me, it was so busy! But, it was also good to be cozy with my fam for Thanksgiving. Let's learn!
Was this forwarded to you? You can subscribe here!
Top layer troubles: popover vs. dialog
How to Build Cinematic 3D Scroll Experiences with GSAP
How grid-template-areas Offer a Visual Solution for Your Code
How to Add and Remove Items From a Native CSS Carousel (…with CSS)
Migrating 6000 React tests using AI Agents and ASTs
It was a good holiday week for those of us in the United States! I got to see some family for Thanksgiving and it was nice having extra hands help wrangle my kiddos. I did end up being family IT support, but that comes with the territory!
Also this week, I built a game for GitHub Game Off 2025, called Code Wave! Check it out. It was fun to build and it's also open source!
Take your design and development way beyond what you thought possible with Piccalilli and Set Studio.
Our Piccalilli Black Friday deals are still live! Save £60 on all of our courses and get a 50% discount coupon that you can use at any time. That's a saving of over £180 if you get two!
We're also taking on projects at Set Studio in the new year. Let us come in and take your brand and teams beyond the next level with our hyper-efficient approach that puts your competitors, well in the rearview mirror.
Last week, I had you plan a Thanksgiving meal! Awesome work David, Jihchi, Andrew, Toni, Amine, Micah, Ten, and Paul!
This week's question:
There are 16 basic HTML Colors. Write a program to output them in ascending order by HEX value. Don't use any built-in sorting methods!
Example output:
000000
000080
0000FF
008000
008080
00FF00
00FFFF
800000
800080
808000
808080
C0C0C0
FF0000
FF00FF
FFFF00
FFFFFF
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
On the uses of a legendary past
Agar - Burgundy Red keyboard (video)
A New Bridge Links the Strange Math of Infinity to Computer Science
Winners of the Natural Landscape Photography Awards Highlight Real Beauty in Our Environment
Just when you think food couldn't possibly call you on the phone... onion rings!
That's all for now, folks! Have a great week. Be safe, make good choices, and go into December on a high note!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-11-24 18:25:33
Howdy!
I hope your week went smoothly! Mine was wildly packed at work, and I'm so happy to be going into a holiday week. Let's boogie.
Was this forwarded to you? You can subscribe here!
How to Create 3D Images in CSS with the Layered Pattern
Six Things I Bet You Didn't Know You Could Do With Chrome's Devtools
Implementing Wordle in LibreOffice with JavaScript macros
Static sites killed the blog comment star, but maybe old tech and a smaller web can resurrect them
This week was so wildly busy at work for me, I'm still tired from it! That being said, I had a fun time announcing Gemini 3 Pro in GitHub Copilot, recording this week's episode of The Download, streaming talking about reducers and code on Rubber Duck Thursdays (and blogging about it), streaming on my own channel a poor attempt at game development, writing about non-determinism and ownership on my personal blog, and... there's even more that isn't public yet. Whew. This next Thanksgiving week will be a welcome break.
No sponsor this week, but here's some things I made that you might like:
If you'd like to support my work, you can through Patreon, Twitch subscriptions (which are free to you with an Amazon Prime account), or GitHub Sponsors! Or just tell your friends to subscribe to this newsletter. That's fun too.
Last week, I had you repeat integers in an array! Good good job job Tim, Ethan, Ross, Danny, Micah, Miguel, Ten, David, Stephen, Marco, Jihchi, Vincent, Kriszti, Amine, Sergio, Ken, Jordan, Valentin, Chriztian, Gavin, Clifford, Kaartic, and Toni!
This week's question:
Given an array of meal prep tasks for Thanksgiving, where each task is represented as [taskName, startTime, endTime], return the maximum number of non-overlapping tasks you can complete, along with the names of the chosen tasks in the order they were selected. Task times are inclusive of start but exclusive of end.
Example:
const tasks = [
["Make Gravy", 10, 11],
["Mash Potatoes", 11, 12],
["Bake Rolls", 11, 13],
["Prep Salad", 12, 13]
];
maxMealPrepTasks(tasks)
> {
count: 3,
chosen: ["Make Gravy", "Mash Potatoes", "Prep Salad"]
}
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
AD/NO: your next internet rabbit hole
Red WKL Vault 35
Chinese takeout menu (video)
FRAN SANS: Notes from the typographic underground
Police have just arrested the tongue-twister world champion.
If found guilty, they'll be given a very tough sentence!
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, Marta, and Flora for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon