<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: OBHOLZ SOLUTIONS</title>
    <description>The latest articles on DEV Community by OBHOLZ SOLUTIONS (@stefanobholz).</description>
    <link>https://dev.to/stefanobholz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3838927%2F5e1bdb48-cb48-491f-a984-74e722a71b5e.png</url>
      <title>DEV Community: OBHOLZ SOLUTIONS</title>
      <link>https://dev.to/stefanobholz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stefanobholz"/>
    <language>en</language>
    <item>
      <title>How I Built a Deep Linking Service That Resolves in Under 10ms (and Why You Might Need One)</title>
      <dc:creator>OBHOLZ SOLUTIONS</dc:creator>
      <pubDate>Mon, 06 Apr 2026 18:14:29 +0000</pubDate>
      <link>https://dev.to/stefanobholz/how-i-built-a-deep-linking-service-that-resolves-in-under-10ms-and-why-you-might-need-one-12o8</link>
      <guid>https://dev.to/stefanobholz/how-i-built-a-deep-linking-service-that-resolves-in-under-10ms-and-why-you-might-need-one-12o8</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Deep Linking Service for Mobile Apps Using Cloudflare Workers
&lt;/h1&gt;

&lt;p&gt;If you've ever built a mobile app, you know the pain of deep linking. You share a link, the user taps it, and you want them to land on the right screen inside your app -- not the home screen, not the app store listing, the &lt;em&gt;exact&lt;/em&gt; content they were looking for.&lt;/p&gt;

&lt;p&gt;Simple in theory. A nightmare in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The State of Deep Linking in 2026
&lt;/h2&gt;

&lt;p&gt;Firebase Dynamic Links was the go-to free option for years. Then Google shut it down. Overnight, thousands of apps needed a replacement.&lt;/p&gt;

&lt;p&gt;Branch.io is the market leader, but their pricing starts well into the hundreds per month. For an indie developer or early-stage startup, that's a hard sell for what is essentially a redirect service with some fingerprinting logic.&lt;/p&gt;

&lt;p&gt;I'm Stefan, an indie developer from Germany, and I decided to build something better. &lt;a href="https://linkhopp.com" rel="noopener noreferrer"&gt;LinkHopp&lt;/a&gt; is a deep linking platform that's fast, affordable, and developer-friendly. Here's how it works under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture: Edge-First Everything
&lt;/h2&gt;

&lt;p&gt;The core insight is that a deep link redirect is latency-sensitive. The user tapped a link and is waiting. Every millisecond matters.&lt;/p&gt;

&lt;p&gt;LinkHopp's redirect logic runs entirely on &lt;strong&gt;Cloudflare Workers&lt;/strong&gt; -- deployed to 300+ edge locations worldwide. When a user clicks a LinkHopp URL:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Worker receives the request at the nearest edge location&lt;/li&gt;
&lt;li&gt;Link metadata is fetched from &lt;strong&gt;Cloudflare KV&lt;/strong&gt; (cached at the edge)&lt;/li&gt;
&lt;li&gt;The Worker parses the User-Agent, determines the platform&lt;/li&gt;
&lt;li&gt;The user is redirected to the appropriate destination&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No origin server in the critical path. No cold starts. In my benchmarks, resolution typically takes &lt;strong&gt;single-digit milliseconds&lt;/strong&gt; at the edge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hard Part: Deferred Deep Linking
&lt;/h2&gt;

&lt;p&gt;Standard deep linking is straightforward -- if the app is installed, open it with the right parameters. But what about users who &lt;em&gt;don't&lt;/em&gt; have the app yet?&lt;/p&gt;

&lt;p&gt;Deferred deep linking means: user clicks link -&amp;gt; goes to app store -&amp;gt; installs app -&amp;gt; opens app -&amp;gt; lands on the correct content. The challenge is maintaining context across an app store install, where you lose all URL parameters.&lt;/p&gt;

&lt;p&gt;LinkHopp uses a 3-stage matching approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1: Deterministic match.&lt;/strong&gt; On Android, the Google Play referrer API can pass a click ID through the install. This gives an exact match about 30% of the time. On iOS, this rarely works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2: Fuzzy fingerprint.&lt;/strong&gt; When a user clicks a link, we store a fingerprint (IP hash + User-Agent + screen resolution + locale + timezone) in Cloudflare KV with a 24-hour TTL. When the app opens for the first time, the SDK sends the same signals, and we match against recent clicks. This is the workhorse -- it handles the majority of matches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3: Probabilistic fallback.&lt;/strong&gt; When Stage 2 returns multiple candidates, we use a narrower feature set and confidence scoring to pick the best match.&lt;/p&gt;

&lt;p&gt;In my testing, this achieves match rates around &lt;strong&gt;85-90%&lt;/strong&gt; depending on the traffic mix and platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  GDPR by Design
&lt;/h3&gt;

&lt;p&gt;All IP addresses are hashed (SHA-256) before storage. Fingerprints auto-delete after 24 hours. There's no persistent user tracking, no cross-app profiles, no data brokering. LinkHopp routes links -- that's it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating LinkHopp: Flutter SDK
&lt;/h2&gt;

