source: Klonkt/README.md@ 5a4c0b0

main
Last change on this file since 5a4c0b0 was 5a4c0b0, checked in by Robin Genis <roboburr@…>, 3 months ago

chore: AGPL-3.0 license + clean up repo metadata

  • LICENSE: full GNU AGPL-3.0 (canonical from gnu.org)
  • package.json: license=AGPL-3.0-or-later + remove stale DM/realtime description
  • README: license section finalized as AGPL-3.0

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

  • Property mode set to 100644
File size: 5.1 KB
RevLine 
[184393c]1# Klonkt
[7bc636b]2
[184393c]3Je eigen, **zelf-gehoste** plek op het web — voor je verhaal, je beeld en je
4geluid. Gebouwd op **Node + SQLite + htmx**: licht, server-rendered, en van jou.
5Geen algoritme, geen advertenties, geen platform dat ertussen zit.
[7bc636b]6
[184393c]7## Wat het kan
[7bc636b]8
[184393c]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).
[7bc636b]20
[184393c]21### Lite-modus (zonder audio)
[7bc636b]22
[184393c]23Zet `KLONKT_AUDIO=off` in `.env` om de hele audio-/muziek-feature uit te
24schakelen. 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.
[7bc636b]27
[5a2cb69]28## Zelf hosten
29
[184393c]30Klonkt is een **Node-app** — draai 'm op een **VPS, in Docker, of op een
31Node-hostingplatform (PaaS)**. **Niet** op klassieke shared PHP-hosting. De
32database (SQLite) maakt zichzelf aan bij de eerste start.
[5a2cb69]33
34### Optie A — Docker (aanbevolen)
35
[184393c]36Node, ffmpeg en cwebp zitten in het image; je hebt alleen Docker nodig.
[7bc636b]37
38```bash
[5a2cb69]39git clone <repo-url> klonkt && cd klonkt
[184393c]40cp .env.example .env # vul SESSION_SECRET + PUBLIC_BASE_URL in
[5a2cb69]41docker compose up -d
[7bc636b]42```
43
[184393c]44Data (database + media) blijft in het `klonkt-data`-volume, ook na een update.
45Updaten: `git pull && docker compose up -d --build`.
46
47### Optie B — VPS-installer (Debian/Ubuntu)
48
49Eén commando: installeert Node 20, Caddy (automatische HTTPS) en een
50systemd-service. Coëxistentie-veilig (raakt een bestaande Node/webserver niet).
[5a2cb69]51
52```bash
[184393c]53sudo bash scripts/install.sh --domain jouwdomein.nl
[5a2cb69]54```
55
[184393c]56Bijwerken kan daarna met `klonkt-update`.
57
58### Optie C — kaal Node (20+)
[5a2cb69]59
60```bash
61git clone <repo-url> klonkt && cd klonkt
62npm ci
[184393c]63cp .env.example .env # SESSION_SECRET + PUBLIC_BASE_URL invullen
64npm start # database wordt bij de eerste start aangemaakt
[5a2cb69]65```
66
[184393c]67Zet 'm voor productie achter een procesmanager (pm2/systemd) en een
68reverse-proxy. `cwebp` is optioneel (`apt install webp`) voor WebP-afbeeldingen.
[5a2cb69]69
[184393c]70### HTTPS (Docker / kaal Node)
[5a2cb69]71
[184393c]72Zet een reverse-proxy vóór de app. Met **Caddy** (automatisch Let's Encrypt):
[5a2cb69]73
74```caddy
75jouwdomein.nl {
76 reverse_proxy localhost:3000
77 encode gzip zstd
78}
79```
80
[184393c]81(De VPS-installer regelt Caddy + HTTPS al voor je.)
82
[5a2cb69]83### Eerste keer
84
[184393c]85Open je site → je krijgt de **setup-wizard**: kies je taal, geef je site een
86naam en maak je beheerder aan. De **eerste gebruiker wordt automatisch
87beheerder**; daarna sluit registratie zich. Wachtwoord kwijt?
88`npm run reset-admin` (Docker: `docker compose exec klonkt npm run reset-admin`).
89
90## Configuratie (`.env`)
91
92| Variabele | Nodig | Wat |
93|---|---|---|
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) |
[7bc636b]100
101## Stack
102
103- **Runtime:** Node 20+
104- **Web:** Express + Helmet + express-session
[184393c]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)
109- **Fonts:** self-hosted variable woff2 (Fraunces / Plus Jakarta Sans)
[7bc636b]110
[184393c]111## Project-structuur
[7bc636b]112
113```
114src/
[184393c]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, …)
121├── views/ # shell.ejs + partials/ + pages/ (EJS)
122└── assets/ # css/ (palette-tokens + componenten), js/ (htmx, speler), fonts/
[7bc636b]123```
124
[184393c]125## Licentie
[7bc636b]126
[5a4c0b0]127**AGPL-3.0-or-later** — zie [LICENSE](LICENSE). Klonkt is vrije software: je mag
128het gebruiken, bestuderen, aanpassen en verspreiden. De AGPL vereist wel dat een
129gewijzigde versie die je als netwerkdienst aanbiedt z'n broncode beschikbaar
130stelt aan de gebruikers ervan. Gemaakt door robo.burr (Robin Genis) ·
[184393c]131<https://klonkt.com>
Note: See TracBrowser for help on using the repository browser.