{"@attributes":{"version":"2.0"},"channel":{"title":"matm","link":"https:\/\/matm.xyz\/","description":"Recent content on matm","generator":"Hugo","language":"en-us","lastBuildDate":"Fri, 13 Mar 2026 00:00:00 +0000","item":[{"title":"Same core, less shielding","link":"https:\/\/matm.xyz\/blog\/same-core-less-shielding\/","pubDate":"Fri, 13 Mar 2026 00:00:00 +0000","guid":"https:\/\/matm.xyz\/blog\/same-core-less-shielding\/","description":"<p><img src=\"https:\/\/matm.xyz\/images\/same-core\/dampened-signal.png\" alt=\"The dampened signal\"><\/p>\n<p>Identity is usually framed as a dual battle front. You either stay consistent &ndash; true, for short &ndash; or you rebel and totally shift who you are. Preserve or reinvent. Pick one.<\/p>\n<p>There is a third option that gets less attention. You don&rsquo;t change. You don&rsquo;t preserve. You become more of what you already were.<\/p>\n<p>Our existence is constrained. We move around inside a boundary &ndash; call it temperament, call it wiring, call it whatever you want &ndash; and the movement looks like change from the outside. But the boundary was always the same shape. What shifts is not the core. What shifts is how much of it is visible.<\/p>"},{"title":"Ground shift","link":"https:\/\/matm.xyz\/blog\/ground-shift\/","pubDate":"Wed, 04 Mar 2026 00:00:00 +0000","guid":"https:\/\/matm.xyz\/blog\/ground-shift\/","description":"<p><img src=\"https:\/\/matm.xyz\/images\/ground-shift\/the-lone-terminal.png\" alt=\"The lone terminal\"><\/p>\n<p>It has been a while since my ideas wandered around here.<\/p>\n<p>The work, and the meaning of it, has also transformed &ndash; kind of like a catalyst. During 2022 I was deep diving on self-hosting and being a privacy-first advocate. I still am, but not in the state I was back then. I still think encryption is the most consequential thing we ever shipped as a species. It hardcoded privacy into the fabric of society in a way that no law has managed for any other right. But I digress.<\/p>"},{"title":"Hammer","link":"https:\/\/matm.xyz\/blog\/hammer\/","pubDate":"Fri, 09 Sep 2022 00:00:00 +0000","guid":"https:\/\/matm.xyz\/blog\/hammer\/","description":"<p>Consider these two <strong>Typescript<\/strong> snippets:<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ts\" data-lang=\"ts\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ specimen 1\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kr\">const<\/span> <span class=\"nx\">KEY_VALUE<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;prop-key-1&#39;<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;some-prop-value-1&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;prop-key-2&#39;<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;some-prop-value-2&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">keys<\/span><span class=\"p\">(<\/span><span class=\"nx\">KEY_VALUE<\/span><span class=\"p\">).<\/span><span class=\"nx\">forEach<\/span><span class=\"p\">(<\/span><span class=\"nx\">key<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ do something with key and KEY_VALUE[key];\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">});<\/span>\n<\/span><\/span><\/code><\/pre><\/div><div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ts\" data-lang=\"ts\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ specimen 2\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kr\">interface<\/span> <span class=\"nx\">KeyValue<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">key<\/span>: <span class=\"kt\">string<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">value<\/span>: <span class=\"kt\">string<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">const<\/span> <span class=\"nx\">KEY_VALUE<\/span>: <span class=\"kt\">KeyValue<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">key<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;prop-key-1&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">value<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;some-prop-value-1&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">key<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;prop-key-2&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">value<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;some-prop-value-2&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">KEY_VALUE<\/span><span class=\"p\">.<\/span><span class=\"nx\">forEach<\/span><span class=\"p\">(<\/span><span class=\"nx\">pair<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ do something with pair.key and pair.value\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">});<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>Which approach would you rather implement in your project? And why?<\/p>"},{"title":"Hello world","link":"https:\/\/matm.xyz\/blog\/hello-world\/","pubDate":"Sat, 15 Jan 2022 00:00:00 +0000","guid":"https:\/\/matm.xyz\/blog\/hello-world\/","description":"<p>Welcome to my blog and thanks for passing by.\nIn this blog I will mostly discuss my personal opinion on tech topics and show some of my work.<\/p>\n<p>Feel free to contact me, I like to engage in discussions about interesting subject matters.<\/p>\n<p>I also provide an RSS feed <a href=\"https:\/\/matm.xyz\/feed.xml\">here<\/a>.<\/p>"},{"title":"contact","link":"https:\/\/matm.xyz\/contact\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/matm.xyz\/contact\/","description":"<ul>\n<li><strong>email<\/strong> &ndash; <a href=\"mailto:manuel+blog@matm.xyz\">manuel+blog@matm.xyz<\/a><\/li>\n<li><strong>github<\/strong> &ndash; <a href=\"https:\/\/github.com\/manueltarouca\">github.com\/manueltarouca<\/a><\/li>\n<\/ul>"},{"title":"projects","link":"https:\/\/matm.xyz\/projects\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/matm.xyz\/projects\/","description":"<p>Things I have built, am building, or thinking about.<\/p>\n<h2 id=\"ai-and-agents\">AI and agents<\/h2>\n<ul>\n<li>\n<p><strong><a href=\"https:\/\/github.com\/manueltarouca\/limitless-mcp-server\">limitless-mcp-server<\/a><\/strong> &ndash; MCP server, client, and interactive mode for the Limitless API. TypeScript.<\/p>\n<\/li>\n<li>\n<p><strong><a href=\"https:\/\/github.com\/manueltarouca\/claude-code-model-provider\">claude-code-model-provider<\/a><\/strong> &ndash; Claude Code as a model provider for the Strands Agents SDK. Python.<\/p>\n<\/li>\n<li>\n<p><strong><a href=\"https:\/\/github.com\/manueltarouca\/agent-harness\">agent-harness<\/a><\/strong> &ndash; Minimal AI agent harness with a Claude Code-like TUI. Go.<\/p>\n<\/li>\n<li>\n<p><strong><a href=\"https:\/\/github.com\/manueltarouca\/mt-marketplace\">mt-marketplace<\/a><\/strong> &ndash; Personal Claude Code plugin marketplace.<\/p>\n<\/li>\n<li>\n<p><strong><a href=\"https:\/\/github.com\/manueltarouca\/protein-bars-mcp-server\">protein-bars-mcp-server<\/a><\/strong> &ndash; Serverless MCP server deployed on AWS for a protein bar ordering system. TypeScript.<\/p>"}]}}