&lt;p&gt;Getting started takes about 5 minutes. Install the package from pub.dev:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# pubspec.yaml&lt;/span&gt;
&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;linkhopp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^1.0.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize the SDK in your app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:linkhopp/linkhopp.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;WidgetsFlutterBinding&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ensureInitialized&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;LinkHopp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;apiKey:&lt;/span&gt; &lt;span class="s"&gt;'your_api_key'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;onDeepLink:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DeepLinkResult&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// result.path   -&amp;gt; e.g., "/products/42"&lt;/span&gt;
      &lt;span class="c1"&gt;// result.params -&amp;gt; {"referrer": "campaign_summer"}&lt;/span&gt;
      &lt;span class="c1"&gt;// result.matchType -&amp;gt; MatchType.exact | .fingerprint | .probabilistic&lt;/span&gt;
      &lt;span class="n"&gt;navigateTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;queryParams:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK handles Universal Links (iOS), App Links (Android), and deferred deep link matching automatically. The &lt;code&gt;matchType&lt;/code&gt; field tells you how the match was made so you can adjust your UX accordingly -- for example, showing a confirmation for probabilistic matches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Links via the REST API
&lt;/h2&gt;

&lt;p&gt;You can create deep links programmatically from your backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://linkhopp.com/api/v1/links &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "destination_url": "https://yourapp.com/products/42",
    "ios_url": "https://apps.apple.com/app/id123456",
    "android_url": "https://play.google.com/store/apps/details?id=com.yourapp",
    "campaign": "summer_launch",
    "utm_source": "devto",
    "utm_medium": "article"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"short_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xK9mQ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"short_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://linkhopp.com/xK9mQ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"destination_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://yourapp.com/products/42"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-28T10:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API also supports A/B test variants, geo-targeted redirects, and QR code generation. Full docs at &lt;a href="https://linkhopp.com/docs" rel="noopener noreferrer"&gt;linkhopp.com/docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Comparison: When to Use What
&lt;/h2&gt;

&lt;p&gt;I'm not going to pretend LinkHopp does everything Branch.io does. Branch has been around for over a decade, has hundreds of employees, and offers features like cross-platform attribution, deep integrations with ad networks, and NativeLink technology.&lt;/p&gt;

&lt;p&gt;Here's where the two differ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;LinkHopp&lt;/th&gt;
&lt;th&gt;Branch.io&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deep linking (iOS + Android)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deferred deep linking&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redirect speed&lt;/td&gt;
&lt;td&gt;Single-digit ms (edge)&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flutter SDK&lt;/td&gt;
&lt;td&gt;Yes (pub.dev)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Native SDK&lt;/td&gt;
&lt;td&gt;Yes (npm)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A/B Testing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Geo-Targeting&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QR Codes&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ad network attribution&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-platform user graphs&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;1,000 clicks/mo&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starting price&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$49/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Contact sales&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Choose Branch&lt;/strong&gt; if you need ad network attribution or cross-platform identity graphs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose LinkHopp&lt;/strong&gt; if you need reliable deep linking, deferred deep links, and analytics at a price that won't eat your runway.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Link previews dashboard&lt;/strong&gt; -- real-time preview of how your links render on social platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack/Discord webhooks&lt;/strong&gt; -- get notified when links hit milestones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted option&lt;/strong&gt; -- deploy LinkHopp on your own Cloudflare account&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;LinkHopp has a free tier with 1,000 clicks per month -- no credit card required. Paid plans start at $49/month.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://linkhopp.com" rel="noopener noreferrer"&gt;linkhopp.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Flutter SDK: &lt;a href="https://pub.dev/packages/linkhopp" rel="noopener noreferrer"&gt;pub.dev/packages/linkhopp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;React Native SDK: &lt;a href="https://npmjs.com/package/linkhopp-react-native" rel="noopener noreferrer"&gt;npmjs.com/package/linkhopp-react-native&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Docs: &lt;a href="https://linkhopp.com/docs" rel="noopener noreferrer"&gt;linkhopp.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have questions about the architecture or want to talk deep linking, drop a comment below. I built this as an indie developer and I'm happy to help anyone working through mobile deep linking challenges.&lt;/p&gt;

</description>
      <category>deeplink</category>
      <category>mobile</category>
      <category>flutter</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built a Branch.io alternative for $79/mo instead of $499</title>
      <dc:creator>OBHOLZ SOLUTIONS</dc:creator>
      <pubDate>Sun, 22 Mar 2026 21:11:08 +0000</pubDate>
      <link>https://dev.to/stefanobholz/i-built-a-branchio-alternative-for-79mo-instead-of-499-50oe</link>
      <guid>https://dev.to/stefanobholz/i-built-a-branchio-alternative-for-79mo-instead-of-499-50oe</guid>
      <description>&lt;h1&gt;
  
  
  I built a Branch.io alternative for $79/mo instead of $499
&lt;/h1&gt;

