A personal site updates twice a year. CMS subscriptions and full deploy pipelines are sized for sites that update twice a week. The middle ground: one HTML file at your own domain.
You ship a project worth showing. You write a short essay you want findable. A recruiter asks for a CV link instead of a PDF attachment. Each of these wants the same thing — a small URL at your own domain, easy to send, showing the current version of your work.
Most ways to do this overshoot. The site updates four times a year; the tooling is sized for sites that update four times a week.
Three properties, in order of how often each one matters:
Your own URL. yourname.com/portfolio reads differently than yourname.notion.site/portfolio or username.github.io. For a designer, a freelancer, anyone whose work is partly judged by how their own surface looks, the URL is the framing.
Renders correctly across devices. Recruiters open the URL on their phone. Clients open it during meetings. The page has to read clean on whatever they're holding.
Easy to update without ceremony. When a new project ships or a role changes, the update should take ten minutes — not "log into the CMS, find the page, navigate the editor, save, deploy."
The lower-priority properties (multi-page navigation, blog, contact form, animations) are nice to have but rarely the deciding factor. Most personal sites work as one page.
| Shape | Custom domain | Setup time | Ongoing cost | Best for |
|---|---|---|---|---|
| Webflow / Squarespace | yes (paid) | half a day | from $15/mo | Sites that update weekly, multi-page, e-commerce |
| WordPress (self-hosted) | yes | a day | $5-15/mo | Sites that genuinely need a CMS, plugin ecosystem |
| GitHub Pages | yes, no extra charge | an hour | $0 on the free plan, but the repo has to be public | Devs comfortable with git, fine with rebuild on push and with their source being readable |
| Notion public page | paid plan + a per-domain add-on | minutes | $0 free; $20/mo with your own domain ($10 Plus + $10 custom-domain add-on, both billed monthly; the add-on drops to $8/mo/domain paid annually) | Quick links, ongoing edits, doesn't mind Notion frame on free |
| Static HTML at private-link host | yes (paid tier) | 30 min | $5-15/mo | One-page sites, infrequent updates, own URL matters |
Other vendors' prices checked 2026-08-11 against their own pricing pages and docs — Webflow's cheapest custom-domain tier, Notion's custom-domain add-on, and GitHub's own documentation for Pages plan availability. Prices move; confirm on their site before you commit.
The last shape covers the case the others don't fit cleanly — a one-page personal site at your own URL, updated by re-uploading the HTML, without a CMS or a deploy pipeline.
For someone starting from "I have nothing":
yourname.com (or www.yourname.com) to the host. The setup walkthrough for custom domains covers the DNS detail; takes 10-15 minutes.When you ship a new project two months later, the update is: edit the HTML (or re-export from Notion / Figma), drop the new file at the same URL, done. If the change is small — a new project title, a date, a line of copy — an in-browser HTML editor is enough; nothing installs, and the file never leaves your machine. No git push, no CMS log-in, no deploy queue.
For people who already keep their portfolio in Notion (write the project descriptions, paste the screenshots, link the case studies):
... menu → Export → HTML (with included subpages if multi-section).The win over Notion's native public page: the URL is yours, the page reads as your work product not as a Notion document, and you keep editing in Notion (which is what most people are already doing for the content).
Test the flow with a one-page draft — drop the HTML, see how the URL behaves, walk through the experience on your own phone. Free, no card, 7-day self-destruct on the anonymous tier (upgrade to permanent before pointing your domain at it).
A few small things, mostly framing:
None of these are dramatic. Together they're the difference between the portfolio reading as your professional surface and reading as a doc you happened to make in a tool.
A static HTML at a private-link host is the wrong shape for sites that genuinely need a CMS:
For the single-page personal portfolio that updates a few times a year, the static-HTML shape covers exactly what's needed without paying for the rest. For time-bound event microsites, the same pattern works with expiry layered on. For something that needs to update weekly with blog posts, the right shape is different.
Solo plan ($4.99/mo) keeps the portfolio permanent and removes the footer. Studio plan ($14.99/mo) adds custom domain so the URL is yourname.com directly. The per-document searchable opt-in that makes the portfolio page indexable is on every tier — one page free, five on Solo, unlimited on Studio — while the rest of your account stays default-private. Password protection — handy for a private CV link aimed at specific recruiters — is free on every account.
Three quick questions:
For most one-page portfolio / about / CV sites, the answers are: yearly, yes, yes. Static HTML at custom domain with searchable opt-in fits all three.
That third answer is the unusual one, and it's worth understanding rather than just switching on: making one document searchable while the rest of the account stays private is an exception to a default, not a mode change — which is exactly right for a portfolio that should be found while the client work behind it stays unlisted.
Your freebie is the first thing a stranger ever taps in your bio — and a raw storage or design-tool URL gives you away before the page loads. Why a link-in-bio freebie should ride on a branded, own-domain link, and how to do it with no website and no server.
How analysts, freelancers, and agencies hand AI-built client work over as a private, branded link instead of a raw chat export — so the work reads as a finished decision, not a transcript of the model making it.
"Client portal" is one word covering two very different jobs. One of them needs software with logins and permissions. The other one is four links in an email, and buying the first when you needed the second is how a solo practice ends up administering a system nobody logs into.
miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.