Compare commits

7 Commits

Author SHA1 Message Date
66640fa535 Add scroll depth tracking
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-02-17 13:00:59 -03:00
5e0e211f80 Wrong pixel URI
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-02-17 12:47:42 -03:00
d66e9f7cb8 Update link tracking classifications
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-02-17 12:42:39 -03:00
39ba54e254 Add tracking to skip link
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-02-17 12:27:03 -03:00
56b5740393 Update snapshots
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-02-17 12:22:30 -03:00
3a94a50def Add tracking
Some checks failed
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/push/deploy unknown status
2026-02-17 11:47:35 -03:00
1349488827 Setup umami analytics
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-02-17 11:05:29 -03:00
9 changed files with 87 additions and 7 deletions

View File

@@ -3,7 +3,7 @@
"version": "2.0.0",
"private": true,
"repository": "https://git.mifi.dev/mifi-ventures/landing.git",
"packageManager": "pnpm@10.29.3+sha512.498e1fb4cca5aa06c1dcf2611e6fafc50972ffe7189998c409e90de74566444298ffe43e6cd2acdc775ba1aa7cc5e092a8b7054c811ba8c5770f84693d33d2dc",
"packageManager": "pnpm@10.30.0+sha512.2b5753de015d480eeb88f5b5b61e0051f05b4301808a82ec8b840c9d2adf7748eb352c83f5c1593ca703ff1017295bc3fdd3119abb9686efc96b9fcb18200937",
"description": "mifi Ventures landing site — SvelteKit static build with critical CSS inlining",
"type": "module",
"scripts": {

View File

@@ -8,6 +8,7 @@ set -e
SCRIPT_DIR="${BASH_SOURCE%/*}"
PROJECT_ROOT="${SCRIPT_DIR}/.."
cd "$PROJECT_ROOT"
PROJECT_ROOT="$(pwd)"
if command -v docker >/dev/null 2>&1; then
PLAYWRIGHT_IMAGE="${PLAYWRIGHT_IMAGE:-mcr.microsoft.com/playwright:v1.58.0-noble}"

View File

@@ -16,6 +16,8 @@
target="_blank"
rel="noopener noreferrer"
aria-label="LinkedIn profile (opens in new tab)"
data-umami-event="footer link"
data-umami-event-label="linkedin"
>
<LinkedInIcon size={15} />
LinkedIn
@@ -27,6 +29,8 @@
target="_blank"
rel="noopener noreferrer"
aria-label="GitHub profile (opens in new tab)"
data-umami-event="footer link"
data-umami-event-label="github"
>
<GithubIcon size={15} />
GitHub

View File

@@ -19,6 +19,8 @@
target="_blank"
rel="noopener noreferrer"
aria-label="Schedule a 30-minute intro call (opens in new tab)"
data-umami-event="schedule call"
data-umami-event-location="hero section"
>
Schedule a 30-minute intro call
<ExternalLinkIcon aria-label="Opens in new tab" size={17} />
@@ -28,6 +30,8 @@
class="btn btn-secondary icon-button"
download
aria-label="Download Mike Fitzpatrick's resume as PDF"
data-umami-event="download resume"
data-umami-event-location="hero section"
>
Download resume
<FiletypePdfIcon aria-label="PDF format file" size={17} />

View File

@@ -42,20 +42,45 @@
</span>
<ul class="nav-list">
<li class="nav-item">
<a href="#what-we-do" class="nav-link">Services</a>
<a
href="#what-we-do"
class="nav-link"
data-umami-event="navigation"
data-umami-event-label="services">Services</a
>
</li>
<li class="nav-item">
<a href="#impact" class="nav-link">Impact</a>
<a
href="#impact"
class="nav-link"
data-umami-event="navigation"
data-umami-event-label="impact">Impact</a
>
</li>
<li class="nav-item">
<a href="#how-we-work" class="nav-link">Process</a>
<a
href="#how-we-work"
class="nav-link"
data-umami-event="navigation"
data-umami-event-label="process">Process</a
>
</li>
<li class="nav-item">
<a href="#schedule" class="nav-link">Contact</a>
<a
href="#schedule"
class="nav-link"
data-umami-event="navigation"
data-umami-event-label="contact">Contact</a
>
</li>
</ul>
<div class="nav-item nav-back-to-top">
<a href="#header" class="nav-link">Back to top</a>
<a
href="#header"
class="nav-link"
data-umami-event="navigation"
data-umami-event-label="back to top">Back to top</a
>
</div>
</div>
</nav>

View File

@@ -16,6 +16,8 @@
target="_blank"
rel="noopener noreferrer"
aria-label="Schedule a 30-minute intro call (opens in new tab)"
data-umami-event="schedule call"
data-umami-event-location="schedule section"
>
Schedule a 30-minute intro call
<ExternalLinkIcon aria-label="Opens in new tab" size={17} />

View File

@@ -30,6 +30,12 @@
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-36F29PDKRT"></script>
<script defer src="/assets/js/ga-init.js"></script>
<script
defer
src="https://analytics.mifi.holdings/script.js"
data-website-id="72ac01ce-e7fc-4582-8593-703f15add8d5"
></script>
<script defer src="/assets/js/umami-helper.js"></script>
<title>{merged.title}</title>
<meta name="description" content={merged.description ?? ''} />
@@ -143,5 +149,15 @@
<script src="/assets/js/mobile-menu-helper.js" defer></script>
</svelte:head>
<a href="#main" class="skip-link">Skip to main content</a>
<a href="#main" class="skip-link" data-umami-event="skip to main content"
>Skip to main content</a
>
{@render children()}
<img
src="https://analytics.mifi.holdings/p/wQ9GYnLIg"
alt=""
width="1"
height="1"
role="presentation"
loading="eager"
/>

View File

@@ -0,0 +1,28 @@
// Umami: safe track (no-op if script blocked or not loaded)
function umamiTrack(name, data) {
if (
typeof window.umami !== 'undefined' &&
typeof window.umami.track === 'function'
) {
if (data != null) window.umami.track(name, data);
else window.umami.track(name);
}
}
// Umami: scroll depth (25%, 50%, 75%, 100%) once per milestone
const scrollMilestones = new Set();
function onScroll() {
const doc = document.documentElement;
const scrollTop = doc.scrollTop || document.body.scrollTop;
const scrollHeight =
(doc.scrollHeight || document.body.scrollHeight) - window.innerHeight;
if (scrollHeight <= 0) return;
const pct = Math.round((scrollTop / scrollHeight) * 100);
for (const m of [25, 50, 75, 100]) {
if (pct >= m && !scrollMilestones.has(m)) {
scrollMilestones.add(m);
umamiTrack('scroll-depth', { depth: String(m) });
}
}
}
window.addEventListener('scroll', onScroll, { passive: true });

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 KiB

After

Width:  |  Height:  |  Size: 577 KiB