B

They killed bento.me
We built something better

A link-in-bio platform built on an anti-greed foundation where the price drops the more people subscribe.

Product Lead · Web · Next.js · Convex

Accent
Scroll
Opportunity
When Linktree killed bento.me, it left a gap for designers who had built their online presence there. Every replacement used the same extractive model: charge the highest possible subscription price forever. Bhann takes a different approach. Its pricing system prevents that extraction because every new subscriber lowers the price for everyone, including existing subscribers.
Decisions left out
We did not build social post scheduling, content calendars, or other features needed to match Linktree. This was not a strategy to stand out, but a matter of integrity. A lean team should not ship features it cannot maintain well. The scope stayed within what we could do well. The comparison table openly shows the gap with Linktree's feature set.
Honest assessment
About 130 users generated €80 in three months. The anti-greed model works technically, but the product sits in a crowded market and few people found it. The structure is sound, but we never solved distribution. The platform will remain live while it is personally useful and as proof that decremental pricing can work. Without a marketing strategy, however, even a good model stays invisible.
0
commits in 4 months
Dec 2025 – Apr 2026
21tiers
all decreasing
€30/year → €6/year floor
0+
card types in the editor
Social · media · interactive
0
TypeScript source files
96 TSX · 36 TS

01 · Origin

Linktree acquired bento.me and then they killed it

Bento.me was a link-in-bio tool built around a bento-grid layout, a flexible canvas of cards for links, social profiles, media, and whatever else a person wanted to surface. It was good and it had an audience (of mostly Designers) that liked it. Then Linktree acquired it, let it run for about 2 years and then shut it down. The loss was personal: the studio's own bento profile was among the casualties, therefore we started working on Bhann the week the shutdown email arrived.

The obvious response was to build a clone, which is what we did at first: fill the gap, serve displaced users, and use standard SaaS pricing. That would have been the sensible business choice. Bhann took another path: build a replacement whose structure prevents it from doing what Linktree did (getting acquired and killed).

Not a clone. A villain seeking vengeance for the death of a loved one, and its weapon is the pricing model.

Linktree Pro costs (at the time of writing) €54 a year ($4.50 a month). That price does not change based on how many people use Linktree, the more subscribers they have, the more revenue they extract. This is the standard model: grow subscribers, grow revenue, the two are proportional, the company keeps the difference between cost and price forever.

Bhann reverses that relationship. Subscriber growth lowers the price for everyone, including existing subscribers. The product still has to support itself, but any margin beyond that goes back to the people paying for it. Its structure prevents the platform from extracting more value from a captive user base.

02 · The Staircase

Price drops as more subscribers join

The pricing model has 21 tiers. Before any code was written, the staircase lived in a spreadsheet for a month and was redrawn a dozen times. Tier 1, Pioneer, covers the first 99 paying subscribers at €30 per year. At 100 subscribers, the price drops to €26 for everyone and the tier becomes Founder. It falls to €22 at 500, €19 at 1,000, and continues in steps to a minimum of €6 per year at 1 million subscribers. Free accounts do not move the staircase; only paying subscribers count.

Three rules define the model. First, everyone pays the current market price or less, never more. When the platform reaches a new tier, every subscriber gets the lower price. Second, your tier index locks when you subscribe. If you join at €30 and the price falls to €19, you renew at €19, not €30. Third, the lock can only improve. If your locked tier index is ever higher than the current market tier, you pay the lower market price at renewal.

Tier name Subscribers Annual vs. Linktree Pro
PioneerNow 0 · 99 €30/yr €24 cheaper
Founder 100 · 499 €26/yr €28 cheaper
Architect 500 · 999 €22/yr €32 cheaper
Catalyst 1,000 · 1,999 €19/yr €35 cheaper
Builder 2,000 · 4,999 €16/yr €38 cheaper
· · · 16 more tiers · · ·
Legacy 1,000,000+ €6/yr €48 cheaper, floor reached

