Skip to content

Biolinks

The Biolinks app is a link-in-bio page builder. Users create customizable landing pages with multiple links, then share a single URL (typically for social media profiles). The app tracks page views and link clicks, and supports multiple pages per user.

  • Page creation with title, slug, and configurable status (active/draft)
  • View and click tracking displayed as aggregate stats on the dashboard
  • Multi-page support — users can manage multiple biolink pages
  • Page management with settings and listing sub-routes
RoutePurpose
/business/apps/biolinksDashboard with stats, nav cards, and recent pages
/business/apps/biolinks/pagesFull page listing
/business/apps/biolinks/pages/newCreate a new biolink page
/business/apps/biolinks/pages/[id]Edit an individual page
/business/apps/biolinks/settingsBiolinks app settings

The server load function calls two service functions from $lib/apps/biolinks/services/index.js:

FunctionDescription
getStats(userId)Returns page_count, total_views, and total_clicks
listPages(userId)Returns all biolink pages; dashboard shows the 5 most recent

Each page record includes: id, title, slug, status (active or draft), and created_at.

The dashboard is organized into four sections:

  • Header with “New Page” button linking to the creation form
  • Stats grid — three Card components showing Pages, Views, and Clicks counts with corresponding icons
  • Navigation cards — two cards linking to Pages (full listing) and Settings
  • Recent pages list — a Card listing the 5 most recent pages with title, slug, status badge, and creation date

Pages use color-coded badges:

  • activedefault variant (primary color)
  • Other statuses — secondary variant (muted)
  • Slug-based URLs — each page has a slug displayed as /{slug} in the list, which maps to the public-facing biolink URL
  • Dashboard limit — the recent pages list is capped at 5 items server-side (pages.slice(0, 5)) with a “View All” link to the full listing
  • Parallel data loading — stats and pages are fetched concurrently with Promise.all