All blogs / Frontend / CSS / browsers
Salma Alam-Naylor's RSS Feed
Salma Alam-Naylor writes about technology the web. Read tutorials and quick tips on HTML, CSS, JavaScript and web dev.
Frontend / CSS / browsersJavaScript / TypeScriptEngineering management / careersEssays / personal
- Posts
- 145 from 16 Aug 2020 to 2 Jul 2026
- Posting
- monthly (12 in the last year)
- Kind
- personal blog
- Feed
- https://whitep4nth3r.com/feed.xml
2026 10
- Goodbye, forever, probably.
- Browse more articles
- How I made a 45-video course without wanting to die
- I released a song for the first time in 15 years
- I am in an abusive relationship with the technology industry
- How to make your first contribution to an open source project
- I built a website for drummers
- I tracked everything I wore in 2025. Was it worth it?
- I redesigned my website (again)
- This is not a 2025 wrap up post
2025 24
- All good things must come to an end
- Is the BenQ coding monitor any good?
- We all have a choice
- I am 40
- An Introduction to the World Wide Web for Very Senior Programmers
- How to delete all squash-merged local git branches with one terminal command
- Why is CSS ::first-letter not working?
- Your Twitch live stream graphics don’t really matter, but they can help
- How I set up my Dygma Defy keyboard layers
- Put your phone down
- Why Women in Tech isn't enough
- The promise that wasn’t kept
- The experience is enough
- It wasn’t the idea that failed: it was the execution
- Thrive
- Does AI really make you more productive?
- Is this the next step in the evolution of front end dev?
- You are more than the tools you use: tell your story
- 3 reasons you should tour a conference talk
- A case for getting dressed every day
- How I created a newsletter I actually enjoy writing
- How I learned to code with my voice
- How to build a copy code snippet button and why it matters
- A reluctant roundup of 2024
2024 24
- It’s OK to have a slow day
- Your live coding stream does not need a bigger audience
- The 4 types of DevRel content
- A story about a coat
- How I reduced an API call from >5 seconds to under 100ms
- Paths to business value in Developer Relations
- How I show Bluesky likes on my blog posts
- Entertainment as Code: Finale
- Sentry can’t fix React hydration errors, but it can really help you debug them
- Work is meaningless, and it almost killed my husband
- How to make your web page faster before it even loads
- I conducted a community survey and here’s what I learned
- Your bad LCP score might be a backend issue
- One does not simply delete cookies
- 5 easy tips to improve your personal website performance
- How to prevent Prettier putting a full stop on a new line after a link
- Why don’t we talk about minifying CSS anymore?
- Your background images might be causing CLS
- How I fixed my brutal TTFB
- What is INP and why you should care
- My blog post workflow
- The future of Jamstack is anti-capitalist
- Ramblings about JavaScript scope, weird errors and frameworks
- How to deal with API rate limits
2023 22
- Twitter ruined your link previews: here’s how Cloudinary can help
- How to fix error: invalid character in entity name in RSS feeds
- Fallbacks for HTTP 404 images in HTML and JavaScript
- Everything I install and set up on a new MacBook as a web developer
- A story about HTTP status codes and why you should read documentation
- Entertainment as Code: Premier
- Using hooks to monitor and error track with Sentry when self-hosting Directus
- How to use jQuery with Astro
- From LCP to CLS: Improve your Core Web Vitals with Image Loading Best Practices
- 5 reasons you should hire me as your next developer experience engineer
- How I deploy my website using my Apple Watch
- The best light/dark mode theme toggle in JavaScript
- A/B test CMS authored content with Netlify Edge Functions
- How to split traffic and A/B test different page layouts on the same URL
- The universal CSS * selector isn't actually universal
- How to hide text in CSS pseudo elements from screen readers
- The Acronyms of Rendering on the Web
- Improve E-commerce Site Performance with Rendering Strategies
- Make time
- We actually need more JavaScript frameworks
- How do I get started in web development?
- 2022: what I made, what I learned, and what I didn't do
2022 30
- How to get the user’s timezone in JavaScript with Edge Functions
- A responsive striped CSS gradient inspired by 80s VHS tapes
- Single-page applications, multi-page applications, the history of Twitter tech, and a failed project
- Personalize your static site based on a previous site referral
- I changed my mind about writing new JavaScript frameworks
- Rewrite your git history in 4 friendly commands
- What's the difference between : and :: in CSS?
- Rewrite HTML and transform page props in Next.js with Next.js Advanced Middleware
- Add personalization to static HTML with Netlify Edge Functions — no browser JavaScript required
- We're all living on it. But what exactly is The Edge?
- How to view Google Lighthouse scores for your site in Netlify
- Should I write a new JavaScript framework?
- How to deploy an Astro site
- Build a business card CLI tool
- Level up your link previews in Slack
- Light and dark mode in just 14 lines of CSS
- What is Jamstack?
- We're all living on it. But what exactly is The Edge?
- HTML is all you need to make a website
- How I massively improved my website performance by using the right tool for the job
- How to format dates for RSS feeds (RFC-822)
- How to delete all merged git branches with one terminal command
- Why you should ship your silly side projects
- A prototype is all you need to launch a site
- Build a CMS preview workflow for your Jamstack site
- How to deploy your Netlify site with an Elgato Stream Deck
- How I improved your Google Lighthouse SEO score
- How to build an HTML-only accordion — no JavaScript required!
- Debug your CSS layouts with this one simple trick
- How to use really long environment variables in Netlify functions
2021 31
- An introduction to GraphQL and how to use GraphQL APIs
- How to load responsive images in AVIF and WebP using the HTML picture element
- Contentful's Fast Forward 2021 Day 2 Keynote
- TIL: How to use GraphQL variables to give my queries type safety
- Next.js Dynamic Routes with Contentful's GraphQL API — with Jason Lengstorf
- What is a REST API?
- This box will change your life
- Ecommerce and Next.js on the Jamstack — with Colby Fayock
- How to build a personalized image social sharing app with Cloudinary and Next.js
- Why I love building with Next.js — a fireside chat with Cassidy Williams of Netlify
- What is an API?
- A Next.js complete beginner tutorial using the Spotify API
- How to avoid using relative path imports in Next.js
- How I set up my new Next.js projects with a handy bash script
- How to add Algolia InstantSearch to your Next.js application
- How to prevent the collapse of society by building an accessible web
- How to filter entries by linked references in GraphQL
- How to use GitHub actions and Contentful webhooks to show your latest blog posts on your GitHub README
- How to make your font sizes accessible with CSS
- What is BEM in CSS?
- When to use aria-labels in your HTML
- Paginating your Contentful blog posts in Next.js with the GraphQL API
- Exploring linked entries and assets in Contentful with JavaScript via REST and GraphQL
- Rendering linked assets and entries in the Contentful Rich Text field
- How to build, test and release a node module in ES6
- 3 ways to use Puppeteer to generate Open Graph images
- My Twitch live coding setup in OBS
- How to generate an RSS feed for your blog with JavaScript and Netlify functions
- How to make your code blocks accessible on your website
- How to build a lightweight microblogging site with Contentful, vanilla HTML, CSS and JavaScript
- My non-traditional journey into tech and DevRel