diff --git a/src/components/Page.astro b/src/components/Page.astro index 5f25604..559c5e4 100644 --- a/src/components/Page.astro +++ b/src/components/Page.astro @@ -12,6 +12,7 @@ interface Props { copy: Copy; canonical: string } const { copy: c, canonical } = Astro.props; const GITHUB = 'https://github.com/tillheidrich/klarbild'; +const RAW = 'https://raw.githubusercontent.com/tillheidrich/klarbild/main'; const SITE = 'https://klarbild-demo.heidrich-digital.de'; // The output sizes the preset builder offers, straight from the application's @@ -354,9 +355,10 @@ KLARBILD_MODULES=all
git clone {GITHUB}.git
-cd klarbild
-cp .env.example .env {c.install.comment1}
+ mkdir klarbild && cd klarbild
+curl -fsSLO {RAW}/docker-compose.yaml
+curl -fsSL {RAW}/.env.example -o .env
+nano .env {c.install.comment1}
docker compose up -d
docker compose logs app {c.install.comment2}
diff --git a/src/lib/copy.ts b/src/lib/copy.ts
index 95e6acf..50b264a 100644
--- a/src/lib/copy.ts
+++ b/src/lib/copy.ts
@@ -184,7 +184,7 @@ export const EN: Copy = {
stats: [
{ n: '210.00', t: '× 297.00 mm on the page when you ask for A4 — measured, not assumed' },
{ n: '0', t: 'outbound requests from the print studio. It is arithmetic, sharp and pdf-lib' },
- { n: '124', t: 'tests over the layout engine, the naming scheme and the path checks' },
+ { n: '130', t: 'tests over the layout engine, the naming scheme and the path checks' },
{ n: '1', t: 'container and a database for the default install' },
],
},
@@ -246,7 +246,7 @@ export const EN: Copy = {
lang: {
kicker: 'Two languages',
h2: 'English by default, German all the way through.',
- lead: 'Not a half-translated interface: 1,067 entries, covering every translatable string in the source. The English sentence is the translation key, so a missing entry falls back to readable English rather than to print.sheet.title.',
+ lead: 'Not a half-translated interface: 1,095 entries, covering every translatable string in the source. The English sentence is the translation key, so a missing entry falls back to readable English rather than to print.sheet.title.',
body: 'One environment variable sets the default; visitors switch with the button in the corner and the choice sticks. Adding a third language means copying one JSON file and translating its values.',
caption: 'The same screen, ?lang=de.',
},
@@ -262,13 +262,13 @@ export const EN: Copy = {
},
install: {
kicker: 'Install',
- h2: 'Four lines, then a password in the log.',
- p1: 'The default compose file runs the application and a PostgreSQL, with files on a volume. No object store, no API key, no account anywhere. A second compose file adds MinIO and turns every module on, for people who want that.',
- p2: 'There are no built-in accounts. The first boot creates one administrator — from ADMIN_USERNAME and ADMIN_PASSWORD if you set them, and otherwise with a generated password printed to the log exactly once.',
+ h2: 'Two files, then a password in the log.',
+ p1: 'The default compose file runs the application and a PostgreSQL, with files on a volume. No object store, no API key, no account anywhere. A second compose file adds MinIO and turns every module on, for people who want that. Nothing to clone and nothing to build: the compose file pulls a prebuilt image for amd64 and arm64, so a Raspberry Pi 4 or 5 runs it too, and an update is docker compose pull.',
+ p2: 'There are no built-in accounts. The first boot creates one administrator — from ADMIN_USERNAME and ADMIN_PASSWORD if you set them, and otherwise with a generated password printed to the log exactly once. No picture at hand for the first try? The print studio has a sample photo one click away.',
cta1: 'Source on GitHub', cta2: 'Releases',
comment1: '# four values at the top; the file says which',
comment2: '# your admin password, printed once',
- stack: 'Astro on Node, PostgreSQL, sharp and pdf-lib. About 13,700 lines across 117 files. Sixteen forward-only migrations that run themselves on boot. Type check, tests and a secret scan run in CI on every push.',
+ stack: 'Astro on Node, PostgreSQL, sharp and pdf-lib. About 13,800 lines across 115 files. Seventeen forward-only migrations that run themselves on boot. Type check, tests and a secret scan run in CI on every push.',
},
privacy: {
kicker: 'Why self-hosted',
@@ -300,7 +300,7 @@ export const DE: Copy = {
stats: [
{ n: '210,00', t: '× 297,00 mm auf der Seite, wenn du A4 sagst — nachgemessen, nicht angenommen' },
{ n: '0', t: 'Anfragen nach außen aus dem Druckstudio. Es ist Rechnen, sharp und pdf-lib' },
- { n: '124', t: 'Tests über Layout-Engine, Namensschema und Pfadprüfungen' },
+ { n: '130', t: 'Tests über Layout-Engine, Namensschema und Pfadprüfungen' },
{ n: '1', t: 'Container und eine Datenbank für die Standardinstallation' },
],
},
@@ -362,7 +362,7 @@ export const DE: Copy = {
lang: {
kicker: 'Zwei Sprachen',
h2: 'Englisch als Standard, Deutsch vollständig daneben.',
- lead: 'Keine halb übersetzte Oberfläche: 1.067 Einträge, jeder übersetzbare String im Quelltext ist abgedeckt. Der englische Satz ist der Schlüssel — fehlt ein Eintrag, steht da lesbares Englisch und nicht print.sheet.title.',
+ lead: 'Keine halb übersetzte Oberfläche: 1.095 Einträge, jeder übersetzbare String im Quelltext ist abgedeckt. Der englische Satz ist der Schlüssel — fehlt ein Eintrag, steht da lesbares Englisch und nicht print.sheet.title.',
body: 'Eine Umgebungsvariable setzt den Standard; Besucher schalten mit dem Knopf in der Ecke um, und die Wahl bleibt. Eine dritte Sprache heißt: eine JSON-Datei kopieren und ihre Werte übersetzen.',
caption: 'Derselbe Bildschirm, ?lang=de.',
},
@@ -378,13 +378,13 @@ export const DE: Copy = {
},
install: {
kicker: 'Installieren',
- h2: 'Vier Zeilen, dann steht ein Passwort im Log.',
- p1: 'Die Standard-Compose-Datei startet die Anwendung und ein PostgreSQL, Dateien liegen auf einem Volume. Kein Objektspeicher, kein API-Schlüssel, kein Konto irgendwo. Eine zweite Compose-Datei nimmt MinIO dazu und schaltet alle Module an — für die, die das wollen.',
- p2: 'Es gibt keine eingebauten Konten. Der erste Start legt genau einen Administrator an — aus ADMIN_USERNAME und ADMIN_PASSWORD, wenn du sie setzt, sonst mit einem erzeugten Passwort, das genau einmal ins Log geschrieben wird.',
+ h2: 'Zwei Dateien, dann steht ein Passwort im Log.',
+ p1: 'Die Standard-Compose-Datei startet die Anwendung und ein PostgreSQL, Dateien liegen auf einem Volume. Kein Objektspeicher, kein API-Schlüssel, kein Konto irgendwo. Eine zweite Compose-Datei nimmt MinIO dazu und schaltet alle Module an — für die, die das wollen. Nichts klonen, nichts bauen: Die Compose-Datei holt ein fertiges Image für amd64 und arm64, ein Raspberry Pi 4 oder 5 reicht also auch, und ein Update ist docker compose pull.',
+ p2: 'Es gibt keine eingebauten Konten. Der erste Start legt genau einen Administrator an — aus ADMIN_USERNAME und ADMIN_PASSWORD, wenn du sie setzt, sonst mit einem erzeugten Passwort, das genau einmal ins Log geschrieben wird. Kein Bild zur Hand für den ersten Versuch? Das Druckstudio hat ein Beispielfoto, einen Klick entfernt.',
cta1: 'Quellcode auf GitHub', cta2: 'Releases',
comment1: '# vier Werte ganz oben; die Datei sagt, welche',
comment2: '# dein Admin-Passwort, einmalig ausgegeben',
- stack: 'Astro auf Node, PostgreSQL, sharp und pdf-lib. Rund 13.700 Zeilen in 117 Dateien. Sechzehn vorwärts-nur-Migrationen, die beim Start selbst laufen. Typprüfung, Tests und ein Secret-Scan laufen in der CI bei jedem Push.',
+ stack: 'Astro auf Node, PostgreSQL, sharp und pdf-lib. Rund 13.800 Zeilen in 115 Dateien. Siebzehn vorwärts-nur-Migrationen, die beim Start selbst laufen. Typprüfung, Tests und ein Secret-Scan laufen in der CI bei jedem Push.',
},
privacy: {
kicker: 'Warum selbst gehostet',