Openlynk
A dynamic-links & attribution platform - designed, built and shipped solo.
- Solo build
- 2025-2026
- Next.js / TypeScript
- Supabase / Postgres
- Flutter SDK
What it is, and why it exists.
Openlynk is a dynamic-links and deep-linking platform: smart links that route people to the right place across iOS, Android and web, with real-time analytics, custom domains and native SDKs. I designed, built and shipped the whole thing on my own - the Next.js/TypeScript dashboard, the Postgres/Supabase backend, the Flutter SDK, the documentation and the marketing site.
It exists because Firebase Dynamic Links was sunset and the alternatives - Branch, AppsFlyer - price out independent developers. Openlynk offers the same deep-linking capability with honest analytics, sub-50ms edge redirects and transparent pricing.
Four problems worth solving properly.
The decisions that made Openlynk trustworthy, not just shippable.
- 01
Getting attribution honest
Attribution began fully deterministic - match a click to an install or open from device and URL signals. But mobile clicks weren't reliably being recognised as mobile, so I layered in fingerprinting to keep the match rate high: a deterministic-plus-probabilistic mix. The harder problem was accuracy in the other direction. When a link is shared in WhatsApp or Slack, those apps fetch it to render a preview - and every unfurl looked exactly like a real click, inflating analytics with traffic no human generated. I built detection to identify and strip those non-human hits, so the numbers reflect actual users instead of preview bots.
- 02
Multi-tenant security in Postgres
Customer data is isolated per organisation (a 'workspace' in the UI); users join through memberships with owner, admin and member roles. Almost every table gates reads with an is_org_member(org_id) policy - links check membership through their app - while writes require is_org_owner or is_org_owner_or_admin. Sensitive columns like Firebase service-account JSON and API-key hashes are locked down with column-level REVOKE and reachable only through gated RPCs, and organisation creation has no client insert path at all. Heavy analytics aggregates and atomic multi-table operations run as SECURITY DEFINER RPCs, often service-role-only from API routes - so I aggregate in Postgres for speed instead of shipping raw rows to the client or fighting row-level security.
- 03
Uninstall detection via an SDK heartbeat
The Flutter SDK sends a lightweight heartbeat. When a device stops checking in, Openlynk can infer that the app was uninstalled - turning 'installs' into a real retention signal rather than a one-time count. It's the part of the SDK I'm proudest of.
- 04
Solo scope discipline
Openlynk started as a dynamic-links tool and grew into link analytics. Ad-network integration would round out the attribution story and it genuinely matters - but as a solo builder I deliberately did not build it yet. Shipping a focused, correct product mattered more than a broader one I couldn't maintain alone.
Click to insight, end to end.
- Link clickWeb / social share
- Edge redirectSub-50ms, global
- AttributionDeterministic + fingerprint, bot filter
- PostgresRLS + SECURITY DEFINER RPCs
- Dashboard & SDKAnalytics + heartbeat
Early, honest validation
Launched in 2026 with around 140 signups and 5+ paying customers on live pricing tiers. The point is not the size of the number - it is that the entire loop works solo: build, ship, charge, and support a real product that people pay for.
- Paying customers
- 5+
- Signups
- 140+
- Engineer (end-to-end)
- 1
Paying customers
Signups
Engineer (end-to-end)
A look at the product.




See it live.
Openlynk is running in production - explore it, or let's build something like it together.