<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Lukas Manera</title><link>https://blog.xarc.dev/</link><description>Recent content on Lukas Manera</description><generator>Hugo</generator><language>en-us</language><copyright>&lt;a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener"&gt;CC BY-NC 4.0&lt;/a&gt;</copyright><lastBuildDate>Fri, 01 May 2026 22:29:07 +0200</lastBuildDate><atom:link href="https://blog.xarc.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Playbook for Hardening Legacy PHP</title><link>https://blog.xarc.dev/posts/2026/04/playbook-for-hardening-legacy-php/</link><pubDate>Mon, 06 Apr 2026 12:00:00 +0200</pubDate><guid>https://blog.xarc.dev/posts/2026/04/playbook-for-hardening-legacy-php/</guid><description>&lt;p&gt;This is my practical follow-up to my post on &lt;a href="https://blog.xarc.dev/posts/2026/04/hardening-legacy-php-in-constrained-environments/"&gt;threat modeling legacy PHP in constrained environments&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That post is more about mindset, prioritization, and how to think about risk when the system is messy but the business relies on it.&lt;/p&gt;
&lt;p&gt;This one is the hands-on version. It is the kind of outline I come back to at the start of a new project where the codebase is fragile, the DevOps story is rudimentary at best, and nobody is getting six months to clean things up before security work starts.&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>https://blog.xarc.dev/privacy/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.xarc.dev/privacy/</guid><description>&lt;h2 id="1-controller"&gt;1. Controller&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lukas Manera&lt;/strong&gt;&lt;br&gt;
Germany
&lt;!-- If you're reading source, we're already off to a good start. --&gt;
&lt;div class="j98fjefj"&gt;hey@&lt;span aria-hidden="true"&gt;signal.&lt;/span&gt;xarc.&lt;span aria-hidden="true"&gt;noise.&lt;/span&gt;dev&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="2-general-information-on-data-processing"&gt;2. General information on data processing&lt;/h2&gt;
&lt;p&gt;Protecting your personal data is important to me. Personal data is processed on this website only to the extent technically necessary and, where applicable, based on information you voluntarily provide.&lt;/p&gt;
&lt;h2 id="3-access-data--server-log-files"&gt;3. Access data / server log files&lt;/h2&gt;
&lt;p&gt;When you access this website, the hosting provider automatically collects and stores information in so-called server log files. This may include in particular:&lt;/p&gt;</description></item><item><title>tracepack</title><link>https://blog.xarc.dev/showcase/tracepack/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.xarc.dev/showcase/tracepack/</guid><description>&lt;p&gt;&lt;strong&gt;tracepack&lt;/strong&gt; is a small Go CLI that quickly scans codebases for patterns and saves the results as Markdown, designed to stay simple, fast, and flexible through YAML profiles.&lt;/p&gt;
&lt;div class="showcase-overview"&gt;
 &lt;div class="showcase-overview__grid"&gt;&lt;section class="showcase-overview__card showcase-overview__card--stack"&gt;
 &lt;h3&gt;Stack&lt;/h3&gt;
 &lt;div class="showcase-overview__tags"&gt;&lt;a class="showcase-overview__badge-wrap" href="https://go.dev/" target="_blank" rel="noopener" title="Go"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Go-00ADD8?style=flat-square&amp;amp;logo=go&amp;amp;logoColor=white"
 alt="Go badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Why I built it&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;When you inherit a large, old, or unfamiliar codebase, the first problem is usually not deep semantic analysis. It is getting a fast, reusable overview of what is there: size, structure, hotspots, and recurring patterns worth reviewing first.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Tradeoffs&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;The tool is intentionally lightweight and pattern-driven. That keeps it flexible and easy to adapt with YAML profiles, but it also means it is not a replacement for deeper static analysis, framework-aware tooling, or manual review.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Notes&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;The most useful output is often a compact footprint plus a saved Markdown bundle of searches and command output. That makes triage, migration planning, legacy reviews, and sharing findings with others much easier.&lt;/div&gt;
 &lt;/section&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It supports two modes:&lt;/p&gt;</description></item><item><title>Hardening Legacy PHP in Constrained Environments</title><link>https://blog.xarc.dev/posts/2026/04/hardening-legacy-php-in-constrained-environments/</link><pubDate>Sun, 05 Apr 2026 12:00:00 +0200</pubDate><guid>https://blog.xarc.dev/posts/2026/04/hardening-legacy-php-in-constrained-environments/</guid><description>&lt;p&gt;The moment you realize that the roughest codebase you’ve seen is also one of the most valuable systems you’ve touched, things start to look a little different.&lt;/p&gt;
