Changeset 184393c in Klonkt for README.md


Ignore:
Timestamp:
06/23/2026 04:13:25 PM (3 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
d5e78f7
Parents:
3f4049e
Message:

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@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • README.md

    r3f4049e r184393c  
    1 # Klonkt Beta
     1# Klonkt
    22
    3 Persoonlijk multi-site platform met editorial-feel content + sociale community.
    4 Gebouwd op **Node + SQLite + htmx** — licht, zelf-gehost, en van jou.
     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.
    56
    6 > **Wat het is.** Geen *publishing tool* maar een *persoonlijk canvas* — content,
    7 > profiel, sociale interactie en realtime in één.
     7## Wat het kan
    88
    9 ## Filosofie
     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).
    1020
    11 - **Editorial feel.** Magazine-typografie (Fraunces + Literata + Plus Jakarta), royale spacing, 12 paletten (o.a. Sage, Paper, Ocean, Forest, Stone, Midnight, Sunset, Cream, Rose, Goud, Terracotta, Lilac). Light + dark per palette.
    12 - **App-feel waar het telt.** Geen full page reloads — htmx swaps + (binnenkort) View Transitions. Voelt als app, niet als website.
    13 - **Server-rendered.** Geen build step, geen SPA-tax. EJS + htmx + minimale Alpine.
    14 - **Realtime ingebouwd.** WebSocket server zit in `src/websocket/`. SSE als alternatief beschikbaar.
    15 - **Privacy-first.** Self-hosted fonts, geen third-party requests, geen tracking.
     21### Lite-modus (zonder audio)
    1622
    17 ## Roadmap
    18 
    19 | Fase | Scope | Status |
    20 |------|-------|--------|
    21 | **1.0 — v9-feel** | Homepage, profile-header, feed, post-detail visueel matchen met v9 | 🟡 in progress |
    22 | **1.1 — auth + posts** | Login / register / post CRUD compleet | ✅ klaar |
    23 | **1.2 — sociale laag** | Comments, Prutter (DMs zonder E2EE), notifications | ⚪ na 1.0 |
    24 | **1.3 — app-feel** | View Transitions, optimistic UI, swipe-actions, haptics | ⚪ |
    25 | **1.4 — bottom-tab nav** | Native-app-stijl navigatie op mobiel, sidebar op desktop | ⚪ |
    26 | **2.0 — E2EE DMs** | MLS protocol via `@openmls/openmls`, single-device first | ⚪ apart project |
     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.
    2727
    2828## Zelf hosten
    2929
    30 Klonkt is een **Node-app** (geen PHP) — draai 'm op een VPS, in Docker of op een
    31 Node-hostingplatform. **Niet** op klassieke shared PHP-hosting. De database
    32 (SQLite) maakt zichzelf aan bij de eerste start; er is geen los installatiescript.
     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.
    3333
    3434### Optie A — Docker (aanbevolen)
    3535
    36 Alles (Node, ffmpeg, cwebp) zit in het image; je hoeft alleen Docker te hebben.
     36Node, ffmpeg en cwebp zitten in het image; je hebt alleen Docker nodig.
    3737
    3838```bash
    3939git clone <repo-url> klonkt && cd klonkt
    40 cp .env.example .env
    41 # vul in .env minimaal in: SESSION_SECRET (>=32 random tekens) + PUBLIC_BASE_URL
     40cp .env.example .env          # vul SESSION_SECRET + PUBLIC_BASE_URL in
    4241docker compose up -d
    4342```
    4443
    45 De app draait nu op poort 3000. Alle data (database + geüploade media/audio)
    46 blijft bewaard in het `klonkt-data`-volume, ook na een update. Updaten:
     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).
    4751
    4852```bash
    49 git pull && docker compose up -d --build
     53sudo bash scripts/install.sh --domain jouwdomein.nl
    5054```
    5155
    52 ### Optie B — direct met Node (Node 20+)
     56Bijwerken kan daarna met `klonkt-update`.
     57
     58### Optie C — kaal Node (20+)
    5359
    5460```bash
    5561git clone <repo-url> klonkt && cd klonkt
    5662npm ci
    57 cp .env.example .env        # SESSION_SECRET + PUBLIC_BASE_URL invullen
    58 npm start                   # database wordt bij de eerste start aangemaakt
     63cp .env.example .env          # SESSION_SECRET + PUBLIC_BASE_URL invullen
     64npm start                     # database wordt bij de eerste start aangemaakt
    5965```
    6066
    61 Open http://localhost:3000. Voor productie: zet 'm achter een procesmanager
    62 (pm2/systemd) zodat 'ie aanblijft. `cwebp` is optioneel (Debian/Ubuntu:
    63 `apt install webp`) voor WebP-afbeeldingen — ontbreekt 'ie, dan wordt het
    64 origineel bewaard. (`npm run dev` = watch-mode voor ontwikkeling.)
     67Zet 'm voor productie achter een procesmanager (pm2/systemd) en een
     68reverse-proxy. `cwebp` is optioneel (`apt install webp`) voor WebP-afbeeldingen.
    6569
    66 ### HTTPS (productie)
     70### HTTPS (Docker / kaal Node)
    6771
    68 Zet een reverse-proxy vóór de app voor TLS. Met **Caddy** (automatisch
    69 Let's Encrypt) volstaat één blok:
     72Zet een reverse-proxy vóór de app. Met **Caddy** (automatisch Let's Encrypt):
    7073
    7174```caddy
     
    7679```
    7780
     81(De VPS-installer regelt Caddy + HTTPS al voor je.)
     82
    7883### Eerste keer
    7984
    80 Open je site en ga naar **`/auth/register`** — de **eerste gebruiker wordt
    81 automatisch beheerder**; daarna sluit registratie zich. Wachtwoord kwijt?
    82 `npm run reset-admin` (in Docker: `docker compose exec klonkt npm run reset-admin`).
     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) |
    83100
    84101## Stack
     
    86103- **Runtime:** Node 20+
    87104- **Web:** Express + Helmet + express-session
    88 - **DB:** better-sqlite3 (WAL mode)
    89 - **Templates:** EJS (server-rendered)
    90 - **Frontend interactie:** htmx 1.9 (vendored)
    91 - **Realtime:** ws (WebSocket)
    92 - **Fonts:** self-hosted variable woff2 (Fraunces / Literata / Plus Jakarta Sans)
     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)
    93110
    94 ## Project structure
     111## Project-structuur
    95112
    96113```
    97114src/
    98 ├── server.js           # Express bootstrap, routes mounting, WS server
    99 ├── config/             # database, env loading
    100 ├── db/migrations/      # SQLite schema (001-init.sql)
    101 ├── middleware/         # auth, render (htmx-aware), site, rate-limit
    102 ├── routes/             # per-resource Express routers
    103 ├── services/           # domain logic (Prutter, Audio, Theme, Permissions, ...)
    104 ├── views/
    105 │   ├── shell.ejs       # outer document (head, nav, footer)
    106 │   ├── partials/       # topnav, profile-header, post-card, post-tile
    107 │   └── pages/          # home, post, account, admin, ...
    108 ├── assets/
    109 │   ├── css/style.css   # v9 stylesheet — palette tokens, components
    110 │   ├── fonts/          # variable woff2
    111 │   └── js/             # htmx, audio-player
    112 └── websocket/          # WS server for realtime (notifications, prutter, presence)
     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/
    113123```
    114124
    115 ## Import
     125## Licentie
    116126
    117 Importer voor bestaande bestandsgebaseerde content is gepland voor v1.1.
    118 Pad: `posts/*.md` + `users.json` + `sites/*/config.json` → SQLite.
    119 
    120 ## License
    121 
    122 Persoonlijk project. Niet bedoeld voor publieke distributie tot verder bericht.
    123 
    124 ## Deployed via git workflow on 2026-04-30
    125 
     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 TracChangeset for help on using the changeset viewer.