The staircase is implemented in convex/pricing.ts. One stats table tracks the current number of paying subscribers; free accounts never affect it. At each subscription event, the system finds the current tier index and saves it on the user record as lockedTierIndex. At renewal, it charges the lower of the locked price and current market price. Any tie favours the user.

TypeScript · Convex pricing.ts · tier lock logic
// At subscription time: lock to current tier index.
// HIGHER index = LOWER price (better for user).
// Keep existing lock if it's already better.
const newLockedTierIndex = user.lockedTierIndex !== undefined
  ? Math.max(user.lockedTierIndex, currentTierIndex)
  : currentTierIndex;

// At renewal: pay whichever is lower, locked or current market.
const actualAnnualPrice = Math.min(lockedAnnualPrice, marketAnnualPrice);

There is also a lifetime option at €163.57, a one-time payment, no renewals, no subscriptions. The amount is not round, it is what the model's NPV calculation suggested was fair given projected infrastructure costs and the floor price trajectory, basically projected user cost for the next 10 ish years, after that they cost me money.

Feature
Bhann
Linktree Pro
Annual price (current)
€30/yr (dropping)
€54/yr ($4.50/mo)
Price drops with growth
Yes, structurally
Never
Early subscriber benefit
Locked to best price seen
None
Lifetime option
Yes, €163.57
No
Bento-grid profile editor
Yes
No
Social post scheduler
No
Yes
Analytics (views, clicks, geo)
Yes
Yes
Public financial transparency
Yes, live metrics page
No

Linktree does things Bhann cannot (yet) like social scheduling and a large partner ecosystem. The comparison is not a claim that Bhann beats Linktree across every dimension. It is that for a creator who only needs a link-in-bio page, which is most of them, Bhann paid plan starts at €30 versus €54 and the gap widens every time a new subscriber joins.

03 · The Editor

A bento grid of intent

The profile editor is a drag-and-drop bento grid built with react-grid-layout. Cards come in 4 preset sizes, can go anywhere, and can be styled for their content. Desktop and mobile layouts are stored separately, so the same cards can appear in different positions. Each layout can be designed for its screen instead of making mobile a collapsed desktop view.

The card system supports 67+ distinct types. Social platform links, embedded media, commerce integrations (Gumroad, Ko-fi, Patreon, Stripe), professional portfolio cards (GitHub, Dribbble, Figma, Behance, Calendly), interactive toys (a tone matrix sequencer, an etch-a-sketch, an analogue clock), and a full-length case study card with block content edited in a Tiptap rich text editor. The tone matrix sequencer was built in a single evening, mostly as a joke, and then refused to be cut, it remains one of the most fun interactive cards. The set is large enough to cover almost any creator's real use case while keeping the interface coherent.

CARD CATEGORIES

Social media Music / media Commerce Portfolio Interactive Email capture Testimonials FAQ accordion Service menu Event RSVP Case study Map NFT gallery Tour dates Availability

Public profiles are server-rendered and edge-cached using Next.js ISR with a 60-second revalidation window. The first request after a cold edge miss hits the Convex backend; every subsequent request within the minute is served from Cloudflare's edge network without touching the database. Profile edits appear within 60 seconds without a redeploy.

TypeScript · Next.js [username]/page.tsx
// ISR: revalidate every 60 seconds.
// First request misses cache → hits Convex → caches at edge.
// Subsequent requests served from Cloudflare in <100ms TTFB.
export const revalidate = 60;

// Edge runtime for sub-100ms cold starts on Cloudflare.
export const runtime = "edge";

// LLM-friendly profile data embedded in server-rendered HTML.
// AI agents can read public profiles without client-side JS.
const llmProfile = generateLLMProfile(profile);

Paid Subscribers can configure profile themes: solid or patterned backgrounds, card border radius, spacing, and a full set of colour tokens. Individual cards can override their background and text colours. A card-theme registry maps named themes to CSS variable sets. A ThemeStyleInjector component applies them at runtime without re-rendering the grid.