&lt;p&gt;“Just modernize it” is not a security strategy if the main thing that matters is keeping core business processes running in a system that drives major revenue.&lt;/p&gt;
&lt;p&gt;If you get called into an old PHP application, it can feel a bit like arriving at a crash site. After the initial shock, instead of judging, you start to think like an emergency responder: assess the scene, stabilize what matters most, and reduce the risk without making the situation worse.&lt;/p&gt;</description></item><item><title>About</title><link>https://blog.xarc.dev/about/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.xarc.dev/about/</guid><description>&lt;p&gt;I’m a software engineer focused on security automation and tooling.&lt;/p&gt;
&lt;p&gt;I build and secure fullstack web systems. Mostly &lt;strong&gt;PHP&lt;/strong&gt;/&lt;strong&gt;SQL&lt;/strong&gt; and &lt;strong&gt;Go&lt;/strong&gt;. A lot of that work sits somewhere between legacy web apps, reliability, and making systems safer.&lt;/p&gt;
&lt;p&gt;Currently working toward CKA with Linux Foundation.&lt;/p&gt;
&lt;p&gt;This blog is about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;legacy PHP and web application hardening&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;monitoring, observability, and operational reliability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;developer tooling and terminal-first workflows&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;the occasional note on &lt;strong&gt;productivity systems&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the side I build things like &lt;a href="https://github.com/xarcdotdev/TaskVanguard"&gt;&lt;strong&gt;TaskVanguard&lt;/strong&gt;&lt;/a&gt;, an AI-assisted companion for Taskwarrior, and &lt;a href="https://github.com/xarcdotdev/hyprorbit"&gt;&lt;strong&gt;hyprorbit&lt;/strong&gt;&lt;/a&gt;, a workspace orchestration tool for Hyprland.&lt;/p&gt;</description></item><item><title>hyprorbit</title><link>https://blog.xarc.dev/showcase/hyprorbit/</link><pubDate>Sat, 18 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.xarc.dev/showcase/hyprorbit/</guid><description>&lt;p&gt;&lt;strong&gt;hyprorbit&lt;/strong&gt; is a workspace orchestration tool for Hyprland designed to preserve muscle memory while switching between projects or operating contexts.&lt;/p&gt;
&lt;div class="showcase-overview"&gt;
 &lt;div class="showcase-overview__grid"&gt;&lt;section class="showcase-overview__card showcase-overview__card--stack"&gt;
 &lt;h3&gt;Stack&lt;/h3&gt;
 &lt;div class="showcase-overview__tags"&gt;&lt;a class="showcase-overview__badge-wrap" href="https://go.dev/" target="_blank" rel="noopener" title="Go"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Go-00ADD8?style=flat-square&amp;amp;logo=go&amp;amp;logoColor=white"
 alt="Go badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://hypr.land/" target="_blank" rel="noopener" title="Hyprland"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Hyprland-58E1FF?style=flat-square"
 alt="Hyprland badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;span class="showcase-overview__badge-wrap"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/IPC-334155?style=flat-square"
 alt="IPC badge"
 loading="lazy"&gt;
 &lt;/span&gt;&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Why I built it&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;Switching between projects usually meant sacrificing my window arrangement or rebuilding it. I wanted the same predictable, project-based layout available in multiple contexts at once. Hyprland did not make that easy on its own.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Tradeoffs&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;It adds complexity. Moving windows across orbits needs extra keybindings, and selecting windows or configuring window rules with multiple monitors gets a bit messy and takes more setup than plain Hyprland. It also would probably be better as a Hyprland plugin than as an external layer.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Notes&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;A daemon/client split was worth it for low-latency. It fits my workflow but I rarely have more than one orbit running at a time tbh so much of it could be achieved with hyprland on its own.&lt;/div&gt;
 &lt;/section&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Built as a &lt;strong&gt;Go&lt;/strong&gt; daemon and CLI, hyprorbit uses persistent IPC, YAML-driven configuration, and direct Hyprland integration to orchestrate workspace focus, window placement, and orbit switching with minimal latency.&lt;/p&gt;</description></item><item><title>TaskVanguard</title><link>https://blog.xarc.dev/showcase/taskvanguard/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog.xarc.dev/showcase/taskvanguard/</guid><description>&lt;div class="showcase-overview"&gt;
 &lt;div class="showcase-overview__grid"&gt;&lt;section class="showcase-overview__card showcase-overview__card--stack"&gt;
 &lt;h3&gt;Stack&lt;/h3&gt;
 &lt;div class="showcase-overview__tags"&gt;&lt;a class="showcase-overview__badge-wrap" href="https://go.dev/" target="_blank" rel="noopener" title="Go"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Go-00ADD8?style=flat-square&amp;amp;logo=go&amp;amp;logoColor=white"
 alt="Go badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://taskwarrior.org/" target="_blank" rel="noopener" title="Taskwarrior"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Taskwarrior-7C3AED?style=flat-square"
 alt="Taskwarrior badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;span class="showcase-overview__badge-wrap"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/LLM%20API-111827?style=flat-square&amp;amp;logo=openai&amp;amp;logoColor=white"
 alt="LLM API badge"
 loading="lazy"&gt;
 &lt;/span&gt;&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card showcase-overview__card--screenshot"&gt;
 &lt;h3&gt;Screenshot&lt;/h3&gt;
 &lt;a class="showcase-overview__media" href="https://blog.xarc.dev/img/showcase/taskvanguard-demo.gif" target="_blank" rel="noopener"&gt;
 &lt;img src="https://blog.xarc.dev/img/showcase/taskvanguard-demo.gif" alt="TaskVanguard terminal demo showing task suggestions and workflow guidance" loading="lazy"&gt;
 &lt;/a&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Why I built it&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;Task managers are great at storing tasks but dont help much with starting them. TaskVanguard tries addressing the friction between knowing what to do and actually doing it — lowering the activation energy through LLM-powered task reframing, impact tagging, and context-aware spot suggestions.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Tradeoffs&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;It works best when pulling a specific task forward from urgency, tags, and current context. Restructuring large backlogs or generating projects dynamically is weaker, because the model does not have enough context to understand the full shape of the work.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Notes&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;The best part therefore is still the &amp;lsquo;spot&amp;rsquo; workflow: lowering friction around the next actionable task.&lt;/div&gt;
 &lt;/section&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="cta-button"&gt;
 &lt;a href="https://blog.xarc.dev/posts/2025/06/taskvanguard-llm-driven-task-management"&gt;
 READ MORE ABOUT IT
 &lt;span class="cta-arrow"&gt;→&lt;/span&gt;
 &lt;/a&gt;
