← All writing
·5 min read

One link is a bottleneck

Instagram gives every account exactly one link in the bio. For a personal account, that is fine. For a brand running two entities, six channels, four subdomains, and an international competition, one link is not a link. It is a bottleneck. Here is how I think about replacing it.

The constrained real estate

Instagram gives every account exactly one link in the bio. One URL, one chance, one slot. You can change it — once a week, if you are disciplined — but you cannot make it dynamic, you cannot segment it by audience, and you cannot know what each visitor actually wanted.

For a personal account, that is fine. You have one thing to point at, and you point at it.

For a brand running two entities, six channels, four subdomains, and an international competition, one link is not a link. It is a bottleneck. Every campaign fights for the same slot. The slot always loses.

The third-party answer, and why it failed

The obvious answer is a third-party linktree. We tried it. It worked for a while.

Then it stopped working, and the moment it stopped is the reason I am writing this.

The campaign was the Aurora Awards — an international gem and jewelry competition we launched in 2025. Entries started flowing in. Each entry was a Reel on Instagram. The static bio link was pointing at the main website. The third-party linktree had a post grid below the static links, but the Aurora entries were just regular Instagram posts in that grid. They were indistinguishable from everything else. The most important campaign of the year was getting the same treatment as a Tuesday morning post.

I looked at the analytics on the third-party tool. It said "X clicks." I did not know which clicks were from the Aurora campaign. I did not know which clicks were from the static link to the main site. I did not know if the grid was even surfacing the entries I cared about.

That was the moment. The link in the bio could not be a third-party tool anymore. It had to be a surface that knew about our backend, our campaigns, and our competition.

An Instagram bio link is not a link. It is a tiny homepage — 720 pixels wide on a phone, scannable in a thumb tap, but a homepage nonetheless. The constraints of the slot (mobile-first, one-tap reach, no JS overhead) are real, but they are the constraints of a homepage, not the constraints of a hyperlink.

Once you start thinking of it as a homepage, the design questions change. What goes at the top? The most important thing right now — a featured campaign, a featured entry, a featured surface. What goes below? The official destinations, the latest posts, the social accounts. What does the analytics layer need to do? Per-link attribution, not just click counts.

A bio link is the most constrained real estate in modern marketing. Build it like you would build a homepage — because that is what it is.

Don Norman's argument in The Design of Everyday Things — that good design is mostly invisible, that it answers the user's question before the user has to ask it — applies here in the same way it applies to a door handle or a kitchen tap. The visitor should not have to think about which button to press. The button that matters most should be the one that is obviously the right one. The constraint of the slot makes this harder, not easier to ignore. Steve Krug's first principle in Don't Make Me Think"don't make me think" — is the right north star for the surface. If the visitor has to stop and parse the page, the page has already lost.

The principle: self-host what you can know

The deeper issue with the third-party tool was not the features. It was the epistemology. The tool could not know what we knew. It could not know which posts were tied to the Aurora campaign. It could not know that a particular post was a competition entry. It could not know that one campaign was more important than another. It could not know anything that lived in our backend.

A third-party tool can never know enough to fill the gap, because the gap is precisely the knowledge that lives in your own systems.

So we self-host. A small page on Cloudflare Pages, fed by the same backend that runs the rest of the operation. A featured campaign slot that anyone on the team can edit by changing a config file. A post grid that joins two systems in SQL. A UTM layer that knows which post brought which click. No third-party tool in the loop.

The principle: self-host any surface that needs to know what you know. The third-party tool gives you speed; the self-hosted surface gives you truth. When the truth is the bottleneck, self-host.

The shape of the fix

What the fix looks like in practice is small. A worker proxy in front of the backend. A single SQL query that joins the social media table and the Aurora table. A 1-hour ISR cache so the worker only calls the backend 24 times a day. A UTM utility that tags every outbound link. A config file for the featured campaign. A few CSS rules to make the grid look like a homepage, not a wall of links.

Nothing on that list is technically novel. Every piece is a well-known pattern. The novelty is in the assembly — the recognition that the same backend that runs the rest of the operation can run the link in the bio too, and that doing so dissolves the bottleneck the third-party tool could never dissolve.

What I am not saying

I am not saying every brand should self-host their bio link. Most brands should use a third-party tool. The third-party tools are fast, free, and good enough for most cases. The decision to self-host is only worth it when the link in the bio is the highest-intent surface you have, and the third-party tool cannot surface the knowledge that lives in your backend.

I am also not saying the link in the bio is the most important surface a brand has. It is one of the most constrained, which is not the same as the most important. The Instagram feed is more important. The website is more important. The email list is more important. The link in the bio is the door — the moment between attention and intent — and the door deserves a surface that knows what you know.

Where this connects

This is the same pattern I keep returning to. The Certificate Intelligence Ecosystem is the same insight applied to the QR code on a gem certificate: the moment of highest intent deserves a surface that knows what you know, not a stamp. The Digital Operations Ecosystem is the same insight applied to the social media workflow: the operations team deserves systems that know what they know, not daily dirty work.

The wider literature points in the same direction, even when it does not use this language. Barry Schwartz's The Paradox of Choice argues — and I have come to believe this in operation, not just in theory — that more options do not yield more satisfaction; they yield paralysis and lower follow-through. The third-party linktree gave us a wall of identical-looking links. The self-hosted surface gives us one featured thing and a tight grid. The third-party tool maximized the choice. The self-hosted surface minimized it. The self-hosted surface wins on every metric that matters, because the moment of highest intent is exactly the moment at which choice is the most expensive. Schwartz would not be surprised.

The pattern: identify the moment of highest intent. Build the surface around it. Self-host if the third-party tool cannot know enough. Wire it to the same backend that runs the rest of the operation. Make the page dumb, the backend smart. Make the marketing team a single config-file change away from a new campaign.

How many surfaces in a brand deserve this treatment is an open question. More than most brands assume.