<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ekinertac</title><link>https://ekinertac.com/</link><description>Recent content on ekinertac</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 07 Aug 2026 00:00:00 +0300</lastBuildDate><atom:link href="https://ekinertac.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Property, Pilgrim, Papers</title><link/><pubDate>Fri, 07 Aug 2026 00:00:00 +0300</pubDate><guid/><description/></item><item><title>Deep Time</title><link/><pubDate>Thu, 30 Jul 2026 00:00:00 +0300</pubDate><guid/><description/></item><item><title>The htmx Pattern That Deletes Itself in Django</title><link>https://ekinertac.com/blog/htmx-pattern-that-deletes-itself-in-django/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/htmx-pattern-that-deletes-itself-in-django/</guid><description>&lt;h1 id="the-htmx-pattern-that-deletes-itself-in-django"&gt;The htmx Pattern That Deletes Itself in Django&lt;/h1&gt;
&lt;p&gt;Last night I made the mistake of reading &lt;a href="https://www.alexedwards.net/blog/how-i-use-htmx-with-go"&gt;Alex Edwards&amp;rsquo; &amp;ldquo;How I use HTMX with Go&amp;rdquo;&lt;/a&gt; at the exact hour a sensible person goes to sleep. If you write Go and touch htmx, go read it. It&amp;rsquo;s the kind of post that&amp;rsquo;s so tidy it feels rude, every piece clicks into the next one, and by the end you have a single &lt;code&gt;render()&lt;/code&gt; helper that spits out either a full page or a bare HTML fragment depending on who&amp;rsquo;s asking.&lt;/p&gt;</description></item><item><title>I Don't Know Rust. My AI Is Rewriting PHP in It Anyway.</title><link>https://ekinertac.com/blog/i-dont-know-rust-my-ai-is-rewriting-php-in-it/</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/i-dont-know-rust-my-ai-is-rewriting-php-in-it/</guid><description>&lt;h1 id="i-dont-know-rust-my-ai-is-rewriting-php-in-it-anyway"&gt;I Don&amp;rsquo;t Know Rust. My AI Is Rewriting PHP in It Anyway.&lt;/h1&gt;
&lt;p&gt;A few nights ago I watched my terminal print out a 26 KB WordPress front page — &lt;code&gt;&amp;lt;title&amp;gt;Phargo Test Site&amp;lt;/title&amp;gt;&lt;/code&gt;, the block-library CSS, &amp;ldquo;Hello world!&amp;rdquo; pulled from a SQLite database, and a clean &lt;code&gt;&amp;lt;/html&amp;gt;&lt;/code&gt; at the bottom. Completely unremarkable output, except for one detail: the PHP engine that served it contains &lt;strong&gt;zero lines of PHP&amp;rsquo;s actual source code&lt;/strong&gt;. It&amp;rsquo;s a from-scratch interpreter written in Rust.&lt;/p&gt;</description></item><item><title>exrate</title><link>https://ekinertac.com/projects/exrate/</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/exrate/</guid><description>&lt;p&gt;A zero-dependency command-line client for the &lt;strong&gt;Frankfurter&lt;/strong&gt; foreign-exchange API. Daily reference rates from &lt;strong&gt;84 central banks, 201 currencies, back to 1948&lt;/strong&gt; — no API key, no login. Single file, Python 3 stdlib only, with a &lt;code&gt;--json&lt;/code&gt; flag on every command so it drops straight into scripts and pipes into &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;pipx install exrate &lt;span class="c1"&gt;# or: pip install exrate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="commands"&gt;Commands&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;exrate rate EUR USD &lt;span class="c1"&gt;# latest single pair&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;exrate rate EUR USD --date 2020-03-15 &lt;span class="c1"&gt;# historical&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;exrate convert &lt;span class="m"&gt;100&lt;/span&gt; USD JPY &lt;span class="c1"&gt;# convert an amount (client-side)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;exrate rates --base USD --quotes EUR,GBP,JPY &lt;span class="c1"&gt;# several pairs at once&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;exrate rates --from 2026-01-01 --quotes USD &lt;span class="c1"&gt;# daily time series&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;exrate rates --from 2026-01-01 --group month &lt;span class="c1"&gt;# downsample to monthly&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;exrate rates --from 2026-01-01 --quotes USD --csv &lt;span class="c1"&gt;# native CSV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;exrate currency AED &lt;span class="c1"&gt;# details + peg metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;exrate providers &lt;span class="c1"&gt;# data sources / their keys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;exrate currencies --json &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.[].iso_code&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# script the code list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agent-friendly help.&lt;/strong&gt; Running &lt;code&gt;exrate&lt;/code&gt; with no args prints full help (exit 0, not an error), and every subcommand documents its modes, exact JSON field names, and examples — so a tool-using LLM can drive it without trial and error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conversion is client-side.&lt;/strong&gt; The API has no conversion endpoint, so &lt;code&gt;convert&lt;/code&gt; fetches the pair rate and multiplies, matching the official docs&amp;rsquo; approach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provider control.&lt;/strong&gt; Rates are blended across providers by default; pass &lt;code&gt;--providers ECB&lt;/code&gt; to pin a single official source. Clean exit codes: 0 success, 1 API/network error, 2 bad usage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Releases&lt;/strong&gt; publish to PyPI automatically via GitHub Actions + Trusted Publishing (OIDC, no stored tokens).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>cfreg</title><link>https://ekinertac.com/projects/cf-registrar/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/cf-registrar/</guid><description>&lt;p&gt;A tiny, scriptable CLI wrapper around the &lt;strong&gt;Cloudflare Registrar REST API&lt;/strong&gt;. Single file, Python 3 stdlib only (no dependencies), JSON output, and &lt;strong&gt;no interactive prompts&lt;/strong&gt; — every input is a flag or argument, so it drops straight into scripts and pipes into &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why not the official &lt;code&gt;cf&lt;/code&gt; CLI? As of v0.0.5 its registrar surface is only &lt;code&gt;domains {get,list,update}&lt;/code&gt; — no search, check, or register — and its OAuth token isn&amp;rsquo;t accepted for raw API calls. So cfreg talks to the API directly with a dedicated Registrar-scoped token.&lt;/p&gt;</description></item><item><title>Flick</title><link>https://ekinertac.com/projects/flick/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/flick/</guid><description>&lt;p&gt;A tiny macOS menu bar app and CLI for toggling services (VPN, Tailscale, anything with a connect/disconnect command) from a global hotkey or a single click.&lt;/p&gt;
&lt;p&gt;The menu bar shows one colored dot for aggregate status. Press your hotkey, the service flips. That&amp;rsquo;s it.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Menu bar dot&lt;/strong&gt; reflecting aggregate status — empty for all-disconnected, green for all-connected, yellow for some, dimmed while a toggle is in progress.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Click&lt;/strong&gt; the dot to open a service menu; &lt;strong&gt;Alt+click&lt;/strong&gt; to quit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global hotkeys&lt;/strong&gt; — one to open the menu, one per service to toggle directly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLI&lt;/strong&gt; (&lt;code&gt;flick&lt;/code&gt;) for scripts and the terminal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generic&lt;/strong&gt; — drives any service via the shell commands you define.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Accessibility permission&lt;/strong&gt; — hotkeys use Carbon&amp;rsquo;s &lt;code&gt;RegisterEventHotKey&lt;/code&gt;, which needs no permission and consumes the keystroke so it never leaks to the focused app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero dependencies&lt;/strong&gt; beyond the macOS SDK.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;Flick toggles anything you can express as three shell commands — check status, start, and stop. A service entry looks like this:&lt;/p&gt;</description></item><item><title>Mnemo</title><link>https://ekinertac.com/projects/mnemo/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/mnemo/</guid><description>&lt;p&gt;&lt;strong&gt;Pick up any Claude Code session on any machine.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mnemo syncs your Claude Code conversations across computers as encrypted, deduplicated, append-only snapshots — then lays them back down so &lt;code&gt;claude --resume&lt;/code&gt; finds them, no matter where each project lives on each machine.&lt;/p&gt;
&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;You start a conversation with Claude Code on your laptop. The next day you&amp;rsquo;re at your desktop, and that session is gone, pinned to the other machine&amp;rsquo;s filesystem. Mnemo carries it across.&lt;/p&gt;</description></item><item><title>Tried to Widen a Box, Ended Up 20x Faster Than Pandoc.</title><link>https://ekinertac.com/blog/i-tried-to-widen-a-box/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/i-tried-to-widen-a-box/</guid><description>&lt;h1 id="i-tried-to-widen-a-box-i-ended-up-20x-faster-than-pandoc"&gt;I Tried to Widen a Box. I Ended Up 20x Faster Than Pandoc.&lt;/h1&gt;
&lt;p&gt;A couple of days ago I was looking at &lt;code&gt;mkdown&lt;/code&gt; — a tiny markdown-to-HTML converter I built in Go, the kind of toy nobody asked for — and one thing bugged me: the rendered page felt &lt;strong&gt;a bit narrow&lt;/strong&gt;. The text column was clamped at &lt;code&gt;max-width: 800px&lt;/code&gt;, and on a wide monitor it looked like a receipt.&lt;/p&gt;</description></item><item><title>The /html Skill Tariq Said Not to Build</title><link>https://ekinertac.com/blog/the-html-skill-tariq-said-not-to-build/</link><pubDate>Tue, 12 May 2026 01:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/the-html-skill-tariq-said-not-to-build/</guid><description>&lt;h1 id="i-built-the-html-skill-tariq-said-not-to-build"&gt;I Built the /html Skill Tariq Said Not to Build&lt;/h1&gt;
&lt;p&gt;Last week I read &lt;a href="https://thariqs.github.io/html-effectiveness/"&gt;Tariq&amp;rsquo;s post on the unreasonable effectiveness of HTML&lt;/a&gt; and had that very specific sensation of someone reaching into your skull, pulling out a thought you hadn&amp;rsquo;t quite finished forming yet, and naming it on a public blog. The man had articulated something I&amp;rsquo;d been doing &lt;em&gt;accidentally&lt;/em&gt; for months — asking Claude for HTML files instead of markdown when I wanted to actually &lt;strong&gt;look&lt;/strong&gt; at the output. Status reports. Plans. Code reviews. Anything I&amp;rsquo;d want to share with another human and not have to apologize for first.&lt;/p&gt;</description></item><item><title>Built a 10k-Player Game Server in Elixir. I Don't Speak Elixir.</title><link>https://ekinertac.com/blog/i-built-a-10k-player-game-server-in-elixir-i-dont-speak-elixir/</link><pubDate>Tue, 12 May 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/i-built-a-10k-player-game-server-in-elixir-i-dont-speak-elixir/</guid><description>&lt;h1 id="i-built-a-10k-player-game-server-in-elixir-i-dont-speak-elixir"&gt;I Built a 10k-Player Game Server in Elixir. I Don&amp;rsquo;t Speak Elixir.&lt;/h1&gt;
&lt;p&gt;A few weeks back I started a real-time multiplayer game server. It&amp;rsquo;s an Elixir umbrella with &lt;strong&gt;nine apps&lt;/strong&gt;. It handles &lt;strong&gt;10,000 concurrent WebSocket connections&lt;/strong&gt; on one node, p99 place-bet round-trip under &lt;strong&gt;3 milliseconds&lt;/strong&gt;. It&amp;rsquo;s multi-tenant, multi-node, cluster-aware. &lt;strong&gt;364 tests + 1 property&lt;/strong&gt; plus a small Python pytest suite for the reference operator. Eleven feature tiers shipped, all closed, all green.&lt;/p&gt;</description></item><item><title>Part 2: From cct to cad — when a personal fork stops being a fork</title><link>https://ekinertac.com/blog/cct-to-cad/</link><pubDate>Mon, 11 May 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/cct-to-cad/</guid><description>&lt;h1 id="part-2-from-cct-to-cad--when-a-personal-fork-stops-being-a-fork"&gt;Part 2: From cct to cad — when a personal fork stops being a fork&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://ekinertac.com/blog/forking-claude-code-transcripts"&gt;Last time&lt;/a&gt; I wrote about forking &lt;a href="https://simonwillison.net/2025/Dec/25/claude-code-transcripts/"&gt;Simon Willison&lt;/a&gt;&amp;rsquo;s &lt;a href="https://github.com/simonw/claude-code-transcripts"&gt;&lt;code&gt;claude-code-transcripts&lt;/code&gt;&lt;/a&gt; to fix some personal pain points — folder-grouped picker, Global Sessions, the night I deleted 1,628 runaway loop sessions, an iMessage-style dark theme. I closed with &amp;ldquo;there&amp;rsquo;s a particular kind of joy in not asking permission&amp;rdquo; and figured I&amp;rsquo;d be done.&lt;/p&gt;
&lt;p&gt;I was not done.&lt;/p&gt;
&lt;p&gt;The thing that broke the &amp;ldquo;personal fork&amp;rdquo; framing for me was a slow realization: &lt;strong&gt;the workflow I was fixing wasn&amp;rsquo;t claude-specific&lt;/strong&gt;. I use Claude Code 90% of the time, but the rest of my AI coding life happens in &lt;code&gt;codex&lt;/code&gt;, &lt;code&gt;pi&lt;/code&gt;, &lt;code&gt;opencode&lt;/code&gt;, and &lt;code&gt;forge&lt;/code&gt;. Each of those CLIs stores sessions somewhere. Each has its own resume command. Each one is a tiny half-tool with a session list inside it. &lt;strong&gt;There&amp;rsquo;s no overlap between any of them.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>cad — Coding Agent Driver</title><link>https://ekinertac.com/projects/cad/</link><pubDate>Sun, 10 May 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/cad/</guid><description>&lt;p&gt;One CLI to drive every coding agent on your machine. cad discovers local sessions from &lt;strong&gt;claude&lt;/strong&gt;, &lt;strong&gt;codex&lt;/strong&gt;, &lt;strong&gt;pi&lt;/strong&gt;, &lt;strong&gt;opencode&lt;/strong&gt;, and &lt;strong&gt;forge&lt;/strong&gt;, groups them by working directory, and gives you two views: a project-based picker for resuming, renaming, and rendering past work, and a live dashboard for the agents actually running right now.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Forked from &lt;a href="https://github.com/simonw"&gt;@simonw&lt;/a&gt;&amp;rsquo;s &lt;a href="https://github.com/simonw/claude-code-transcripts"&gt;claude-code-transcripts&lt;/a&gt; — that&amp;rsquo;s where the paginated HTML renderer (now under &lt;code&gt;cad json&lt;/code&gt; / &lt;code&gt;cad all&lt;/code&gt;) comes from.&lt;/p&gt;</description></item><item><title>Part 1: Forking Simon's Tool Because My Sessions Folder Was On Fire</title><link>https://ekinertac.com/blog/forking-claude-code-transcripts/</link><pubDate>Sun, 10 May 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/forking-claude-code-transcripts/</guid><description>&lt;h1 id="part-1-forking-simons-tool-because-my-sessions-folder-was-on-fire"&gt;Part 1: Forking Simon&amp;rsquo;s Tool Because My Sessions Folder Was On Fire&lt;/h1&gt;
&lt;p&gt;Back in December, &lt;a href="https://simonwillison.net/2025/Dec/25/claude-code-transcripts/"&gt;Simon Willison wrote about a small CLI he built&lt;/a&gt; called &lt;strong&gt;claude-code-transcripts&lt;/strong&gt;. The pitch is simple: Claude Code stores every session as a JSONL file under &lt;code&gt;~/.claude/projects/&lt;/code&gt;, and Simon wanted a clean way to convert one into a sharable HTML page. Pick a session, get a paginated transcript with all the prompts, tool calls, and code edits laid out in a way you can actually scroll through. Optionally publish it as a Gist with one flag.&lt;/p&gt;</description></item><item><title>Agamon</title><link>https://ekinertac.com/projects/agamon/</link><pubDate>Sun, 03 May 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/agamon/</guid><description>&lt;p&gt;A terminal multiplexer and file editor for macOS, built for developers who live in the terminal.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Under heavy development.&lt;/strong&gt; Most features are at an early stage — expect rough edges and breaking changes between releases. Treat this as a work-in-progress, not a polished product.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Terminal&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Split panes horizontally and vertically, as many as you need&lt;/li&gt;
&lt;li&gt;tmux integration: sessions survive tab switches and app restarts&lt;/li&gt;
&lt;li&gt;Per-pane attention indicators (BEL / bell)&lt;/li&gt;
&lt;li&gt;Zoom any pane to full-screen, 50+ built-in themes with live preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Editor&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>What I Learned Building My Own Coding Agent</title><link>https://ekinertac.com/blog/what-i-learned-building-a-coding-agent/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/what-i-learned-building-a-coding-agent/</guid><description>&lt;h1 id="what-i-learned-building-my-own-coding-agent"&gt;What I Learned Building My Own Coding Agent&lt;/h1&gt;
&lt;p&gt;Thorsten Ball just dropped a post called &lt;a href="https://ampcode.com/notes/how-to-build-an-agent"&gt;How To Build An Agent&lt;/a&gt; where he argues that a coding agent is just &lt;strong&gt;&amp;ldquo;an LLM, a loop, and enough tokens.&amp;rdquo;&lt;/strong&gt; He&amp;rsquo;s right. You can build one in 200 lines of Go. Go read it. It&amp;rsquo;s the cleanest articulation of the core idea I&amp;rsquo;ve seen.&lt;/p&gt;
&lt;p&gt;I read it and nodded along for the first half, and then started yelling at my screen for the second half.&lt;/p&gt;</description></item><item><title>Walter</title><link>https://ekinertac.com/projects/walter/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/walter/</guid><description>&lt;p&gt;A native macOS launcher that respects your time and your machine. No Electron, no accounts, no plugin marketplace — just Swift, AppKit, and a TOML file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Walter has a home of its own → &lt;a href="https://walterlauncher.com"&gt;walterlauncher.com&lt;/a&gt;.&lt;/strong&gt; That&amp;rsquo;s where the downloads, themes, comparisons, and docs live. &lt;a href="https://github.com/ekinertac/walter/releases/latest"&gt;Grab the latest release →&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You hit &lt;code&gt;Alt+Space&lt;/code&gt;, type a few letters, and launch an app or copy a number. Walter does the four things you actually use a launcher for and stops there.&lt;/p&gt;</description></item><item><title>dtop</title><link>https://ekinertac.com/projects/dtop/</link><pubDate>Thu, 13 Nov 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/dtop/</guid><description>&lt;p&gt;A terminal UI tool for monitoring Docker containers, inspired by htop. Displays containers grouped by project with an interactive tree interface.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Project grouping&lt;/strong&gt; — automatically groups containers by name prefix (Docker Compose convention)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tree navigation&lt;/strong&gt; — expandable / collapsible project view&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-time monitoring&lt;/strong&gt; — auto-refreshes container status every 2 seconds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive actions&lt;/strong&gt; — context-aware menu for managing containers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyboard-driven&lt;/strong&gt; — full navigation with vim-style keybindings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Viewport scrolling&lt;/strong&gt; — efficiently handles hundreds of containers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;List mode&lt;/strong&gt; — non-interactive output for scripts and CI/CD pipelines (&lt;code&gt;--list&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual progress bars&lt;/strong&gt; — CPU and memory usage with inline bar graphs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network monitoring&lt;/strong&gt; — real-time RX/TX stats for each container&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;go install github.com/ekinertac/dtop@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This installs &lt;code&gt;dtop&lt;/code&gt; to your &lt;code&gt;$GOPATH/bin&lt;/code&gt; directory (usually &lt;code&gt;~/go/bin&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>podlift</title><link>https://ekinertac.com/projects/podlift/</link><pubDate>Thu, 06 Nov 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/podlift/</guid><description>&lt;p&gt;&lt;strong&gt;Simple, transparent deployment for containerized applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;podlift deploys your Docker containers to any server with SSH access. No black boxes, no magic, no broken promises.&lt;/p&gt;
&lt;h2 id="why-podlift"&gt;Why podlift?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transparent&lt;/strong&gt; — see exactly what commands run on your servers. No custom infrastructure, just standard Docker + nginx.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliable&lt;/strong&gt; — validate everything before deployment. Clear errors with actionable solutions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-interactive&lt;/strong&gt; — every command works in CI/CD. No prompts, no waiting for input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero-downtime&lt;/strong&gt; — deploy new versions without dropping requests. Roll back instantly if needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git-native&lt;/strong&gt; — every deployment maps to a commit. Always know what&amp;rsquo;s running in production.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quick-start"&gt;Quick start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Quick install (Linux/macOS)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;curl -sSL https://raw.githubusercontent.com/ekinertac/podlift/main/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Or with Go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;go install github.com/ekinertac/podlift@latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; myapp/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;podlift init &lt;span class="c1"&gt;# creates podlift.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;podlift deploy &lt;span class="c1"&gt;# ship it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit &lt;code&gt;podlift.yml&lt;/code&gt; to point at your server, domain, and image, then deploy. Every command is standard Docker and nginx under the hood — nothing you can&amp;rsquo;t inspect or reproduce by hand.&lt;/p&gt;</description></item><item><title>mkdown</title><link>https://ekinertac.com/projects/mkdown/</link><pubDate>Mon, 03 Nov 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/mkdown/</guid><description>&lt;p&gt;A fast, single-binary markdown to HTML converter that produces complete, self-contained styled pages — syntax highlighting and theme CSS included, with no runtime to install.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;mkdown input.md &lt;span class="c1"&gt;# Converts to input.html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;mkdown doc.md -o out.html &lt;span class="c1"&gt;# Custom output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;mkdown *.md &lt;span class="c1"&gt;# Batch: every file, converted in parallel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single static binary, no runtime&lt;/strong&gt; — no Node, Python, or Ruby to install&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-contained output&lt;/strong&gt; — theme CSS embedded inline; one portable &lt;code&gt;.html&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast parallel batch&lt;/strong&gt; — &lt;code&gt;mkdown *.md&lt;/code&gt; converts a whole directory in one process across all available cores&lt;/li&gt;
&lt;li&gt;GitHub Flavored Markdown (tables, strikethrough, task lists)&lt;/li&gt;
&lt;li&gt;Syntax highlighting with Chroma&lt;/li&gt;
&lt;li&gt;YAML frontmatter parsing&lt;/li&gt;
&lt;li&gt;Dark theme by default, light theme available, separated CSS for easy theming&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Homebrew (macOS / Linux)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;brew install ekinertac/tap/mkdown
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# npx — no Go toolchain needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;npx @mkdown/cli input.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Go toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;go install github.com/ekinertac/mkdown/cmd/mkdown@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Prebuilt binaries for macOS, Linux, and Windows (amd64/arm64) are attached to each GitHub Release.&lt;/p&gt;</description></item><item><title>cliutils</title><link>https://ekinertac.com/projects/cliutils/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/cliutils/</guid><description>&lt;p&gt;A modular command-line utility collection providing common tools for developers. Built with Python, featuring argparse for robust CLI parsing and argcomplete for shell autocompletion.&lt;/p&gt;
&lt;h2 id="commands"&gt;Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;base64&lt;/strong&gt; — encode / decode base64&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;case&lt;/strong&gt; — convert text case formats (camelCase, snake_case, kebab-case, and more)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;convert&lt;/strong&gt; — convert between formats (colors, numbers, files, configs, documents, text, tabular)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;encode&lt;/strong&gt; — encode / decode text (URL, HTML, hex, morse, QR codes, binary, ROT13, and more)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hash&lt;/strong&gt; — cryptographic hash digests (MD5, SHA1, SHA256, SHA512, …)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lorem&lt;/strong&gt; — generate Lorem Ipsum text&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;perm&lt;/strong&gt; — Unix file permission conversions and calculations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;random&lt;/strong&gt; — generate random data (integers, floats, strings, …)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;token&lt;/strong&gt; — generate secure tokens and passwords&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uuid&lt;/strong&gt; — generate UUIDs (v1, v3, v4, v5)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;validate&lt;/strong&gt; — validate syntax, formats, and checksums (JSON, YAML, XML, email, URL, IP, credit cards, and more)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;git clone https://github.com/ekinertac/cliutils
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; cliutils
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;pip install -e .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable autocompletion (optional)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;activate-global-python-argcomplete
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Melina</title><link>https://ekinertac.com/projects/melina/</link><pubDate>Fri, 11 Jul 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/melina/</guid><description>&lt;p&gt;A &lt;strong&gt;zero-configuration&lt;/strong&gt; window manager for macOS that works perfectly out of the box, while offering unlimited customization for power users. Inspired by &lt;a href="https://github.com/jigish/slate"&gt;Slate&lt;/a&gt; (which hasn&amp;rsquo;t been updated in 13 years), Melina gives you immediate value with no setup, and a clear path to professional-grade automation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core philosophy:&lt;/strong&gt; start simple, scale infinitely. Every user should get value in 10 seconds, with the option to unlock serious power over time.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick start&lt;/h2&gt;
&lt;p&gt;No config needed — these work the moment you launch it:&lt;/p&gt;</description></item><item><title>When Kingdom Come: Deliverance Hijacked My Brain</title><link>https://ekinertac.com/blog/medieval-identity-crisis/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/medieval-identity-crisis/</guid><description>&lt;h2 id="the-gaming-moment-that-changed-everything"&gt;The Gaming Moment That Changed Everything&lt;/h2&gt;
&lt;p&gt;Couple of months ago, I was living my best medieval peasant life in &lt;strong&gt;Kingdom Come: Deliverance II&lt;/strong&gt;, blissfully unaware that this game was about to hijack my brain with an existential crisis I didn&amp;rsquo;t see coming.&lt;/p&gt;
&lt;p&gt;Picture this: you&amp;rsquo;re playing as some half-noble nobody, rolling into a foreign town where absolutely no one knows your face or gives a damn about your supposed heritage. The locals eye you with the medieval equivalent of &lt;em&gt;&amp;ldquo;pics or it didn&amp;rsquo;t happen&amp;rdquo;&lt;/em&gt; skepticism, and suddenly you&amp;rsquo;re stuck in this bureaucratic nightmare trying to prove you&amp;rsquo;re not just some random vagrant with delusions of grandeur.&lt;/p&gt;</description></item><item><title>WriterDown</title><link>https://ekinertac.com/projects/writerdown/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/writerdown/</guid><description>&lt;p&gt;Transform VS Code into a professional writing environment for novelists and storytellers. WriterDown provides enhanced Markdown syntax with character tracking, story markers, and comprehensive novel management features.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What It Does&lt;/h2&gt;
&lt;p&gt;WriterDown turns Visual Studio Code into a powerful writing studio specifically designed for creative writers. It extends Markdown with writer-specific features while maintaining the flexibility and power of VSCode.&lt;/p&gt;
&lt;h2 id="key-features"&gt;Key Features&lt;/h2&gt;
&lt;h3 id="smart-writing-tools"&gt;Smart Writing Tools&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real-time Word Counter&lt;/strong&gt; - Excludes markup syntax for accurate counts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project Totals&lt;/strong&gt; - Track total words, pages, and chapters across entire project&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurable Page Counting&lt;/strong&gt; - Customize words per page (250/300/400 standards)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chapter Navigation&lt;/strong&gt; - Metadata-driven chapter organization with decimal numbering&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="character-management"&gt;Character Management&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto-detection&lt;/strong&gt; - Intelligent &lt;code&gt;@Character&lt;/code&gt; mention tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Character Cards&lt;/strong&gt; - Automatically generated character profiles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global Renaming&lt;/strong&gt; - Rename characters across all project files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intellisense Support&lt;/strong&gt; - Type &lt;code&gt;@&lt;/code&gt; for character autocomplete with previews&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="story-structure"&gt;Story Structure&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata Chapters&lt;/strong&gt; - YAML frontmatter for chapter organization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Story Markers&lt;/strong&gt; - Categorized plot points (&lt;code&gt;#! [EVENT]&lt;/code&gt;, &lt;code&gt;#! [BATTLE]&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writer Tasks&lt;/strong&gt; - Track &lt;code&gt;{TODO}&lt;/code&gt;, &lt;code&gt;{RESEARCH}&lt;/code&gt;, &lt;code&gt;{EDIT}&lt;/code&gt; items&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Sorting&lt;/strong&gt; - Proper chapter ordering (5.2 before 5.10)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enhanced-syntax"&gt;Enhanced Syntax&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dialogue Highlighting&lt;/strong&gt; - Visual distinction for character speech&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Story Markers&lt;/strong&gt; - Color-coded plot points and character moments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writer-specific Markup&lt;/strong&gt; - Custom syntax for creative writing needs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimized Layout&lt;/strong&gt; - 70-character word wrap for comfortable writing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="technology-stack"&gt;Technology Stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt; - Core extension development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TextMate Grammar&lt;/strong&gt; - Custom syntax highlighting rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VSCode Extension API&lt;/strong&gt; - Tree views, status bar, and command integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML&lt;/strong&gt; - Chapter metadata and configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown&lt;/strong&gt; - Base document format with extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="writing-syntax"&gt;Writing Syntax&lt;/h2&gt;
&lt;h3 id="characters"&gt;Characters&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="ni"&gt;@Elena&lt;/span&gt; walked into the room where @[Lady Catherine] was waiting.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;@[Lord Halven] greeted &lt;span class="ni"&gt;@Marcus&lt;/span&gt; at the door.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="story-markers"&gt;Story Markers&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;#! [EVENT] Elena discovers the ancient map
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;#! [BATTLE] First skirmish with bandits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;#! [CHARACTER] Marcus reveals his secret
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;#! [PLOT] Major revelation about the villain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="writer-tasks"&gt;Writer Tasks&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;{TODO: Add more character development}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;{RESEARCH: Historical accuracy needed}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;{EDIT: Fix pacing in this section}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;{DEADLINE: Finish chapter by Friday}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="chapter-organization"&gt;Chapter Organization&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;chapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;The Forest Encounter&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;draft&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# The Forest Encounter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Your chapter content here...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="project-structure"&gt;Project Structure&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;your-novel/
├── Book/ # All story content
│ ├── Chapter-1.md
│ ├── Chapter-5-1.md
│ └── Part2/
│ └── Chapter-10.md
├── Characters/ # Character cards (optional)
└── Notes/ # Research, outlines, etc.
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="sidebar-panels"&gt;Sidebar Panels&lt;/h2&gt;
&lt;p&gt;Access via the &lt;strong&gt;WriterDown&lt;/strong&gt; activity bar icon:&lt;/p&gt;</description></item><item><title>Why I Build Useless Software and You Should Too</title><link>https://ekinertac.com/blog/joy-of-toy-software/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/joy-of-toy-software/</guid><description>&lt;h1 id="why-i-build-useless-software-and-you-should-too"&gt;Why I Build Useless Software and You Should Too&lt;/h1&gt;
&lt;p&gt;There&amp;rsquo;s something &lt;strong&gt;deliciously rebellious&lt;/strong&gt; about opening your editor with zero productive intentions. No Jira tickets breathing down your neck. No product managers asking about user stories. No venture capitalists wondering about your monetization strategy. Just you, a caffeinated beverage, and the beautiful chaos of making something completely unnecessary.&lt;/p&gt;
&lt;p&gt;Welcome to the wonderfully pointless world of &lt;em&gt;&amp;ldquo;toy&amp;rdquo;&lt;/em&gt; software - programs that exist purely because they can.&lt;/p&gt;</description></item><item><title>Escaping Astro and Finding Peace with Hugo</title><link>https://ekinertac.com/blog/first-post/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/blog/first-post/</guid><description>&lt;h1 id="escaping-astro-and-finding-peace-with-hugo"&gt;Escaping Astro and Finding Peace with Hugo&lt;/h1&gt;
&lt;p&gt;I started building this website with &lt;strong&gt;Astro&lt;/strong&gt;, full of optimism and modern web development enthusiasm. I built the entire site - layouts, alternative themes, deployment scripts, everything was ready to ship. Then I hit the &lt;strong&gt;CSS scoping wall&lt;/strong&gt;: I couldn&amp;rsquo;t find the correct way to override a simple &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; element&amp;rsquo;s color. That was it. I dumped the entire project immediately, despite being at the finish line.&lt;/p&gt;</description></item><item><title>Live Theme Previewer</title><link>https://ekinertac.com/projects/live-themes/</link><pubDate>Mon, 20 Jan 2025 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/live-themes/</guid><description>&lt;p&gt;A Visual Studio Code extension that allows you to preview and apply themes in real-time without installing them. Experience different color schemes instantly and find the perfect theme for your coding environment.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What It Does&lt;/h2&gt;
&lt;p&gt;Eliminates the tedious process of installing and uninstalling themes to find the right one. Browse, preview, and test themes instantly with a JetBrains-inspired interface.&lt;/p&gt;
&lt;h2 id="key-features"&gt;Key Features&lt;/h2&gt;
&lt;h3 id="real-time-theme-preview"&gt;Real-time Theme Preview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instant Application&lt;/strong&gt; - Preview themes immediately without installation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero Installation&lt;/strong&gt; - Try themes without cluttering your extensions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick Switching&lt;/strong&gt; - Browse through multiple themes rapidly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Revert Capability&lt;/strong&gt; - Return to original theme with one click&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enhanced-browsing-experience"&gt;Enhanced Browsing Experience&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wide Theme Collection&lt;/strong&gt; - Access to hundreds of popular VSCode themes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organized Categories&lt;/strong&gt; - Themes grouped by type and style&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search Functionality&lt;/strong&gt; - Find themes by name or characteristics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple Variants&lt;/strong&gt; - Preview different variations of theme families&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="seamless-integration"&gt;Seamless Integration&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Settings Sync Compatible&lt;/strong&gt; - Works with VSCode Settings Sync (with notifications)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Command Palette&lt;/strong&gt; - Easy access via &lt;code&gt;Live Themes: Preview Themes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyboard Friendly&lt;/strong&gt; - Navigate themes using keyboard shortcuts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installation Option&lt;/strong&gt; - Install themes you like directly from preview&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="technology-stack"&gt;Technology Stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt; - Core extension development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VSCode Extension API&lt;/strong&gt; - Theme manipulation and UI integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theme Registry&lt;/strong&gt; - Access to VSCode marketplace themes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Settings Management&lt;/strong&gt; - Temporary theme application system&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Theme Collection&lt;/strong&gt; - Maintains a curated list of popular VSCode themes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Loading&lt;/strong&gt; - Downloads theme definitions on demand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Temporary Application&lt;/strong&gt; - Applies themes without permanent installation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Settings Management&lt;/strong&gt; - Temporarily modifies VSCode settings for preview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installation Bridge&lt;/strong&gt; - Provides option to permanently install liked themes&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="user-experience"&gt;User Experience&lt;/h2&gt;
&lt;h3 id="browse-interface"&gt;Browse Interface&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Clean, organized theme selection panel&lt;/li&gt;
&lt;li&gt;Thumbnail previews of theme appearance&lt;/li&gt;
&lt;li&gt;Category filtering and search capabilities&lt;/li&gt;
&lt;li&gt;Quick preview with mouse hover or click&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="preview-mode"&gt;Preview Mode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Instant theme application to current workspace&lt;/li&gt;
&lt;li&gt;All UI elements update in real-time&lt;/li&gt;
&lt;li&gt;Code syntax highlighting reflects theme changes&lt;/li&gt;
&lt;li&gt;Side panels and menus show theme colors&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installation-flow"&gt;Installation Flow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Install Extension&amp;rdquo; button for permanent adoption&lt;/li&gt;
&lt;li&gt;Automatic cleanup of temporary settings&lt;/li&gt;
&lt;li&gt;Smooth transition from preview to installed theme&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="perfect-for"&gt;Perfect For&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Theme Hunters&lt;/strong&gt; - Developers who love trying new color schemes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design-Conscious Coders&lt;/strong&gt; - Those who care about their development environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JetBrains Migrants&lt;/strong&gt; - Users familiar with IntelliJ theme browsing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team Leads&lt;/strong&gt; - Finding team-wide theme standards&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installation--usage"&gt;Installation &amp;amp; Usage&lt;/h2&gt;
&lt;h3 id="installation"&gt;Installation&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Visual Studio Code&lt;/li&gt;
&lt;li&gt;Go to Extensions view (&lt;code&gt;Ctrl+Shift+X&lt;/code&gt; / &lt;code&gt;Cmd+Shift+X&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Search for &amp;ldquo;Live Themes&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Click Install&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="usage"&gt;Usage&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Command Palette (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; / &lt;code&gt;Cmd+Shift+P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Type &amp;ldquo;Live Themes: Preview Themes&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Browse through available themes&lt;/li&gt;
&lt;li&gt;Click themes to preview instantly&lt;/li&gt;
&lt;li&gt;Use &amp;ldquo;Install Extension&amp;rdquo; to make permanent&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="known-limitations"&gt;Known Limitations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Settings Sync Notifications&lt;/strong&gt; - Multiple sync notifications during theme browsing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theme Compatibility&lt;/strong&gt; - Light/dark theme mixing may look inconsistent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview Limitations&lt;/strong&gt; - Some theme elements may not preview perfectly&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="current-status"&gt;Current Status&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Core theme preview functionality working&lt;/li&gt;
&lt;li&gt;✅ Wide collection of popular themes available&lt;/li&gt;
&lt;li&gt;✅ Installation flow implemented&lt;/li&gt;
&lt;li&gt;🔄 Need to add comprehensive test coverage&lt;/li&gt;
&lt;li&gt;🔄 Search functionality implementation pending&lt;/li&gt;
&lt;li&gt;🔄 Performance optimizations for large theme collections&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="roadmap"&gt;Roadmap&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;strong&gt;Enhanced Search&lt;/strong&gt; - Advanced theme filtering and search&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;strong&gt;Custom Collections&lt;/strong&gt; - User-curated theme lists&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;strong&gt;Theme Ratings&lt;/strong&gt; - Community rating system&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;strong&gt;Preview Improvements&lt;/strong&gt; - Better theme preview accuracy&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;strong&gt;Performance&lt;/strong&gt; - Optimized theme loading and caching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Live Theme Previewer bridges the gap between theme discovery and adoption, making it effortless to find the perfect coding environment aesthetic.&lt;/p&gt;</description></item><item><title>Auto Package Installer</title><link>https://ekinertac.com/projects/auto-package-installer/</link><pubDate>Fri, 18 Oct 2024 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/auto-package-installer/</guid><description>&lt;p&gt;A VSCode extension that automatically detects missing packages in your JavaScript and TypeScript projects and offers to install them with a single click.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What It Does&lt;/h2&gt;
&lt;p&gt;No more switching to the terminal to install missing packages. This extension detects import statements for packages that aren&amp;rsquo;t installed and provides a quick fix action to install them directly from your editor.&lt;/p&gt;
&lt;h2 id="key-features"&gt;Key Features&lt;/h2&gt;
&lt;h3 id="automatic-detection"&gt;Automatic Detection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Scans JavaScript and TypeScript files for missing packages&lt;/li&gt;
&lt;li&gt;Detects both ES6 imports and CommonJS require() statements&lt;/li&gt;
&lt;li&gt;Shows a lightbulb icon next to missing package imports&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="multiple-package-manager-support"&gt;Multiple Package Manager Support&lt;/h3&gt;
&lt;p&gt;Automatically detects and uses the appropriate package manager for your project:&lt;/p&gt;</description></item><item><title>Better Faster Search</title><link>https://ekinertac.com/projects/better-search/</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0300</pubDate><guid>https://ekinertac.com/projects/better-search/</guid><description>&lt;blockquote style="background-color:rgb(82, 3, 3); padding: 10px; border-radius: 5px; margin: 80px 0;"&gt;
 &lt;p&gt;
 &lt;strong&gt;Note:&lt;/strong&gt; This is an obsolete project since VSCode implemented a search system like Sublime Text. I'm keeping it here for reference.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A faster and more efficient search extension for Visual Studio Code that enhances your code navigation and search capabilities with a JetBrains-inspired interface.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What It Does&lt;/h2&gt;
&lt;p&gt;Replaces VSCode&amp;rsquo;s default search functionality with a more intuitive and faster search experience. Perfect for developers who want JetBrains-style search capabilities in Visual Studio Code.&lt;/p&gt;</description></item><item><title>Explorables</title><link>https://ekinertac.com/explorables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ekinertac.com/explorables/</guid><description/></item><item><title>Stuff I Built</title><link>https://ekinertac.com/projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ekinertac.com/projects/</guid><description/></item></channel></rss>