&lt;/div&gt;

&lt;h2 id="status"&gt;Status&lt;/h2&gt;
&lt;p&gt;Released. Available via &lt;code&gt;go install&lt;/code&gt; and AUR (&lt;code&gt;yay -S taskvanguard&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>MATA: Monitoring Legacy PHP Applications</title><link>https://blog.xarc.dev/posts/2025/06/mata-monitoring-legacy-php-applications/</link><pubDate>Tue, 10 Jun 2025 10:00:00 +0200</pubDate><guid>https://blog.xarc.dev/posts/2025/06/mata-monitoring-legacy-php-applications/</guid><description>&lt;p&gt;Most monitoring platforms assume you control the environment.&lt;/p&gt;
&lt;p&gt;They assume you can install agents, open ports, run background services, provision a database, and standardize deployment across every machine you touch.&lt;/p&gt;
&lt;p&gt;That is not the reality I run into most often.&lt;/p&gt;
&lt;p&gt;A lot of the PHP systems I work with are older revenue-generating applications running on shared hosting, constrained VPS setups, or managed servers where &amp;ldquo;just install another service&amp;rdquo; is not a serious option. They are often business-critical, rarely refactored, and maintained with a pragmatic mindset: keep them running, keep them secure, and avoid unnecessary moving parts.&lt;/p&gt;</description></item><item><title>TaskVanguard: LLM-driven task management</title><link>https://blog.xarc.dev/posts/2025/06/taskvanguard-llm-driven-task-management/</link><pubDate>Tue, 10 Jun 2025 10:00:00 +0200</pubDate><guid>https://blog.xarc.dev/posts/2025/06/taskvanguard-llm-driven-task-management/</guid><description>&lt;p&gt;&lt;img src="https://blog.xarc.dev/img/posts/taskvanguard-header.webp" alt="TaskVanguard header image"&gt;&lt;/p&gt;
&lt;p&gt;You type &lt;code&gt;task&lt;/code&gt; into your CLI and get a perfect, color-coded list sorted by urgency.&lt;/p&gt;
&lt;p&gt;One item is marked “high priority.” It has been sitting there for 19 days.&lt;/p&gt;
&lt;p&gt;You know what it is. You know why it matters. And somehow you still close the terminal and end up cleaning the coffee grinder instead.&lt;/p&gt;
&lt;p&gt;I’ve been there: polishing dotfiles instead of fixing a two-line bug because the bug required an uncomfortable conversation.&lt;/p&gt;</description></item><item><title>MATA</title><link>https://blog.xarc.dev/showcase/matash/</link><pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate><guid>https://blog.xarc.dev/showcase/matash/</guid><description>&lt;p&gt;&lt;strong&gt;MATA&lt;/strong&gt; is a lightweight monitoring dashboard for PHP-heavy environments where full observability stacks are impractical.&lt;/p&gt;
&lt;div class="showcase-overview"&gt;
 &lt;div class="showcase-overview__grid"&gt;&lt;section class="showcase-overview__card showcase-overview__card--stack"&gt;
 &lt;h3&gt;Stack&lt;/h3&gt;
 &lt;div class="showcase-overview__tags"&gt;&lt;a class="showcase-overview__badge-wrap" href="https://www.php.net/" target="_blank" rel="noopener" title="PHP"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/PHP-777BB4?style=flat-square&amp;amp;logo=php&amp;amp;logoColor=white"
 alt="PHP badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://htmx.org/" target="_blank" rel="noopener" title="htmx"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/htmx-3366CC?style=flat-square&amp;amp;logo=htmx&amp;amp;logoColor=white"
 alt="htmx badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://mariadb.org/" target="_blank" rel="noopener" title="MariaDB"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/MariaDB-003545?style=flat-square&amp;amp;logo=mariadb&amp;amp;logoColor=white"
 alt="MariaDB badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://bulma.io/" target="_blank" rel="noopener" title="Bulma"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Bulma-00D1B2?style=flat-square&amp;amp;logo=bulma&amp;amp;logoColor=white"
 alt="Bulma badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://www.openpolicyagent.org/" target="_blank" rel="noopener" title="OPA"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/OPA-7C3AED?style=flat-square&amp;amp;logo=openpolicyagent&amp;amp;logoColor=white"
 alt="OPA badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;a class="showcase-overview__badge-wrap" href="https://taskfile.dev/" target="_blank" rel="noopener" title="Taskfile"&gt;
 &lt;img
 class="showcase-overview__badge"
 src="https://img.shields.io/badge/Taskfile-0F766E?style=flat-square&amp;amp;logo=task&amp;amp;logoColor=white"
 alt="Taskfile badge"
 loading="lazy"&gt;
 &lt;/a&gt;&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card showcase-overview__card--screenshot"&gt;
 &lt;h3&gt;Screenshot&lt;/h3&gt;
 &lt;a class="showcase-overview__media" href="https://blog.xarc.dev/img/showcase/mata-screenshot.webp" target="_blank" rel="noopener"&gt;
 &lt;img src="https://blog.xarc.dev/img/showcase/mata-screenshot.webp" alt="MATA dashboard screenshot" loading="lazy"&gt;
 &lt;/a&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Why I built it&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;I wanted monitoring that still works on shared hosting, constrained VPSes, and legacy PHP environments where you cannot install agents or extra services. Existing stacks were usually heavier than the problem called for.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Tradeoffs&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;It is intentionally not a full observability platform. The design stays small and deployable through read-only PHP nodes and pull-based collection, which fits small server fleets well but is not meant for large-scale or Kubernetes-style monitoring.&lt;/div&gt;
 &lt;/section&gt;&lt;section class="showcase-overview__card"&gt;
 &lt;h3&gt;Notes&lt;/h3&gt;
 &lt;div class="showcase-overview__copy"&gt;The useful part is combining uptime checks, PHP logs, server metrics, Composer inventory, and alerts in one place. OPA handles alarm decisions cleanly, Taskfile became part of the day-to-day workflow for setup, deploys, and user management, and optional Docker support keeps deployment flexible.&lt;/div&gt;
 &lt;/section&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="status"&gt;Status&lt;/h2&gt;
&lt;p&gt;Released. Demo available at &lt;a href="https://demo.mata.sh"&gt;demo.mata.sh&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>