Rebuilding my portfolio with Figma, NextJS, Tailwind and MDX



So I basically re-build my portfolio every couple of years. I think it's a good exercise for designers to just power through it once in a while. What's more, I was getting tired of LinkedIn messages from recruiters mentioning they had a great opportunity but couldn't see any work samples on my existing site. Which was annoying, but fair. I suppose if you're looking to hire someone who calls themselves a designer or design technologist it stands to reason they should have some current up-to-date work samples. This is somewhat difficult for me, as most of the work I've done during 9-5 for the last 5 years or so is heavily NDA protected. I tried very hard here to protect those interests and also demonstrate that I can, in fact, do the work I say I do.

My last site was built with theme-ui, next, and to be honest was rushed through. I took more time with this iteration of the site. I would say it took me about 2 full months working off-hours and weekends between designing and building it all out.

Ye olde details

A breakdown of the site's "stack", or whatever:

Design system

The site was designed in Figma with a design system that I made for my own personal projects called Hoxton. Here's a sample of the Figma tokens/primitives:

Part of me wants to open source it into the Figma community, but I don't know that I will. I'm happy to add anyone to the file who wants to take a look or duplicate it though.

Starter repo

The site was made using a boilerplate by @timlrx. I was looking for a starter that already integrated NextJS, MDX, and Tailwind together. It turns out this combination is popular - LOTS of people are using Tim's starter, and that's a far from comprehensive list. I found many more sites just trolling around Github public repos.

Why Tailwind?

I've used tailwind for a couple of small projects/prototypes before. I really love how streamlined the entire library is. The fact that I can provide completely custom tokens for everything is a huge bonus for me. I found theme-ui to be less intuitive in this regard when I used it for my last portfolio. I have no doubt of the flexibility of theme-ui, but leveraging it felt harder for me.

It's also great to be able to pull simple snippets that other folks have made when you need them. I had to come up with an image loader and to be honest didn't feel like designing anything fancy, so I pulled a sample from tailwind-elements. gg, ez.

Why MDX + Next?

Well, I love Next for building static sites quickly and have a good deal of familiarity with it. The Nevada Independent, a site I've worked on before is built on it so I didn't need any additional time to learn GraphQL for Gatsby or something like that.

Plus, dark mode support via next-themes + tailwind dark-mode support made things very easy for the most part.

MDX was picked for it's ability to provide an awesome writing experience - I anticipate at some point I'll leverage inline code playgrounds and stuff like that in my posts, so it made sense to have a format that can support that natively.

But Why not webflow?

Because no-code is for the weak!

Challenges

That said, there were some real pains in the ass:

  • -Image handling in Next is not great. I ended up writing a custom image component for my MDX files that pipes images in from Cloudinary. I think in general Gatsby has solved this problem in a nicer way. I was hoping to find a third-party lightbox gallery to display multiple images in, and there are a shockingly low amount of those available that are still maintained.

  • -MDX had a major release recently and the rest of the ecosystem I think is still catching up. I had to debug a lot of errors around importing components to pages that contain MDX. Some of it I think was lack of experience using Next to parse MDX in my own custom ways, but I dealt with a lot of incompatible dep messages from Node.

  • -Figma embeds is a big one I've got a bone to pick with. I hate picking bones with Figma because it is one of my all-time favorite apps and they do almost everything right. But embedding them into my work pages here wrought a hellfire of requests upon the browser - 166 to be specific!!! Maybe that's something wrong on my end, but I found a couple of people on Twitter who had similar issues with embed performance on their sites. If anyone at Figma (or elsewhere) sees this and wants to email me for a fix, I'd be most appreciative!

In the end though,

I am very happy with how the site turned out and look forward to adding more features and content. A big thank you to Tim for the project starter and to the friends who gave feedback on my design and debugged with me.