Compare commits

..

4 Commits

6 changed files with 64 additions and 5 deletions

View File

@@ -98,13 +98,27 @@ export default async function AboutPage({ params }: AboutPageProps) {
</p>
<p
style={{
marginBottom: "0.75rem",
marginBottom: "0.5rem",
fontSize: "0.9rem",
color: "#6b7280",
}}
>
{t("costsSheetPrivacyNote")}
</p>
<p style={{ marginBottom: "0.75rem" }}>
{t.rich("costsDonationNote", {
link: (chunks) => (
<a
href="https://politicalbeauty.de/ueber-das-ZPS.html"
target="_blank"
rel="noopener noreferrer"
style={{ textDecoration: "underline" }}
>
{chunks}
</a>
),
})}
</p>
</section>
<section style={{ marginBottom: "2rem" }}>

View File

@@ -70,6 +70,14 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
// Dynamic genre pages
try {
// Während des Docker-Builds wird häufig eine temporäre SQLite-DB (file:./dev.db)
// ohne migrierte Tabellen verwendet. In diesem Fall überspringen wir die
// Datenbankabfrage und liefern nur die statischen Seiten, um Build-Fehler zu vermeiden.
const dbUrl = process.env.DATABASE_URL;
if (dbUrl && dbUrl.startsWith('file:./')) {
return staticPages;
}
const genres = await prisma.genre.findMany({
where: { active: true },
});

View File

@@ -171,12 +171,13 @@
"imprintEmailLabel": "E-Mail:",
"costsTitle": "Laufende Kosten des Projekts",
"costsIntro": "Auch wenn Hördle ein privates Projekt ist, entstehen für den Betrieb laufende Kosten, zum Beispiel:",
"costsDonationNote": "Alle Einnahmen, die die Betriebskosten des Projekts übersteigen, werden am Jahresende an die Aktion <link>Zentrum für politische Schönheit</link> gespendet.",
"costsDomain": "Domains (z. B. hördle.de / hoerdle.de)",
"costsServer": "Server / vServer für App und Tracking",
"costsEmail": "E-Mail-Hosting",
"costsLicenses": "ggf. Gebühren für Urheberrechte oder andere Lizenzen",
"costsSheetLinkText": "Eine detaillierte, laufend gepflegte Übersicht über die aktuellen Kosten findest du in dieser <link>Google-Tabelle</link>.",
"costsSheetPrivacyNote": "Beim Aufruf oder Einbetten der Google-Tabelle können Daten (z. B. deine IP-Adresse) an Google übermittelt werden. Wenn du das nicht möchtest, öffne die Tabelle nicht.",
"costsSheetPrivacyNote": "Beim Aufruf der Google-Tabelle können Daten (z. B. deine IP-Adresse) an Google übermittelt werden. Wenn du das nicht möchtest, öffne die Tabelle nicht.",
"supportTitle": "Hördle unterstützen",
"supportIntro": "Hördle ist ein nicht-kommerzielles Projekt, das von laufenden Kosten finanziert werden muss. Wenn du das Projekt finanziell unterstützen möchtest, gibt es folgende Möglichkeiten:",
"supportSepaTitle": "SEPA Banküberweisung (bevorzugt)",

View File

@@ -171,12 +171,13 @@
"imprintEmailLabel": "Email:",
"costsTitle": "Ongoing costs of the project",
"costsIntro": "Even though Hördle is a private project, there are ongoing costs for running it, for example:",
"costsDonationNote": "All income that exceeds the operating costs of the project will be donated at the end of the year to the campaign <link>Zentrum für politische Schönheit</link>.",
"costsDomain": "Domains (e.g. hördle.de / hoerdle.de)",
"costsServer": "Servers / vServers for the app and tracking",
"costsEmail": "Email hosting",
"costsLicenses": "Possible fees for copyrights or other licenses",
"costsSheetLinkText": "You can find a detailed, continuously updated overview of the current costs in this <link>Google Sheet</link>.",
"costsSheetPrivacyNote": "When accessing or embedding the Google Sheet, data (e.g. your IP address) may be transmitted to Google. If you don't want that, please do not open the sheet.",
"costsSheetPrivacyNote": "When accessing the Google Sheet, data (e.g. your IP address) may be transmitted to Google. If you don't want that, please do not open the sheet.",
"supportTitle": "Support Hördle",
"supportIntro": "Hördle is a non-commercial project that needs to be financed by ongoing costs. If you would like to support the project financially, here are the options:",
"supportSepaTitle": "SEPA Bank Transfer (preferred)",

View File

@@ -1,6 +1,6 @@
{
"name": "hoerdle",
"version": "0.1.4.9",
"version": "0.1.4.11",
"private": true,
"scripts": {
"dev": "next dev",

35
scripts/deploy-remote.sh Normal file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -euo pipefail
# Remote-Deployment-Skript für Hördle
# Führt auf dem entfernten Host den Befehl
# ssh docker@100.116.245.76 "cd ~/hoerdle && ./scripts/deploy.sh"
# aus und liest das SSH-Passwort aus der Umgebungsvariablen DOCKER_SSH_PASSWORD.
#
# Voraussetzungen:
# - sshpass ist lokal installiert (z.B. `sudo apt-get install sshpass`)
# - DOCKER_SSH_PASSWORD ist im Environment gesetzt
REMOTE_USER="docker"
REMOTE_HOST="100.116.245.76"
REMOTE_CMD='cd ~/hoerdle && ./scripts/deploy.sh'
if ! command -v sshpass >/dev/null 2>&1; then
echo "Fehler: sshpass ist nicht installiert. Bitte mit z.B. 'sudo apt-get install sshpass' nachinstallieren." >&2
exit 1;
fi
if [[ -z "${DOCKER_SSH_PASSWORD:-}" ]]; then
echo "Fehler: Umgebungsvariable DOCKER_SSH_PASSWORD ist nicht gesetzt." >&2
echo "Bitte setze sie z.B.: export DOCKER_SSH_PASSWORD='dein-passwort'" >&2
exit 1
fi
echo "🚀 Starte Remote-Deployment auf ${REMOTE_USER}@${REMOTE_HOST} ..."
sshpass -p "${DOCKER_SSH_PASSWORD}" \
ssh -o StrictHostKeyChecking=no "${REMOTE_USER}@${REMOTE_HOST}" "${REMOTE_CMD}"
echo "✅ Remote-Deployment abgeschlossen."