THE DESIGN SYSTEM

The 67+ card types form a traditional component library. Each card has defined variants, a token-based theme contract, and a clear separation between layout and visual style. The ThemeStyleInjector applies CSS variable sets to individual cards without changing the grid, so a profile's full visual language can change without a DOM reflow. The same token architecture controls profile themes and card overrides, much like semantic design tokens manage global and local styles in a mature system. This makes 67 card types feel like one editor instead of 67 separate design problems.

Profile editor · bento grid · card palette

04 · The Platform

Radical transparency, public metrics, early badges

The anti-greed foundation only works if it is verifiable. A platform that claims to lower prices as it grows, but does not show you whether it is actually growing, is just a marketing pitch. The staircase only descends if the subscriber count actually climbs, so the climb has to be public and Bhann publishes its financials in real time.

The transparency page shows live MRR, total users, paying users, monthly infrastructure costs, initial build spend (€1,365.17), current balance, and a sustainability gauge as well as the ratio of income to expenses. The data comes directly from the Convex backend and refreshes in real time (every day at midnight). Anyone can see whether the platform is covering its costs before they decide to subscribe.

Transparency page
Live MRR, paying users, expenses, and a sustainability gauge. The data is public and real-time, so you can check the platform's health before subscribing.
bhann.me/transparency
Staircase calculator
A public interactive tool that tests whether decremental pricing can work for any SaaS. Configure the stack, growth rate, and conversion to see projections at every tier milestone.
bhann.me/staircase
Founder badges
Signup records each person's join order. The first 100 get a gold Founder badge, and the next 900 get Early Adopter. Badges stay permanently visible on public profiles.
join order → badge

Analytics are built into every published profile: views, unique visitors, card clicks, top countries, and referrers. Data is stored in a single consolidated record per profile, not one row per event, updated incrementally on each view or click. This keeps query costs proportional to the number of profiles, not the number of events, which matters at scale on a platform where infrastructure cost is part of the pricing argument.

TECH STACK

Next.js 16 + Edge runtime
ISR public profiles cached at Cloudflare edge. Sub-100ms TTFB. LLM-friendly server-rendered HTML for AI agents.
App router · ISR · revalidate: 60
Convex
Real-time backend, no separate API server. Database, server functions, cron jobs, and webhooks all in one. Live transparency metrics with zero infrastructure overhead.
Realtime · serverless · TypeScript
Clerk + Stripe
Authentication and payments. Stripe webhooks drive tier lock updates in Convex. Fallback checkout verification ensures no payment is missed if a webhook fails.
Auth · subscriptions · lifetime IAP
Transparency page · sustainability gauge · live metrics

Outcomes

The model is the product.

With 130 users and about €80 generated in three months, this launch failed by any standard growth measure. The product's structure is sound, but it entered a crowded category without a marketing strategy. Few people saw it because visibility was never part of the plan.

The numbers do not change one fact: the model works. Staircase pricing is implemented, auditable, and live. The transparency page shows real figures in real time. The platform does what it promised and includes only what the team can maintain, the same principle that kept the social scheduler out of scope. The idea was not the problem. The problem was expecting it to spread by itself.

The lesson is about sequence. A new pricing model needs to be explained clearly and repeatedly to the right audience. The mistake was building the model and assuming its story would spread by itself. The platform will stay live while it remains personally useful and as proof that decremental pricing is practical, not theoretical. If the marketing ever arrives, the product is ready.

Bhann was built with Cursor and Claude Code, including the decremental pricing model, the bento editor's drag-and-drop layout, the ISR caching layer, and the Stripe webhook and tier-lock system. AI did not make the architecture decisions: whether the pricing model was sound, which 67 card types to build and how to combine them, or why transparency supported the anti-greed argument. Without LLMs as implementation partners, a designer without a CS degree could not have shipped a full-stack Next.js + Convex platform. With them, it took four weeks.

Try Bhann