Hosted bio-link pages at oneurl.live
OneURL gives each user a profile page at oneurl.live/username that collects their links behind the single URL a social media bio allows. The project bills itself as an open-source Linktree alternative, licensed BSD-3-Clause. The hosted service is still up: on October 27, 2026, its homepage counted 617 profiles. Its official GitHub repository, KartikLabhshetwar/oneurl, now returns a 404, and the code survives only in a copy.
Deduplicated click stats and community-voted link collections
- Built-in click analytics: the dashboard breaks clicks down by link, country, device, browser and OS, and counts unique visitors. Bots, spotted by their user agent, are left out by default.
- Duplicate clicks dropped: a visitor identified by a fingerprint of IP, user agent, accepted languages and encodings counts once per link per 24 hours.
- Do Not Track honored: the API records nothing when the browser sends
DNT: 1. - Public collections: link lists filed by category (UI libraries, resources, sites, tools) that signed-in users vote up or down.
- Link previews: a separate Express service fetches the image and description of each linked page.
- Drag-and-drop avatars, stored on UploadThing. Without an UploadThing account, the rest of the app still works.
A copy stuck at January 2026, wired to Google and Neon
The official repository no longer resolves. On October 27, 2026, github.com/KartikLabhshetwar/oneurl returns a 404 on the web and through the API, while the oneurl.live homepage still links to it. The code can still be read in the suryanshsingh2001/oneurl copy, which GitHub lists as the parent of 46 forks. It holds 87 commits, the last one from January 24, 2026, with no release or tag, and its package.json sits at version 0.1.0. For a self-hosted link page whose code is still published, LinkStack, written in PHP, shipped version 4.8.8 on October 22, 2026.
Google is the only way in. Better Auth is set up with Google as its sole provider, with no email or password login. Signing up on oneurl.live takes a Google account, and a self-hosted instance needs Google OAuth credentials.
A plain PostgreSQL server needs a proxy. The README lists a "PostgreSQL database (local or cloud like Neon)" as a prerequisite, but lib/db.ts connects Prisma only through the Neon adapter. The Neon driver underneath reaches a non-Neon Postgres only behind a WebSocket proxy, per the driver's README. The copy ships no Dockerfile or Compose file, which leaves two Node services to run: the Next.js front end on port 3000 and the Express service on 3001.
Every click row keeps the visitor's IP and user agent. The link_click table stores the raw IP address and the full user-agent string next to the aggregated fields. Country comes only from Cloudflare or Vercel headers (oneurl.live runs on Vercel), so on any other host the column stays empty.
The UTM breakdown has nothing to show. The analytics service groups clicks by utm_source, utm_medium and utm_campaign, but the API parses those parameters from the URL of its own request, and the profile page calls /api/track without any. In the copy's code, no click from a profile ever fills those columns.
