A link-in-bio page is one mobile screen of buttons under a name and a photo, so a text file that renders into a page is nearly the whole job. The extras people pay for are small and a prompt covers them: a redirect that counts each click, a stats page and a few themes. What you give up are the add-ons around the page: sign-up collection that runs for you, selling on the page, Instagram auto-replies and post scheduling, and routing links by rules, which sit on Premium.
Before you buildLinktree Free covers unlimited basic links. You pay mainly to remove the branding, get custom design and unlock analytics.
Build me a personal link-in-bio page to replace Linktree. Requirements: - Node.js 22 + TypeScript: a Fastify server with server-rendered pages (Eta) and one small CSS file. `npm start` serves the public page at http://localhost:4400/ and the stats page at /admin. - Content lives in ./links.yml: name, bio, avatar path, theme, social icons (name and URL) and an ordered list of links (title, URL, optional note, optional show_from and show_until dates). The file reloads on change; a broken file keeps the old page up and logs the error. - The page is mobile-first, under 50 KB without the avatar, and renders without JavaScript. Add Open Graph tags, a favicon and a proper title. - Each button points to /go/<id>, which records the click in better-sqlite3 (./data/clicks.db: link id, time, referrer host, browser family) and answers with a 302. Skip known bots. - Three themes as CSS files (light, dark, and one using an accent colour from links.yml); the page follows prefers-color-scheme unless a theme is fixed. - /admin sits behind one password from .env: clicks per link for 7 and 30 days, a daily chart drawn as inline SVG, top referrers, and CSV export of the table. - Single user. No accounts, no telemetry, local-first. Visitor IP addresses are never stored. - Out of scope: payments and sales, email or SMS collection, geo lookups, post scheduling. - README: setup, editing links.yml, putting it behind a domain with Caddy and HTTPS, and a note that the click counts come from my own server and are shared with nobody.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Linktree.
Add an importer to the link page app in this folder. Requirements: - `import-linktree <handle>` fetches https://linktr.ee/<handle> once, with a normal user agent and no retries, and extracts the title and URL of each link plus the bio and avatar. - Write the result to ./links.yml, keeping the order; never overwrite an existing file without --force. - Download the avatar to ./public/ and print the links that couldn't be read. - Only use it on your own page. - Update the README.
Add a sign-up block to the link page app in this folder. Requirements: - An optional block in links.yml with a heading and a button; the form posts to /subscribe. - Double opt-in: store the address as pending, email a confirmation link through SMTP settings in .env, and mark it confirmed when the link is opened. - Every email carries a one-click unsubscribe link; unsubscribed addresses are never re-added. - Rate-limit by IP without storing the IP, and add a hidden honeypot field. - A CSV export in /admin. Update the README with a reminder to check local consent rules.
Add QR codes to the link page app in this folder. Requirements: - /admin/qr shows a QR code for the public URL from PUBLIC_URL in .env, as SVG and as a 1024 px PNG, with a download button for each. - Optional per-link QR codes that point at /go/<id> so scans are counted like clicks, tagged as qr in the referrer column. - Use the qrcode package and no external service. - Update the README.
Add device rules to the link page app in this folder. Requirements: - A link in links.yml may list `ios`, `android` and `default` URLs. - /go/<id> picks the URL from the User-Agent, falling back to default, and records which one was used. - Tests with sample user agents for iPhone, Android, desktop Chrome and a bot. - Update the README.
Most people pay for ease: a themed page without branding and with click stats, edited from a phone in five minutes. Creators who sell or collect sign-ups through it pay for those pieces, and anyone whose link is already in print or pinned on a profile keeps paying rather than change every bio.
Estimate · A page this light runs on a free tier or a $5 VPS. A domain name is a separate yearly cost if you don't already own one. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | Unlimited basic links, email and phone sign-ups. |
| Starter | $8 | $6 | Personalized Linktree, unlimited featured links, basic analytics. |
| Pro | $15 | $12 | Everything in Starter plus Linktree branding removed, custom designs, selling at 0% fees and mailing-list integrations. |
| Premium | $35 | $30 | Everything in Pro plus link rules and routing, AI integrations, all-time analytics, data export, social media scheduling and Instagram auto-replies. |
| Agency or Enterprise | custom | — | Team seats, dedicated support and custom contracts. |
Free ('with restrictions') covers unlimited basic links plus email and phone sign-ups.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $15 a month on the Pro plan, $180 a year (checked 2026-10-14).
Email and phone sign-up collection with the list kept for you; Selling products and taking tips directly on the page; Instagram auto-replies and social post scheduling; Link rules and routing, which only Premium offers; Analytics broken down by city, country, device and referrer. If any of those matter to you, keep paying.
Yes: LinkStack (open source), LittleLink (open source), linkyee (open source).