MIRI
A portfolio website for a design student who needed somewhere to
publish her work that she owned, and could shape herself.
Overview
Mirthe is a design student. Before this project her work lived on Instagram: quick to post, but laid out by the platform, ordered by an algorithm, and shown next to everything else on the internet. She wanted somewhere that presented her work the way she wanted it presented. A real portfolio, on her own domain, that she could keep updating herself after she graduated.
She is also the designer, which set the bar. The site had to be good enough that a design student would put her name on it. And she is a student, so whatever I built had to be cheap to run for years, not just to launch.
Design
She brought one reference she kept coming back to: Mirror Mirror, a design studio whose site she liked. Rather than inventing a direction from nothing, we worked from that. I built the first pass in its spirit and she made the specific calls (type, spacing, colour, motion), which I then implemented. That loop ran for most of the project, and every screen in this case study went through her before it shipped.
The result keeps the interface quiet so the work is the loudest thing on the page. A single-statement headline on the home page, an uppercase wordmark, and links that lead with an arrow: → Get in touch, → View all work. Nothing competes with a magazine cover or a festival poster.
Because her work is mostly print, detail mattered more than anything else. Images are served up to 3840 pixels wide at high quality, so a poster stays readable when it fills a laptop screen. Some pieces move, so video is supported too. She decides the order her work appears in, which means the home page is an argument she makes, not a list sorted by date.
Technology
The site runs on Payload CMS and Next.js, deployed to Cloudflare. Payload was the important choice: she needed to place her work however she wanted, and a structured CMS gives her that without handing her a page builder that fights back. She adds a project, it appears in the index and gets its own page.
Framer and Webflow were both on the table and both lost for the same two reasons. Price: a recurring subscription is a real cost for a student, and it only grows. And this was my first project on Payload; I wanted to learn it somewhere real, with a real user who would tell me when something was wrong.
Cloudflare keeps it running for almost nothing. Five dollars a month covers hosting for several websites, and another five covers image hosting and processing. Ten dollars a month runs this site and everything else I have deployed. For a portfolio belonging to a student, that is the difference between a site she keeps and a site she cancels.
Getting the images right took more passes than I expected. The first version looked blurry on large displays, so I raised the quality and reworked the compression until detail held up at full width. While the full-size image loads, the browser shows a blurred placeholder so the page never jumps or flashes empty. Media is served from its own domain, straight from Cloudflare, which keeps loading fast without putting the images behind another service.
Conclusion
MIRI is live at miri.design and she runs it herself. She has published fifteen works on it so far, and since launch she has not needed me to put anything online: she writes it, uploads it, and it is on the site. She moved from a platform that decides how her work is seen to a domain where she decides.
It was also my first project on Payload, and I got the scope of the CMS wrong. Today it controls the individual works, the header and footer, and roughly three lines of copy across the entire website. Everything else is written in code, which means a change to her about page or her contact text needs a deployment and me. On everything since, I give every page a block-based layout so anything on the site can be edited from the admin and no content change ever touches code. MIRI works, and she is happy with it, but that is the first thing I would change if I built it again.