From 764e419a32e9095ab3d0d0ab29ce8c86140fae7b Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Wed, 13 May 2026 23:53:38 +0200 Subject: [PATCH] feat: add Movies Diary to projects and K-Suite --- app/k-suite/page.tsx | 16 +++++++++++++++- lib/data.ts | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/k-suite/page.tsx b/app/k-suite/page.tsx index b9d4081..1098983 100644 --- a/app/k-suite/page.tsx +++ b/app/k-suite/page.tsx @@ -74,6 +74,18 @@ const kSuiteApps: KSuiteApp[] = [ technologies: ["Rust", "Next.js", "TailwindCSS"], color: "from-violet-400 to-purple-500", }, + { + id: 6, + name: "Movies Diary", + shortDescription: "Self-hosted movie logging with federation", + description: + "Log every film you watch, rate it, and share reviews across the Fediverse via ActivityPub. Federate with other instances, follow remote users, and browse a fully federated activity feed.", + url: "https://movies.gabrielkaszewski.dev/", + githubUrl: "https://github.com/GKaszewski/movies-diary", + icon: "/images/movies-diary.avif", + technologies: ["Rust", "Axum", "ActivityPub", "SQLite"], + color: "from-rose-400 to-red-500", + }, ]; // Connection definitions for the organism @@ -82,10 +94,12 @@ const connections = [ { from: 1, to: 2 }, // Thoughts -> K-Tuner { from: 2, to: 3 }, // K-Tuner -> K-QR { from: 3, to: 4 }, // K-QR -> K-TV - { from: 4, to: 0 }, // K-TV -> K-Notes + { from: 4, to: 5 }, // K-TV -> Movies Diary + { from: 5, to: 0 }, // Movies Diary -> K-Notes { from: 0, to: 2 }, // K-Notes -> K-Tuner (cross) { from: 1, to: 3 }, // Thoughts -> K-QR (cross) { from: 2, to: 4 }, // K-Tuner -> K-TV (cross) + { from: 5, to: 1 }, // Movies Diary -> Thoughts (federation) ]; const KSuiteOrganism = () => { diff --git a/lib/data.ts b/lib/data.ts index 79d9270..9c76d40 100644 --- a/lib/data.ts +++ b/lib/data.ts @@ -455,6 +455,29 @@ export const projects: Project[] = [ thumbnails: ["/images/galeria_rumia.avif", "/images/galeria_rumia2.avif"], commercial: true, }, + { + id: 24, + name: "Movies Diary", + short_description: + "Self-hosted movie logging with ActivityPub federation.", + description: + "A self-hosted, server-side rendered movie logging system with a full REST API. Built entirely in Rust with no JavaScript in the HTML interface — just HTML forms and an RSS feed.\n\n**Highlights:**\n- Immutable, append-only viewing ledger (tracks re-watches)\n- ActivityPub federation — follow remote users, broadcast reviews as federated Notes, shared inbox, paginated outbox\n- Full-text search via SQLite FTS5 or PostgreSQL tsvector + GIN\n- Background poster fetching, TMDB enrichment (cast, crew, genres, box office), image conversion to AVIF/WebP\n- File importer: CSV, TSV, JSON, XLSX from Letterboxd, IMDb, etc.\n- Dual database support: SQLite and PostgreSQL\n- Terminal UI client\n- OpenAPI documentation (Swagger UI + Scalar)\n\n**Technical details:**\n- **Architecture:** Hexagonal (Ports & Adapters) with DDD\n- **Backend:** Rust, Axum, SQLx\n- **Templates:** Askama (SSR)\n- **Event bus:** SQLite/PostgreSQL queue or NATS JetStream\n- **Federation:** ActivityPub (AP)", + category: "Web", + github_url: "https://github.com/GKaszewski/movies-diary", + visit_url: "https://movies.gabrielkaszewski.dev/", + download_url: null, + technologies: [ + "Rust", + "Axum", + "SQLite", + "PostgreSQL", + "ActivityPub", + "Askama", + "NATS", + "Docker", + ], + thumbnails: [], + }, { id: 23, name: "Pixel palette colorizer",