✨ This year I decided to take blogging more seriously. In 2020, I published 30 articles on my blog, joshwcomeau.com.

We're nearing the end of the year, so I thought it'd be fun to do a "Top 10" countdown, sorted by # of views 😄 I'll share some context about each one!
#10 — Boop! joshwcomeau.com/react/boop/

This animation tutorial details how I created a wobbly temporary hover state using React Spring.

I was unhappy with the hover animations on my course platform, and decided to experiment. I was so happy with the results, it became a blog post!
#9 — Embracing Modern Image Formats. joshwcomeau.com/performance/em…

A look at how to use the modern “.webp” image format to shave some KBs off your page, in a backwards-compatible way 😄

Tools like `gatsby-image` and `next/image` are making it redundant, and I'm thrilled ✨
#8 — Becoming a Software Developer without a CS Degree. joshwcomeau.com/career/no-cs-d…

Early this year, I asked y'all on Twitter to share your stories of how you got a dev job without a degree, and received *hundreds* of unique stories! I share them in this absolutely-inspiring read 😄
#7 — The Quest for the Perfect Dark Mode. joshwcomeau.com/react/dark-mod…

The hardest part of building my blog was adding Dark Mode. It's friggin' challenging if you want a toggleable, flicker-free experience on a static site.

It's niche, but it made the cut since it gets cited a ton!
#6 — Beep Boop! Announcing “useSound” joshwcomeau.com/react/announci…

I published an NPM package this year, to make it easier to add SFX to React apps! This intro tutorial shows how to use it.

It's >8k downloads/week on NPM 😄

Hoping the sound-on-web trend catches on 🎶
#5 — Persisting React State in localStorage joshwcomeau.com/react/persisti…

Shows how to "save" React state so that it persists between visits.

It didn't get much traffic when it first launched, but it's been getting more and more popular from SEO — lotsa folks trying to figure it out!
#4 — The Perils of Rehydration. joshwcomeau.com/react/the-peri…

I think this is the post I've been thanked-for the most 😌

Rehydration in React is one of those mysterious things that most devs don't know too much about, but it's imperative to learn if you work with SSG/SSR frameworks!
#3 — CSS Variables for React Devs joshwcomeau.com/css/css-variab…

Ironically, I never planned to write this post! It was originally part of #7, my Dark Mode post, but I plucked it out because it was too long & complex.

Due to SEO, it's grown to be one of my most popular posts 😄
#2 — Hands-Free Coding joshwcomeau.com/blog/hands-fre…

This was one of the most emotional posts for me to “write”. It has been _a year_, and losing the ability to type made it that much harder.

Fortunately, I'm doing much better now physically, and the experience taught me a ton.
(gosh, I have so much more to say about each of these, but it's hard to fit it all in a tweet 😅 maybe I'll do a deeper-dive into the context around each post in my newsletter? Would that interest you at all?)

joshwcomeau.com/subscribe/
Finally, #1 — Full Bleed Layout using CSS Grid joshwcomeau.com/css/full-bleed/

This post shows how to use CSS grid to create a surprisingly elusive layout. As always, the devil's in the details.

It blew up, which has been SUPER reassuring, since I'm neck-deep in building a CSS course!
Thanks to you for reading all the way through this list!

I realize it's incredibly self-indulgent of me to showcase my own work like this 😅 but I also know that many of y'all started following me recently, and you may not know about some of these!

I hope they're helpful 💖

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Josh W. Comeau

Josh W. Comeau Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @JoshWComeau

23 Nov
The most infamous CSS rule is:

button:focus {
outline: none;
}

This style removes the "ugly" focus ring on inputs and links, but it means keyboard users can't navigate; it totally breaks the experience for them (and any non-mouse users) 😬

A thread with some solutions 🧵
First, some quick options:

• Leave them as-is! Outlines aren't so bad.
• Provide an alternative focus style, like changing the background color, or adding a border.

There's a nifty new pseudo-class you may not be aware of, though…
🌠 The `:focus-visible` pseudo-class is just like the `:focus` one, but it only matches when the browser determines that a visible focus state is necessary (eg. not a mouse user).

