commit d8c9f227f216e98be545f100f549192a764798cb
parent 701c83c28cd777290f5e07aa230c625c7375aff9
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Fri, 25 Sep 2026 20:08:42 -0400
common: KOFI_URL; a bare Ko-fi link in the homepage footer and the hub's footer (never a site build)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
3 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/common/lib/project.ts b/common/lib/project.ts
@@ -26,6 +26,12 @@ export const PROJECT_NAME = "Archilyzer";
// valid. Only then is changing this string a cosmetic follow-up.
export const PROJECT_URL = "https://archilyzer.pages.dev";
+// The project's Ko-fi page. Rendered as a bare link (visible text "Ko-fi", no
+// copy around it) on the project's OWN surfaces only: the homepage footer and
+// the hub's footer. A site build never shows it — an archive someone else
+// hosts must not carry this project's tip jar.
+export const KOFI_URL = "https://ko-fi.com/archilyzer";
+
export const PROJECT_TAGLINE = "Self-hosted, searchable video-transcript archives.";
// Where a visitor gets the source. A dated snapshot tarball — there is no
diff --git a/export/app/components/Footer.tsx b/export/app/components/Footer.tsx
@@ -8,6 +8,7 @@ import {
resolveSocialLinks,
} from "yt-dlp-transcript-common/lib/site";
import {
+ KOFI_URL,
PROJECT_NAME,
PROJECT_URL,
} from "yt-dlp-transcript-common/lib/project";
@@ -88,6 +89,19 @@ export default function Footer() {
{PROJECT_NAME}
</a>
</span>
+ {/* Ko-fi: a bare link, no copy — and on the HUB only. The hub is the
+ project's own deployment; a site build is an archive whoever runs
+ it hosts, and must not carry this project's tip jar. */}
+ {instanceMode() === "hub" && (
+ <a
+ href={KOFI_URL}
+ target="_blank"
+ rel="noopener noreferrer"
+ className="text-xs underline underline-offset-2 hover:text-foreground transition-colors"
+ >
+ Ko-fi
+ </a>
+ )}
{socialLinks.length > 0 && (
<ul className="flex items-center gap-3 list-none">
{socialLinks.map((link, i) => (
diff --git a/homepage/app/components/Footer.tsx b/homepage/app/components/Footer.tsx
@@ -5,6 +5,7 @@ import {
} from "yt-dlp-transcript-common/lib/settings";
import { resolveHomepageSocialLinks } from "yt-dlp-transcript-common/lib/homepage";
import {
+ KOFI_URL,
PROJECT_NAME,
PROJECT_TAGLINE,
} from "yt-dlp-transcript-common/lib/project";
@@ -49,9 +50,12 @@ export default function Footer() {
</ul>
</nav>
- {socialLinks.length > 0 && (
- <div className="flex flex-col gap-3">
- <span className="label-machine">Elsewhere</span>
+ {/* "Elsewhere": the operator's social accounts, then the project's
+ Ko-fi — a bare link, no copy. Ko-fi is always present, so the
+ column always renders; the icon row only when links are set. */}
+ <div className="flex flex-col gap-3">
+ <span className="label-machine">Elsewhere</span>
+ {socialLinks.length > 0 && (
<ul className="flex items-center gap-4 list-none">
{socialLinks.map((link, i) => (
<li key={`${link.url}-${i}`}>
@@ -67,8 +71,16 @@ export default function Footer() {
</li>
))}
</ul>
- </div>
- )}
+ )}
+ <a
+ href={KOFI_URL}
+ target="_blank"
+ rel="noopener noreferrer"
+ className="text-sm text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors"
+ >
+ Ko-fi
+ </a>
+ </div>
</div>
</footer>
);