feature/services-pages (#7)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful

Reviewed-on: #7
Co-authored-by: mifi <badmf@mifi.dev>
Co-committed-by: mifi <badmf@mifi.dev>
This commit was merged in pull request #7.
This commit is contained in:
2026-03-10 00:51:18 +00:00
committed by Mike Fitzpatrick
parent 66640fa535
commit 7012f0fdd2
98 changed files with 4119 additions and 1189 deletions

View File

@@ -0,0 +1,171 @@
<script lang="ts">
import Navigation from '$lib/components/Navigation.svelte';
import { privacyPolicy } from '$lib/data/privacy-policy';
const navItems = [{ label: 'Home', href: '/', umamiEventLabel: 'home' }];
</script>
<Navigation items={navItems} page="privacy-policy" />
<main id="main" class="legal-page">
<div class="container narrow">
<header id="header" class="legal-header">
<h1>{privacyPolicy.title}</h1>
<p class="legal-last-updated">Last updated: {privacyPolicy.lastUpdated}</p>
</header>
<div class="legal-content">
{#each privacyPolicy.intro as para}
<p>{para}</p>
{/each}
{#each privacyPolicy.sections as section (section.id)}
<section
id={section.id}
class="legal-section"
aria-labelledby={`${section.id}-heading`}
>
<h2 id={`${section.id}-heading`}>{section.heading}</h2>
{#each section.body as para}
<p>
{#if section.id === 'contact' && para === 'legal@mifi.ventures'}
<a href="mailto:legal@mifi.ventures"
>legal@mifi.ventures</a
>
{:else if section.id === 'contact' && para === 'https://mifi.ventures'}
<a href="https://mifi.ventures" rel="noopener noreferrer"
>https://mifi.ventures</a
>
{:else}
{para}
{/if}
</p>
{/each}
{#if section.list}
<ul>
{#each section.list as item}
<li>{item}</li>
{/each}
</ul>
{/if}
{#if section.subsections}
{#each section.subsections as sub (sub.title)}
<div class="legal-subsection">
<h3>{sub.title}</h3>
{#each sub.body as para}
<p>{para}</p>
{/each}
{#if sub.list}
<ul>
{#each sub.list as item}
<li>{item}</li>
{/each}
</ul>
{/if}
</div>
{/each}
{/if}
</section>
{/each}
</div>
<nav class="legal-cross-links" aria-label="Related legal pages">
<a href="/terms-of-service">Terms of Service</a>
</nav>
</div>
</main>
<style>
.legal-page {
padding: var(--space-xxl) 0;
background-color: var(--color-bg);
}
.narrow {
max-width: var(--max-narrow-width);
margin: 0 auto;
padding: 0 var(--space-md);
}
.legal-header {
margin-bottom: var(--space-xl);
}
.legal-header h1 {
font-family: var(--font-family-heading);
font-size: var(--font-size-xxl);
font-weight: var(--font-weight-bold);
line-height: var(--line-height-heading);
color: var(--color-text);
margin: 0 0 var(--space-sm) 0;
}
.legal-last-updated {
font-size: var(--font-size-medium);
color: var(--color-text-tertiary);
margin: 0;
}
.legal-content {
font-size: var(--font-size-base);
line-height: var(--line-height-base);
color: var(--color-text);
}
.legal-content p {
margin: 0 0 var(--space-md) 0;
}
.legal-section {
margin-bottom: var(--space-xl);
}
.legal-section h2 {
font-family: var(--font-family-heading);
font-size: var(--font-size-xl);
font-weight: var(--font-weight-semibold);
line-height: var(--line-height-tight);
color: var(--color-text);
margin: 0 0 var(--space-md) 0;
}
.legal-subsection {
margin-top: var(--space-lg);
}
.legal-subsection h3 {
font-family: var(--font-family-heading);
font-size: var(--font-size-large);
font-weight: var(--font-weight-semibold);
line-height: var(--line-height-tight);
color: var(--color-text);
margin: 0 0 var(--space-sm) 0;
}
.legal-section ul,
.legal-subsection ul {
margin: 0 0 var(--space-md) 0;
padding-left: var(--space-lg);
}
.legal-section li,
.legal-subsection li {
margin-bottom: var(--space-xs);
}
.legal-cross-links {
margin-top: var(--space-xxl);
padding-top: var(--space-xl);
border-top: 1px solid var(--color-border);
}
.legal-cross-links a {
color: var(--color-primary);
text-decoration: underline;
text-underline-offset: 0.2em;
}
.legal-cross-links a:hover {
color: var(--color-primary-hover);
}
</style>

View File

@@ -0,0 +1,28 @@
import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo';
const BASE = 'https://mifi.ventures';
const PATH = '/privacy-policy';
const PAGE_URL = `${BASE}${PATH}`;
const privacyPageMeta: PageMeta = {
title: 'Privacy Policy | mifi Ventures',
description:
'Privacy Policy for mifi Ventures LLC. Describes information we collect, how we use it, messaging policy (SMS), data security, and your rights. Last updated March 5, 2026.',
canonical: PAGE_URL,
jsonLd: [
{
'@type': 'WebPage',
'@id': `${PAGE_URL}#webpage`,
name: 'Privacy Policy | mifi Ventures',
url: PAGE_URL,
dateModified: '2026-03-05',
publisher: { '@id': `${BASE}/#organization` },
inLanguage: 'en-US',
},
],
};
export const load: PageLoad = () => {
return { meta: privacyPageMeta };
};