You can find the entire privacy policy{" "}
here
diff --git a/src/routes/gaze/privacy.tsx b/src/routes/gaze/privacy.tsx
new file mode 100644
index 0000000..57045cc
--- /dev/null
+++ b/src/routes/gaze/privacy.tsx
@@ -0,0 +1,125 @@
+/**
+ * Gaze privacy policy — `gaze.freno.me/privacy` (task 10).
+ *
+ * Migrated verbatim from the legacy `src/routes/privacy-policy/gaze.tsx`
+ * route so there is zero content loss; the old route now 308-redirects here
+ * (see `src/routes/privacy-policy/gaze.tsx`). PageHead is site-aware (task 02)
+ * so the Gaze `titleSuffix` (` | Gaze`), canonical
+ * (`https://gaze.freno.me/privacy`), and OG image derive automatically — we
+ * only pass the base title.
+ *
+ * Internal links use the **public subdomain-relative paths** (`/contact`),
+ * which vercel.json rewrites to the internal `/gaze/contact` route prefix
+ * while leaving the browser URL clean — consistent with nav-config.ts and
+ * the canonical rule in page-head-meta.ts.
+ */
+import { A } from "@solidjs/router";
+import { PageHead } from "~/components/PageHead";
+
+export default function GazePrivacyPolicy() {
+ return (
+ <>
+
+
+
Gaze's Privacy Policy
+
Last Updated: February 9, 2026
+
+ Welcome to Gaze ('We', 'Us', 'Our').
+ Your privacy is important to us. This privacy policy will help you
+ understand our policies and procedures related to the collection, use,
+ and storage of personal information from our users.
+
+
+
+
+ 1. Personal Information
+
+
+
+
(a) Collection of Personal Data:
Gaze
+ is designed with privacy as a core principle. We currently do
+ not collect, store, or share any personal information from our
+ users. The app runs entirely on your device and does not require
+ any account creation or data transmission to external servers.
+
+
+
(b) Future Data Collection:
We may in
+ the future implement optional features such as analytics or
+ crash reporting. If we do, we will clearly inform users through
+ a privacy policy update and obtain explicit consent before
+ collecting any data.
+
+
+
(c) Data Removal:
Since we do not
+ collect any personal information, there is no data to remove. If
+ you have any concerns about our practices, please contact{" "}
+
+ here
+
+ .
+
+
+
+
+
+
+ 2. Third-Party Access
+
+
+
(a) No Third-Party Sharing:
We do not
+ share, sell, or transfer any personal information to third
+ parties. Currently, Gaze does not utilize any third-party services
+ that would collect user data. Any future third-party services we
+ may use will be transparently disclosed in our privacy policy.
+
+
+
+
+
+ 3. Security
+
+
+
(a) Data Protection:
Because Gaze does
+ not collect or store any personal information, there is minimal
+ data security risk. The app runs locally on your device using
+ standard macOS security practices. Any configuration data stored
+ locally on your device is encrypted using system-provided
+ mechanisms.
+
+
+
+
+
+ 4. Changes to the Privacy Policy
+
+
+
(a) Updates:
We may update this privacy
+ policy periodically, especially if we introduce new features that
+ involve data collection. Any changes to this privacy policy will
+ be posted on this page. We encourage users to review this policy
+ regularly to stay informed about how we protect their information.
+
+
+
+
+
+ 5. Contact Us
+
+
+
(a) Reaching Out:
If there are any
+ questions or comments regarding this privacy policy, you can
+ contact us{" "}
+
+ here
+
+ .
+
+
+
+
+ >
+ );
+}
diff --git a/src/routes/inputhalo/privacy.tsx b/src/routes/inputhalo/privacy.tsx
new file mode 100644
index 0000000..595a41c
--- /dev/null
+++ b/src/routes/inputhalo/privacy.tsx
@@ -0,0 +1,159 @@
+/**
+ * InputHalo privacy policy — `inputhalo.freno.me/privacy` (task 10).
+ *
+ * Net-new privacy policy for the InputHalo subdomain. InputHalo is a macOS
+ * menu bar application (`LSUIElement: true`,
+ * `LSApplicationCategoryType: public.app-category.productivity`) — a
+ * productivity utility that lives in the system menu bar. Following the task
+ * notes, Gaze's privacy policy is the template for macOS menu bar apps
+ * (both are local-only menu bar utilities), so this policy mirrors Gaze's
+ * structure and language while describing InputHalo's own practices.
+ *
+ * Data practices stated here reflect InputHalo as shipped:
+ * - No account is required and none is created.
+ * - The app runs entirely on your device; no personal information is
+ * collected, stored, or transmitted to external servers.
+ * - Settings and any cached state are stored locally using standard
+ * macOS mechanisms and are never sent off-device.
+ *
+ * PageHead is site-aware (task 02): only the base title is supplied; the
+ * ` | InputHalo` suffix, `https://inputhalo.freno.me/privacy` canonical, and
+ * OG image are derived automatically. Internal links use public
+ * subdomain-relative paths (`/contact`) consistent with nav-config.ts and
+ * page-head-meta.ts.
+ */
+import { A } from "@solidjs/router";
+import { PageHead } from "~/components/PageHead";
+
+export default function InputHaloPrivacyPolicy() {
+ return (
+ <>
+
+
+
InputHalo's Privacy Policy
+
Last Updated: February 9, 2026
+
+ Welcome to InputHalo ('We', 'Us',
+ 'Our'). Your privacy is important to us. This privacy
+ policy will help you understand our policies and procedures related
+ to the collection, use, and storage of personal information from our
+ users.
+
+
+
+
+ 1. Personal Information
+
+
+
+
(a) Collection of Personal Data:
{" "}
+ InputHalo is designed with privacy as a core principle. We
+ currently do not collect, store, or share any personal
+ information from our users. The app runs entirely on your
+ device as a menu bar utility and does not require any account
+ creation or data transmission to external servers.
+
+
+
(b) Local-Only Settings:
Any
+ preferences, configuration, or cached state InputHalo maintains
+ is stored locally on your device using standard macOS
+ mechanisms (such as the user defaults system). This data never
+ leaves your device and is not transmitted to us or to any
+ third-party service.
+
+
+
(c) Future Data Collection:
We may in
+ the future implement optional features such as usage analytics
+ or crash reporting. If we do, we will clearly inform users
+ through a privacy policy update and obtain explicit consent
+ before collecting any data. Until then, no data of any kind is
+ transmitted off your device.
+
+
+
(d) Data Removal:
Since we do not
+ collect any personal information, there is no server-side data
+ to remove. To clear InputHalo's local data at any time, you
+ can remove the app from your Mac, which deletes the locally
+ stored settings alongside it. If you have any concerns about our
+ practices, please contact{" "}
+
+ here
+
+ .
+
+
+
+
+
+
+ 2. Third-Party Access
+
+
+
+
(a) No Third-Party Sharing:
We do not
+ share, sell, or transfer any personal information to third
+ parties. Currently, InputHalo does not utilize any third-party
+ services that would collect user data. Any future third-party
+ services we may use will be transparently disclosed in our
+ privacy policy.
+
+
+
(b) No Network Telemetry:
InputHalo
+ does not phone home. The app does not make network requests to
+ our servers or to any analytics, advertising, or tracking
+ endpoint as part of its normal operation. The only network
+ activity the app performs is whatever you explicitly initiate
+ through its features.
+
+
+
+
+
+
+ 3. Security
+
+
+
(a) Data Protection:
Because InputHalo
+ does not collect or store any personal information, there is
+ minimal data security risk. The app runs locally on your device
+ using standard macOS security practices. Any configuration data
+ stored locally on your device is managed using system-provided
+ mechanisms and is not transmitted off your device.
+
+
+
+
+
+ 4. Changes to the Privacy Policy
+
+
+
(a) Updates:
We may update this privacy
+ policy periodically, especially if we introduce new features that
+ involve data collection. Any changes to this privacy policy will
+ be posted on this page. We encourage users to review this policy
+ regularly to stay informed about how we protect their information.
+
+
+
+
+
+ 5. Contact Us
+
+
+
(a) Reaching Out:
If there are any
+ questions or comments regarding this privacy policy, you can
+ contact us{" "}
+
+ here
+
+ .
+
+
+
+
+ >
+ );
+}
diff --git a/src/routes/lineage/privacy.tsx b/src/routes/lineage/privacy.tsx
new file mode 100644
index 0000000..e83b434
--- /dev/null
+++ b/src/routes/lineage/privacy.tsx
@@ -0,0 +1,123 @@
+/**
+ * Life and Lineage privacy policy — `lineage.freno.me/privacy` (task 10).
+ *
+ * Migrated verbatim from the legacy
+ * `src/routes/privacy-policy/life-and-lineage.tsx` route so there is zero
+ * content loss; the old route now 308-redirects here (see
+ * `src/routes/privacy-policy/life-and-lineage.tsx`). PageHead is site-aware
+ * (task 02) so the Lineage `titleSuffix` (` | Life and Lineage`), canonical
+ * (`https://lineage.freno.me/privacy`), and OG image derive automatically —
+ * we only pass the base title.
+ *
+ * Per task instructions, the account-deletion reference now points at the
+ * Lineage subdomain's deletion flow, served at the **public subdomain-relative
+ * path** `/deletion` (vercel.json rewrites to `/lineage/deletion`). The
+ * contact link similarly uses `/contact` (public subdomain path), consistent
+ * with nav-config.ts and the canonical rule in page-head-meta.ts.
+ */
+import { A } from "@solidjs/router";
+import { PageHead } from "~/components/PageHead";
+
+export default function LineagePrivacyPolicy() {
+ return (
+ <>
+
+
+
Life and Lineage's Privacy Policy
+
Last Updated: October 22, 2024
+
+ Welcome to Life and Lineage ('We', 'Us',
+ 'Our'). Your privacy is important to us. This privacy policy
+ will help you understand our policies and procedures related to the
+ collection, use, and storage of personal information from our users.
+
+
+
+
+ 1. Personal Information
+
+
+
+
(a) Collection of Personal Data:
Life
+ and Lineage collects and stores personal data only if users opt
+ to use the remote saving feature. The information collected
+ includes email address, and if using an OAuth provider - first
+ name, and last name. This information is used solely for the
+ purpose of providing and managing the remote saving feature. It
+ is and never will be shared with a third party.
+
+
+
(b) Data Removal:
Users can request the
+ removal of all information related to them by visiting{" "}
+
+ this page
+ {" "}
+ and filling out the provided form.
+
+
+
+
+
+
+ 2. Third-Party Access
+
+
+
(a) Limited Third-Party Access:
We do not
+ share or sell user information to third parties. However, we do
+ utilize third-party services for crash reporting and performance
+ profiling. These services do not have access to personal user
+ information and only receive anonymized data related to app
+ performance and stability.
+
+
+
+
+
+ 3. Security
+
+
+
(a) Data Protection:
Life and Lineage
+ takes appropriate measures to protect the personal information of
+ users who opt for the remote saving feature. We implement
+ industry-standard security protocols to prevent unauthorized
+ access, disclosure, alteration, or destruction of user data.
+
+
+
+
+
+ 4. Changes to the Privacy Policy
+
+
+
(a) Updates:
We may update this privacy
+ policy periodically. Any changes to this privacy policy will be
+ posted on this page. We encourage users to review this policy
+ regularly to stay informed about how we protect their information.
+
+
+
+
+
+ 5. Contact Us
+
+
+
(a) Reaching Out:
If there are any
+ questions or comments regarding this privacy policy, you can
+ contact us{" "}
+
+ here
+
+ .
+
+
+
+
+ >
+ );
+}
diff --git a/src/routes/nessa/privacy.tsx b/src/routes/nessa/privacy.tsx
new file mode 100644
index 0000000..b2a2cbf
--- /dev/null
+++ b/src/routes/nessa/privacy.tsx
@@ -0,0 +1,192 @@
+/**
+ * Nessa privacy policy — `nessa.freno.me/privacy` (task 10).
+ *
+ * Net-new privacy policy for the Nessa subdomain. Modeled on the Life and
+ * Lineage policy (the template for products with user accounts, per the task
+ * notes) but scoped to Nessa's real data practices:
+ *
+ * - Authentication: user accounts are managed by Clerk
+ * (`src/server/nessa-auth.ts` verifies Clerk session JWTs via the Clerk
+ * Backend JWKS endpoint). Nessa itself does not store passwords — Clerk is
+ * the identity provider.
+ * - Community content: clubs, club challenges, club posts, post likes, and
+ * post comments (see `src/server/api/routers/nessa-community.ts`,
+ * `clubMemberships`, `clubChallenges`, `clubChallengeParticipations`,
+ * `clubPosts`, `clubPostLikes`, `clubPostComments`).
+ * - Storage: the Nessa data lives in a dedicated Turso (libSQL) database
+ * (`NessaConnectionFactory` in `src/server/db-connections.ts`), separate
+ * from the freno.me main DB and the Lineage DB.
+ *
+ * PageHead is site-aware (task 02): only the base title is supplied; the
+ * ` | Nessa` suffix, `https://nessa.freno.me/privacy` canonical, and OG image
+ * are derived automatically. Internal links use public subdomain-relative
+ * paths (`/contact`) consistent with nav-config.ts and page-head-meta.ts.
+ *
+ * Nessa does not yet ship a dedicated account-deletion form route; per the
+ * task notes ("reference the deletion flow if Nessa has user accounts"),
+ * account/data deletion is initiated by contacting us — Clerk user records
+ * and the associated Nessa community content are then purged manually until a
+ * self-serve flow is built.
+ */
+import { A } from "@solidjs/router";
+import { PageHead } from "~/components/PageHead";
+
+export default function NessaPrivacyPolicy() {
+ return (
+ <>
+
+
+
Nessa's Privacy Policy
+
Last Updated: February 9, 2026
+
+ Welcome to Nessa ('We', 'Us', 'Our').
+ Your privacy is important to us. This privacy policy will help you
+ understand our policies and procedures related to the collection, use,
+ and storage of personal information from our users.
+
+
+
+
+ 1. Personal Information
+
+
+
+
(a) Collection of Personal Data:
Nessa
+ authenticates users through Clerk, our third-party identity
+ provider. When you create or sign in to your Nessa account, the
+ information you provide to Clerk (such as your email address,
+ and depending on the sign-in method you choose, your name or
+ OAuth profile details) is processed by Clerk to establish and
+ maintain your account. Nessa stores only the Clerk user id
+ needed to associate your account with the content you create —
+ we do not receive or store your Clerk password.
+
+
+
(b) Community Content:
When you use
+ Nessa's community features — creating or joining clubs,
+ participating in challenges, posting, commenting, or liking
+ posts — the content you submit is stored in our database and
+ associated with your account. This includes club names,
+ descriptions, and rules you author, challenge progress and
+ completion data, and any posts, comments, or likes you create.
+ This content is visible to other members according to the
+ privacy settings of the club it belongs to.
+
+
+
(c) Data Storage:
Nessa's data is
+ stored in a dedicated Turso (libSQL) database that is separate
+ from the freno.me main database and the Life and Lineage
+ database. Your Nessa community content is never shared with or
+ accessible through those other products.
+
+
+
(d) Data Removal:
You can request the
+ removal of your Nessa account and all associated content by
+ contacting us{" "}
+
+ here
+
+ . On receipt of your request we will remove your account
+ record, your club memberships, your challenges and
+ participation data, and your posts, comments, and likes from the
+ Nessa database, and we will request that Clerk delete the
+ corresponding user record. A short grace period may apply while
+ the deletion is processed.
+
+
+
+
+
+
+ 2. Third-Party Access
+
+
+
+
(a) Limited Third-Party Access:
We do
+ not sell or rent your personal information. We share data with
+ third parties only as necessary to operate Nessa: Clerk
+ processes your authentication credentials and account metadata,
+ and Turso hosts the database in which your community content is
+ stored. We may also use third-party services for crash reporting
+ and performance profiling; these services receive only
+ anonymized data related to app performance and stability, never
+ personal user content.
+
+
+
(b) Clerk as Identity Provider:
Your
+ authentication credentials (such as your password, if you use
+ an email/password sign-in) are handled exclusively by Clerk
+ under Clerk's own privacy policy. Nessa never receives,
+ stores, or transmits your password. When you sign in, Nessa
+ receives a session token from Clerk that lets us identify you;
+ this token is verified on each request and is not persisted in
+ our database.
+
+
+
+
+
+
+ 3. Security
+
+
+
+
(a) Data Protection:
Nessa takes
+ appropriate measures to protect your account and the content you
+ create. Authentication is delegated to Clerk, which maintains
+ industry-standard security for credentials and session tokens.
+ Your community content is stored in the Nessa Turso database,
+ access to which is restricted to authenticated, authorized API
+ requests. We implement standard security protocols to prevent
+ unauthorized access, disclosure, alteration, or destruction of
+ user data.
+
+
+
(b) Club-Level Visibility:
Community
+ content you author is shared with other Nessa members only
+ according to the visibility rules of the club it belongs to.
+ Public clubs expose their content to any signed-in Nessa member;
+ private clubs restrict content to their members. You are
+ responsible for the content you choose to post.
+
+
+
+
+
+
+ 4. Changes to the Privacy Policy
+
+
+
(a) Updates:
We may update this privacy
+ policy periodically, especially if we introduce new features that
+ involve data collection. Any changes to this privacy policy will
+ be posted on this page. We encourage users to review this policy
+ regularly to stay informed about how we protect their information.
+
+
+
+
+
+ 5. Contact Us
+
+
+
(a) Reaching Out:
If there are any
+ questions or comments regarding this privacy policy, you can
+ contact us{" "}
+
+ here
+
+ .
+
+
+
+
+ >
+ );
+}
diff --git a/src/routes/privacy-policy/gaze.tsx b/src/routes/privacy-policy/gaze.tsx
index e7cc9f9..4f0249c 100644
--- a/src/routes/privacy-policy/gaze.tsx
+++ b/src/routes/privacy-policy/gaze.tsx
@@ -1,110 +1,25 @@
-import { A } from "@solidjs/router";
-import { PageHead } from "~/components/PageHead";
-
-export default function PrivacyPolicy() {
- return (
- <>
-
-
-
Gaze's Privacy Policy
-
Last Updated: February 9, 2026
-
- Welcome to Gaze ('We', 'Us', 'Our').
- Your privacy is important to us. This privacy policy will help you
- understand our policies and procedures related to the collection, use,
- and storage of personal information from our users.
-
-
-
-
- 1. Personal Information
-
-
-
-
(a) Collection of Personal Data:
Gaze
- is designed with privacy as a core principle. We currently do
- not collect, store, or share any personal information from our
- users. The app runs entirely on your device and does not require
- any account creation or data transmission to external servers.
-
-
-
(b) Future Data Collection:
We may in
- the future implement optional features such as analytics or
- crash reporting. If we do, we will clearly inform users through
- a privacy policy update and obtain explicit consent before
- collecting any data.
-
-
-
(c) Data Removal:
Since we do not
- collect any personal information, there is no data to remove. If
- you have any concerns about our practices, please contact{" "}
-
- here
-
- .
-
-
-
-
-
-
- 2. Third-Party Access
-
-
-
(a) No Third-Party Sharing:
We do not
- share, sell, or transfer any personal information to third
- parties. Currently, Gaze does not utilize any third-party services
- that would collect user data. Any future third-party services we
- may use will be transparently disclosed in our privacy policy.
-
-
-
-
-
- 3. Security
-
-
-
(a) Data Protection:
Because Gaze does
- not collect or store any personal information, there is minimal
- data security risk. The app runs locally on your device using
- standard macOS security practices. Any configuration data stored
- locally on your device is encrypted using system-provided
- mechanisms.
-
-
-
-
-
- 4. Changes to the Privacy Policy
-
-
-
(a) Updates:
We may update this privacy
- policy periodically, especially if we introduce new features that
- involve data collection. Any changes to this privacy policy will
- be posted on this page. We encourage users to review this policy
- regularly to stay informed about how we protect their information.
-
-
-
-
-
- 5. Contact Us
-
-
-
(a) Reaching Out:
If there are any
- questions or comments regarding this privacy policy, you can
- contact us{" "}
-
- here
-
- .
-
-
-
-
- >
- );
+/**
+ * Legacy Gaze privacy policy route — now a 308 permanent redirect to the Gaze
+ * subdomain (task 10).
+ *
+ * The privacy policy content has been migrated to
+ * `src/routes/gaze/privacy.tsx`, served at `gaze.freno.me/privacy`
+ * (vercel.json host rewrites map the Gaze subdomain to the internal
+ * `/gaze/*` prefix). Keeping this route as a permanent (308) server-side
+ * redirect — rather than a client `` — preserves SEO equity and
+ * gives installed / linked URLs a stable resolution path, mirroring how the
+ * legacy Life and Lineage marketing page was redirected in task 08.
+ *
+ * Implemented as a SolidStart API route (`GET` handler returning a Response)
+ * so the redirect happens before any rendering; the route no longer ships a
+ * page component.
+ */
+export function GET() {
+ return new Response(null, {
+ status: 308,
+ headers: {
+ Location: "https://gaze.freno.me/privacy",
+ "Cache-Control": "public, max-age=0, must-revalidate"
+ }
+ });
}
diff --git a/src/routes/privacy-policy/life-and-lineage.tsx b/src/routes/privacy-policy/life-and-lineage.tsx
index 6fb7e60..ffcb0ad 100644
--- a/src/routes/privacy-policy/life-and-lineage.tsx
+++ b/src/routes/privacy-policy/life-and-lineage.tsx
@@ -1,106 +1,25 @@
-import { A } from "@solidjs/router";
-import { PageHead } from "~/components/PageHead";
-
-export default function PrivacyPolicy() {
- return (
- <>
-
-
-
Life and Lineage's Privacy Policy
-
Last Updated: October 22, 2024
-
- Welcome to Life and Lineage ('We', 'Us',
- 'Our'). Your privacy is important to us. This privacy policy
- will help you understand our policies and procedures related to the
- collection, use, and storage of personal information from our users.
-
-
-
-
- 1. Personal Information
-
-
-
-
(a) Collection of Personal Data:
Life
- and Lineage collects and stores personal data only if users opt
- to use the remote saving feature. The information collected
- includes email address, and if using an OAuth provider - first
- name, and last name. This information is used solely for the
- purpose of providing and managing the remote saving feature. It
- is and never will be shared with a third party.
-
-
-
(b) Data Removal:
Users can request the
- removal of all information related to them by visiting{" "}
-
- this page
- {" "}
- and filling out the provided form.
-
-
-
-
-
-
- 2. Third-Party Access
-
-
-
(a) Limited Third-Party Access:
We do not
- share or sell user information to third parties. However, we do
- utilize third-party services for crash reporting and performance
- profiling. These services do not have access to personal user
- information and only receive anonymized data related to app
- performance and stability.
-
-
-
-
-
- 3. Security
-
-
-
(a) Data Protection:
Life and Lineage
- takes appropriate measures to protect the personal information of
- users who opt for the remote saving feature. We implement
- industry-standard security protocols to prevent unauthorized
- access, disclosure, alteration, or destruction of user data.
-
-
-
-
-
- 4. Changes to the Privacy Policy
-
-
-
(a) Updates:
We may update this privacy
- policy periodically. Any changes to this privacy policy will be
- posted on this page. We encourage users to review this policy
- regularly to stay informed about how we protect their information.
-
-
-
-
-
- 5. Contact Us
-
-
-
(a) Reaching Out:
If there are any
- questions or comments regarding this privacy policy, you can
- contact us{" "}
-
- here
-
- .
-
-
-
-
- >
- );
+/**
+ * Legacy Life and Lineage privacy policy route — now a 308 permanent redirect
+ * to the Lineage subdomain (task 10).
+ *
+ * The privacy policy content has been migrated to
+ * `src/routes/lineage/privacy.tsx`, served at `lineage.freno.me/privacy`
+ * (vercel.json host rewrites map the Lineage subdomain to the internal
+ * `/lineage/*` prefix). Keeping this route as a permanent (308) server-side
+ * redirect — rather than a client `` — preserves SEO equity and
+ * gives installed / linked URLs a stable resolution path, mirroring how the
+ * legacy Life and Lineage marketing page was redirected in task 08.
+ *
+ * Implemented as a SolidStart API route (`GET` handler returning a Response)
+ * so the redirect happens before any rendering; the route no longer ships a
+ * page component.
+ */
+export function GET() {
+ return new Response(null, {
+ status: 308,
+ headers: {
+ Location: "https://lineage.freno.me/privacy",
+ "Cache-Control": "public, max-age=0, must-revalidate"
+ }
+ });
}