Multi-app
One Worker, any number of apps
The hostname decides which app a request belongs to, so links carry no app ID in their path. Adding an app is a row in the database and a domain on the Worker.
Link manager · one Worker, many apps
gospur serves your app's links from your own domain: it opens the app when it's installed, renders a real preview card when it's shared in chat, and sends everyone else to the right store for their phone.
The line
Five stops, in the order they happen. Each one is a route on the same Worker.
Stop 01 — share
Your app sends the full link, preview text and all, to /create. The details are
stored and you get back a tidy /post/9Qd2 to share. The first save for an item
wins, so nobody can overwrite a preview afterwards.
Stop 02 — preview
When a chat app fetches the link, gospur answers with the title, description and image for that item, plus a generated share image. Apps that send richer fields — a room's rent, a job's title, a deal's dates — get a preview style that uses them.
Stop 03 — tap
gospur serves the Apple and Android association files for every domain it answers on, so the operating system hands the link to your app instead of the browser. New link types need no iOS release: the file lists them the moment you add them.
Stop 04 — install
/go reads the device and sends an iPhone to the App Store and an Android phone
to Google Play, while a desktop visitor sees both. An invite code rides along to Play as the
install referrer, so it survives the install.
Stop 05 — count
Every hit adds one to a daily counter: shares, landing page views, store taps and preview fetches, broken down by link type, chat app, store and country. Nothing about the person is recorded.
Also in the box
Multi-app
The hostname decides which app a request belongs to, so links carry no app ID in their path. Adding an app is a row in the database and a domain on the Worker.
Your domain
Every app gets <app>.gospur.link and can add its own domain, such as link.yourapp.com. Cloudflare issues the DNS record and certificate on deploy.
Link types
Posts, deals, events, businesses, activities — each type is a label you define, and it becomes the first segment of the path and the wording on the landing page.
Invites
Invite links show the code on the page and carry it into Google Play, so a new user still has it after signing up.
Dashboard
The dashboard checks the signed token Access adds to each request, so it stays shut even if the Access policy is later removed. Membership is per app: people see only their own.
Share images
Links render their own image at request time, drawn from the item's details and the app's icon, so a shared link looks composed rather than blank.
Short links
The bare domain is a shortener with an API key per app. Ask for a code, share it, switch it off when the campaign ends. Clicks land on that app's dashboard page alongside everything else.
# create a short link
curl -X POST https://gospur.link/v1/links \
-H "Authorization: Bearer $GOSPUR_KEY" \
-H 'content-type: application/json' \
-d '{"url":"https://example.com/spring-sale"}'
→ 201 { "url": "https://gospur.link/Ab3dE5f",
"code": "Ab3dE5f" }
# switch it off — it answers 404 from then on
curl -X DELETE https://gospur.link/v1/links/Ab3dE5f \
-H "Authorization: Bearer $GOSPUR_KEY"
Keys live on your servers, never inside the app, where anyone could pull them out. Only the hash of a key is stored, so a lost key is revoked rather than recovered.
Numbers
| Count | What it tells you |
|---|---|
| Shares | Links your app created. The size of the loop your users are actually running. |
| Page views | People who opened a link in a browser — usually the ones without the app yet. |
| Store taps | Taps on App Store or Google Play from a landing page. Your install intent, by link. |
| Preview cards | Chat apps fetching a link to build its card. This is where your links get shared. |
Taps that open an installed app never reach the Worker, so they aren't in these numbers — count those inside your app. What's here is aggregate from the start: daily totals per app, link, platform, country and detail. There's no row that belongs to a person.
Runs on
One Worker at the edge, one database, no servers to keep alive. Deploys in seconds and stays inside the free tiers at ordinary app volumes.