From 34db684fe12be72196ca2828bcb1899f38a5ba17 Mon Sep 17 00:00:00 2001
From: Michael Freno
Date: Mon, 27 Jul 2026 16:34:32 -0400
Subject: [PATCH] subdomain footer
---
src/app.css | 4 ++++
src/app.tsx | 2 ++
src/components/SubdomainFooter.tsx | 35 ++++++++++++++++++++++++++++++
src/lib/site-context.ts | 4 ++--
src/routes/inputhalo/index.tsx | 14 ------------
src/routes/nessa/index.tsx | 13 -----------
6 files changed, 43 insertions(+), 29 deletions(-)
create mode 100644 src/components/SubdomainFooter.tsx
diff --git a/src/app.css b/src/app.css
index 5840673..4843bbe 100644
--- a/src/app.css
+++ b/src/app.css
@@ -173,6 +173,8 @@
--color-base: #fbf1c7;
--color-mantle: #f3eac1;
--color-crust: #e7deb7;
+ --color-button-text: #ffffff;
+ --color-button-text-alt: var(--color-text);
}
:root.dark {
@@ -202,6 +204,8 @@
--color-base: #1e1e2e;
--color-mantle: #141620;
--color-crust: #0e0f16;
+ --color-button-text: var(--color-crust);
+ --color-button-text-alt: #ffffff;
}
:root {
diff --git a/src/app.tsx b/src/app.tsx
index eda125f..c1fbabe 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -11,6 +11,7 @@ import {
import "./app.css";
import { LeftBar, RightBar } from "./components/Bars";
import { TerminalSplash } from "./components/TerminalSplash";
+import SubdomainFooter from "./components/SubdomainFooter";
import { MetaProvider } from "@solidjs/meta";
import ErrorBoundaryFallback from "./components/ErrorBoundaryFallback";
import { BarsProvider, useBars } from "./context/bars";
@@ -214,6 +215,7 @@ function AppLayout(props: { children: any }) {
{props.children}
+
>
diff --git a/src/components/SubdomainFooter.tsx b/src/components/SubdomainFooter.tsx
new file mode 100644
index 0000000..e305bd5
--- /dev/null
+++ b/src/components/SubdomainFooter.tsx
@@ -0,0 +1,35 @@
+/**
+ * Minimal footer for product subdomains — "made with <3 by Mike Freno"
+ * linking back to the root domain.
+ *
+ * Placed in the shared subdomain layout (app.tsx) so every subdomain page
+ * gets it automatically. Uses `buildMainSiteUrl()` so the cross-domain link
+ * resolves correctly in both dev (path-based localhost) and prod (host-based
+ * freno.me).
+ */
+import { A } from "@solidjs/router";
+import { buildMainSiteUrl } from "~/lib/site-context";
+
+export default function SubdomainFooter() {
+ return (
+
+ );
+}
diff --git a/src/lib/site-context.ts b/src/lib/site-context.ts
index 83bc74d..1ee3823 100644
--- a/src/lib/site-context.ts
+++ b/src/lib/site-context.ts
@@ -108,7 +108,7 @@ export const SITE_CONFIG: Record = {
baseRoutePrefix: "/gaze",
displayName: "Gaze",
titleSuffix: " | Gaze",
- brandColor: "#f9e2af",
+ brandColor: "#002cff",
ogDefaultImage: "/gaze/og-default.png",
faviconPath: "/gaze/favicon/favicon.ico"
},
@@ -119,7 +119,7 @@ export const SITE_CONFIG: Record = {
baseRoutePrefix: "/inputhalo",
displayName: "InputHalo",
titleSuffix: " | InputHalo",
- brandColor: "#f38ba8",
+ brandColor: "#41a5ff",
ogDefaultImage: "/inputhalo/og-default.png",
faviconPath: "/inputhalo/favicon/favicon.ico"
}
diff --git a/src/routes/inputhalo/index.tsx b/src/routes/inputhalo/index.tsx
index 828ade4..1209a67 100644
--- a/src/routes/inputhalo/index.tsx
+++ b/src/routes/inputhalo/index.tsx
@@ -14,7 +14,6 @@ import { For, createSignal } from "solid-js";
import { A } from "@solidjs/router";
import { PageHead } from "~/components/PageHead";
import SubdomainHeader from "~/components/SubdomainHeader";
-import { buildMainSiteUrl } from "~/lib/site-context";
import Button from "~/components/ui/Button";
import DownloadOnAppStoreDark from "~/components/icons/DownloadOnAppStoreDark";
import { useDarkMode } from "~/context/darkMode";
@@ -271,19 +270,6 @@ export default function InputHaloLanding() {
-
- {/* ─── Footer ─────────────────────────────────────────────── */}
-
>
);
diff --git a/src/routes/nessa/index.tsx b/src/routes/nessa/index.tsx
index 6c01162..69a1950 100644
--- a/src/routes/nessa/index.tsx
+++ b/src/routes/nessa/index.tsx
@@ -343,19 +343,6 @@ export default function NessaLanding() {
-
- {/* ─── Footer ───────────────────────────────────────────────── */}
-
>
);