From 292a5d2587533bb792103864547887dd76cdef81 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Tue, 17 Mar 2026 22:42:42 +0100 Subject: [PATCH] feat: add K-Convert and K-Shrink projects with descriptions and thumbnails --- lib/data.ts | 26 +++++++++++++++++++++++++- public/images/k-convert.avif | Bin 0 -> 12549 bytes public/images/k-launcher.avif | Bin 0 -> 4398 bytes 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 public/images/k-convert.avif create mode 100644 public/images/k-launcher.avif diff --git a/lib/data.ts b/lib/data.ts index a0266f3..70da1ad 100644 --- a/lib/data.ts +++ b/lib/data.ts @@ -444,7 +444,7 @@ export const projects: Project[] = [ "visit_url": null, "download_url": null, "technologies": ["Rust", "iced"], - "thumbnails": [] + "thumbnails": ["/images/k-launcher.avif"] }, { "id": 19, @@ -459,5 +459,29 @@ export const projects: Project[] = [ "thumbnails": [ "/images/k-tv.png" ] + }, + { + "id": 20, + "name": "K-Convert", + "short_description": "Client-side image and audio converter powered by FFmpeg & WASM.", + "description": "K-Convert is a 100% client-side web app for converting images and audio files. All processing happens locally in the browser — no files are ever uploaded to a server. Powered by FFmpeg compiled to WebAssembly.\n\n**Technical details:**\n- **Frontend:** React, TypeScript, TailwindCSS\n- **Processing:** FFmpeg.wasm (WASM)", + "category": "Web", + "github_url": "https://github.com/GKaszewski/k-convert", + "visit_url": "https://convert.gabrielkaszewski.dev/", + "download_url": null, + "technologies": ["React", "TypeScript", "TailwindCSS", "FFmpeg.wasm", "WASM"], + "thumbnails": ["/images/k-convert.avif"] + }, + { + "id": 21, + "name": "K-Shrink", + "short_description": "Wayland clipboard daemon that auto-compresses images on copy.", + "description": "K-Shrink is a Wayland clipboard daemon that automatically compresses images the moment you copy them. Copy a 3 MB screenshot, paste a 300 KB WebP — no extra steps required.\n\n**Technical details:**\n- **Language:** Rust\n- **Protocol:** Wayland", + "category": "Desktop", + "github_url": "https://github.com/GKaszewski/k-shrink", + "visit_url": null, + "download_url": "https://aur.archlinux.org/packages/k-shrink", + "technologies": ["Rust", "Wayland"], + "thumbnails": [] } ]; diff --git a/public/images/k-convert.avif b/public/images/k-convert.avif new file mode 100644 index 0000000000000000000000000000000000000000..d208be9e23d551ac6ddbe22f6870c79ff63c4579 GIT binary patch literal 12549 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

`1; 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 O3Hx7*C;T(w^gjR!5R-iX literal 0 HcmV?d00001 diff --git a/public/images/k-launcher.avif b/public/images/k-launcher.avif new file mode 100644 index 0000000000000000000000000000000000000000..181e77811692f7a89edc038c782a73689d2834de GIT binary patch literal 4398 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 a2*j`yPV|_vGy*@~WDCUaZKd7*UH=C>vn!hb literal 0 HcmV?d00001