| 1 | # PrutFolio v1
|
|---|
| 2 |
|
|---|
| 3 | Persoonlijk multi-site platform met editorial-feel content + sociale community.
|
|---|
| 4 | Forked van **PrutCMS v9** (PHP, file-based) naar **Node + SQLite + htmx**.
|
|---|
| 5 |
|
|---|
| 6 | > **Naam-uitleg.** "PrutCMS v9" is en blijft het file-based PHP-product. PrutFolio
|
|---|
| 7 | > v1 is een nieuw product met andere DNA: het is geen *publishing tool* maar een
|
|---|
| 8 | > *persoonlijk canvas* — content, profiel, sociale interactie en realtime in één.
|
|---|
| 9 |
|
|---|
| 10 | ## Filosofie
|
|---|
| 11 |
|
|---|
| 12 | - **Editorial feel.** Magazine-typografie (Fraunces + Literata + Plus Jakarta), royale spacing, 8 paletten waaronder Sage / Paper / Ocean / Forest / Stone / Midnight / Sunset / Cream. Light + dark per palette.
|
|---|
| 13 | - **App-feel waar het telt.** Geen full page reloads — htmx swaps + (binnenkort) View Transitions. Voelt als app, niet als website.
|
|---|
| 14 | - **Server-rendered.** Geen build step, geen SPA-tax. EJS + htmx + minimale Alpine.
|
|---|
| 15 | - **Realtime ingebouwd.** WebSocket server zit in `src/websocket/`. SSE als alternatief beschikbaar.
|
|---|
| 16 | - **Privacy-first.** Self-hosted fonts, geen third-party requests, geen tracking.
|
|---|
| 17 |
|
|---|
| 18 | ## Roadmap
|
|---|
| 19 |
|
|---|
| 20 | | Fase | Scope | Status |
|
|---|
| 21 | |------|-------|--------|
|
|---|
| 22 | | **1.0 — v9-feel** | Homepage, profile-header, feed, post-detail visueel matchen met v9 | 🟡 in progress |
|
|---|
| 23 | | **1.1 — auth + posts** | Login / register / post CRUD compleet | ✅ klaar |
|
|---|
| 24 | | **1.2 — sociale laag** | Comments, Prutter (DMs zonder E2EE), notifications | ⚪ na 1.0 |
|
|---|
| 25 | | **1.3 — app-feel** | View Transitions, optimistic UI, swipe-actions, haptics | ⚪ |
|
|---|
| 26 | | **1.4 — bottom-tab nav** | Native-app-stijl navigatie op mobiel, sidebar op desktop | ⚪ |
|
|---|
| 27 | | **2.0 — E2EE DMs** | MLS protocol via `@openmls/openmls`, single-device first | ⚪ apart project |
|
|---|
| 28 |
|
|---|
| 29 | ## Quick start
|
|---|
| 30 |
|
|---|
| 31 | ```bash
|
|---|
| 32 | npm install
|
|---|
| 33 | cp .env.example .env
|
|---|
| 34 | # zet SESSION_SECRET op iets random (>=32 chars in production)
|
|---|
| 35 | npm run migrate
|
|---|
| 36 | npm run dev
|
|---|
| 37 | ```
|
|---|
| 38 |
|
|---|
| 39 | Open http://localhost:3000
|
|---|
| 40 |
|
|---|
| 41 | ## Stack
|
|---|
| 42 |
|
|---|
| 43 | - **Runtime:** Node 20+
|
|---|
| 44 | - **Web:** Express + Helmet + express-session
|
|---|
| 45 | - **DB:** better-sqlite3 (WAL mode)
|
|---|
| 46 | - **Templates:** EJS (server-rendered)
|
|---|
| 47 | - **Frontend interactie:** htmx 1.9 (vendored)
|
|---|
| 48 | - **Realtime:** ws (WebSocket)
|
|---|
| 49 | - **Fonts:** self-hosted variable woff2 (Fraunces / Literata / Plus Jakarta Sans)
|
|---|
| 50 |
|
|---|
| 51 | ## Project structure
|
|---|
| 52 |
|
|---|
| 53 | ```
|
|---|
| 54 | src/
|
|---|
| 55 | ├── server.js # Express bootstrap, routes mounting, WS server
|
|---|
| 56 | ├── config/ # database, env loading
|
|---|
| 57 | ├── db/migrations/ # SQLite schema (001-init.sql)
|
|---|
| 58 | ├── middleware/ # auth, render (htmx-aware), site, rate-limit
|
|---|
| 59 | ├── routes/ # per-resource Express routers
|
|---|
| 60 | ├── services/ # domain logic (Prutter, Audio, Theme, Permissions, ...)
|
|---|
| 61 | ├── views/
|
|---|
| 62 | │ ├── shell.ejs # outer document (head, nav, footer)
|
|---|
| 63 | │ ├── partials/ # topnav, profile-header, post-card, post-tile
|
|---|
| 64 | │ └── pages/ # home, post, account, admin, ...
|
|---|
| 65 | ├── assets/
|
|---|
| 66 | │ ├── css/style.css # v9 stylesheet — palette tokens, components
|
|---|
| 67 | │ ├── fonts/ # variable woff2
|
|---|
| 68 | │ └── js/ # htmx, audio-player
|
|---|
| 69 | └── websocket/ # WS server for realtime (notifications, prutter, presence)
|
|---|
| 70 | ```
|
|---|
| 71 |
|
|---|
| 72 | ## Migratie van PrutCMS v9
|
|---|
| 73 |
|
|---|
| 74 | Importer is gepland voor v1.1. Pad: `posts/*.md` + `users.json` + `sites/*/config.json` → SQLite.
|
|---|
| 75 |
|
|---|
| 76 | ## License
|
|---|
| 77 |
|
|---|
| 78 | Persoonlijk project. Niet bedoeld voor publieke distributie tot verder bericht.
|
|---|
| 79 |
|
|---|
| 80 | ## Deployed via git workflow on 2026-04-30
|
|---|
| 81 |
|
|---|