summaryrefslogtreecommitdiff
path: root/about/showcase.html
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-10-31 20:27:49 +0200
committerPaul Buetow <paul@buetow.org>2025-10-31 20:27:49 +0200
commitfe0a3a0aea02d80786477bb4e7c505966898000d (patch)
treeef263cd5a1dfbaf3ed4d1aa261a5670db0a6a217 /about/showcase.html
parent535023866beea5393a6f90748ae039c02fc4b1db (diff)
Update content for html
Diffstat (limited to 'about/showcase.html')
-rw-r--r--about/showcase.html591
1 files changed, 273 insertions, 318 deletions
diff --git a/about/showcase.html b/about/showcase.html
index e4c573b7..af271202 100644
--- a/about/showcase.html
+++ b/about/showcase.html
@@ -13,7 +13,7 @@
</p>
<h1 style='display: inline' id='project-showcase'>Project Showcase</h1><br />
<br />
-<span>Generated on: 2025-10-24</span><br />
+<span>Generated on: 2025-10-31</span><br />
<br />
<span>This page showcases my side projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing. The projects are ordered by recent activity, with the most actively maintained projects listed first.</span><br />
<br />
@@ -24,9 +24,9 @@
<li>⇢ <a href='#overall-statistics'>Overall Statistics</a></li>
<li>⇢ <a href='#projects'>Projects</a></li>
<li>⇢ ⇢ <a href='#yoga'>yoga</a></li>
-<li><a href='#yoga'>Yoga</a></li>
<li>⇢ ⇢ <a href='#conf'>conf</a></li>
<li>⇢ ⇢ <a href='#hexai'>hexai</a></li>
+<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li>
<li>⇢ ⇢ <a href='#foostats'>foostats</a></li>
<li>⇢ ⇢ <a href='#gitsyncer'>gitsyncer</a></li>
<li>⇢ ⇢ <a href='#totalrecall'>totalrecall</a></li>
@@ -40,20 +40,19 @@
<li>⇢ ⇢ <a href='#sillybench'>sillybench</a></li>
<li>⇢ ⇢ <a href='#rcm'>rcm</a></li>
<li>⇢ ⇢ <a href='#gemtexter'>gemtexter</a></li>
+<li>⇢ ⇢ <a href='#gogios'>gogios</a></li>
<li>⇢ ⇢ <a href='#quicklogger'>quicklogger</a></li>
<li>⇢ ⇢ <a href='#docker-radicale-server'>docker-radicale-server</a></li>
<li>⇢ ⇢ <a href='#terraform'>terraform</a></li>
-<li>⇢ ⇢ <a href='#gogios'>gogios</a></li>
<li>⇢ ⇢ <a href='#gorum'>gorum</a></li>
<li>⇢ ⇢ <a href='#guprecords'>guprecords</a></li>
<li>⇢ ⇢ <a href='#randomjournalpage'>randomjournalpage</a></li>
<li>⇢ ⇢ <a href='#sway-autorotate'>sway-autorotate</a></li>
+<li>⇢ ⇢ <a href='#photoalbum'>photoalbum</a></li>
<li>⇢ ⇢ <a href='#geheim'>geheim</a></li>
<li>⇢ ⇢ <a href='#algorithms'>algorithms</a></li>
-<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li>
<li>⇢ ⇢ <a href='#perl-c-fibonacci'>perl-c-fibonacci</a></li>
<li>⇢ ⇢ <a href='#ioriot'>ioriot</a></li>
-<li>⇢ ⇢ <a href='#photoalbum'>photoalbum</a></li>
<li>⇢ ⇢ <a href='#staticfarm-apache-handlers'>staticfarm-apache-handlers</a></li>
<li>⇢ ⇢ <a href='#dyndns'>dyndns</a></li>
<li>⇢ ⇢ <a href='#mon'>mon</a></li>
@@ -75,8 +74,8 @@
<li>⇢ ⇢ <a href='#perldaemon'>perldaemon</a></li>
<li>⇢ ⇢ <a href='#awksite'>awksite</a></li>
<li>⇢ ⇢ <a href='#jsmstrade'>jsmstrade</a></li>
-<li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li>
<li>⇢ ⇢ <a href='#ychat'>ychat</a></li>
+<li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li>
<li>⇢ ⇢ <a href='#hsbot'>hsbot</a></li>
<li>⇢ ⇢ <a href='#fype'>fype</a></li>
<li>⇢ ⇢ <a href='#vs-sim'>vs-sim</a></li>
@@ -85,11 +84,11 @@
<br />
<ul>
<li>📦 Total Projects: 56</li>
-<li>📊 Total Commits: 11,247</li>
-<li>📈 Total Lines of Code: 211,790</li>
-<li>📄 Total Lines of Documentation: 23,887</li>
-<li>💻 Languages: Go (40.3%), Java (19.1%), C (9.6%), Perl (7.6%), HTML (5.2%), C/C++ (3.9%), Shell (3.3%), C++ (2.4%), Config (1.4%), Ruby (1.3%), HCL (1.3%), YAML (0.9%), Python (0.8%), Make (0.7%), CSS (0.6%), Raku (0.4%), JSON (0.4%), XML (0.3%), Haskell (0.3%), TOML (0.1%)</li>
-<li>📚 Documentation: Text (50.2%), Markdown (47.7%), LaTeX (2.1%)</li>
+<li>📊 Total Commits: 11,284</li>
+<li>📈 Total Lines of Code: 276,238</li>
+<li>📄 Total Lines of Documentation: 53,986</li>
+<li>💻 Languages: Go (31.0%), Java (14.6%), C++ (13.5%), Shell (7.7%), C/C++ (7.5%), C (7.3%), Perl (6.4%), HTML (4.6%), Config (1.7%), Ruby (1.0%), HCL (1.0%), YAML (0.7%), Make (0.7%), Python (0.6%), CSS (0.5%), Raku (0.3%), JSON (0.3%), XML (0.2%), Haskell (0.2%), TOML (0.1%)</li>
+<li>📚 Documentation: Markdown (76.6%), Text (22.4%), LaTeX (0.9%)</li>
<li>🎵 Vibe-Coded Projects: 4 out of 56 (7.1%)</li>
<li>🤖 AI-Assisted Projects (including vibe-coded): 10 out of 56 (17.9% AI-assisted, 82.1% human-only)</li>
<li>🚀 Release Status: 36 released, 20 experimental (64.3% with releases, 35.7% experimental)</li>
@@ -101,19 +100,21 @@
<ul>
<li>💻 Languages: Go (100.0%)</li>
<li>📚 Documentation: Markdown (100.0%)</li>
-<li>📊 Commits: 11</li>
-<li>📈 Lines of Code: 3376</li>
+<li>📊 Commits: 12</li>
+<li>📈 Lines of Code: 3408</li>
<li>📄 Lines of Documentation: 82</li>
-<li>📅 Development Period: 2025-10-01 to 2025-10-12</li>
-<li>🔥 Recent Activity: 18.3 days (avg. age of last 42 commits)</li>
+<li>📅 Development Period: 2025-10-01 to 2025-10-24</li>
+<li>🔥 Recent Activity: 24.2 days (avg. age of last 42 commits)</li>
<li>⚖️ License: No license found</li>
-<li>🏷️ Latest Release: v0.2.5 (2025-10-12)</li>
+<li>🏷️ Latest Release: v0.3.0 (2025-10-24)</li>
<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li>
</ul><br />
<br />
<a href='showcase/yoga/image-1.png'><img alt='yoga screenshot' title='yoga screenshot' src='showcase/yoga/image-1.png' /></a><br />
<br />
-<h1 style='display: inline' id='yoga'>Yoga</h1><br />
+<span>Yoga is a terminal-based video browser designed for managing and playing local yoga video collections. It scans a directory (defaulting to <span class='inlinecode'>~/Yoga</span>) for common video formats, probes and caches their durations, and provides a keyboard-driven interface for quickly filtering videos by name, duration range, or tags. Users can sort by name, length, or age, and launch videos directly in VLC with optional crop settings—all without leaving the terminal. The tool is optimized for quick navigation and playback, making it easy to find and start a specific practice session in seconds.</span><br />
+<br />
+<span>The project is implemented in Go with a TUI interface, organized around a clean <span class='inlinecode'>cmd/yoga</span> entry point that wires together internal packages for filesystem operations (<span class='inlinecode'>internal/fsutil</span>), metadata caching (<span class='inlinecode'>internal/meta</span>), and UI flow (<span class='inlinecode'>internal/app</span>). Video metadata is persisted in <span class='inlinecode'>.video_duration_cache.json</span> files to avoid re-probing on every launch. Development uses Mage for build tasks, enforces ≥85% test coverage, and follows standard Go idioms with <span class='inlinecode'>gofumpt</span> formatting.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/yoga'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/yoga'>View on GitHub</a><br />
@@ -123,19 +124,20 @@
<h3 style='display: inline' id='conf'>conf</h3><br />
<br />
<ul>
-<li>💻 Languages: Perl (30.9%), YAML (24.4%), Shell (22.8%), Config (5.4%), CSS (5.3%), TOML (4.7%), Ruby (4.1%), Lua (1.1%), Docker (0.6%), JSON (0.5%)</li>
-<li>📚 Documentation: Text (69.1%), Markdown (30.9%)</li>
-<li>📊 Commits: 1018</li>
-<li>📈 Lines of Code: 6185</li>
-<li>📄 Lines of Documentation: 1445</li>
-<li>📅 Development Period: 2021-12-28 to 2025-10-22</li>
-<li>🔥 Recent Activity: 25.6 days (avg. age of last 42 commits)</li>
+<li>💻 Languages: Perl (30.5%), YAML (25.3%), Shell (22.5%), Config (5.4%), CSS (5.2%), TOML (4.7%), Ruby (4.0%), Lua (1.1%), Docker (0.6%), JSON (0.5%)</li>
+<li>📚 Documentation: Text (69.4%), Markdown (30.6%)</li>
+<li>📊 Commits: 1026</li>
+<li>📈 Lines of Code: 6262</li>
+<li>📄 Lines of Documentation: 1440</li>
+<li>📅 Development Period: 2021-12-28 to 2025-10-31</li>
+<li>🔥 Recent Activity: 24.4 days (avg. age of last 42 commits)</li>
<li>⚖️ License: No license found</li>
<li>🧪 Status: Experimental (no releases yet)</li>
</ul><br />
<br />
-<span>conf</span><br />
-<span>====</span><br />
+<span>This is a personal configuration management repository that centralizes infrastructure and application configurations across multiple environments. It serves as a single source of truth for system administration tasks, dotfiles, Docker deployments, and Kubernetes/Helm manifests, making it easier to maintain consistency across machines and deploy self-hosted services.</span><br />
+<br />
+<span>The project is organized into distinct subdirectories: <span class='inlinecode'>dotfiles/</span> contains shell configurations (bash, fish), editor settings (helix, nvim), and window manager configs (sway, waybar); <span class='inlinecode'>f3s/</span> houses Kubernetes/Helm manifests for various self-hosted applications like Miniflux, FreshRSS, and Syncthing; <span class='inlinecode'>babylon5/</span> includes Docker startup scripts for services like Nextcloud, Vaultwarden, and Audiobookshelf; and <span class='inlinecode'>frontends/</span> and <span class='inlinecode'>playground/</span> for additional configurations. The repository uses Rex (a Perl-based deployment tool) as its automation framework, with a top-level Rexfile that includes subdirectory Rexfiles for modular task execution.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/conf'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/conf'>View on GitHub</a><br />
@@ -151,7 +153,7 @@
<li>📈 Lines of Code: 26565</li>
<li>📄 Lines of Documentation: 564</li>
<li>📅 Development Period: 2025-08-01 to 2025-10-04</li>
-<li>🔥 Recent Activity: 31.1 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 38.6 days (avg. age of last 42 commits)</li>
<li>⚖️ License: No license found</li>
<li>🏷️ Latest Release: v0.15.1 (2025-10-03)</li>
<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li>
@@ -159,15 +161,37 @@
<br />
<a href='showcase/hexai/image-1.png'><img alt='hexai screenshot' title='hexai screenshot' src='showcase/hexai/image-1.png' /></a><br />
<br />
-<span>Hexai is an AI-powered extension designed to enhance the Helix Editor by integrating advanced code assistance features through Language Server Protocol (LSP) and large language models (LLMs). Its core capabilities include LSP-based code auto-completion, code actions, and an in-editor chat interface that allows users to interact directly with AI models for coding help and suggestions. Additionally, Hexai provides a standalone command-line tool for interacting with LLMs outside the editor. It supports multiple AI backends, including OpenAI, GitHub Copilot, and Ollama, making it flexible for various user preferences and workflows.</span><br />
+<span>Hexai is a Go-based AI integration tool designed primarily for the Helix editor that provides LSP (Language Server Protocol) powered AI features. It offers code auto-completion, AI-driven code actions, in-editor chat with LLMs, and a standalone CLI tool for direct LLM interaction. A standout feature is its ability to query multiple AI providers (OpenAI, OpenRouter, GitHub Copilot, Ollama) in parallel, allowing developers to compare responses side-by-side. It has enhanced capabilities for Go code understanding, such as generating unit tests from functions, while supporting other programming languages as well.</span><br />
<br />
-<span>The project is implemented primarily in Go and uses Mage as its build and task automation tool. The architecture consists of two main binaries: one for general LLM interaction and another for LSP integration with the editor. Hexai communicates with LLM providers via their APIs, relaying code context and user queries to generate intelligent responses or code completions. The modular design allows for easy configuration and extension, and while it is tailored for Helix, it may work with other editors that support LSP. This makes Hexai a valuable tool for developers seeking AI-assisted productivity directly within their coding environment.</span><br />
+<span>The project is implemented as an LSP server written in Go, with a TUI component built using Bubble Tea for the tmux-based code action runner (<span class='inlinecode'>hexai-tmux-action</span>). This architecture allows it to integrate seamlessly into LSP-compatible editors, with special focus on Helix + tmux workflows. The custom prompt feature lets developers use their preferred editor to craft prompts, making it flexible for various development workflows.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/hexai'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/hexai'>View on GitHub</a><br />
<br />
<span>---</span><br />
<br />
+<h3 style='display: inline' id='foozone'>foo.zone</h3><br />
+<br />
+<ul>
+<li>💻 Languages: Shell (74.7%), Go (24.9%), YAML (0.4%)</li>
+<li>📚 Documentation: Markdown (99.5%), Text (0.5%)</li>
+<li>📊 Commits: 3167</li>
+<li>📈 Lines of Code: 253</li>
+<li>📄 Lines of Documentation: 30185</li>
+<li>📅 Development Period: 2021-04-29 to 2025-10-29</li>
+<li>🔥 Recent Activity: 48.7 days (avg. age of last 42 commits)</li>
+<li>⚖️ License: No license found</li>
+<li>🧪 Status: Experimental (no releases yet)</li>
+<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li>
+</ul><br />
+<br />
+<span>foo.zone: source code repository.</span><br />
+<br />
+<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br />
+<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br />
+<br />
+<span>---</span><br />
+<br />
<h3 style='display: inline' id='foostats'>foostats</h3><br />
<br />
<ul>
@@ -177,14 +201,14 @@
<li>📈 Lines of Code: 1902</li>
<li>📄 Lines of Documentation: 421</li>
<li>📅 Development Period: 2023-01-02 to 2025-10-21</li>
-<li>🔥 Recent Activity: 66.0 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 73.5 days (avg. age of last 42 commits)</li>
<li>⚖️ License: Custom License</li>
<li>🏷️ Latest Release: v0.2.0 (2025-10-21)</li>
</ul><br />
<br />
-<span>**foostats** is a privacy-focused web analytics tool designed specifically for OpenBSD environments, with support for both traditional web (HTTP/HTTPS) and Gemini protocol logs. Its primary function is to generate anonymous, comprehensive site statistics for the foo.zone ecosystem and similar sites, while strictly preserving visitor privacy. This is achieved by hashing all IP addresses with SHA3-512 before storage, ensuring no personally identifiable information is retained. The tool provides detailed daily, monthly, and summary reports in Gemtext format, tracks feed subscribers, and includes robust filtering to block and log suspicious requests based on configurable patterns.</span><br />
+<span>**foostats** is a privacy-respecting web analytics tool designed for OpenBSD that processes both traditional HTTP/HTTPS server logs and Gemini protocol logs to generate anonymous site statistics. It immediately hashes all IP addresses using SHA3-512 before storage, ensuring no personal information is retained while still providing meaningful traffic insights. The tool supports distributed deployments with node-to-node replication, filters out suspicious requests based on configurable patterns, and generates comprehensive daily and monthly reports in both Gemtext and HTML formats. It&#39;s particularly useful for privacy-conscious site operators who need traffic analytics without compromising visitor anonymity.</span><br />
<br />
-<span>Architecturally, foostats is modular, with components for log parsing, filtering, aggregation, replication, and reporting. It processes logs from OpenBSD httpd and Gemini servers (vger/relayd), aggregates statistics, and outputs compressed JSON files and human-readable reports. Its distributed design allows replication and merging of stats across multiple nodes, supporting comprehensive analytics for federated sites. Key features include multi-protocol and IPv4/IPv6 support, privacy-first data handling, and flexible configuration for filtering and reporting, making it a secure and privacy-respecting alternative to conventional analytics platforms.</span><br />
+<span>The implementation uses a modular Perl architecture with specialized components: **Logreader** parses logs from httpd and Gemini servers (vger/relayd), **Filter** blocks suspicious patterns, **Aggregator** compiles statistics, **Replicator** synchronizes data between partner nodes, and **Reporter** generates human-readable reports. Statistics are stored as compressed JSON files, supporting both IPv4 and IPv6, with built-in feed analytics for tracking Atom/RSS and Gemfeed subscribers. The tool is designed specifically for the foo.zone ecosystem but can be adapted for any OpenBSD-based hosting environment requiring privacy-first analytics.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/foostats'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/foostats'>View on GitHub</a><br />
@@ -200,15 +224,15 @@
<li>📈 Lines of Code: 10036</li>
<li>📄 Lines of Documentation: 2433</li>
<li>📅 Development Period: 2025-06-23 to 2025-09-08</li>
-<li>🔥 Recent Activity: 91.0 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 98.5 days (avg. age of last 42 commits)</li>
<li>⚖️ License: BSD-2-Clause</li>
<li>🏷️ Latest Release: v0.9.2 (2025-09-08)</li>
<li>🎵 Vibe-Coded: This project has been vibe coded</li>
</ul><br />
<br />
-<span>**GitSyncer** is an automation tool designed to synchronize git repositories across multiple organizations and hosting platforms, such as GitHub, Codeberg, and private SSH servers. Its primary purpose is to keep all branches and tags in sync between these platforms, ensuring that codebases remain consistent and up-to-date everywhere. GitSyncer is especially useful for developers and teams managing projects across different git hosts, providing features like automatic branch and repository creation, one-way backups to offline or private servers, and robust error handling for merge conflicts and missing resources. It also includes advanced capabilities like AI-powered project showcase generation, batch synchronization for automation, and flexible configuration for branch exclusions and backup strategies.</span><br />
+<span>GitSyncer is a Go-based CLI tool that automatically synchronizes git repositories across multiple hosting platforms (GitHub, Codeberg, SSH servers). It maintains all branches in sync bidirectionally, never deleting branches but automatically creating and updating them as needed. The tool excels at providing repository redundancy and backup, with special support for one-way SSH backups to private servers (like home NAS devices) that may be offline intermittently. It includes AI-powered features for generating release notes and project showcase documentation, plus automated weekly batch synchronization for hands-off maintenance.</span><br />
<br />
-<span>The tool is implemented as a modern CLI application in Go, with a modular, command-based architecture. Users configure organizations, repositories, and backup locations via a JSON file, and interact with GitSyncer through intuitive commands (e.g., <span class='inlinecode'>gitsyncer sync</span>, <span class='inlinecode'>gitsyncer release create</span>). Under the hood, GitSyncer clones repositories, adds all remotes, fetches and merges branches, and pushes updates to all destinations, handling repository and branch creation as needed. SSH backup locations are supported for one-way, opt-in backups, with automatic bare repo initialization. The AI-powered showcase feature analyzes repositories and uses Claude or other AI tools to generate comprehensive project summaries and statistics. The architecture emphasizes automation, safety (never deleting branches), and extensibility, making GitSyncer a powerful solution for multi-platform git management and backup.</span><br />
+<span>The implementation uses a git remotes approach: it clones from one organization, adds others as remotes, then fetches, merges, and pushes changes across all configured locations. Built with a modern command-based structure (using Cobra), it offers fine-grained control through subcommands for syncing (individual repos, all repos, platform-specific, bidirectional), release management, testing, and repository management. Key architectural features include merge conflict detection, regex-based branch exclusion, automatic repository creation on both web platforms and SSH servers, configurable backup locations with opt-in syncing, and integration with multiple AI tools (hexai, claude, aichat) for intelligent release note generation.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/gitsyncer'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/gitsyncer'>View on GitHub</a><br />
@@ -224,7 +248,7 @@
<li>📈 Lines of Code: 12003</li>
<li>📄 Lines of Documentation: 361</li>
<li>📅 Development Period: 2025-07-14 to 2025-08-02</li>
-<li>🔥 Recent Activity: 93.8 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 101.3 days (avg. age of last 42 commits)</li>
<li>⚖️ License: MIT</li>
<li>🏷️ Latest Release: v0.7.5 (2025-08-02)</li>
<li>🎵 Vibe-Coded: This project has been vibe coded</li>
@@ -232,13 +256,11 @@
<br />
<a href='showcase/totalrecall/image-1.png'><img alt='totalrecall screenshot' title='totalrecall screenshot' src='showcase/totalrecall/image-1.png' /></a><br />
<br />
-<span>**Summary of totalrecall - Bulgarian Anki Flashcard Generator**</span><br />
+<span>TotalRecall is a Go-based tool that generates comprehensive Anki flashcard materials for Bulgarian language learning. It creates high-quality audio pronunciations using OpenAI TTS (with 11 voice options), AI-generated contextual images via DALL-E, IPA phonetic transcriptions, and automatic Bulgarian-English translations. The tool supports both single-word and batch processing, making it efficient for building large vocabulary decks. It outputs Anki-compatible packages (APKG) with all media files bundled, ready for immediate import.</span><br />
<br />
<a href='showcase/totalrecall/image-2.png'><img alt='totalrecall screenshot' title='totalrecall screenshot' src='showcase/totalrecall/image-2.png' /></a><br />
<br />
-<span><span class='inlinecode'>totalrecall</span> is a specialized tool designed to streamline the creation of Anki flashcards for Bulgarian vocabulary learners. It automates the generation of high-quality study materials—including audio pronunciations, AI-generated contextual images, phonetic transcriptions (IPA), and translations—by leveraging OpenAI’s TTS and DALL-E APIs. The tool supports both a fast, keyboard-driven graphical user interface (GUI) and a flexible command-line interface (CLI), making it accessible for users with different preferences. Key features include batch processing of word lists, randomization of voices and art styles for variety, and seamless export to Anki-compatible formats (APKG and CSV), ensuring that learners can quickly build rich, multimedia flashcard decks.</span><br />
-<br />
-<span>Architecturally, totalrecall is implemented in Go and integrates with OpenAI services via API keys for audio and image generation. It processes input in various formats, automatically handling translation and media generation as needed. Output files—including MP3s, images, and Anki packages—are organized in a user’s local state directory, with configuration options for customization. The project’s modular design allows for easy installation, desktop integration (especially on GNOME/Fedora), and extensibility. By automating the most time-consuming aspects of flashcard creation and enhancing cards with multimedia and phonetic data, totalrecall significantly improves the efficiency and quality of language learning for Bulgarian.</span><br />
+<span>The project offers both a keyboard-driven GUI for interactive use and a CLI for automation, built with Go using the Cobra framework for command handling. It leverages OpenAI&#39;s APIs for both audio synthesis and image generation, creating memorable visual contexts with random art styles to enhance retention. The architecture follows clean Go package structure with separate internal packages for audio, image, config, and Anki format generation, making it maintainable and extensible for future enhancements.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/totalrecall'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/totalrecall'>View on GitHub</a><br />
@@ -254,17 +276,15 @@
<li>📈 Lines of Code: 931</li>
<li>📄 Lines of Documentation: 81</li>
<li>📅 Development Period: 2025-06-25 to 2025-10-18</li>
-<li>🔥 Recent Activity: 95.8 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 103.3 days (avg. age of last 42 commits)</li>
<li>⚖️ License: BSD-2-Clause</li>
<li>🏷️ Latest Release: v0.2.0 (2025-10-18)</li>
<li>🎵 Vibe-Coded: This project has been vibe coded</li>
</ul><br />
<br />
-<span>**Summary of the <span class='inlinecode'>timr</span> Project**</span><br />
-<br />
-<span><span class='inlinecode'>timr</span> is a lightweight, command-line time tracking tool designed to help users monitor the time they spend on tasks directly from their terminal. Its core functionality revolves around simple commands to start, stop, pause, reset, and check the status of a stopwatch-style timer, making it ideal for developers, freelancers, or anyone who prefers a minimalist workflow without the overhead of complex time-tracking applications. The tool also offers a live, full-screen timer mode with keyboard controls and can display the timer status in real-time within the fish shell prompt, enhancing productivity by keeping time tracking seamlessly integrated into the user&#39;s environment.</span><br />
+<span><span class='inlinecode'>timr</span> is a minimalist command-line stopwatch timer written in Go that helps developers track time spent on tasks. It provides a persistent timer that saves state to disk, allowing you to start, stop, pause, and resume time tracking across terminal sessions. The tool supports multiple viewing modes including a standard status display (with formatted or raw output in seconds/minutes), a live full-screen view with keyboard controls, and specialized output for shell prompt integration.</span><br />
<br />
-<span>From an architectural standpoint, <span class='inlinecode'>timr</span> is implemented in Go, ensuring cross-platform compatibility and efficient performance. The timer&#39;s state is persistently stored on the user&#39;s system, allowing for accurate tracking even across sessions. The command structure is straightforward, with subcommands for each primary action (<span class='inlinecode'>start</span>, <span class='inlinecode'>stop</span>, <span class='inlinecode'>status</span>, etc.), and the project includes shell integration scripts for fish to display timer status in the prompt. This combination of simplicity, persistence, and shell integration makes <span class='inlinecode'>timr</span> a practical and unobtrusive solution for time management at the command line.</span><br />
+<span>The architecture is straightforward: it&#39;s a Go-based CLI application that persists timer state to the filesystem, enabling continuous tracking even when the program isn&#39;t actively running. Key features include basic timer controls (start/stop/continue/reset), flexible status reporting formats for automation, and fish shell integration that displays a color-coded timer icon and elapsed time directly in your prompt—making it effortless to keep track of how long you&#39;ve been working without context switching.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/timr'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/timr'>View on GitHub</a><br />
@@ -280,7 +300,7 @@
<li>📈 Lines of Code: 6168</li>
<li>📄 Lines of Documentation: 162</li>
<li>📅 Development Period: 2025-06-19 to 2025-10-05</li>
-<li>🔥 Recent Activity: 117.1 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 124.6 days (avg. age of last 42 commits)</li>
<li>⚖️ License: BSD-2-Clause</li>
<li>🏷️ Latest Release: v0.9.3 (2025-10-05)</li>
<li>🎵 Vibe-Coded: This project has been vibe coded</li>
@@ -288,11 +308,11 @@
<br />
<a href='showcase/tasksamurai/image-1.png'><img alt='tasksamurai screenshot' title='tasksamurai screenshot' src='showcase/tasksamurai/image-1.png' /></a><br />
<br />
-<span>**Task Samurai** is a fast, keyboard-driven terminal interface for [Taskwarrior](https://taskwarrior.org/), designed to streamline task management directly from the command line. Built in Go using the [Bubble Tea](https://github.com/charmbracelet/bubbletea) TUI framework, it displays tasks in an interactive table and allows users to add, modify, and complete tasks efficiently using intuitive hotkeys. The interface is optimized for speed and responsiveness, offering a modern alternative to other Taskwarrior UIs like <span class='inlinecode'>vit</span>.</span><br />
+<span>**Task Samurai** is a fast, keyboard-driven terminal UI for Taskwarrior built in Go using the Bubble Tea framework. It displays your Taskwarrior tasks in an interactive table where you can manage them entirely through hotkeys—adding, starting, completing, and annotating tasks without touching the mouse. It supports all Taskwarrior filters as command-line arguments, allowing you to start with focused views like <span class='inlinecode'>tasksamurai +tag status:pending</span> or <span class='inlinecode'>tasksamurai project:work due:today</span>.</span><br />
<br />
<a href='showcase/tasksamurai/image-2.png'><img alt='tasksamurai screenshot' title='tasksamurai screenshot' src='showcase/tasksamurai/image-2.png' /></a><br />
<br />
-<span>The core architecture leverages the Bubble Tea framework for rendering the terminal UI, while all task operations are performed by invoking the native <span class='inlinecode'>task</span> command-line tool. Each user action—such as adding or completing a task—triggers the corresponding Taskwarrior command, and the UI refreshes automatically to reflect changes. Key features include hotkey-driven task management, real-time updates, and support for all Taskwarrior filters and queries. Optional features like "disco mode" add visual flair by changing the theme after each task modification. Installation is straightforward via Go tooling, and the project is particularly useful for users who want a fast, fully keyboard-controlled Taskwarrior experience in the terminal.</span><br />
+<span>Under the hood, Task Samurai acts as a front-end wrapper that invokes the native <span class='inlinecode'>task</span> command to read and modify tasks, ensuring compatibility with your existing Taskwarrior setup. The UI automatically refreshes after each action to keep the table current. It was created as an experiment in agentic coding and as a faster alternative to Python-based tools like vit, leveraging Go&#39;s performance and the Bubble Tea framework&#39;s efficient terminal rendering. The project even includes a "disco mode" flag that cycles through themes for a more playful experience.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/tasksamurai'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/tasksamurai'>View on GitHub</a><br />
@@ -308,7 +328,7 @@
<li>📈 Lines of Code: 13072</li>
<li>📄 Lines of Documentation: 680</li>
<li>📅 Development Period: 2024-01-18 to 2025-10-09</li>
-<li>🔥 Recent Activity: 132.2 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 139.7 days (avg. age of last 42 commits)</li>
<li>⚖️ License: No license found</li>
<li>🧪 Status: Experimental (no releases yet)</li>
<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li>
@@ -316,11 +336,11 @@
<br />
<a href='showcase/ior/image-1.png'><img alt='ior screenshot' title='ior screenshot' src='showcase/ior/image-1.png' /></a><br />
<br />
-<span>**I/O Riot NG (ior)** is a Linux-based tool designed to trace and analyze synchronous I/O system calls using BPF (Berkeley Packet Filter) technology. Its primary function is to monitor how long each synchronous I/O syscall takes, providing detailed timing information that can be visualized as flamegraphs. These flamegraphs help developers and system administrators identify performance bottlenecks in I/O operations, making it easier to optimize applications and systems.</span><br />
+<span>I/O Riot NG is a Linux-only performance analysis tool that uses BPF (Berkeley Packet Filter) to trace synchronous I/O syscalls and measure their execution time. It captures stack traces during I/O operations and generates compressed output in a format compatible with Inferno FlameGraphs, allowing developers to visually identify performance bottlenecks caused by blocking I/O calls. This makes it particularly useful for diagnosing latency issues in applications where I/O operations are suspected of causing performance degradation.</span><br />
<br />
<a href='showcase/ior/image-2.svg'><img alt='ior screenshot' title='ior screenshot' src='showcase/ior/image-2.svg' /></a><br />
<br />
-<span>The project is implemented using a combination of Go, C, and BPF, leveraging the <span class='inlinecode'>libbpfgo</span> library to interface with BPF from Go. Unlike its predecessor (which used SystemTap and C), I/O Riot NG offers a more modern and flexible architecture. The tool captures syscall events at the kernel level, processes the timing data in user space, and outputs results suitable for visualization with tools like Inferno Flamegraphs. Its architecture consists of BPF programs for efficient kernel tracing, a Go-based user-space component for data aggregation, and integration with third-party visualization tools. This makes I/O Riot NG a powerful and extensible solution for low-overhead, high-resolution I/O performance analysis on Linux systems.</span><br />
+<span>The tool is implemented in Go and C, leveraging libbpfgo for BPF interaction. It automatically generates BPF tracepoint handlers and Go type definitions from Linux kernel tracepoint data, attaches to syscall entry/exit points, and collects timing data with minimal overhead. The project is a modern successor to the original I/O Riot (which used SystemTap), offering better performance and easier deployment through BPF&#39;s built-in kernel support.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/ior'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/ior'>View on GitHub</a><br />
@@ -336,18 +356,18 @@
<li>📈 Lines of Code: 4102</li>
<li>📄 Lines of Documentation: 357</li>
<li>📅 Development Period: 2024-05-04 to 2025-09-24</li>
-<li>🔥 Recent Activity: 155.5 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 163.0 days (avg. age of last 42 commits)</li>
<li>⚖️ License: Custom License</li>
<li>🏷️ Latest Release: v1.2.0 (2025-09-24)</li>
</ul><br />
<br />
<a href='showcase/gos/image-1.png'><img alt='gos screenshot' title='gos screenshot' src='showcase/gos/image-1.png' /></a><br />
<br />
-<span>**Gos (Go Social Media)** is a command-line tool written in Go that serves as a self-hosted, scriptable alternative to Buffer.com for scheduling and managing social media posts. Designed for users who prefer automation, privacy, and control, Gos enables posting to Mastodon and LinkedIn (with OAuth2 authentication for LinkedIn) directly from the terminal. It supports features like dry-run mode for safe testing, flexible configuration via flags and environment variables, image previews for LinkedIn, and a pseudo-platform ("Noop") for tracking posts without publishing. Gos is particularly useful for developers, power users, or anyone who wants to automate their social media workflow, avoid third-party service limitations, and integrate posting into their own scripts or shell startup routines.</span><br />
+<span>Gos is a command-line social media scheduling tool written in Go that serves as a self-hosted replacement for Buffer.com. It enables users to schedule and post messages to Mastodon and LinkedIn (plus a "Noop" pseudo-platform for tracking) through a simple file-based queueing system. Messages are created as text files in a designated directory (<span class='inlinecode'>~/.gosdir</span>), with optional tags embedded in filenames or content to control platform targeting, priority, and scheduling behavior. The tool addresses limitations of commercial services by offering unlimited posts, a scriptable CLI interface, and full user control without unwanted features like AI assistants.</span><br />
<br />
<a href='showcase/gos/image-2.png'><img alt='gos screenshot' title='gos screenshot' src='showcase/gos/image-2.png' /></a><br />
<br />
-<span>**Architecturally**, Gos operates on a file-based queueing system: users compose posts as text files (optionally using the companion <span class='inlinecode'>gosc</span> composer tool) in a designated directory. Posts are tagged via filenames or inline tags to control target platforms, priorities, and behaviors (e.g., immediate posting, pausing, or requiring confirmation). When Gos runs, it processes these files, moves them through platform-specific queues, and posts them according to user-defined cadence, priorities, and pause intervals. The configuration is managed via a JSON file storing API credentials and scheduling preferences. Gos also supports generating Gemini Gemtext summaries of posted content for blogging or archival purposes. The system is highly scriptable, easy to integrate into automated workflows, and can be synced or backed up using tools like Syncthing, making it a robust, extensible solution for personal or small-team social media management.</span><br />
+<span>The implementation uses OAuth2 for LinkedIn authentication, stores configuration as JSON, and manages posts through a platform-specific database structure. Gos employs intelligent scheduling based on configurable weekly targets, lookback windows, pause periods between posts, and run intervals to prevent over-posting. It supports priority queuing, platform exclusion rules, dry-run testing, and can generate Gemini gemtext summaries of posted content. Built with Mage for automation, the tool integrates seamlessly into shell workflows and can be triggered on intervals to maintain a consistent posting cadence across platforms.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/gos'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/gos'>View on GitHub</a><br />
@@ -363,7 +383,7 @@
<li>📈 Lines of Code: 20091</li>
<li>📄 Lines of Documentation: 5674</li>
<li>📅 Development Period: 2020-01-09 to 2025-06-20</li>
-<li>🔥 Recent Activity: 159.1 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 166.6 days (avg. age of last 42 commits)</li>
<li>⚖️ License: Apache-2.0</li>
<li>🏷️ Latest Release: v4.3.3 (2024-08-23)</li>
<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li>
@@ -371,11 +391,11 @@
<br />
<a href='showcase/dtail/image-1.png'><img alt='dtail screenshot' title='dtail screenshot' src='showcase/dtail/image-1.png' /></a><br />
<br />
-<span>DTail is an open-source distributed log management tool designed for DevOps engineers to efficiently tail, cat, and grep log files across thousands of servers simultaneously. Written in Go, it supports advanced features such as on-the-fly decompression (gzip, zstd) and distributed MapReduce-style aggregations, making it highly useful for large-scale log analysis and troubleshooting in complex environments. By leveraging SSH for secure communication and adhering to UNIX file permission models, DTail ensures both security and compatibility with existing infrastructure.</span><br />
+<span>DTail is a distributed DevOps tool written in Go that enables engineers to tail, cat, and grep log files across thousands of servers simultaneously. It supports compressed logs (gzip and zstd) and includes advanced features like distributed MapReduce aggregations for log analysis at scale. The tool uses SSH for secure, encrypted communication and respects standard UNIX filesystem permissions and ACLs.</span><br />
<br />
<a href='showcase/dtail/image-2.gif'><img alt='dtail screenshot' title='dtail screenshot' src='showcase/dtail/image-2.gif' /></a><br />
<br />
-<span>The architecture consists of a client-server model: DTail servers run on each target machine, while a DTail client—typically on an engineer’s workstation—connects to all servers concurrently to aggregate and process logs in real time. This design enables scalable, parallel log operations and can be extended to a serverless mode for added flexibility. DTail’s implementation emphasizes performance, security, and ease of use, making it a valuable tool for organizations needing to monitor and analyze distributed logs efficiently.</span><br />
+<span>The architecture follows a client-server model where DTail servers run on target machines and a single DTail client (typically from a developer&#39;s laptop) connects to them concurrently, scaling to thousands of servers per session. It can also operate in a serverless mode. This design makes it particularly useful for troubleshooting and monitoring distributed systems, where engineers need to correlate logs across multiple machines in real-time without manually SSH-ing into each server individually.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/dtail'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/dtail'>View on GitHub</a><br />
@@ -391,14 +411,14 @@
<li>📈 Lines of Code: 396</li>
<li>📄 Lines of Documentation: 24</li>
<li>📅 Development Period: 2025-04-18 to 2025-05-11</li>
-<li>🔥 Recent Activity: 178.4 days (avg. age of last 42 commits)</li>
+<li>🔥 Recent Activity: 185.9 days (avg. age of last 42 commits)</li>
<li>⚖️ License: Custom License</li>
<li>🏷️ Latest Release: v1.0.0 (2025-05-11)</li>
</ul><br />
<br />
-<span>The **WireGuard Mesh Generator** is a tool designed to automate the creation and deployment of WireGuard VPN configurations for a network of machines, forming a secure mesh network. This is particularly useful for system administrators or DevOps engineers who need to connect multiple servers or nodes (for example, in a Kubernetes cluster) with encrypted, peer-to-peer tunnels, ensuring secure and private communication across potentially untrusted networks.</span><br />
+<span>WireGuard Mesh Generator is a Ruby-based automation tool that creates and manages full-mesh VPN configurations for WireGuard across heterogeneous hosts (Linux, FreeBSD, OpenBSD). It eliminates manual configuration by automatically generating unique keypairs, preshared keys, and peer configurations for each host, handling OS-specific differences in config paths, privilege escalation commands, and service reload mechanisms.</span><br />
<br />
-<span>The project is implemented using Ruby, with tasks managed via Rake, and configuration defined in a YAML file (<span class='inlinecode'>wireguardmeshgenerator.yaml</span>). Key features include automated generation of WireGuard configuration files (<span class='inlinecode'>rake generate</span>), streamlined installation of these files to remote machines (<span class='inlinecode'>rake install</span>), and easy cleanup of generated artifacts (<span class='inlinecode'>rake clean</span>). The architecture leverages WireGuard’s lightweight VPN capabilities and Ruby’s scripting power to simplify and standardize the setup of complex mesh VPN topologies, reducing manual errors and saving time in multi-node deployments.</span><br />
+<span>The tool reads host definitions from a YAML file specifying network interfaces (LAN/internet/WireGuard), SSH details, and OS types. It intelligently determines optimal peer connections—using LAN IPs when both hosts are local, public IPs when available, or marking peers as "behind NAT" when direct connection isn&#39;t possible—and applies persistent keepalive only for LAN-to-internet tunnels. The three-stage workflow (generate keys/configs → upload via SCP → install and reload via SSH) enables zero-touch deployment of a complete mesh network where every node can communicate securely with every other node.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/wireguardmeshgenerator'>View on Codeberg</a><br />
<a class='textlink' href='https://github.com/snonux/wireguardmeshgenerator'>View on GitHub</a><b