Changeset bbbfa3c in Klonkt


Ignore:
Timestamp:
06/23/2026 05:25:43 PM (3 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
bb42dfb
Parents:
83088b66
Message:

docs: README to English (public repo)

Translate the repo front page to English for an international open-source
audience; fill in the real GitHub clone URL + install.sh one-liner.

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • README.md

    r83088b66 rbbbfa3c  
    11# Klonkt
    22
    3 Je eigen, **zelf-gehoste** plek op het web — voor je verhaal, je beeld en je
    4 geluid. Gebouwd op **Node + SQLite + htmx**: licht, server-rendered, en van jou.
    5 Geen algoritme, geen advertenties, geen platform dat ertussen zit.
     3Your own, **self-hosted** corner of the web — for your story, your visuals and
     4your sound. Built on **Node + SQLite + htmx**: lightweight, server-rendered, and
     5yours. No algorithm, no ads, no platform sitting in between.
    66
    7 ## Wat het kan
     7## What it does
    88
    9 - **Solo of hub** — één persoonlijke site, of een label/collectief met meerdere
    10   makers onder één dak.
    11 - **Blog & foto's** — posts met cover, tags, tijdlijn of grid.
    12 - **Eigen muziek hosten** — ingebouwde audiospeler met tracks, albums en playlists.
    13 - **Fans & reacties** — bezoekers loggen in met Google (optioneel) en reageren.
    14 - **Groeien**: nieuwsbrief, download-voor-email, EPK/perskit, link-in-bio,
    15   show-agenda, en **cookievrije statistieken**.
    16 - **Cirkels** — verbind je site met andere Klonkt-sites en toon elkaars publieke
    17   posts; decentraal en zonder centraal platform (Ed25519-gesigneerde federatie).
    18 - **Thema's & talen** — meerdere paletten (light + dark), interface in NL/EN/DE.
    19 - **Installeerbaar (PWA)**, **privacy-first** (self-hosted fonts, geen tracking).
     9- **Solo or hub** — one personal site, or a label/collective with multiple
     10  makers under one roof.
     11- **Blog & photos** — posts with cover, tags, timeline or grid.
     12- **Host your own music** — built-in audio player with tracks, albums and playlists.
     13- **Fans & comments** — visitors sign in with Google (optional) and comment.
     14- **Grow**: newsletter, download-for-email, EPK/press kit, link-in-bio,
     15  show calendar, and **cookie-free statistics**.
     16- **Circles** — connect your site with other Klonkt sites and show each other's
     17  public posts; decentralized, with no central platform (Ed25519-signed federation).
     18- **Themes & languages** — multiple palettes (light + dark), interface in EN/NL/DE.
     19- **Installable (PWA)**, **privacy-first** (self-hosted fonts, no tracking).
    2020
    21 ### Lite-modus (zonder audio)
     21### Lite mode (no audio)
    2222
    23 Zet `KLONKT_AUDIO=off` in `.env` om de hele audio-/muziek-feature uit te
    24 schakelen. Klonkt draait dan als lichte **blog/foto/EPK/links-site zónder ffmpeg**
    25 — ideaal voor minimale hosting. Hub, Cirkels en externe embeds
    26 (YouTube/SoundCloud/Spotify) blijven gewoon werken.
     23Set `KLONKT_AUDIO=off` in `.env` to disable the entire audio/music feature.
     24Klonkt then runs as a lightweight **blog/photo/EPK/links site without ffmpeg** —
     25ideal for minimal hosting. Hub, Circles and external embeds
     26(YouTube/SoundCloud/Spotify) keep working.
    2727
    28 ## Zelf hosten
     28## Self-hosting
    2929
    30 Klonkt is een **Node-app** — draai 'm op een **VPS, in Docker, of op een
    31 Node-hostingplatform (PaaS)**. **Niet** op klassieke shared PHP-hosting. De
    32 database (SQLite) maakt zichzelf aan bij de eerste start.
     30Klonkt is a **Node app** — run it on a **VPS, in Docker, or on a Node hosting
     31platform (PaaS)**. **Not** on classic shared PHP hosting. The database (SQLite)
     32creates itself on first start.
    3333
    34 ### Optie A — Docker (aanbevolen)
     34### Option A — Docker (recommended)
    3535
    36 Node, ffmpeg en cwebp zitten in het image; je hebt alleen Docker nodig.
     36Node, ffmpeg and cwebp are inside the image; you only need Docker.
    3737
    3838```bash
    39 git clone <repo-url> klonkt && cd klonkt
    40 cp .env.example .env          # vul SESSION_SECRET + PUBLIC_BASE_URL in
     39git clone https://github.com/roboburr/klonkt.git && cd klonkt
     40cp .env.example .env          # set SESSION_SECRET + PUBLIC_BASE_URL
    4141docker compose up -d
    4242```
    4343
    44 Data (database + media) blijft in het `klonkt-data`-volume, ook na een update.
    45 Updaten: `git pull && docker compose up -d --build`.
     44Data (database + media) stays in the `klonkt-data` volume, even across updates.
     45Updating: `git pull && docker compose up -d --build`.
    4646
    47 ### Optie B — VPS-installer (Debian/Ubuntu)
     47### Option B — VPS installer (Debian/Ubuntu)
    4848
    49 Eén commando: installeert Node 20, Caddy (automatische HTTPS) en een
    50 systemd-service. Coëxistentie-veilig (raakt een bestaande Node/webserver niet).
     49One command: installs Node 20, Caddy (automatic HTTPS) and a systemd service.
     50Coexistence-safe (won't touch an existing Node/web server).
    5151
    5252```bash
    53 sudo bash scripts/install.sh --domain jouwdomein.nl
     53curl -fsSL https://raw.githubusercontent.com/roboburr/klonkt/main/scripts/install.sh \
     54  | sudo bash -s -- --domain yourdomain.com
    5455```
    5556
    56 Bijwerken kan daarna met `klonkt-update`.
     57After that you can update with `klonkt-update`.
    5758
    58 ### Optie C — kaal Node (20+)
     59### Option C — bare Node (20+)
    5960
    6061```bash
    61 git clone <repo-url> klonkt && cd klonkt
     62git clone https://github.com/roboburr/klonkt.git && cd klonkt
    6263npm ci
    63 cp .env.example .env          # SESSION_SECRET + PUBLIC_BASE_URL invullen
    64 npm start                     # database wordt bij de eerste start aangemaakt
     64cp .env.example .env          # set SESSION_SECRET + PUBLIC_BASE_URL
     65npm start                     # the database is created on first start
    6566```
    6667
    67 Zet 'm voor productie achter een procesmanager (pm2/systemd) en een
    68 reverse-proxy. `cwebp` is optioneel (`apt install webp`) voor WebP-afbeeldingen.
     68For production, put it behind a process manager (pm2/systemd) and a
     69reverse proxy. `cwebp` is optional (`apt install webp`) for WebP images.
    6970
    70 ### HTTPS (Docker / kaal Node)
     71### HTTPS (Docker / bare Node)
    7172
    72 Zet een reverse-proxy vóór de app. Met **Caddy** (automatisch Let's Encrypt):
     73Put a reverse proxy in front of the app. With **Caddy** (automatic Let's Encrypt):
    7374
    7475```caddy
    75 jouwdomein.nl {
     76yourdomain.com {
    7677    reverse_proxy localhost:3000
    7778    encode gzip zstd
     
    7980```
    8081
    81 (De VPS-installer regelt Caddy + HTTPS al voor je.)
     82(The VPS installer sets up Caddy + HTTPS for you already.)
    8283
    83 ### Eerste keer
     84### First run
    8485
    85 Open je site → je krijgt de **setup-wizard**: kies je taal, geef je site een
    86 naam en maak je beheerder aan. De **eerste gebruiker wordt automatisch
    87 beheerder**; daarna sluit registratie zich. Wachtwoord kwijt?
     86Open your site → you get the **setup wizard**: pick your language, name your site
     87and create your admin. The **first user automatically becomes the administrator**;
     88registration then closes. Lost your password?
    8889`npm run reset-admin` (Docker: `docker compose exec klonkt npm run reset-admin`).
    8990
    90 ## Configuratie (`.env`)
     91## Configuration (`.env`)
    9192
    92 | Variabele | Nodig | Wat |
     93| Variable | Required | What |
    9394|---|---|---|
    94 | `SESSION_SECRET` | ✅ | Willekeurige string van ≥32 tekens |
    95 | `PUBLIC_BASE_URL` | ✅ | Canonieke URL (bv. `https://jouwdomein.nl`) |
    96 | `GOOGLE_CLIENT_ID` / `_SECRET` / `_REDIRECT_URI` | — | Google-login voor luisteraars (eigen OAuth-client; geeft nooit beheer) |
    97 | `SMTP_HOST` / `_PORT` / `_USER` / `_PASS` / `_FROM` | — | E-mail voor wachtwoord-reset + nieuwsbrief |
    98 | `KLONKT_DEFAULT_LANG` | — | Standaardtaal voor bezoekers (`en`/`nl`/`de`) |
    99 | `KLONKT_AUDIO` | — | `off` = lite-modus (geen audio/ffmpeg) |
     95| `SESSION_SECRET` | ✅ | Random string of ≥32 characters |
     96| `PUBLIC_BASE_URL` | ✅ | Canonical URL (e.g. `https://yourdomain.com`) |
     97| `GOOGLE_CLIENT_ID` / `_SECRET` / `_REDIRECT_URI` | — | Google login for listeners (your own OAuth client; never grants admin) |
     98| `SMTP_HOST` / `_PORT` / `_USER` / `_PASS` / `_FROM` | — | Email for password reset + newsletter |
     99| `KLONKT_DEFAULT_LANG` | — | Default language for visitors (`en`/`nl`/`de`) |
     100| `KLONKT_AUDIO` | — | `off` = lite mode (no audio/ffmpeg) |
    100101
    101102## Stack
     
    103104- **Runtime:** Node 20+
    104105- **Web:** Express + Helmet + express-session
    105 - **DB:** better-sqlite3 (WAL), migreert zichzelf bij boot
    106 - **Templates:** EJS (server-rendered) + **htmx 1.9** (vendored, geen build-step)
    107 - **Audio:** ffmpeg-static (meegebundeld)
    108 - **Cirkels:** Ed25519-gesigneerde pull (libsodium via Node-crypto)
     106- **DB:** better-sqlite3 (WAL), self-migrating on boot
     107- **Templates:** EJS (server-rendered) + **htmx 1.9** (vendored, no build step)
     108- **Audio:** ffmpeg-static (bundled)
     109- **Circles:** Ed25519-signed pull (libsodium via Node crypto)
    109110- **Fonts:** self-hosted variable woff2 (Fraunces / Plus Jakarta Sans)
    110111
    111 ## Project-structuur
     112## Project structure
    112113
    113114```
    114115src/
    115 ├── server.js          # Express bootstrap + routes mounten
    116 ├── config/            # database, mailer, google, feature-flags
    117 ├── db/migrations/     # SQLite-schema (001-init.sql)
    118 ├── middleware/        # site-resolving, auth, render (htmx-aware)
    119 ├── routes/            # per-resource Express-routers (posts, auth, admin-*, circle, …)
    120 ├── services/          # domeinlogica (federatie, stats, mailer, permissies, …)
     116├── server.js          # Express bootstrap + route mounting
     117├── config/            # database, mailer, google, feature flags
     118├── db/migrations/     # SQLite schema (001-init.sql)
     119├── middleware/        # site resolving, auth, render (htmx-aware)
     120├── routes/            # per-resource Express routers (posts, auth, admin-*, circle, …)
     121├── services/          # domain logic (federation, stats, mailer, permissions, …)
    121122├── views/             # shell.ejs + partials/ + pages/  (EJS)
    122 └── assets/            # css/ (palette-tokens + componenten), js/ (htmx, speler), fonts/
     123└── assets/            # css/ (palette tokens + components), js/ (htmx, player), fonts/
    123124```
    124125
    125 ## Licentie
     126## License
    126127
    127 **AGPL-3.0-or-later** — zie [LICENSE](LICENSE). Klonkt is vrije software: je mag
    128 het gebruiken, bestuderen, aanpassen en verspreiden. De AGPL vereist wel dat een
    129 gewijzigde versie die je als netwerkdienst aanbiedt z'n broncode beschikbaar
    130 stelt aan de gebruikers ervan. Gemaakt door robo.burr (Robin Genis) ·
     128**AGPL-3.0-or-later** — see [LICENSE](LICENSE). Klonkt is free software: you may
     129use, study, modify and distribute it. The AGPL does require that a modified
     130version you offer as a network service makes its source code available to the
     131users of that service. Made by robo.burr (Robin Genis) ·
    131132<https://klonkt.com>
Note: See TracChangeset for help on using the changeset viewer.