68 lines
2.9 KiB
TypeScript
68 lines
2.9 KiB
TypeScript
/**
|
|
* Pure content + metadata for the Lineage per-subdomain downloads page
|
|
* (see `./downloads.tsx`).
|
|
*
|
|
* Mirrors the `landing-content.ts` / `page-head-meta.ts` / `nav-config.ts`
|
|
* pattern: imports NOTHING from solid-js / @solidjs/router / @solidjs/meta so
|
|
* the constants here can be unit-tested in `bun:test` without spinning up the
|
|
* router / MetaProvider — and so the acceptance matrix (asset key, App Store
|
|
* URL, PageHead inputs) is asserted against structurally without a DOM render.
|
|
*
|
|
* The render layer (`./downloads.tsx`) is a thin JSX consumer of these
|
|
* values; keeping them externalized means changes to the download target /
|
|
* store link surface as test failures rather than silent regressions.
|
|
*
|
|
* Contracts encoded here:
|
|
* - `LINEAGE_DOWNLOAD_ASSET` is the tRPC `downloads.getDownloadUrl` asset key
|
|
* (`"lineage"`) → resolves to `Life and Lineage.apk` in
|
|
* `src/server/api/routers/downloads.ts`. It MUST match the key used by the
|
|
* unified `freno.me/downloads` page so the APK served is byte-identical
|
|
* from both origins (single S3 source of truth).
|
|
* - `LINEAGE_APP_STORE_URL` is the canonical App Store link — kept identical
|
|
* to the value surfaced on the landing page (`landing-content.ts`) and the
|
|
* unified downloads page, so the store front is consistent across origins.
|
|
* - `LINEAGE_DOWNLOADS_META` is consumed verbatim by `<PageHead>`; the
|
|
* per-site title suffix (` | Life and Lineage`) is appended automatically
|
|
* by `resolvePageHeadMeta`, so `title` here is the BASE title
|
|
* only — do NOT include the suffix.
|
|
*/
|
|
import type { PageHeadProps } from "~/components/page-head-meta";
|
|
|
|
/**
|
|
* tRPC `downloads.getDownloadUrl` asset key for the Lineage Android APK.
|
|
*
|
|
* Maps to `Life and Lineage.apk` in the downloads router's `assets` table.
|
|
* Shared with the unified `freno.me/downloads` page (no separate asset path).
|
|
*/
|
|
export const LINEAGE_DOWNLOAD_ASSET = "lineage" as const;
|
|
|
|
/**
|
|
* Android download CTA copy.
|
|
*
|
|
* Kept in sync with the unified downloads page's Lineage section so the
|
|
* button label is consistent across origins.
|
|
*/
|
|
export const LINEAGE_APK_BUTTON_LABEL = "download.apk";
|
|
|
|
/**
|
|
* Apple App Store link — identical to `APP_STORE_URL` in `landing-content.ts`
|
|
* (single source of truth: the canonical Life and Lineage App Store URL).
|
|
*/
|
|
export const LINEAGE_APP_STORE_URL =
|
|
"https://apps.apple.com/us/app/life-and-lineage/id6737252442";
|
|
|
|
/**
|
|
* Public browser path back to the Lineage landing page (subdomain-relative).
|
|
*
|
|
* vercel.json rewrites `lineage.freno.me/` → the internal `/lineage/` route
|
|
* prefix while leaving the browser URL clean.
|
|
*/
|
|
export const LINEAGE_HOME_HREF = "/";
|
|
|
|
/** Base page title (site suffix appended by PageHead). */
|
|
export const PAGE_META: PageHeadProps = {
|
|
title: "Downloads",
|
|
description:
|
|
"Download Life and Lineage — Android APK or on the App Store for iOS. A dark fantasy adventure mobile game."
|
|
};
|