Keyboard users will see the focus rings, but mouse users won't.
Read 6 tweets
31 Oct
For the past week I’ve been using the Xiaomi Redmi 8 as my main phone. It’s the most common “budget” smartphone in India.

In some ways, this thing is shockingly good. In others, downright surprising. But there were some disappointments.

🧵 My experience in-thread: ImageImageImage
For context, I ordered this phone from AliExpress. Cost me $90 USD.

It costs ₹8,000, well below the average Indian smartphone price of ₹12,000 / $160.

Source: statista.com/statistics/809…
Quick caveat: I’m not pretending that my internet experience has been identical to that of an average Indian smartphone-user

The average mobile internet speed in India is 12Mbps, roughly 1/3rd global average. But unless you’re video-streaming, 12Mbps seems OK to me?
Read 16 tweets
6 Jul
At a couple jobs now, I've been tasked with reviewing incoming applications, so I've read _a lot_ of cover letters. IMO, a lot of them miss the mark 😬.

Today I thought I'd share some cover letters I've written which led to an offer, + some cover letter tips.

See thread 🧵 👇
All cover letters can be read in text here: docs.google.com/document/d/1a6…

Letter 1: Khan Academy.

This letter isn't my best work, but it tells a compelling story about why I'm passionate about the space + the organization. Could be improved by sharing more about my skills/background Screenshot of doc linked in tweet
Letter 2: Glitch

I'm proud of this letter. I cover why I care about their mission (online code education), their product (mentioning specific features), and why my skills/background are valuable to them in their mission / for their product. Screenshot of doc linked in earlier tweet
Read 12 tweets
6 Apr
So many folks have lost their job in the last 2 weeks :(

I've been writing a short book on software dev portfolios. It isn't ready yet, but I wanted to share some of the highlights, to hopefully help folks who are job-hunting again!

The most important stuff I know, in-thread 👇
Your developer portfolio is a showcase of your most important projects. I'm using the term "project" loosely, to include:

• Stuff you shipped on-the-job (if not restricted by NDA)
• Side-projects
• OSS contributions
• Volunteer work
Your homepage should list your 2-5 most impressive projects. You should have an image, a brief summary, and a link to a dedicated page to learn much more about this project.

(GIF credit: juliacodes.com)
Read 18 tweets
26 Mar
I'm so glad I used MDX for my blog. It enables things that otherwise would not be possible with Markdown or a CMS, while still being a consumable data source (unlike having the posts be all-JSX)

Some examples in-thread 👇
I created an <Asterisk> component because I wanted to add XKCD-style "jokes on hover". Plus, I tend to be very verbose, and this means I can pack some of that away into an opt-in annotation. MDX code snippet:<br />
<br />
HTML has two image media elements: the international pop-star `img`, and the niche hipster artist `picture`.<Asterisk content=" src="/images/1px.png" data-src="https://pbs.twimg.com/media/EUB9hT9XQAAvvvf.jpg">Screenshot showing an asterisk, with a tooltip showing the contents
For tangential information, I have a `Sidenote` component. It has a `title` prop which accepts JSX, so I can use any special formatting within it. Also a `type` which accepts info/warning/error/success.

So much more flexible than the `<blockquote>` markdown gives you! MDX code:<br />
<br />
<Sidenote<br />
  type= title={
<>
Fancy title with elements!

}
>
Content here!
" src="/images/1px.png" data-src="https://pbs.twimg.com/media/EUB_F39XQAAh18f.jpg">
Example from a blog post showing the Example from a blog post showing the
Read 9 tweets
12 Jan
Over the past couple years, I've had the opportunity to coach quite a few aspiring developers. I'm going to start sharing some of the things I've learned in this capacity, since I think it could really help folks looking to start their career as a dev.

First up: enthusiasm.
If you're looking for your first job as a developer, as a recent college/bootcamp grad or someome self-taught, one of the biggest assets you can bring is enthusiasm. You see this in a lot of corny job descriptions, talking about "hunger" (which always felt so primal/weird to me).
For non-college grads in particular, finding that first job can take ~1-2 months of pretty intense work. Lots of networking, cold emails, interview prep, portfolio development, all that stuff.

It can be draining, especially since it comes right after an intense bootcamp!
Read 13 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!