adding download tracking

This commit is contained in:
itsamejms
2026-08-27 12:56:23 +01:00
parent 8be114f3d7
commit 89730b31a2
2 changed files with 79 additions and 46 deletions
+42 -31
View File
@@ -1,31 +1,42 @@
index.html,1787241043042,23ab785dcf609ba3797371f540ebbf0da174d23662bda7a91e7d7e5a5129b9f7
robots.txt,1787241042983,a9f80ec8139f358ccf245372fb028866625a4b0d19f44b3aadaeaa0ed1ff8e75
tailtrails-logo.png,1787241042983,dc932ef86246fbf78221ba9128af50a6845890fcbf82101e83c67171d8c520c9
app_store_button.svg,1787241042903,e163505e4516a4dad35281dc952f525f78907a21c49f95dba518a9d206ed45bf
placeholder.svg,1787241042982,e6d62457feaa2cf22a140b4ffae6cc1ec264e50991e369d61f901a3481f9229d
404.html,1787241043108,23ab785dcf609ba3797371f540ebbf0da174d23662bda7a91e7d7e5a5129b9f7
CNAME,1787241043103,dddc5976b778c369189842b7a4c661fb3088f02ceea7dc8d26565f179cd44f95
raw-blogs/walking-your-dog-in-the-algarve-hidden-dangers-every-owner-should-know.md,1787241042983,fba3a0a9b8e8aee35b3300f86363b84e37ac5ab64ab4c3788a3dede919f781e6
raw-blogs/top-10-hikes-to-do-with-your-dog-in-lagos-and-the-algarve.md,1787241042982,92dbf46e2d921d9366bb4ccfa4508a03867cfc6abd4c76d7c9ea576c86c158c7
raw-blogs/best-off-leash-areas-for-dogs-in-lagos-and-nearby.md,1787241042982,ba2e88fa252fc3bb096466b16e0abf91578415abdd4662b81efb324f257affe8
raw-blogs/off-leash-dog-rules-in-portugal-what-you-need-to-know-in-2026.md,1787241042982,7fbfcbe9b9b6f21837b322073f049857ca09935e07e568d42425c9ff3b15dfaf
raw-blogs/the-importance-of-variety-in-your-dogs-life-and-how-to-do-it-right.md,1787241042982,b9120edf84aab42cea63f9cec38c9c86652b3d9fd8b869fd4c84e871e74050d3
raw-blogs/how-to-choose-the-right-walk-for-your-dog-based-on-their-personality-and-needs.md,1787241042982,5c046464b0d04a334cd3c64b7571b2061d033ad3f3894dd0ff4065383e6ac41a
raw-blogs/how-to-give-a-reactive-dog-a-fulfilling-life-without-avoiding-the-world.md,1787241042982,cfaf693a02ce30c4453339a13bb7b45333803864c3ce3d4f42c75ec4a00572f5
assets/index-CU78BVRf.css,1787241043042,7c88342b634dcb962b09e80964ec25efb0417b3b84a9ea4d94a370b59e5ad4d0
landing/sad-dog.avif,1787241042982,0d8926a6e4d1ec1f42318c6ee351f17766d57ba0c222c155f0f499753c8a779e
landing/happy-dog.avif,1787241042978,71de609c9e5f4df9bab430649876c17de18696e808935691813da5e12cee8d6b
IMG_2725.PNG,1787241042899,27b6d2b3d3f0639b27edde4a6e4dafd7ff30361b12ed532eea83ea9ff52cc57b
assets/index-DmqQSK7M.js,1787241043042,c4e28b173525e94180d05b2f9b60f031ecb761ab9597cfa49a92763375f6f1bc
IMG_2722.PNG,1787241042891,5eb964eca487921be0a641ab01ef44a3a640bc33ee86ef8c78c47beb40c52212
blog-images/troy-bridges-lbRNtUZPXXQ-unsplash.jpg,1787241042945,7cccb32745ffa54a51afdaf9b1ada36ecec8270ff64d57144f2e7936d3800b47
IMG_2724.PNG,1787241042899,1a12277e84b449259e0553359d83de2506f3b85df4198c29d060549bbb5da1ba
blog-images/rafaella-waasdorp-EkzMdwI_YE4-unsplash.jpg,1787241042935,4b06dd88c4b9ee1bb93193f4efefaf5222b45156991d65237580552dbd53a498
blog-images/eric-ward-ISg37AI2A-s-unsplash.jpg,1787241042920,3fe77db2192fcbb773ae6700e784f576d2880d23f3de87675cca7df69e1d62de
blog-images/jamie-street-m4BkRRprvP0-unsplash.jpg,1787241042925,102144b1e3ed572e2e614a7a30bad26d015306005d324e74a67f9391ac7b649d
blog-images/joe-caione-qO-PIF84Vxg-unsplash.jpg,1787241042930,a818800a0777643571a2ac506ab2721e55314c5cc0805d2792fdca20c1f567ef
blog-images/dagmar-klauzova-afBc-k2luH4-unsplash.jpg,1787241042914,a7ef47c2af03e7671ec94dded168d201559b5149c2cafe77b324cbc42f310ad5
blog-images/afra-ramio-cp2HCVzguw4-unsplash.jpg,1787241042907,f5ba745a987168b658a9091041de9bc4ebdbc2e43a6f1f2574c543dc2ed4113c
blog-images/tatum-bergen-Vt3odrTM4cQ-unsplash.jpg,1787241042938,805d069b8cdaa4a18a655f10f6059cc54609c5f568d7c7ea374f19840776d044
IMG_2721.PNG,1787241042890,80bf0292743b93e52e260ea32a347ba5189b6ebcdcf26307c9ec098546dd1b61
hero.mp4,1787241042966,68cf98422d073512761ac7c4a0aa9b11e88b71381c1874422048a578c344af92
sitemap.xml,1787573193389,eebe70665ef79f87a32566248900c372688ca0b13750bbcee125c84c611ceab7
robots.txt,1787573193389,4e56d029b0da59036be99744415e24b97556c7955ed0d3202612fc0d36a35258
placeholder.svg,1787573193389,e6d62457feaa2cf22a140b4ffae6cc1ec264e50991e369d61f901a3481f9229d
index.html,1787573195514,e822fb905a474ec26172cb1e4e7b9dec811ebbdaef07db5123018d19dea671b0
CNAME,1787573200332,dddc5976b778c369189842b7a4c661fb3088f02ceea7dc8d26565f179cd44f95
tailtrails-logo.png,1787573193389,dc932ef86246fbf78221ba9128af50a6845890fcbf82101e83c67171d8c520c9
404.html,1787573200337,e822fb905a474ec26172cb1e4e7b9dec811ebbdaef07db5123018d19dea671b0
app_store_button.svg,1787573193386,e163505e4516a4dad35281dc952f525f78907a21c49f95dba518a9d206ed45bf
terms/index.html,1787573197049,863d78a8fdfc936dc628ba4459dfc5750207bf1816911b57a1afe68c3dfd94e5
privacy/index.html,1787573197051,42c22ed8bfe6ccd7d5b8089b3c0db0f8dab8c2931c9ed22fa7ef860fe4ddd105
forget-me/index.html,1787573197050,4830e3c322dd113efeb1ddd0a072960b0bedfefd063c2c4dc15fee6d46490287
finalize-forget-me/index.html,1787573198611,ec59d5e1a61a99115e731cc140aadb1118d2ee5541c7f224f52fb4a6a5af7515
compare/index.html,1787573195509,a426d44750b4a0d18b94cea20828ba7025a500d5f2344a00811d867a20e53243
compare/tailtrails-vs-wooftrax/index.html,1787573195511,96af966306b1db89c7ead43a34381ed214301ecfd941d780133dbc22455cce7d
compare/tailtrails-vs-tractive/index.html,1787573195513,c0ca647dfe701a7ac8226d3ca0f6848ad03ea5ff540f6eb929f7772e5a1667cb
compare/tailtrails-vs-fitbark/index.html,1787573197053,21f75aefdc89b4286fca05970e000f390f63a648ed48ce9f8ce0defc69cb4edb
compare/tailtrails-vs-alltrails/index.html,1787573197052,aa3b220d646d424e566e6b6e936f356d24c5669d27e5bfcf8fd43e7666072068
compare/tailtrails-vs-pitpat/index.html,1787573197047,f77ef4cceb59aaca88191c765be7525f890f1675031c4e2908d4eb81a056e93a
compare/dog-walking-apps-compared/index.html,1787573195516,db5756c2f54343ce17fa047ea0fd476b632b4a0e0466bd6eb1cab454b8f9fb82
blog/walking-your-dog-in-the-algarve-hidden-dangers-every-owner-should-know/index.html,1787573200125,537170ced0afc95d1345f221467b6949c7c4885e9f58ddb89573c4c3368ca593
blog/top-10-hikes-to-do-with-your-dog-in-lagos-and-the-algarve/index.html,1787573200119,1d7a48f089cc387fa14c296e94a42314f0a0bcfe182d846349e395763e0965fd
blog/index.html,1787573195512,d2bc7353a87e4fd07d0479e0282dbca953300cd70c69a1621f6231996e920245
blog/off-leash-dog-rules-in-portugal-what-you-need-to-know-in-2026/index.html,1787573198639,80abdda2ef8249e7c03f61bf1aa6962b294185af79eb3783cd1a648e6a1ed210
blog/the-importance-of-variety-in-your-dogs-life-and-how-to-do-it-right/index.html,1787573198632,ac8760804a2c0fd35bc72ebe37e698efc2db670ab2b54e613da40f4282ef094e
blog/how-to-give-a-reactive-dog-a-fulfilling-life-without-avoiding-the-world/index.html,1787573198630,3f35f74b91555c8e3f7a4acdc1e6a36c66a5a95543208f53a2ce2b50e416cca1
blog/how-to-choose-the-right-walk-for-your-dog-based-on-their-personality-and-needs/index.html,1787573198618,6ec70284672a38e275b3de4ad8e7ea2fcd2073e8f91085f6c91fa82e61508a62
blog/best-off-leash-areas-for-dogs-in-lagos-and-nearby/index.html,1787573198612,0799c716aa3c38e5429b19889888e00f8bb628fa7e8d07d6565156b2b252246b
IMG_2725.webp,1787573193386,bfe4a75735b310314a236b26a08a525ce2d2966f87e84cbe40c7a084a7aa8f20
assets/index-9jOtkHos.css,1787573193449,5badd77138919e57a3fccc950e51b00995da4110906db8c9acf9c1b348c4c8be
IMG_2724.webp,1787573193386,e50a66f3160a66c868e9b97abb27e4aaa5b2aa29f2e2428b78ee54833595fbd1
landing/sad-dog.avif,1787573193389,0d8926a6e4d1ec1f42318c6ee351f17766d57ba0c222c155f0f499753c8a779e
IMG_2722.webp,1787573193386,c3adbf1ec75b9a9889f36aa718ff3181de001cdac3a21eee2e77f31d039891c2
IMG_2721.webp,1787573193386,67128a011932525cc1a77e0cb308ac78316d724195019f1e22d54d30662d4cd7
landing/happy-dog.avif,1787573193388,71de609c9e5f4df9bab430649876c17de18696e808935691813da5e12cee8d6b
blog-images/how-to-choose-the-right-walk-for-your-dog-based-on-their-personality-and-needs.webp,1787573193387,f047c76817f981820594af9055793b98176963390542bec1c051b6f4453a5e8d
blog-images/best-off-leash-areas-for-dogs-in-lagos-and-nearby.webp,1787573193386,97fa3221a06bb8c6d4bb69e616b3d4517fde9bfe2df3d7011ae47caac43e4214
blog-images/the-importance-of-variety-in-your-dogs-life-and-how-to-do-it-right.webp,1787573193387,4d42f7bd52ca5b20b4c78d52a60a7dcd43ee3cd15d148a007271f1ac3c2031f3
blog-images/how-to-give-a-reactive-dog-a-fulfilling-life-without-avoiding-the-world.webp,1787573193387,92013aa4a607cfe392031aee2b6a3f5b72c50b729f0c4341f50a0ebf02b68011
blog-images/top-10-hikes-to-do-with-your-dog-in-lagos-and-the-algarve.webp,1787573193387,5c02bfc30b448caf8be68ce2deac1ddd5a3843ac093966d15ccd7c044889cd05
blog-images/walking-your-dog-in-the-algarve-hidden-dangers-every-owner-should-know.webp,1787573193387,76b85496e334eb315e4ca39a1fe9564c99f712603fe1b026f6e0a30de98a2cb1
blog-images/off-leash-dog-rules-in-portugal-what-you-need-to-know-in-2026.webp,1787573193387,f72e5f5b5c8be4b504d0f1121467ff37bd837e4f9a2c71308c5c3d56428e3451
assets/index-CYzlMjx8.js,1787573193449,438cf62b35967ea9a4bcd7771264063d8d7895f9667b463056a6d7a159ebc462
+37 -15
View File
@@ -1,25 +1,47 @@
import { useEffect } from "react";
import { APP_STORE_URL, PLAY_STORE_URL } from "@/lib/storeLinks";
const APP_STORE_URL =
"https://apps.apple.com/app/tailtrails-life-unleashed/id6758676111";
const PLAY_STORE_URL =
"https://play.google.com/store/apps/details?id=com.tailtrailsclub.app";
const FALLBACK_URL = "https://tailtrails.club";
// Matches the buckets the API stores (router/tracking_router.py).
type Platform = "ios" | "android" | "macos" | "desktop";
function detectPlatform(ua: string): Platform {
if (/iPad|iPhone|iPod/.test(ua) && !(window as any).MSStream) return "ios";
if (/android/i.test(ua)) return "android";
if (
/Macintosh|MacIntel|MacPPC|Mac68K/.test(ua) ||
(navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1)
) {
// macOS desktop, or an iPad requesting desktop sites (Mac UA) → App Store.
return "macos";
}
return "desktop";
}
const Download: React.FC = () => {
useEffect(() => {
const ua = navigator.userAgent || navigator.vendor || (window as any).opera;
if (/iPad|iPhone|iPod/.test(ua) && !(window as any).MSStream) {
window.location.replace(APP_STORE_URL);
} else if (/android/i.test(ua)) {
window.location.replace(PLAY_STORE_URL);
} else if (/Macintosh|MacIntel|MacPPC|Mac68K/.test(ua)) {
// macOS desktop — send to the App Store (iOS listing)
window.location.replace(APP_STORE_URL);
} else {
// Windows / Linux / other desktops — send to Google Play
window.location.replace(PLAY_STORE_URL);
}
// 1. Grab the channel source from the URL parameters (e.g., ?src=sticker)
const urlParams = new URLSearchParams(window.location.search);
const trafficSource = (urlParams.get("src") || "direct_or_unknown").slice(0, 64);
const platform = detectPlatform(ua);
// 2. Record the click to our own API (fire-and-forget, survives redirect).
const envBase = (import.meta as any).env?.VITE_API_URL as string | undefined;
const base = envBase ? envBase.replace(/\/$/, "") : "http://localhost:8080";
const blob = new Blob(
[JSON.stringify({ source: trafficSource, platform })],
{ type: "application/json" }
);
navigator.sendBeacon?.(`${base}/tracking/download`, blob);
// 3. Redirect to the store for this platform.
const redirectUrl =
platform === "ios" || platform === "macos" ? APP_STORE_URL : PLAY_STORE_URL;
window.location.replace(redirectUrl);
}, []);
return (