&lt;p&gt;Firebase Dynamic Links shut down in August 2025. Branch.io costs $499/month. I needed deep linking for my Flutter app and didn't want to pay enterprise prices for a feature that should be simple.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;LinkHopp&lt;/strong&gt; — deep linking, deferred deep linking, and campaign tracking for $49-99/month.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you're building a mobile app, you need deep links. When someone shares a link to your app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop&lt;/strong&gt; → open your website&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile + app installed&lt;/strong&gt; → open directly in the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile + app NOT installed&lt;/strong&gt; → go to App Store, then open the app to the right screen after install&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is called &lt;strong&gt;deferred deep linking&lt;/strong&gt;, and it's surprisingly hard to get right. Firebase Dynamic Links used to do this for free. Now it's dead. Branch.io does it, but costs $499/month with mandatory "Contact Sales" calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What LinkHopp Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deep Linking&lt;/strong&gt; — iOS Universal Links + Android App Links&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deferred Deep Linking&lt;/strong&gt; — 3-stage matching (Play Install Referrer → Clipboard → Fuzzy Fingerprint) with ~90% match rate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-10ms Redirects&lt;/strong&gt; — Cloudflare KV Cache at 300+ edge locations worldwide&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Campaign Tracking&lt;/strong&gt; — UTM parameters, click stats by device/country/day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A/B Testing&lt;/strong&gt; — Split traffic between multiple destinations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geo-Targeting&lt;/strong&gt; — Different URLs per country&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR Codes&lt;/strong&gt; — Generated per link via API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks&lt;/strong&gt; — Get notified when links are clicked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Banners&lt;/strong&gt; — "Open in App" banner for mobile web visitors&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cloudflare Workers (Redirect Engine + API)
  └── KV Cache (sub-10ms link lookups)
Supabase (PostgreSQL + Auth + RLS)
SvelteKit on Cloudflare Pages (Dashboard)
Flutter SDK + React Native SDK
Stripe (Billing)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Total infrastructure cost at 0 customers: &lt;strong&gt;~$5/month&lt;/strong&gt; (Supabase Pro). At 100 customers: ~$30/month. Margins are 95%+.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Matching Works
&lt;/h2&gt;

&lt;p&gt;When someone clicks a LinkHopp link on mobile and doesn't have the app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Before redirect&lt;/strong&gt;: We save a fingerprint (hashed IP, OS, device model, language, timezone, screen size) and generate a unique token&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android&lt;/strong&gt;: Token goes into the Play Store Install Referrer URL — Google passes it through to the app after install (~98% match rate)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;iOS&lt;/strong&gt;: Token gets written to clipboard via a brief interstitial page — app reads it on first launch (~60% with clipboard, users see iOS paste banner)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback&lt;/strong&gt;: Fuzzy fingerprint matching with weighted scoring — IP(40pts) + OS(15) + Device(15) + Language(10) + Timezone(10) + Screen(10), threshold 70/100&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fuzzy matching uses partial scores: "iOS 17.4" vs "iOS 17.5" gives 80% points, not 0. "de-DE" vs "de-AT" gives 70%. This catches OS updates and regional variants that would otherwise be false negatives.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes This Different from Branch
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Branch&lt;/th&gt;
&lt;th&gt;LinkHopp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;$499+/mo&lt;/td&gt;
&lt;td&gt;$49-99/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redirect Speed&lt;/td&gt;
&lt;td&gt;~200ms&lt;/td&gt;
&lt;td&gt;&amp;lt;10ms (KV Cache)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;"Contact Sales"&lt;/td&gt;
&lt;td&gt;Self-service, transparent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flutter SDK&lt;/td&gt;
&lt;td&gt;Wrapper around native&lt;/td&gt;
&lt;td&gt;Native Dart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firebase Migration&lt;/td&gt;
&lt;td&gt;"Contact Sales"&lt;/td&gt;
&lt;td&gt;Self-service import tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup Time&lt;/td&gt;
&lt;td&gt;Days&lt;/td&gt;
&lt;td&gt;10 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt;: 1,000 clicks/month, 1 project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starter ($49)&lt;/strong&gt;: 50,000 clicks/month, 3 projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro ($79)&lt;/strong&gt;: 200,000 clicks/month, 10 projects, A/B testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business ($99)&lt;/strong&gt;: 1M clicks/month, unlimited projects, custom domain&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://linkhopp.com" rel="noopener noreferrer"&gt;linkhopp.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;API Docs&lt;/strong&gt;: &lt;a href="https://linkhopp.com/docs" rel="noopener noreferrer"&gt;linkhopp.com/docs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Flutter SDK&lt;/strong&gt;: &lt;code&gt;linkhopp&lt;/code&gt; on pub.dev&lt;br&gt;
&lt;strong&gt;React Native SDK&lt;/strong&gt;: &lt;code&gt;@linkhopp/react-native&lt;/code&gt; on npm&lt;/p&gt;

&lt;p&gt;The onboarding takes 2 minutes: register → create project → get API key → create your first link.&lt;/p&gt;

&lt;p&gt;If you're migrating from Firebase Dynamic Links, there's a built-in import tool that converts your existing links automatically.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built solo with Cloudflare Workers + Supabase + SvelteKit. Questions? Ask in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>deeplink</category>
      <category>mobile</category>
      <category>flutter</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
