All blogs / JavaScript / TypeScript
Cassidy Williams
I'm Cassidy Williams, a software engineer, mom, and overall nerd in Chicago. I write about tech, projects, and whatever else I'm thinking about!
- Posts
- 315 from 6 Jan 2009 to 15 Oct 2026
- Posting
- weekly (62 in the last year)
- Kind
- personal blog
- Feed
- https://cassidoo.co/rss.xml
2026 32
- Building a static newsletter archive
- Accessibility and the new model of the internet
- The absolute best AI tools to use in September 2026
- RenderATL 2026 recap
- Customizing my Xteink firmware and wallpaper
- Whitespace in Astro 7.0
- An animated radial gradient mask over text in CSS
- On the edge of burnout
- KeyCon 2026 recap
- Microsoft Build 2026 recap
- A simple clustering algorithm for lists
- La Pedra Go Club in Barcelona
- Shipping todometer, version 3!
- Codemotion Madrid 2026 recap
- Connecting the Logitech MX Creative Console to Elgato Lights
- Deep Dish Swift 2026 recap
- Speaking at TechCamp Korea 2026
- My rainbow sweater
- I got yet another digital typewriter: The BYOK
- A history of styling choices leading to native CSS
- Notes for my future self on how to set up a camera for streaming
- Making art with CSS gradients and corner-shape and skew, oh my
- How passkeys work
- I am making videos again!
- Improving my newsletter's open rate the hard(er) way
- Making interesting borders with CSS corner-shape
- Remaking the Linux "touch" command in PowerShell
- A fun trick for getting discovered by LLMs and AI tools
- Code Wave Build Log
- Appreciating Mary Cassatt now that I am a mom
- Do not give up your brain
- A career chat with students in the age of AI
2025 69
- Toodles, 2025
- Wrapping up Blogvent 2025
- Making the "End of Year Developer" nature documentary
- CSS for markdown blockquote attribution
- I like when apps are "finished"
- I have become more of a writing utensil snob
- Configure your repositories with .github
- My inbox is so full
- Things I would study more if I had time
- Coming up with blog topics
- Influencing without authority
- Trying out Ente for media backup
- Vibe coding is boring
- Podcasts I'm listening to in 2025
- The Abilene Paradox
- Food I recommend in Chicago in 2025
- Pausing a CSS animation with getAnimations()
- Sewing an e-reader case
- The ABCD framework for feedback
- Lasagna and a root beer float
- Goodbye to an 11-year-old Issue
- The what, how, and why of CSS clamp()
- Fix your upgrades and migrations with Codemods
- Change commit timestamps in Git
- Automatically mark pull requests and issues as stale with GitHub Actions
- A pretty good email scam
- How reducers work
- Non-determinism and ownership
- A poem delivered by my 2.5 year old that encapsulates parenthood
- I am back at work and it feels weird!
- A moose playing Go in a park while drinking boba
- Using Notebook Navigator and Cupertino in Obsidian
- 2000 Poops
- Questions to ask when you think you need to finish something
- Playing with Fliiip Book
- I made a tree visualizer
- This is probably the most I will ever pretend
- Ductts Build Log
- Making a customizable wooden phone for my toddler
- Making a faded text effect in (mostly) CSS
- That Windy City Keeb Meet 2025 recap
- Have GitHub Copilot see your diff (and other cool tricks)
- Using personal instructions in GitHub Copilot Chat
- Tools using tools
- I (don't?) want to say yes to everything
- Generating open graph images in Astro
- Making Puppeteer work at build time on Netlify
- Building for a physical scavenger hunt with Astro, Tally, and Netlify
- Baby sayings
- PocketCal Build Log
- What does it mean to flatten an array?
- Styling the icon for HTML date and time types
- My second c-section experience
- End of an era with Stack Overflow
- Keybindings I use in VS Code
- Make your images in markdown on GitHub adjust for Dark Mode and Light Mode
- Things I learned while upgrading my iPad
- I don't know what MCP is and at this point I'm too afraid to ask
- Geek mama... saying no... part 2
- Create an HTML dialog when you click an image
- I am going to have a second baby and my brain is spinning
- We should have more friction in our lives
- Think less, ship more
- Debugging my Micro Journal
- Convert a video from dark mode to light mode with FFmpeg!
- Re-ordering Git commits
- A couple CSS tricks for HTML Dialog elements
- Making my startup come back to life
- How to use GitHub Copilot Edits
2024 69
- Adios, 2024
- The beautiful sentence that is the web
- Wrapping up Blogvent 2024
- I really love entering raffles
- How I use Obsidian Dataview
- How I use Obsidian Templater
- It would be cool for 2024 to just calm down
- Browser extensions I shipped in 2024
- How I approach humor
- I have become a minor writing utensil snob
- Introduce yourself to your remote team
- How to make your RSS feed pretty
- How to switch to Astro Content Collections
- Updating my blog to use Astro Collections
- Choose kindness over pile-ons
- The developer relations pendulum swings again
- Noticing the little things
- Actively learning languages
- Tracking side project income
- Doing things that don't scale is about finding value
- 33 of my own joke concepts that have never seen the light of day
- Ship it anyway
- Writing good words for tech folks
- Combining tools for fun and profit
- The what and the what now: note-taking
- Fighting open source spam with interaction limits
- Being forced to upgrade
- Haunted by my own projects
- Two months at GitHub
- I fell asleep in a driverless car
- A note on the future of Jumblie
- Sleep is the most magical thing in the world
- A Quick Guide for Building your own GitHub Copilot Extension
- Side quests
- Time containers
- Voice lessons taught me that I should be... true to myself
- Making a simple React microphone component
- Why JavaScript variables don't always update
- Layering CSS gradients
- Traveling to technical events: A guide
- Analog girly
- Building the Micro Journal
- Getting paid is weird and sometimes hard
- Actually try on your job applications
- The Productivity apps I use in 2024
- Figma Config recap
- Being funemployed, and all that jazz
- Greetings, future billionaires
- The Merge in Berlin recap
- Nice keyboards make me want to write blogs
- I rewrote my blog! And website! They are one!
- Front-end Design Conference recap
- Seattle and the internet
- Non-traditional push presents
- I love reading fantasy again
- Building W-9 Crafter
- Styling a CSS pseudo-element with JavaScript
- Jumblie has a database!
- Tips for posting on LinkedIn
- How to test a browser extension locally
- Sorting Git branches
- Use CSS accent-color to style your inputs
- HTML "self-awareness" with sibling indexing in JavaScript
- Base CSS for your text-based pages
- Kind of annoyed at React
- I miss human curation
- Jumblie 100
- Experimenting with AI voice
- Cassidy Williams... who is she
2023 33
- Buh bye, 2023
- Stock options, vesting, and exercising, oh my
- Publishing to my blog from Obsidian
- Ideal fishing spots
- Geek mama... saying no
- Making a single line break in markdown
- Cassidy's Gift Guide 2023
- Jumblie Build Log
- A use-case for CSS :has()
- My first go tournament
- Adding co-authors to TinaCMS's Git commits
- How and when to use keys in React
- Thirteen Potions Build Log
- Trying out TinaCMS
- Calling an imported API at runtime in Astro
- Co-authoring Git commits
- Why I like Astro
- Maternity TV
- Dear Cassidy of 2 months ago
- Open standards, trust, and Google
- Removing trailing space underlines from groups of anchor tags
- Turning todos into tadas
- My c-section experience
- Three ways to set headers with Netlify and Astro
- The Productivity apps I use in 2023
- Memorize quotes
- I made a bookmark out of stickers
- When useEffect runs
- Quirky local delights
- Setting up Netlify Redirects with Astro
- Loving and hating the streak
- The small, private wins
- Importing SVG files as React components with Vite
2022 17
- See ya, 2022
- My language brain is... broken?
- Two(ish) months at Contenda
- Passing Markdown components to React or Preact in Astro
- Managing knowledge on a team
- Hello, world
- Saying goodbye to my crappy vision
- Moose facts
- How to break the cycle of tech debt
- Customizing my Zsh Prompt
- Renaming a folder on the GitHub website
- Make line breaks work when you render text in a React or Vue component
- Use Unicode characters for bullet points in CSS using ::marker
- Being available: The secret to great leadership
- The Productivity apps I use in 2022
- Adding a lang attribute to your Next.js site
- Do successful products prioritize familiarity over uniqueness?
2021 5
2020 21
- An Incredibly Serious Discussion about Next.js at Reactathon
- Enabling AMP in your Next.js projects
- Adding Babel presets and plugins in Next.js
- React Children: The misunderstood prop
- Query an API at both build time and runtime with Next.js
- How to turn off telemetry in Next.js
- Add Web Monetization to your sites with Snippet Injection
- Logging in Next.js
- Deploy from CodePen to Netlify in less than 30 seconds
- React Strict Mode in Next.js
- Environment variables in Next.js and Netlify
- Global Styles in Next.js
- Making a custom 404 page in Next.js
- Absolute Imports in Next.js
- Why you should code together: Mob Programming FAQs
- Building a custom React media query hook for more responsive apps
- "Escaping" Next.js to access the browser
- What is React Fast Refresh?
- Next.js: Should I use SSR or SSG?
- Using React Context for state management in Next.js
- Avoiding burnout as an ambitious developer
2019 7
- Apollo Mission - The Pros and Cons of Being an Early Adopter of New Technology
- Giving people what they do not need: mild panic
- I'm going to write for Stack Overflow!
- How I built my CSS Rice Ball Dessert
- I spoke at DinosaurJS and React Loop last week
- How I built my (mostly) CSS Light Switch Toggle
- Leaky Bucket
2018 2
2017 2
2016 6
2015 9
- 5 applications of linear regression that will drive him crazy
- Adding Keyboard Shortcuts to your React Apps
- Making the Whitney Houston API
- Picking your brain: Cold call email etiquette
- One year at Venmo
- A Brief History of the PNG
- The CSS Image Values Spec
- Finding a Mentor
- The positives coming from the negatives
2014 14
- A Weekend at BattleHack Boston
- My last days at ISU
- How to ask for help
- 10 Tips for Successful Public Speaking
- The laptop you need for college
- HackISU Hackathon!!
- How to Ace an Interview
- Things you should have on your LinkedIn profile
- What is Computer Science ACTUALLY like?
- Feedback is awesome
- My Talk at TEDxDesMoines
- My "romantic" Valentine's Day plans!
- HTML+CSS Tutorial, Part 1
- HTML+CSS Tutorial, Part 2
2013 16
- Here come the 2013 Mashups!
- Inspirational quotes to get you through the day
- I am better than you at everything
- Things you should have on your LinkedIn profile
- Finding your dream major in college
- Crushing Procrastination in 3 Steps
- Design Your First iPhone App
- Tips for remembering names
- 5 Questions to Ask Your Boss
- Networking as a college student
- A Weekend at PennApps
- Crushing the Impostor Syndrome
- Startup Weekend Ames
- Happy Pi Day!
- I went to the White House!
- What's a house that's white in Washington D.C.?