source: Klonkt/README.md@ 184393c

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

docs: README updated to reflect current Klonkt

Removed stale info (Prutter/DMs, WebSocket, src/websocket/, 'no install
script', Ocean/Gold palettes, 'not for distribution'). Added: lite mode,
scripts/install.sh (VPS), setup wizard, .env table, Circles/Ed25519, correct
structure + stack. License = TBD (heading towards AGPL-3.0).

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

  • Property mode set to 100644
File size: 5.0 KB
Line 
1# Klonkt
2
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.
6
7## Wat het kan
8
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).
20
21### Lite-modus (zonder audio)
22
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.
27
28## Zelf hosten
29
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.
33
34### Optie A — Docker (aanbevolen)
35
36Node, ffmpeg en cwebp zitten in het image; je hebt alleen Docker nodig.
37
38```bash
39git clone <repo-url> klonkt && cd klonkt
40cp .env.example .env # vul SESSION_SECRET + PUBLIC_BASE_URL in
41docker compose up -d
42```
43
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).
51
52```bash
53sudo bash scripts/install.sh --domain jouwdomein.nl
54```
55
56Bijwerken kan daarna met `klonkt-update`.
57
58### Optie C — kaal Node (20+)
59
60```bash
61git clone <repo-url> klonkt && cd klonkt
62npm ci
63cp .env.example .env # SESSION_SECRET + PUBLIC_BASE_URL invullen
64npm start # database wordt bij de eerste start aangemaakt
65```
66
67Zet 'm voor productie achter een procesmanager (pm2/systemd) en een
68reverse-proxy. `cwebp` is optioneel (`apt install webp`) voor WebP-afbeeldingen.
69
70### HTTPS (Docker / kaal Node)
71
72Zet een reverse-proxy vóór de app. Met **Caddy** (automatisch Let's Encrypt):
73
74```caddy
75jouwdomein.nl {
76 reverse_proxy localhost:3000
77 encode gzip zstd
78}
79```
80
81(De VPS-installer regelt Caddy + HTTPS al voor je.)
82
83### Eerste keer
84
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) |
100
101## Stack
102
103- **Runtime:** Node 20+
104- **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)
109- **Fonts:** self-hosted variable woff2 (Fraunces / Plus Jakarta Sans)
110
111## Project-structuur
112
113```
114src/
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/
123```
124
125## Licentie
126
127Open-source, zelf-hostbaar. **Definitieve licentie nog te bepalen** (richting
128AGPL-3.0). Tot dan: gebruik om zelf te hosten is welkom; vraag even bij
129herdistributie/doorverkoop. Gemaakt door robo.burr (Robin Genis) ·
130<https://klonkt.com>
Note: See TracBrowser for help on using the repository browser.