Join live – Get insights, tips, + Q&A from Sanity developers on our latest releases


By Stelko

My Updated Portfolio Site

Full page screenshot of my home page showing off who I am, my featured projects, and a few of latest blog posts
One of my project pages with a description project which includes the tech I used to create it and links to it. On the right there are images showcasing the project as well as the Sanity studio
One of my blog pages showing off its contents and also including code blocks from the @sanity/code-input plugin
Contact page with my social links on the left and a contact form on the right
My home page singleton document with its modules and SEO fields
One of blog's block content field showing off the code-input fields in work

About the project

Welcome to my updated portfolio site where I am showcasing my projects but also writing blogs about the stuff I learnt along my journey as web developer.


Where do I start? Queries were the first battle. Usually for my page modules I would have different types of the same one, so like a layout module where sometimes it will be a image and content side by side, a carousel, or a just text. In those cases I had a type field and then in my queries I would just chain as many type == "carousel" => { ... }.

This time it was different because I wanted to attach a blogType == "latest"=> *[_type=="blog"][0...4] { ... }. And that's when I found out about the select() GROQ function.

Another query that I had to figure out was when I wanted to use my reusable modules but mixing them with my non-referenced modules felt like trying to blend oil and water. But hey, after digging around the docs I found defined(). It let me have two different queries for when I was using a reusable module to when I was not.

Cool Stuff Built

I am proud of my form builder which lets me select whatever fields I need, makes sure the right info is being typed in with Zod, and then receives it nicely over at Formspark. I am happy about the reusable modules as well as setting up ISR, that took way longer then it should of but now I know its tricks.

Things I Learnt

I levelled up my GROQ, started to rely less on looking back at old projects or notes and just type it out smoothly now. Another thing I learnt is that I still cannot decide on which icons to use in my list previews and desk structure.

What's Next

Not gonna lie, the projects page right now is a bit of a "before" photo. Gets the job done currently but I think it can definitely show off my project stories by adding a couple more modules.