Open ten developer portfolios in ten tabs and you will see the same site ten times. A large headline. A soft gradient behind it. Three cards in a grid, each with a rounded corner and a shadow that lifts on hover. A footer that says “built with Next.js”. The names differ. The sites do not.
This is not because developers are lazy. It is because the default is extremely good. Modern frameworks hand you a design system that looks professional out of the box, and professional is a safe thing to look. Nobody gets fired for shipping the gradient.
The problem is that safe and invisible are the same thing from a distance. If your portfolio is indistinguishable from the other nine tabs, then a visitor who is scanning — a recruiter with forty tabs, a potential client comparing three developers — has nothing to hold on to. They will remember that they looked at some portfolios. They will not remember yours.
The constraint does the work
The site you are reading is built around a single arbitrary decision: it is a deck of punch cards. Every project is one card. Cards have punched edges, monospace labels, a card code in the corner, and a paper texture instead of a gradient.
I did not choose this because punch cards are beautiful. I chose it because it is a constraint, and constraints make decisions for you.
When you have every option available — any font, any color, any layout — every choice is a fresh act of will, and you will usually default to whatever looks least wrong. When you have decided that the site is a deck of cards, a large number of questions answer themselves. Cards have edges. Cards have labels. Cards do not have a floating glassmorphism orb in the corner, because that is not a thing a card does. The design stops being a series of opinions and starts being a set of consequences.
A limited medium also forces you to be specific. If every project is a card, then every card must earn its space: a title that says what the thing is, a line about what it was for, a stack, a code. There is no room for a vague paragraph of mission statement, so the vague paragraph does not get written.
What it fixed
Hierarchy. With a strict card structure, there is exactly one place for the headline, one for the summary, one for the metadata. I could not keep adding emphasis until everything shouted. The result is a page where the eye moves in a predictable order, because the medium only permits one order.
Scope. A card holds a limited amount of information. That limit stopped me from writing four paragraphs about a project that took a weekend. It also made the empty fields obvious: if a project has no result to report, the results section simply does not render, and that absence is visible to me as I write. Scarcity is a very effective editor.
Voice. Monospace labels and punch codes push the writing toward the terse and factual. “CARD P-01 · SEP 2026” does not invite adjectives. I found myself writing “photos never leave the device” instead of “a delightful, privacy-first experience” — not because I am disciplined, but because the format has no patience for the second sentence.
What it cost
Honesty requires the other half of this.
Readability. Small monospace text in uppercase is harder to read than a normal sans-serif at 16px. I had to fight the aesthetic to keep the body copy at a comfortable size and the contrast above 4.5:1. Some of the labels are still smaller than I would like, and I know it. The punch-card look wants to be delicate; readable text wants to be plain. Those two things argue.
Mobility. A strong visual concept does not transfer. If I ever need to present this work as a PDF, a resume, a LinkedIn post, or a conference slide, the deck does not come with me. A plain portfolio degrades gracefully into other formats. A punch card does not — it is a website, and only a website.
There is also a maintenance tax. Every new section has to be justified against the concept. I cannot just drop in a testimonials block because testimonials are not a thing punch cards have. That is a good constraint most of the time and an annoying one when a client asks for something the metaphor cannot hold.
Try a limited medium
The lesson is not “make your portfolio look like mine”. The lesson is that picking a medium with rules beats picking a palette from a generator.
So pick a medium that is not a website. Lay your work out as shipping labels: consignee, contents, weight, handling. As boarding passes: seat, gate, class, destination. As a service manual: symptom, diagnosis, procedure, torque spec. As an index card catalogue: subject heading, cross-reference, date filed.
Each of those formats will tell you what belongs on the page and what does not. They will make some of your decisions for you, which is the point — you have limited attention, and spending it on “which shade of gray for this border” is a waste when you could be spending it on “what did this project actually change”.
The template is not the enemy. Invisibility is. A constraint you chose on purpose is the cheapest way out of it.