feat(welcome): link to the public source repository from the footer

Siftlode is open source; add a discreet 'Source code' link (trilingual) in the
landing-page footer next to Privacy/Terms, pointing at the public repo.
This commit is contained in:
npeter83 2026-07-01 14:27:42 +02:00
parent 1a2700d8fc
commit f8d6c29c7e
4 changed files with 16 additions and 0 deletions

View file

@ -1,6 +1,7 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { import {
Code2,
Expand, Expand,
Filter, Filter,
Inbox, Inbox,
@ -11,6 +12,9 @@ import {
X, X,
type LucideIcon, type LucideIcon,
} from "lucide-react"; } from "lucide-react";
// Siftlode is open source; the landing footer links to the public repository.
const REPO_URL = "https://forge.b1fr0st.eu/peter/siftlode";
import { api } from "../lib/api"; import { api } from "../lib/api";
import { HttpError } from "../lib/api"; import { HttpError } from "../lib/api";
import { setLanguage, type LangCode } from "../i18n"; import { setLanguage, type LangCode } from "../i18n";
@ -102,6 +106,15 @@ export default function Welcome() {
<a href="/terms" className="hover:text-fg transition"> <a href="/terms" className="hover:text-fg transition">
{t("common.termsOfService")} {t("common.termsOfService")}
</a> </a>
<a
href={REPO_URL}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1.5 hover:text-fg transition"
>
<Code2 className="w-3.5 h-3.5" />
{t("common.sourceCode")}
</a>
</footer> </footer>
</div> </div>
); );

View file

@ -1,6 +1,7 @@
{ {
"privacyPolicy": "Datenschutzerklärung", "privacyPolicy": "Datenschutzerklärung",
"termsOfService": "Nutzungsbedingungen", "termsOfService": "Nutzungsbedingungen",
"sourceCode": "Quellcode",
"close": "Schließen", "close": "Schließen",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"confirm": "Bestätigen", "confirm": "Bestätigen",

View file

@ -1,6 +1,7 @@
{ {
"privacyPolicy": "Privacy Policy", "privacyPolicy": "Privacy Policy",
"termsOfService": "Terms of Service", "termsOfService": "Terms of Service",
"sourceCode": "Source code",
"close": "Close", "close": "Close",
"cancel": "Cancel", "cancel": "Cancel",
"confirm": "Confirm", "confirm": "Confirm",

View file

@ -1,6 +1,7 @@
{ {
"privacyPolicy": "Adatvédelmi irányelvek", "privacyPolicy": "Adatvédelmi irányelvek",
"termsOfService": "Felhasználási feltételek", "termsOfService": "Felhasználási feltételek",
"sourceCode": "Forráskód",
"close": "Bezárás", "close": "Bezárás",
"cancel": "Mégse", "cancel": "Mégse",
"confirm": "Megerősítés", "confirm": "Megerősítés",