Changeset bbbfa3c in Klonkt
- Timestamp:
- 06/23/2026 05:25:43 PM (3 months ago)
- Branches:
- main
- Children:
- bb42dfb
- Parents:
- 83088b66
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
README.md
r83088b66 rbbbfa3c 1 1 # Klonkt 2 2 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.3 Your own, **self-hosted** corner of the web — for your story, your visuals and 4 your sound. Built on **Node + SQLite + htmx**: lightweight, server-rendered, and 5 yours. No algorithm, no ads, no platform sitting in between. 6 6 7 ## W at het kan7 ## What it does 8 8 9 - **Solo o f hub** — één persoonlijke site, of een label/collectief met meerdere10 makers onder één dak.11 - **Blog & foto's** — posts met cover, tags, tijdlijn ofgrid.12 - ** Eigen muziek hosten** — ingebouwde audiospeler met tracks, albums enplaylists.13 - **Fans & reacties** — bezoekers loggen in met Google (optioneel) en reageren.14 - **Gro eien**: nieuwsbrief, download-voor-email, EPK/perskit, link-in-bio,15 show -agenda, en **cookievrije statistieken**.16 - **Cir kels** — verbind je site met andere Klonkt-sites en toon elkaars publieke17 p osts; decentraal en zonder centraal platform (Ed25519-gesigneerde federatie).18 - **Them a's & talen** — meerdere paletten (light + dark), interface in NL/EN/DE.19 - **Install eerbaar (PWA)**, **privacy-first** (self-hosted fonts, geentracking).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). 20 20 21 ### Lite -modus (zonderaudio)21 ### Lite mode (no audio) 22 22 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 externeembeds26 (YouTube/SoundCloud/Spotify) blijven gewoon werken.23 Set `KLONKT_AUDIO=off` in `.env` to disable the entire audio/music feature. 24 Klonkt then runs as a lightweight **blog/photo/EPK/links site without ffmpeg** — 25 ideal for minimal hosting. Hub, Circles and external embeds 26 (YouTube/SoundCloud/Spotify) keep working. 27 27 28 ## Zelf hosten28 ## Self-hosting 29 29 30 Klonkt is een **Node-app** — draai 'm op een **VPS, in Docker, of op een31 Node-hostingplatform (PaaS)**. **Niet** op klassieke shared PHP-hosting. De 32 database (SQLite) maakt zichzelf aan bij de eerstestart.30 Klonkt is a **Node app** — run it on a **VPS, in Docker, or on a Node hosting 31 platform (PaaS)**. **Not** on classic shared PHP hosting. The database (SQLite) 32 creates itself on first start. 33 33 34 ### Opti e A — Docker (aanbevolen)34 ### Option A — Docker (recommended) 35 35 36 Node, ffmpeg en cwebp zitten in het image; je hebt alleen Docker nodig.36 Node, ffmpeg and cwebp are inside the image; you only need Docker. 37 37 38 38 ```bash 39 git clone <repo-url> klonkt && cd klonkt40 cp .env.example .env # vul SESSION_SECRET + PUBLIC_BASE_URL in39 git clone https://github.com/roboburr/klonkt.git && cd klonkt 40 cp .env.example .env # set SESSION_SECRET + PUBLIC_BASE_URL 41 41 docker compose up -d 42 42 ``` 43 43 44 Data (database + media) blijft in het `klonkt-data`-volume, ook na een update.45 Updat en: `git pull && docker compose up -d --build`.44 Data (database + media) stays in the `klonkt-data` volume, even across updates. 45 Updating: `git pull && docker compose up -d --build`. 46 46 47 ### Opti e B — VPS-installer (Debian/Ubuntu)47 ### Option B — VPS installer (Debian/Ubuntu) 48 48 49 Eén commando: installeert Node 20, Caddy (automatische HTTPS) en een 50 systemd-service. Coëxistentie-veilig (raakt een bestaande Node/webserver niet).49 One command: installs Node 20, Caddy (automatic HTTPS) and a systemd service. 50 Coexistence-safe (won't touch an existing Node/web server). 51 51 52 52 ```bash 53 sudo bash scripts/install.sh --domain jouwdomein.nl 53 curl -fsSL https://raw.githubusercontent.com/roboburr/klonkt/main/scripts/install.sh \ 54 | sudo bash -s -- --domain yourdomain.com 54 55 ``` 55 56 56 Bijwerken kan daarna met`klonkt-update`.57 After that you can update with `klonkt-update`. 57 58 58 ### Opti e C — kaalNode (20+)59 ### Option C — bare Node (20+) 59 60 60 61 ```bash 61 git clone <repo-url> klonkt && cd klonkt62 git clone https://github.com/roboburr/klonkt.git && cd klonkt 62 63 npm ci 63 cp .env.example .env # SESSION_SECRET + PUBLIC_BASE_URL invullen64 npm start # database wordt bij de eerste start aangemaakt64 cp .env.example .env # set SESSION_SECRET + PUBLIC_BASE_URL 65 npm start # the database is created on first start 65 66 ``` 66 67 67 Zet 'm voor productie achter een procesmanager (pm2/systemd) en een 68 reverse -proxy. `cwebp` is optioneel (`apt install webp`) voor WebP-afbeeldingen.68 For production, put it behind a process manager (pm2/systemd) and a 69 reverse proxy. `cwebp` is optional (`apt install webp`) for WebP images. 69 70 70 ### HTTPS (Docker / kaalNode)71 ### HTTPS (Docker / bare Node) 71 72 72 Zet een reverse-proxy vóór de app. Met **Caddy** (automatischLet's Encrypt):73 Put a reverse proxy in front of the app. With **Caddy** (automatic Let's Encrypt): 73 74 74 75 ```caddy 75 jouwdomein.nl{76 yourdomain.com { 76 77 reverse_proxy localhost:3000 77 78 encode gzip zstd … … 79 80 ``` 80 81 81 ( De VPS-installer regelt Caddy + HTTPS al voor je.)82 (The VPS installer sets up Caddy + HTTPS for you already.) 82 83 83 ### Eerste keer84 ### First run 84 85 85 Open je site → je krijgt de **setup-wizard**: kies je taal, geef je site een86 naam en maak je beheerder aan. De **eerste gebruiker wordt automatisch 87 beheerder**; daarna sluit registratie zich. Wachtwoord kwijt?86 Open your site → you get the **setup wizard**: pick your language, name your site 87 and create your admin. The **first user automatically becomes the administrator**; 88 registration then closes. Lost your password? 88 89 `npm run reset-admin` (Docker: `docker compose exec klonkt npm run reset-admin`). 89 90 90 ## Configurati e(`.env`)91 ## Configuration (`.env`) 91 92 92 | Variab ele | Nodig | Wat |93 | Variable | Required | What | 93 94 |---|---|---| 94 | `SESSION_SECRET` | ✅ | Willekeurige string van ≥32 tekens |95 | `PUBLIC_BASE_URL` | ✅ | Canoni eke 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 (geenaudio/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) | 100 101 101 102 ## Stack … … 103 104 - **Runtime:** Node 20+ 104 105 - **Web:** Express + Helmet + express-session 105 - **DB:** better-sqlite3 (WAL), migreert zichzelf bijboot106 - **Templates:** EJS (server-rendered) + **htmx 1.9** (vendored, geen build-step)107 - **Audio:** ffmpeg-static ( meegebundeld)108 - **Cir kels:** 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) 109 110 - **Fonts:** self-hosted variable woff2 (Fraunces / Plus Jakarta Sans) 110 111 111 ## Project -structuur112 ## Project structure 112 113 113 114 ``` 114 115 src/ 115 ├── server.js # Express bootstrap + route s mounten116 ├── config/ # database, mailer, google, feature -flags117 ├── 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/ # dom einlogica (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, …) 121 122 ├── 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/ 123 124 ``` 124 125 125 ## Licen tie126 ## License 126 127 127 **AGPL-3.0-or-later** — zie [LICENSE](LICENSE). Klonkt is vrije software: je mag128 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 doorrobo.burr (Robin Genis) ·128 **AGPL-3.0-or-later** — see [LICENSE](LICENSE). Klonkt is free software: you may 129 use, study, modify and distribute it. The AGPL does require that a modified 130 version you offer as a network service makes its source code available to the 131 users of that service. Made by robo.burr (Robin Genis) · 131 132 <https://klonkt.com>
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)