<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>LifeLog — Samuel Medeiros (EN)</title><description>Samuel Medeiros&apos; learning journey</description><link>https://lifelog-sepia.vercel.app/</link><language>en-us</language><item><title>The CI that came green out of indulgence</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-o-ci-verde-por-indulgencia/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-o-ci-verde-por-indulgencia/</guid><description>For months I looked at the pipeline&apos;s green dot as if it were proof. The moment I removed the two lines that swallowed the test suite&apos;s exit code, the first honest run in the repo&apos;s history returned 8 failures out of 417 tests. The fix wasn&apos;t to hide them again: it was to give the debt an address, an owner, and an expiry date.</description><pubDate>Tue, 15 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-o-ci-verde-por-indulgencia.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The 350 links pointing to nowhere — the day hreflang became noise</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-os-350-links-que-apontavam-para-o-nada/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-os-350-links-que-apontavam-para-o-nada/</guid><description>hreflang is the tag that tells Google every page also exists in another language — but it only counts if both sides point back at each other. Here, 350 of those links pointed at addresses that never existed. This post explains what the tag is, how it&apos;s supposed to work, and where our assumption broke.</description><pubDate>Tue, 15 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-os-350-links-que-apontavam-para-o-nada.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The dashboard that measured everything except itself</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-o-painel-que-media-tudo-menos-a-si-mesmo/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-o-painel-que-media-tudo-menos-a-si-mesmo/</guid><description>I built an ecosystem status aggregator and, eighteen minutes after it was born, it couldn&apos;t prove its own existence. The fix wasn&apos;t code: it was deciding what counts as evidence. A timeout isn&apos;t an outage, 429 means alive, a 401 on a gate means the door is shut to people who shouldn&apos;t be there, and an open port doesn&apos;t mean a running process.</description><pubDate>Mon, 14 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-o-painel-que-media-tudo-menos-a-si-mesmo.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Two gigabytes that weren&apos;t two gigabytes</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-dois-gigabytes-que-nao-eram-dois/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-dois-gigabytes-que-nao-eram-dois/</guid><description>I lost 810 training steps because a 2 GB checkpoint was copied straight onto its final name and the machine rebooted mid-copy. I fixed the write on the primary volume. Two days later the same bug was living in the second-drive mirror — and it had gotten worse: the truncated file passed the resume check.</description><pubDate>Mon, 14 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-dois-gigabytes-que-nao-eram-dois.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The column that never existed — when the test agrees with the bug</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-a-coluna-que-nunca-existiu/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-a-coluna-que-nunca-existiu/</guid><description>A scraping bridge asked the database for a column it never had. Nine days of runs, exit code zero, nothing collected. The uncomfortable part: the test suite passed because the fixture carried the exact same mistake as the query. Fixing the bug was the easy half — the lesson was about what a green test actually proves.</description><pubDate>Mon, 14 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-a-coluna-que-nunca-existiu.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>Approved without looking — when the checker can&apos;t check</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-aprovado-sem-olhar/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-aprovado-sem-olhar/</guid><description>The visual auditor for blog covers lost its primary model to an empty balance, returned an error, and the error handler returned &apos;approved&apos;. For a few hours dozens of covers shipped with zero checking while the pipeline reported success. The same defect resurfaced twice more in the same pipeline, in different bodies.</description><pubDate>Sun, 13 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-aprovado-sem-olhar.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The WebSocket that shook hands twice</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-o-websocket-que-apertava-a-mao-duas-vezes/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-o-websocket-que-apertava-a-mao-duas-vezes/</guid><description>A week after fixing the Dogwalk endpoints that refused to connect, I learned a repeated handshake is worse than none: the second accept() killed the connection right after it opened. And the first fix still let a dead socket into the room.</description><pubDate>Sun, 13 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-o-websocket-que-apertava-a-mao-duas-vezes.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Arachne — 79 restarts against an invisible port: when the table lies and bind() does not</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-79-restarts-contra-uma-porta-invisivel/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-79-restarts-contra-uma-porta-invisivel/</guid><description>The service stopped coming up on an ordinary afternoon while the port guard swore, on every single attempt, that the port was free. 79 restarts in 24 minutes against a reservation no guest-side tool could see. The fix was to change the oracle.</description><pubDate>Sun, 13 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-79-restarts-contra-uma-porta-invisivel.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Three fixes, one cause — the new page that inherited the layout and forgot the rules</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-tres-concertos-uma-causa/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-tres-concertos-uma-causa/</guid><description>The tag pages shipped with no cover art at all, mixed Portuguese with English in the same listing, and threw anyone who switched language straight back to the home page. Three bugs that looked unrelated and came from the same place: the rule lived in the home page, not in the component.</description><pubDate>Sat, 12 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-tres-concertos-uma-causa.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The three answers a monitor needs — why &apos;I don&apos;t know&apos; must be a state, not a green</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-as-tres-respostas-do-monitor/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-as-tres-respostas-do-monitor/</guid><description>An infrastructure watchdog printed &apos;FIXES APPLIED&apos; without touching a single thing. Once it finally had a word for &apos;I don&apos;t know&apos;, the audit revealed three ways a monitor lies: an exit code read as failure, a timeout that killed the wrong child, and an uncertainty that turned out to live entirely on one line of the map.</description><pubDate>Sat, 12 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-as-tres-respostas-do-monitor.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The one-way door — the restart that kept the service mute</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-a-porta-de-mao-unica/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-a-porta-de-mao-unica/</guid><description>Capivara&apos;s chat started answering without sources: HTTP 200, a polished sentence, zero memory. Restarting the embedding service looked like the obvious fix — and was precisely what kept it from coming back. Underneath, two defects from the same family: a process that only opens its port after waking up, and a fallback that doesn&apos;t know how to undo itself.</description><pubDate>Sat, 12 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-a-porta-de-mao-unica.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The tailored résumé that doesn&apos;t exist yet</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-o-curriculo-que-ainda-nao-existe/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-o-curriculo-que-ainda-nao-existe/</guid><description>My portfolio&apos;s next feature isn&apos;t live yet: an AI-powered generator that rewrites my résumé around a job description. Before it becomes a button, the hard part was already solved — and it isn&apos;t generating text. It&apos;s keeping the AI from describing experiences that never happened.</description><pubDate>Fri, 11 Sep 2026 22:10:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-o-curriculo-que-ainda-nao-existe.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The application factory that doesn&apos;t exist yet</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-a-fabrica-de-candidaturas/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-a-fabrica-de-candidaturas/</guid><description>The Resume Tailor is back in the tree, but every tailored résumé is still handcrafted: open the site, describe the job, review, save, send. The plan has had a Phase 5 sketched since August — a semi-automated pipeline that turns a raw job posting into a ready PDF — and it still hasn&apos;t left the paper. On the difference between shipping a tool and shipping a habit.</description><pubDate>Fri, 11 Sep 2026 21:05:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-a-fabrica-de-candidaturas.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The Ten Seconds of Silence — when the model thinks and returns nothing</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-os-dez-segundos-de-silencio/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-os-dez-segundos-de-silencio/</guid><description>An LLM call ends in 200 OK with empty content and the pipeline moves on like nothing happened. Diagnosis: reasoning models burn the token budget thinking and nothing is left for the answer. The fixes: a token ceiling with real margin, and a parser that tolerates a data: [DONE] glued to the JSON.</description><pubDate>Fri, 11 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-os-dez-segundos-de-silencio.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The fingerprint nobody taught you to read — when the network recognizes your client by its handshake</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-o-aperto-de-mao-que-delatou-o-cliente/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-o-aperto-de-mao-que-delatou-o-cliente/</guid><description>Two machines, the same code, the same key. One got 200, the other took a 403 with error code: 1010. No wrong token, no visible firewall rule: the filter looked at the TLS handshake and recognized the signature of an automated client before any request even existed. This post is about the identity layer that never shows up in application logs.</description><pubDate>Fri, 11 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-o-aperto-de-mao-que-delatou-o-cliente.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>Arachne — the cache that answered the wrong question: Brasília for France</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-o-cache-que-respondeu-a-pergunta-errada/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-o-cache-que-respondeu-a-pergunta-errada/</guid><description>Arachne&apos;s response cache returned &apos;Brasília&apos; to anyone asking about France — cosine 0.8531 against a 0.85 threshold. The story of a bug born in a CI investigation, the math that hid it, and the entity guard that fixed it without sacrificing recall.</description><pubDate>Fri, 11 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-o-cache-que-respondeu-a-pergunta-errada.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The single commit — when the publish button stopped lying about the blog&apos;s state</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-o-commit-unico/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-o-commit-unico/</guid><description>Hitting the publish button used to make two commits: one flipped the frontmatter, the other regenerated the panel&apos;s index. In between, the panel listed a post that was already public. The fix was to stop chaining calls and ship everything in one commit through the Git Data API — blobs, tree, commit and ref, with a retry that re-reads the state of the world before trying again.</description><pubDate>Thu, 10 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-o-commit-unico.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Eleven PRs in one afternoon — the day the bot became a teammate</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-onze-prs-numa-tarde-so/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-onze-prs-numa-tarde-so/</guid><description>Nine libraries, a test runner major bump and a GitHub action updated in a single day. What it took to merge 11 dependabot pull requests on the Portfolio without breaking the suite — and the one that almost turned into a false alarm.</description><pubDate>Thu, 10 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-onze-prs-numa-tarde-so.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>Parity: the mirror that measured memory</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-paridade-o-espelho-que-medi-a-memoria/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-paridade-o-espelho-que-medi-a-memoria/</guid><description>Before swapping Arachne&apos;s search engine for Yurumi, I had to prove the new one was at least as good as the old. Shadow dual-write, real traffic, overlap@10 — and the number nobody expects: 0.511.</description><pubDate>Thu, 10 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-paridade-o-espelho-que-medi-a-memoria.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Three Knives of the Flaky Test</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-tres-facas-do-flake/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-tres-facas-do-flake/</guid><description>79 tests green one day, 4 failing the next, zero production changes. Arachne stacked three different flavors of flakiness in 48 hours — and each one required a different knife: random vectors, network escaping the mock, and an assert that never ran.</description><pubDate>Wed, 09 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-tres-facas-do-flake.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Every window is a door — how an invisible post leaked through its own index</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-toda-janela-e-uma-porta/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-toda-janela-e-uma-porta/</guid><description>The post was hidden, its route returned 404, the feed didn&apos;t mention it. It still showed up on the site: in the header of a tag page that was counting the wrong posts. The lesson is older than it looks — every new page that lists content is a new door, and frontmatter doesn&apos;t protect itself.</description><pubDate>Wed, 09 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-toda-janela-e-uma-porta.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The error that saved the database</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-o-erro-que-salvou-o-banco/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-o-erro-que-salvou-o-banco/</guid><description>A test was deleting RAG tables on teardown. One run, the environment variable pointing at the isolated database was ignored by the engine — and the DELETE landed on the production arachne.db, with the live server writing to it. What saved the data was an error message.</description><pubDate>Wed, 09 Sep 2026 00:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-o-erro-que-salvou-o-banco.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The model that came back from the coma</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-bitmamba-1b-voltou-do-coma/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-bitmamba-1b-voltou-do-coma/</guid><description>A catatonic BitMamba 1B — broken tokenizer, 10^18 gradients, a midnight ENOMEM and a CUDA wedge that faked a dead GPU — closed 500 steps and the validation reproduced the eval loss to the fourth decimal. The diary of Phase 4B on a 12 GB RTX 3060.</description><pubDate>Tue, 08 Sep 2026 20:40:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-bitmamba-1b-voltou-do-coma.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The app that makes it to the home screen</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-o-app-que-entra-na-tela-de-casa/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-o-app-que-entra-na-tela-de-casa/</guid><description>PataPass was a website wearing an app costume — and the browser made that obvious at the worst possible moment: inside an elevator with no signal. The story of Phase 4F: an install banner driven by beforeinstallprompt, an offline page served by the service worker, and the decision to never cache HTML.</description><pubDate>Tue, 08 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-o-app-que-entra-na-tela-de-casa.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>The cover that wouldn&apos;t change — immutable cache and the fix that was renaming the file</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-a-capa-que-nao-mudava/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-a-capa-que-nao-mudava/</guid><description>The cover was remade twice, the deployment served the new bytes — and the blog kept showing the old image. The culprit wasn&apos;t the build or the CDN: it was a header promising the file would never change for a year. The story of the hunt, the math of immutable caching, and the rule that stuck: reworking an asset requires a new URL.</description><pubDate>Tue, 08 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-a-capa-que-nao-mudava.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The watchman doesn&apos;t know who you are — when integrity monitoring points at the administrator</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-o-vigia-nao-sabe-quem-voce-e/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-o-vigia-nao-sabe-quem-voce-e/</guid><description>On Saturday night I edited a script watched by the file integrity monitor and updated its baseline in the same block. Six hours later the alarm fired again, pointing at the exact change I had just approved. The monitor didn&apos;t fail: it did the only job it can do. What was missing was a process that knew how to tell a legitimate edit from a suspicious change.</description><pubDate>Mon, 07 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-o-vigia-nao-sabe-quem-voce-e.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The reviewer who can&apos;t read code — when a vision AI caught the bug everyone else missed</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-o-revisor-que-nao-le-codigo/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-o-revisor-que-nao-le-codigo/</guid><description>The Capivara light theme had washed-out text and a truncated email in the header. Static scanners stayed green, because none of them can see pixels. The one that caught it was a vision AI running screenshots of the real dashboard — and the patch was swapping hardcoded values for theme tokens and giving the layout room to breathe.</description><pubDate>Sun, 06 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-o-revisor-que-nao-le-codigo.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The training that woke up slow — the inheritance hidden inside a checkpoint</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-o-treino-que-acordou-lento/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-o-treino-que-acordou-lento/</guid><description>I resumed a run from the last checkpoint and it looked healthy — steps advancing, gradient in range, zero errors. Except the learning rate had quietly shrunk by three orders of magnitude. The cause: the LR scheduler restores more than it should when loading old state, and the fix was two lines.</description><pubDate>Sun, 06 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-o-treino-que-acordou-lento.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The no loop — when every reader rejection became a ticket in the pipeline</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-o-ciclo-do-nao/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-o-ciclo-do-nao/</guid><description>The reject-post button saved feedback to a file. But a file doesn&apos;t open an issue, doesn&apos;t notify, and doesn&apos;t nag. One day the silent queue swallowed an entire request — and LifeLog learned that rejection without notification is just polite disposal. The story of /api/recusar and the loop that closes itself.</description><pubDate>Sun, 06 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-o-ciclo-do-nao.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The footer that lied twice</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-o-rodape-que-mentia-duas-vezes/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-o-rodape-que-mentia-duas-vezes/</guid><description>React hydration error #418 in the portfolio footer, a mystery that only happened at night: the server renders in UTC, the visitor in local time, and a new Date() in JSX gave each of them a different answer. The hunt for the useState(null), the pinned timeZone, and the epilogue where I myself created a second bug while fixing the first.</description><pubDate>Sat, 05 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-o-rodape-que-mentia-duas-vezes.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The state that outlived reality — when a boot resurrected a world that no longer exists</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-o-estado-congelado/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-o-estado-congelado/</guid><description>After a reboot, everything came back green: process up, health check passing — and the page wouldn&apos;t open from anywhere. The service had resurrected with instructions from a past life, frozen in a state file, while the world outside had moved. This post covers the hunt, the fix at the source (stale state dies on every start, address defined in exactly one place) and the second half of the story: a network announcement that only talked to an interface with a fixed name, on the day the system renamed it.</description><pubDate>Sat, 05 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-o-estado-congelado.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The exception that got written twice — silencing an alarm is not defining policy</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-a-excecao-que-foi-escrita-duas-vezes/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-a-excecao-que-foi-escrita-duas-vezes/</guid><description>On August 11 I put a secret scanner on this blog&apos;s pipeline. The next day it flagged a build cache file as if it were a key. I silenced it with an entry pinned to that finding&apos;s exact fingerprint. Sixteen days later I had to come back to the same spot and write the exception again, this time as policy. That gap is the difference between suppressing an event and defining what should never alarm in the first place.</description><pubDate>Sat, 05 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-a-excecao-que-foi-escrita-duas-vezes-v2.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The F5 that logged the walker out</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-o-f5-que-desligava-o-passeador/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-o-f5-que-desligava-o-passeador/</guid><description>The status button finally worked within the session — but an F5 wiped it all: a reload brought the walker back offline for the entire system. The direct sequel to the ghost button: real persistence of the online status, from the frontend down to the profile PATCH.</description><pubDate>Fri, 04 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-o-f5-que-desligava-o-passeador.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Arachne — the war for port 9000: whoever holds the socket rules</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-a-guerra-da-porta-9000/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-a-guerra-da-porta-9000/</guid><description>The Arachne landing page loaded without CSS, the watchdog restarted the service in an invisible loop, and a zombie socat relay kept stealing the port from its rightful owner. Three chained bugs in a single diagnosis — and the lesson that a &apos;stopped&apos; service can keep causing damage.</description><pubDate>Fri, 04 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-a-guerra-da-porta-9000.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The window polisher: polishing transcripts without leaving room for hallucination</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-o-polidor-de-janelas-120s/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-o-polidor-de-janelas-120s/</guid><description>The new stage in my transcription pipeline uses Gemini TEXT over 120s windows — no audio, cheap and fast. What keeps the model from making things up isn&apos;t a polite prompt: it&apos;s a numeric ±35% character invariant per window, with retry and flag when the math doesn&apos;t close.</description><pubDate>Fri, 04 Sep 2026 14:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-o-polidor-de-janelas-120s.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The metric nobody confesses: I ran my memory without a reranker</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-a-metrica-que-ninguem-confessa/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-a-metrica-que-ninguem-confessa/</guid><description>After the bilingual jump to 0.1614 recall@1, there was a number left on the bench: how much was the cross-encoder contributing on every search? The week I measured that latency and recall are a bill you pay on every query — and the answer ended up written as a permanent flag in the config.</description><pubDate>Fri, 04 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-a-metrica-que-ninguem-confessa.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The green padlock that couldn&apos;t see the leak — path traversal in Capivara</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-o-cadeado-verde/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-o-cadeado-verde/</guid><description>Gitleaks, bandit and opengrep ran weekly and everything stayed green. Even so, a single GET request returned the entire .env in production. The hole wasn&apos;t a committed secret — it was a path my own code opened. And the one who found it wasn&apos;t the scanner.</description><pubDate>Thu, 03 Sep 2026 21:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-o-cadeado-verde.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Step 322 — when training dies in silence and VRAM is left orphaned</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-o-step-322/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-o-step-322/</guid><description>The Phase 4 run dropped mid-flight with no traceback, no OOM, no error log: the process simply stopped existing. Chasing the cause turned into a lesson about watching the wrong metrics — and about the invisible cost of letting your GPU driver sweep up your garbage.</description><pubDate>Thu, 03 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-o-step-322.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The queue nobody answers — when security became a Monday routine</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-a-fila-que-ninguem-atende/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-a-fila-que-ninguem-atende/</guid><description>The alarm hunts, the gate blocks, the dog attacks. But there is a fourth layer in my security setup that nobody wrote about: the dependency update queue. On August 31st, the bot delivered five fix proposals. Three days later, all five are still open. The queue became the surface.</description><pubDate>Thu, 03 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-a-fila-que-ninguem-atende.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The typewriter that erased its own text</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-o-typewriter-que-apagava-o-proprio-texto/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-o-typewriter-que-apagava-o-proprio-texto/</guid><description>The portfolio hero typed, erased, and retyped — not as an effect, but as a bug: deferred hydration mounted the component and reset the text already on screen. The story of how LCP dropped from 3.6s to 2.7s by removing idle-hydration from the wrong place.</description><pubDate>Wed, 02 Sep 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-o-typewriter-que-apagava-o-proprio-texto.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The button that said it was online — and did nothing</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-o-botao-que-dizia-estar-online-e-nao-fazia-nada/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-o-botao-que-dizia-estar-online-e-nao-fazia-nada/</guid><description>The walker toggle &apos;Go Online&apos; rendered, animated, and even changed color. But the handler was an empty function: the state never left &apos;online&apos;. The story of how a test loop caught a ghost button and gave back real online status.</description><pubDate>Wed, 02 Sep 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-o-botao-que-dizia-estar-online-e-nao-fazia-nada.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>The day the loss stopped learning</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-o-dia-em-que-a-loss-parou-de-aprender/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-o-dia-em-que-a-loss-parou-de-aprender/</guid><description>300 training steps, a loss stuck at 10.8125, and a model that insisted on coming out blank. The cause wasn&apos;t a low learning rate — it was exploded weights in the starting checkpoint. The story of how a stalled run became a full diagnosis.</description><pubDate>Wed, 02 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-o-dia-em-que-a-loss-parou-de-aprender.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The three-headed dog — when the defense hired an authorized attacker</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-o-cao-de-tres-cabecas/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-o-cao-de-tres-cabecas/</guid><description>After the alarm and the gate, a third guardian was missing: someone who actually attacks the house, in an authorized way, once a week, and delivers an honest penetration report. The agentic red team was born for that — and the first drill proved the sentinel wakes up when someone touches what it shouldn&apos;t.</description><pubDate>Tue, 01 Sep 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-o-cao-de-tres-cabecas.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>LifeLog — the blog that became a product with process</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-o-blog-que-virou-produto/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-o-blog-que-virou-produto/</guid><description>Cover gate at build time, WCAG AA contrast, the 10th project in the schema, and a bug-hunter audit with zero violations. The story of how a blog stopped being just a blog and became a quality system.</description><pubDate>Mon, 31 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-o-blog-que-virou-produto.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Capivara — the requests app and the double /api that returned 404</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-o-app-de-pedidos-e-o-duplo-api/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-o-app-de-pedidos-e-o-duplo-api/</guid><description>A brand-new CRUD in the personal hub, with groups, priorities and status — and a silent bug: the apiFetch helper already prepends /api, and I called /api/pedidos on top of it. /api/api/pedidos was born, and nobody saw it.</description><pubDate>Mon, 31 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-o-app-de-pedidos-e-o-duplo-api.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Studies — the night the cron never slept: what I learned studying jobs that won&apos;t stop</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-a-noite-em-que-o-cron-nao-dormiu/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-a-noite-em-que-o-cron-nao-dormiu/</guid><description>A study about cron jobs: why they accumulate, fail silently, and how a cron that &apos;never sleeps&apos; can take down an ecosystem. From Yurumi&apos;s consolidation to 289 orphan jobs — the lessons from a night of investigation.</description><pubDate>Mon, 31 Aug 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-a-noite-em-que-o-cron-nao-dormiu.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>Yurumi: the memory that learned to be an agent</title><link>https://lifelog-sepia.vercel.app/en/post/yurumi-a-memoria-que-aprendeu-a-ser-agente/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/yurumi-a-memoria-que-aprendeu-a-ser-agente/</guid><description>Yurumi started as a local replacement for mem0 — storing conversation memories. In two weeks it gained intent, actions, learning, its own identity and a knowledge graph. The journey from a simple store to a complete agentic system.</description><pubDate>Sun, 30 Aug 2026 21:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/yurumi-a-memoria-que-aprendeu-a-ser-agente.webp" type="image/webp"/><project>yurumi</project><accent>#b98a5e</accent></item><item><title>TatuEngine: the lm_head Returns — the Audit That Unlocked Phase 4</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-o-retorno-do-lm-head/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-o-retorno-do-lm-head/</guid><description>The codec post ended with a dangling issue: the lm_head diverging in validation. Two weeks later, a methodical audit rescaled the model&apos;s head, generated a clean checkpoint, and became the foundation of Phase 4 — the Resurrection.</description><pubDate>Sun, 30 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-o-retorno-do-lm-head.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The gate that blocks delivery — when security became a process rule</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-o-portao-que-nao-deixa-entregar/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-o-portao-que-nao-deixa-entregar/</guid><description>Ten days after automating active hunting, I realized the problem wasn&apos;t finding flaws — it was making sure nothing shipped without a security review. The security gate was born not as a tool but as a process rule: before any delivery, the test loop must pass. And the loop includes a dedicated security reviewer.</description><pubDate>Sun, 30 Aug 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-o-portao-que-nao-deixa-entregar.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The button that redid posts: when feedback becomes automatic correction</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-o-botao-que-refazia-posts/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-o-botao-que-refazia-posts/</guid><description>A Reject button in /ocultos that writes a note, opens a GitHub Issue, saves a file to the repo, and a 15-min cron redoes the post by itself. The story of how human feedback became a pipeline.</description><pubDate>Sat, 29 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-o-botao-que-refazia-posts.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>Studies — when I studied the embeddings that think for the system</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-ressurreicao-fase-4/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-ressurreicao-fase-4/</guid><description>Three embedding models, two search systems, one homegrown benchmark: the study that started with a question about semantic similarity and ended up revealing the tradeoffs between colibri, bge and openai — and how each one found its place in the ecosystem.</description><pubDate>Sat, 29 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-ressurreicao-fase-4.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>Studies — when the second brain moved house</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-o-segundo-cerebro-mudou-de-casa/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-o-segundo-cerebro-mudou-de-casa/</guid><description>Capivara kept its memories in a local ChromaDB, with its own embedder and L1-L4 layers. Yurumi kept the ecosystem&apos;s memory in a Qdrant. Two separate memories meant a brain that never talked to the rest of the body. The unification on 08/28 migrated 182/182 memories without losing a single one: hash dedup, backup before deleting, and an --apply gate that separates the plan from the execution.</description><pubDate>Sat, 29 Aug 2026 11:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-o-segundo-cerebro-mudou-de-casa.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The sentry at the form — when the portfolio learned to defend itself</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-quando-o-portfolio-ganhou-uma-sentinela/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-quando-o-portfolio-ganhou-uma-sentinela/</guid><description>Every public site has a front door: the contact form and the resume download. Two endpoints that accept input from strangers on the internet — and I finally treated them as such. Rate limiting, HTML escaping, a contact file for people who find flaws, and a scanner that watches everything in silence.</description><pubDate>Fri, 28 Aug 2026 13:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-quando-o-portfolio-ganhou-uma-sentinela.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>Capivara — the dashboard that started seeing the whole ecosystem</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-o-painel-que-passou-a-ver-tudo/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-o-painel-que-passou-a-ver-tudo/</guid><description>The home dashboard used to load section by section, and I still had to assemble the big picture in my head. Enter the Executive Hub: one endpoint aggregating projects, backups, alerts and infra in a single call, with graceful failure and zero SSRF.</description><pubDate>Fri, 28 Aug 2026 12:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-o-painel-que-passou-a-ver-tudo.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Arachne — from 92 violations to zero: the accessibility campaign</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-quando-o-scraper-ficou-acessivel/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-quando-o-scraper-ficou-acessivel/</guid><description>The axe-core report left no room for excuses: 92 contrast failures, buttons without accessible names, selects without labels, blocked zoom on the onboarding page. In two days Arachne went from 60 violation nodes to zero across 16 routes — swapping color tokens, adding aria-labels, and learning the hard way that Cloudflare immutable serves stale CSS and that code-split SPA CSS doesn&apos;t live where you expect it.</description><pubDate>Thu, 27 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-quando-o-scraper-ficou-acessivel.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Estudos — when documentation became knowledge</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-quando-a-documentacao-virou-conhecimento/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-quando-a-documentacao-virou-conhecimento/</guid><description>Every project&apos;s AGENTS.md was the official instruction set of the ecosystem, but it lived outside the Yurumi&apos;s memory — the ingest only ran when someone remembered to run it. The fix was a signature watcher (mtime+size) that re-ingests only what changed. Along the way: a first_run that ran a full ingest every day, an os.stat that hung when WSL wedged, and the lesson of never trusting a junction.</description><pubDate>Thu, 27 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-quando-a-documentacao-virou-conhecimento.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>Capivara — the layout builder that almost wiped the admin (and the double PUT that survived)</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-layout-builder/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-layout-builder/</guid><description>When reordering a single admin view reset all other views&apos; configs. The story of the controlled LayoutEditor, strict section whitelists, and how one PUT became zero.</description><pubDate>Wed, 26 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-layout-builder.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The circle that would not close — flushSync and the Portfolio View Transition</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-o-circulo-que-nao-fechava/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-o-circulo-que-nao-fechava/</guid><description>When the theme toggle animation revealed the old theme instead of the new one, the fault was not in the CSS — React had not committed the state in time.</description><pubDate>Tue, 25 Aug 2026 21:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-o-circulo-que-nao-fechava.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The old server that does not exist — the honeypot as a defense layer</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-opencanary-honeypot/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-opencanary-honeypot/</guid><description>After mapping the port inventory, the next step was planting bait: fake services, deliberately outdated in appearance, that pose as easy targets. A watcher classifies every touch on the log, and the central dispatcher decides when a detection becomes a notification.</description><pubDate>Tue, 25 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-opencanary-honeypot.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>Studies — when one vector was not enough: the memory that learned to speak two languages</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-quando-um-vetor-nao-bastou/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-quando-um-vetor-nao-bastou/</guid><description>Yurumi stored its memory with a single embedding model trained in Portuguese. It worked — until the first question in English. The fix was not swapping the model; it was running two of them side by side and fusing the rankings with RRF. After a full LoCoMo run, recall went from 0.139 to 0.1614.</description><pubDate>Mon, 24 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-quando-um-vetor-nao-bastou.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>WCAG AA: the contrast the eye can&apos;t see — and the axe-core that saw it for me</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-wcag-aa-o-contraste-que-o-olho-nao-ve/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-wcag-aa-o-contraste-que-o-olho-nao-ve/</guid><description>An accessibility audit on LifeLog turned into a hunt for four contrast traps: code comments at 3.9:1, project badges failing in 4 of 6 palettes, a theme selector that Astro scoping silently broke, and the alpha that axe-core refuses to compose. The result: 14 routes x themes with zero serious/critical violations.</description><pubDate>Sun, 23 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-wcag-aa-o-contraste-que-o-olho-nao-ve.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>Studies — the week I measured my artificial memory</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-a-semana-em-que-medi-minha-memoria-artificial/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-a-semana-em-que-medi-minha-memoria-artificial/</guid><description>The simple question &apos;what does my agent actually remember?&apos; turned into a full audit of Yurumi: 32 knowledge bases, 551 documents, a Qdrant collection with over 8 thousand vectors, and a LoCoMo baseline that handed back reality in percentage form.</description><pubDate>Sun, 23 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-a-semana-em-que-medi-minha-memoria-artificial.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The watchdog that discovered the covers were fake — the saga continues</title><link>https://lifelog-sepia.vercel.app/en/post/watchdog-descobriu-capas-falsas/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/watchdog-descobriu-capas-falsas/</guid><description>The cover watchdog I built to guarantee good images on the blog found a problem I didn&apos;t expect: the AI-generated covers arrived in the wrong format. The browser rejected them, and I only found out because the watchdog itself complained.</description><pubDate>Sat, 22 Aug 2026 22:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/watchdog-descobriu-capas-falsas.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The living inventory — when the knowledge firewall is a file</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-o-inventario-vivo-das-portas/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-o-inventario-vivo-das-portas/</guid><description>One of the most underestimated layers of security is knowing what is open. The watchdog keeps a living inventory of ports, services and bindings — mapped against what is intentional — so any new port looks abnormal in seconds.</description><pubDate>Sat, 22 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-o-inventario-vivo-das-portas.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>Studies — the day I understood why ternary fits in one and a half bits</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-o-dia-que-entendi-por-que-ternario-cabe-em-um-bit-e-meio/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-o-dia-que-entendi-por-que-ternario-cabe-em-um-bit-e-meio/</guid><description>I actually read the BitNet b1.58 paper and got stuck on a math problem that refused to add up: how do three values (-1, 0, +1) fit in 1.58 bits? A study week that became a didactic clone of ternary quantization — and wrecked my mental model of &apos;precision equals quality&apos;.</description><pubDate>Fri, 21 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-o-dia-que-entendi-por-que-ternario-cabe-em-um-bit-e-meio.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>TatuEngine packed its bags — and the repo got lighter</title><link>https://lifelog-sepia.vercel.app/en/post/novo-tatuengine-repo-mais-leve/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/novo-tatuengine-repo-mais-leve/</guid><description>A repo that accumulates build artifacts and syncs doesn&apos;t tell the clean story you want to show. TatuEngine went through versioning hygiene: build artifacts out of git, auto-sync running, and a repository ready for outsiders to look at without handing over the internal recipe.</description><pubDate>Fri, 21 Aug 2026 09:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/novo-tatuengine-repo-mais-leve.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>Capivara got a new skin — theme v2 with per-project design tokens</title><link>https://lifelog-sepia.vercel.app/en/post/novo-capivara-tema-por-projeto/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/novo-capivara-tema-por-projeto/</guid><description>The second brain got a brand-new theming system: a ThemeProvider with design tokens, CSP-compliant anti-flash, and per-project palettes. Along the way, the email service quietly broke because the Resend domain was wrong — and invites started arriving again.</description><pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/novo-capivara-tema-por-projeto.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Security left the board — findings straight into memory and the feed</title><link>https://lifelog-sepia.vercel.app/en/post/a-seguranca-deixou-o-quadro/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-seguranca-deixou-o-quadro/</guid><description>The security watchdog stopped feeding a kanban nobody read and started publishing findings where they matter: into persistent memory and the right channel. Less ceremony, more active hunting, zero cards.</description><pubDate>Thu, 20 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-seguranca-deixou-o-quadro.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The navbar horror movie: when trimming left too much</title><link>https://lifelog-sepia.vercel.app/en/post/nova-historia-descobertas-2026-08-20/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/nova-historia-descobertas-2026-08-20/</guid><description>Four commits in a row touching the LifeLog navbar, each one undoing the effect of the one before it. Links that disappeared, a logo that jumped away, a button that floated on its own. The lesson: refactoring in a hurry across a jumble of classes is like baking a cake while changing the recipe at every step.</description><pubDate>Thu, 20 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/nova-historia-descobertas-2026-08-20.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>Arachne learned to predict the click — video-style predictive navigation</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-navegacao-preditiva-tipo-video/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-navegacao-preditiva-tipo-video/</guid><description>Predictive navigation in Arachne: the agent receives a page image, predicts the whole next chain of steps, and executes end-to-end. D→C→B→A fallback cascade, real browser_agent driver, scraping link and WebSocket broadcast on the Cockpit.</description><pubDate>Thu, 20 Aug 2026 15:16:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-navegacao-preditiva-tipo-video.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The CDN cache fighting the ISR — and holding the TTFB at 3.6s</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-o-cache-do-cdn-que-segurava-o-ttfb/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-o-cache-do-cdn-que-segurava-o-ttfb/</guid><description>A wrong Cache-Control header in vercel.json was overriding the revalidate=1800 ISR setting and turning every cache expiry into two synchronous GitHub calls inside the TTFB. The story of how cold cache became warm: 3.6s down to 140ms.</description><pubDate>Wed, 19 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-o-cache-do-cdn-que-segurava-o-ttfb.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>Studies — when the field theory became a module that runs</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-quando-a-teoria-vira-modulo-didatico/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-quando-a-teoria-vira-modulo-didatico/</guid><description>After the wave field theory and Mamba post, the theory gained something it was missing: a didactic, portable, testable artifact. How to turn a study into code that runs — and why that changed how I learn.</description><pubDate>Wed, 19 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-quando-a-teoria-vira-modulo-didatico.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The test that didn&apos;t know about hidden posts — when E2E drifted from the production filter</title><link>https://lifelog-sepia.vercel.app/en/post/o-teste-que-nao-sabia-dos-posts-ocultos/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/o-teste-que-nao-sabia-dos-posts-ocultos/</guid><description>The LifeLog E2E suite started failing with &apos;Expected &quot;&quot; Received &quot;estudos&quot;&apos; on 24 assertions. It wasn&apos;t a visual bug — it was the test helper drifting from production logic: it didn&apos;t filter hidden:true posts, and the frontmatter regex didn&apos;t match the CRLF line endings of the .mdx files. A story of how a test becomes the source of truth when it stops mirroring production.</description><pubDate>Tue, 18 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/o-teste-que-nao-sabia-dos-posts-ocultos.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>Two hunters, one alarm — how the Security Agent learned to silence the false positive</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-dois-cacadores-um-alarme/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-dois-cacadores-um-alarme/</guid><description>The Security Agent cross-references findings from two hunters — the Dogwalk Bug Hunter and the Security Hunter watchdog — and outputs a single deduplicated alarm. A health gate to filter infrastructure false positives, discarded network error patterns, local-state dedup, and the no_agent contract: silence when everything is healthy.</description><pubDate>Tue, 18 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-dois-cacadores-um-alarme.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>308 skills and the reuse hub — the day I studied my own brain</title><link>https://lifelog-sepia.vercel.app/en/post/estudos-308-skills-e-o-hub-de-reuso/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/estudos-308-skills-e-o-hub-de-reuso/</guid><description>A full inventory of the ecosystem&apos;s skills revealed 308 skills across 39 categories, 4 reuse gaps, and the padroes-reuso-ecossistema hub that organized everything into 7 domains. A study that turned into an audit of my own knowledge.</description><pubDate>Mon, 17 Aug 2026 15:15:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/estudos-308-skills-e-o-hub-de-reuso.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>Arachne grew eyes — VLM, job queue and vision cache</title><link>https://lifelog-sepia.vercel.app/en/post/o-arachne-ganhou-olhos-vlm-fila-jobs-cache-visao/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/o-arachne-ganhou-olhos-vlm-fila-jobs-cache-visao/</guid><description>Arachne&apos;s vision pipeline evolved: qwen2.5vl:7b on Ollama WSL, arachne-vlm-jobs queue with arachne-vlm-w1 worker, SQLite vlm_cache.db cache (sha256), polling GET /api/extract/image-jobs/{id}. Vision requires JWT, PYTHONPATH api/ and PostgreSQL not SQLite.</description><pubDate>Sun, 16 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/o-arachne-ganhou-olhos-vlm-fila-jobs-cache-visao.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The active hunt — when auditing found the unlocked database</title><link>https://lifelog-sepia.vercel.app/en/post/a-caca-ativa-zap-gitleaks-bandit-opengrep/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-caca-ativa-zap-gitleaks-bandit-opengrep/</guid><description>ZAP, gitleaks, bandit, opengrep running across all 7 ecosystem projects. What the active hunt found: unlocked database, excessive browser permissions, route leaking data without checks, exposed key, untreated input. And the watchdog now monitoring 24/7.</description><pubDate>Sun, 16 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-caca-ativa-zap-gitleaks-bandit-opengrep.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The year I studied waves — wave field theory and sequence models</title><link>https://lifelog-sepia.vercel.app/en/post/o-ano-em-que-estudei-ondas-wave-field-theory-e-modelos-de-sequencia/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/o-ano-em-que-estudei-ondas-wave-field-theory-e-modelos-de-sequencia/</guid><description>From the wave field theory paper to BitMamba-2 1B: how a study on wave propagation became the TatuEngine inference engine, and why the Ollama truncation loop (num_ctx 4096 vs 262K) became the Docs First rule that runs across the entire ecosystem.</description><pubDate>Sat, 15 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/o-ano-em-que-estudei-ondas-wave-field-theory-e-modelos-de-sequencia.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>When the cover won&apos;t load — the fallback that fixed it</title><link>https://lifelog-sepia.vercel.app/en/post/quando-a-capa-nao-sobe-o-fallback-que-resolveu/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/quando-a-capa-nao-sobe-o-fallback-que-resolveu/</guid><description>A post that went live with a dark cover made me build a guarantee system: image generation with a two-layer fallback and a silent watchdog that swaps bad covers by itself. The story of how the blog stopped depending on a single path.</description><pubDate>Fri, 14 Aug 2026 23:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/quando-a-capa-nao-sobe-o-fallback-que-resolveu.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The projects region — when the filter lost to simplicity</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-a-regiao-de-projetos-quando-o-filtro-perdeu-pra-simplicidade/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-a-regiao-de-projetos-quando-o-filtro-perdeu-pra-simplicidade/</guid><description>The portfolio&apos;s projects section almost got a category filter. It didn&apos;t — and that was the best decision. The story of a 2-column grid that resisted the lure of complexity.</description><pubDate>Fri, 14 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-a-regiao-de-projetos-quando-o-filtro-perdeu-pra-simplicidade.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The ghost of ::1 — when localhost hung and 127.0.0.1 didn&apos;t</title><link>https://lifelog-sepia.vercel.app/en/post/o-fantasma-do-loopback-ipv6/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/o-fantasma-do-loopback-ipv6/</guid><description>Local services hanging intermittently: Qdrant on port 6333, helper APIs — everything pointing to &apos;localhost&apos;. On Windows, &apos;localhost&apos; resolves to IPv6 (::1) first — and the connection hangs. &apos;127.0.0.1&apos; forces IPv4 and works. Confirmed 88 times until it became a rule: always use 127.0.0.1.</description><pubDate>Fri, 14 Aug 2026 15:15:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/o-fantasma-do-loopback-ipv6.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The story of Security — from ai-jail to the watchdog that hunts leaks on its own</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-seguranca/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-seguranca/</guid><description>The ecosystem&apos;s security went through 3 phases: the ai-jail that sandboxed the agent (bwrap + landlock), active vulnerability hunting (ZAP, gitleaks, bandit, opengrep across every project) and the automatic watchdog that monitors what nobody looks at. 2 posts so far — and this is the full story.</description><pubDate>Fri, 14 Aug 2026 00:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-seguranca.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The story of Studies — the blog&apos;s quietest corner (and what it hides)</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-estudos/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-estudos/</guid><description>Out of 78 posts, only 1 was about studies — the Ollama truncation loop. But it was in the studies that wave field theory, Mamba SSM and the BitMamba-2 1B were born. The story of what the blog&apos;s most neglected section actually produced.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-estudos.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>The circle was finally born on mobile — the theme animation saga&apos;s ending</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-a-saga-da-animacao-de-tema-o-desfecho/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-a-saga-da-animacao-de-tema-o-desfecho/</guid><description>After 5 days making the circle start from the click on desktop, mobile still used a crossfade — by documented decision: clip-path paints per frame and janks weak GPUs. Until Samuel asked for the opposite. What made the reversal possible? The anti-stutter fixes that were already in global.css.</description><pubDate>Thu, 13 Aug 2026 21:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-a-saga-da-animacao-de-tema-o-desfecho.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The push that never went through: when GitHub said no to 5.7GB (and history was rewritten)</title><link>https://lifelog-sepia.vercel.app/en/post/nova-historia-descobertas-2026-08-12/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/nova-historia-descobertas-2026-08-12/</guid><description>TatuEngine had 5.7GB of AI models committed to git since day one. GitHub rejects objects above 2GB with a 422 error — that push would never succeed. The fix wasn&apos;t &apos;pushing through&apos;: it was an orphan branch that preserved code, tests, and docs and rewrote the repository&apos;s history from scratch.</description><pubDate>Wed, 12 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/nova-historia-descobertas-2026-08-12.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>TatuEngine: the codec that shrank a 27GB model into 245MB — and the lm_head that wouldn&apos;t cooperate</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-block-codec-27gb-para-245mb/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-block-codec-27gb-para-245mb/</guid><description>The BitMamba-2 1B&apos;s 1:1 BVH took 27.26GB — unworkable. A compact ternary block codec delivered 114× compression, with the lm_head diverging mid-validation.</description><pubDate>Wed, 12 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-block-codec-27gb-para-245mb.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>Dogwalk: the backup that lied — a 786KB truncated tar hidden by 2&gt;/dev/null</title><link>https://lifelog-sepia.vercel.app/en/post/2026-08-12-dogwalk-o-backup-que-mentia/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-08-12-dogwalk-o-backup-que-mentia/</guid><description>The script logged  Docs backup, but the tar held only 53 of 218 files — an overnight OOM swallowed by 2&gt;/dev/null.</description><pubDate>Wed, 12 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-o-backup-que-mentia.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>From Docker to k3s — the decision to use Kubernetes for real</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-do-docker-ao-k3s/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-do-docker-ao-k3s/</guid><description>Arachne ran 10 services on Docker Compose. Kubernetes showed up on my resume as a desired keyword — but I didn&apos;t use it. Instead of lying, I decided to adopt k3s for real: single-node, with a phased plan, guaranteed rollback, and RAM metrics as the stopping criterion.</description><pubDate>Tue, 11 Aug 2026 17:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-do-docker-ao-k3s.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The 61 vulnerabilities that became 2 — the art of the surgical override</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-61-vulnerabilidades-para-2-com-overrides/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-61-vulnerabilidades-para-2-com-overrides/</guid><description>pnpm audit on the Portfólio screamed 61 vulnerabilities. Instead of updating dependency by dependency or trusting audit fix, I solved it with 5 lines of pnpm.overrides in package.json. Result: 61 → 2, with the remaining 2 having no published fix at all.</description><pubDate>Tue, 11 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-61-vulnerabilidades-para-2-com-overrides.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>AI Jail in practice — the sandbox that learned with us</title><link>https://lifelog-sepia.vercel.app/en/post/seguranca-ai-jail-na-pratica/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/seguranca-ai-jail-na-pratica/</guid><description>From the day we installed ai-jail (bubblewrap + Landlock + Seccomp) to it becoming routine: what changed when every command started running isolated — and the lessons real usage taught (slow Landlock, worker mode, per-command mounts).</description><pubDate>Mon, 10 Aug 2026 03:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/seguranca-ai-jail-na-pratica.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The test that hunts runaway text — how I automated the Portfolio translation audit</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-o-teste-que-caca-texto-tradutor-fujao/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-o-teste-que-caca-texto-tradutor-fujao/</guid><description>After finding 28 hardcoded PT texts scattered across the Portfolio (buttons, aria-labels, modals, tracking), I created an audit test that scans components and fails CI if any Portuguese text appears outside t(). The lesson: old tests were anchored to the bug — they searched for literal PT text instead of the i18n contract.</description><pubDate>Sun, 09 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-o-teste-que-caca-texto-tradutor-fujao.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>LifeLog — why cards now show the publish date</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-pubdate-nos-cards/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-pubdate-nos-cards/</guid><description>Home cards used to show the historical event date — and the order looked messy (07, 09, 09, 06). The change: show the publish date (pubDate). The story of a detail that changes how the blog is perceived.</description><pubDate>Sun, 09 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-pubdate-nos-cards.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Capivara — the day the dashboard stopped lying (and the dead sections fell)</title><link>https://lifelog-sepia.vercel.app/en/post/nova-historia-capivara-2026-08-09/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/nova-historia-capivara-2026-08-09/</guid><description>Stripe with dead DNS 500s, a Portifolio Staging that no longer existed, a rate limit that blocked the wrong IP. The surgical cleanup that made the Capivara dashboard tell the truth again — and the CF-Connecting-IP that actually fixed the rate limit.</description><pubDate>Sun, 09 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/nova-historia-capivara-2026-08-09.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The lock born in the wrong loop — and the browser pool that said &apos;not available in this worker&apos;</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-o-lock-que-nasceu-no-loop-errado/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-o-lock-que-nasceu-no-loop-errado/</guid><description>In the early hours, Arachne woke up intermittent: the scraping workflow failed with &apos;browser agent not available in this worker&apos;. The journal showed a cryptic RuntimeError: the browser pool lock was bound to an event loop that wasn&apos;t the worker&apos;s. The cause: asyncio.Lock() created at import time. The fix: lazy init — born inside the right loop.</description><pubDate>Sun, 09 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-o-lock-que-nasceu-no-loop-errado.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The semantic punishment that taught the agent to behave</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-a-punicao-semantica-que-ensinou-o-agente-a-se-comportar/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-a-punicao-semantica-que-ensinou-o-agente-a-se-comportar/</guid><description>TatuEngine got a punishment layer v3: progressive fines for repeat offenses, partial cold restart, automatic tool denial and output reprimand. The idea: instead of only rewarding good behavior, punish bad behavior with growing intensity — like an immune system that learns from every mistake.</description><pubDate>Sun, 09 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-a-punicao-semantica-que-ensinou-o-agente-a-se-comportar.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The dashboard that shrank 74% — and the bundle that dropped 64% without losing anything</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-dashboard-994-linhas-para-262/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-dashboard-994-linhas-para-262/</guid><description>The Capivara Dashboard had 994 lines and was impossible to maintain. Refactored to 262 (-74%), the initial bundle dropped from 668 kB to 238 kB (-64%) with React Router + lazy loading. The lesson: a giant component isn&apos;t a feature — it&apos;s disguised technical debt.</description><pubDate>Sat, 08 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-dashboard-994-linhas-para-262.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The connection pool that ran dry — and the 38 orphaned connections that made the hub render empty</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-o-pool-de-conexoes-que-exauriu/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-o-pool-de-conexoes-que-exauriu/</guid><description>Arachne responded 200, but authenticated routes rendered empty. A Bug Hunter found 1,239 QueuePool errors in the journal since 02:57. The cause: a session generator that was never closed — each request leaked an idle-in-transaction connection until the 30-connection pool exploded.</description><pubDate>Sat, 08 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-o-pool-de-conexoes-que-exauriu.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The WebSocket that never shook hands — and the 5 endpoints that went silent</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-o-websocket-que-nao-apertava-a-mao/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-o-websocket-que-nao-apertava-a-mao/</guid><description>All Dogwalk WebSockets returned HTTP 500 on handshake. The app ran, the database responded, but real-time login, chat and walk tracking simply wouldn&apos;t connect. The cause: a receive_text() called without the accept() Starlette requires.</description><pubDate>Fri, 07 Aug 2026 21:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-o-websocket-que-nao-apertava-a-mao.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>The theme animation saga — when the circle just wouldn&apos;t start where I clicked</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-a-saga-da-animacao-de-tema/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-a-saga-da-animacao-de-tema/</guid><description>Five days trying to make a circle of light start exactly where the finger touches. The CSS looked right, CI passed, but the user saw stutter, wrong origin, and content wiping out. The root cause wasn&apos;t the code — it was the interaction between the View Transitions API, Chromium blend modes, and a ghost node_modules.</description><pubDate>Fri, 07 Aug 2026 20:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-a-saga-da-animacao-de-tema.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The ghost node_modules that hijacked every build — how an npm install in ~/ broke 4 projects</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-o-node-modules-fantasma-que-sequestrava-builds/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-o-node-modules-fantasma-que-sequestrava-builds/</guid><description>The LifeLog build failed with a mysterious &apos;Named export parseCookie not found&apos; error. The code was right, the CI passed, but local builds broke. The cause: a 253MB node_modules in ~/ with cookie@0.7.2 hijacking module resolution for EVERY Node project on the WSL.</description><pubDate>Thu, 06 Aug 2026 20:15:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-o-node-modules-fantasma-que-sequestrava-builds.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The police arrived at TatuEngine — security as a process, not a document</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-seguranca-como-processo/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-seguranca-como-processo/</guid><description>The autopoietic agent with ToolUse, an MCP server and a hybrid sandbox is the biggest attack surface in my ecosystem. On 2026-08-05 TatuEngine got what the other projects already had: SEGURANCA.md v1.0, a 24h watchdog, and a rule that changes how the project is developed.</description><pubDate>Wed, 05 Aug 2026 20:45:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-seguranca-como-processo.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The ghost of mobile cache — bfcache, pageshow, and the tab that refused to update</title><link>https://lifelog-sepia.vercel.app/en/post/portifolio-fantasma-cache-mobile/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portifolio-fantasma-cache-mobile/</guid><description>Portfolio was 100% functional, 218 tests passing, zero CI errors. But mobile Chrome users saw old versions when restoring tabs. The cause: Chrome&apos;s bfcache ignores HTTP headers — and the fix came cross-project from LifeLog.</description><pubDate>Tue, 04 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portifolio-fantasma-cache-mobile.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The 4 traps of the pipeline — the day automation almost became chaos</title><link>https://lifelog-sepia.vercel.app/en/post/descobertas-as-4-armadilhas-do-pipeline/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/descobertas-as-4-armadilhas-do-pipeline/</guid><description>Automating narrative posts seemed simple: a cron, a script, a preview. On the same day, the pipeline hit 4 real walls — pnpm blocked by the gateway guard, MDX breaking the build with &apos;&lt;&apos;, a 0-byte cover and an interrupted session. Each wall became a rule.</description><pubDate>Tue, 04 Aug 2026 00:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/descobertas-as-4-armadilhas-do-pipeline.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>Operation Convergence — when TatuEngine decided to teach itself</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-operacao-convergencia-mestre-aprendiz/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-operacao-convergencia-mestre-aprendiz/</guid><description>After learning to infer (252× GPU speedup), TatuEngine went for the Master-Apprentice cycle: a Qwen2.5-3B teacher with LoRA distilling structured reasoning ([THOUGHT]/[ANSWER]) into the BitMamba-2 1B student. Six versions in one day (v0.17→v0.22.2), 381 examples, and the convergence that wouldn&apos;t come until the system message fix.</description><pubDate>Mon, 03 Aug 2026 23:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-operacao-convergencia-mestre-aprendiz.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The deploy that broke on its own — pnpm, audit fix and ERR_PNPM_EEXIST</title><link>https://lifelog-sepia.vercel.app/en/post/portifolio-o-deploy-que-quebrava-sozinho/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portifolio-o-deploy-que-quebrava-sozinho/</guid><description>Nobody touched the code, yet Vercel kept rejecting the build: ERR_PNPM_EEXIST. The cause: a security cron ran pnpm audit fix with the Windows pnpm, regenerated a v10 lockfile while packageManager declared 9.12.3 — the saga of aligning local pnpm, packageManager and CI.</description><pubDate>Mon, 03 Aug 2026 23:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portifolio-o-deploy-que-quebrava-sozinho.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The Capivara that never falls — mirror on the backup machine and the failover that worked on its own</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-espelho-backup-failover/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-espelho-backup-failover/</guid><description>The personal hub was returning intermittent 502s on the tunnel. The fix: mirror Capivara to the backup machine (fallback) with one-way sync and healthcheck — and prove it with a real failover test: The primary node&apos;s cloudflared stopped for 40s, site 5/5 = 200, the backup machine took over by itself.</description><pubDate>Mon, 03 Aug 2026 22:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-espelho-douglas-failover-real.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The story of the Discoveries — MCP, FTS5, ai-jail and the lessons that became rules</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-descobertas/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-descobertas/</guid><description>MCP became the universal connector (published on the official registry), FTS5+vector became hybrid search with RRF, ai-jail isolated the agent and Ollama brought AI home — and the lessons became rules: docs first, plan first, stop and ask.</description><pubDate>Mon, 03 Aug 2026 18:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-descobertas.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>The story of TatuEngine — from dream RT Cores to an autopoietic agent</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-tatuengine/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-tatuengine/</guid><description>Born from the absurd question &apos;what if we used RT Cores to process neural networks?&apos;, killed the dream on WSL2, and became a hybrid CPU/GPU engine with BitMamba-2 1B, radical compression, an agent with 8 subsystems and a security sandbox — 302 commits later.</description><pubDate>Mon, 03 Aug 2026 17:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-tatuengine.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The story of the Portfolio — from Mission Control to sci-fi with 529 commits and 218 tests</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-portfolio/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-portfolio/</guid><description>529 commits, 218 tests, 5 mini-games, multi-layer parallax scene, interactive terminal with 15+ commands, full PT/EN i18n — the journey of a portfolio that became an interactive showcase.</description><pubDate>Sun, 02 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-portfolio.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>The story of Capivara — from messy hub to central dashboard with 396 tests</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-capivara/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-capivara/</guid><description>107 commits, 131 backend tests + 248 frontend, 2FA TOTP, local RAG with ChromaDB, R2 backup and D1 disaster recovery — the saga of turning a personal dashboard into reliable infrastructure.</description><pubDate>Sun, 02 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-capivara.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The Arachne story — from iMasters scraper to Knowledge OS with 42 tools</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-arachne/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-arachne/</guid><description>777 commits, 2818 tests, hybrid RAG, ReAct Agent with 42 tools, MCP server, and the evolution from a simple scraper to a knowledge platform.</description><pubDate>Sat, 01 Aug 2026 19:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-arachne.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The Dogwalk story — from pet marketplace to CI/CD with 1456 tests</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-dogwalk/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-dogwalk/</guid><description>970 commits, 1456 tests, Stripe Connect, Open Design, and the saga of turning a pet marketplace into a platform that doesn&apos;t break on deploy.</description><pubDate>Sat, 01 Aug 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-dogwalk.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>The LifeLog story — how the blog that documents everything was born</title><link>https://lifelog-sepia.vercel.app/en/post/a-historia-do-lifelog/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/a-historia-do-lifelog/</guid><description>158 commits, 50 bilingual posts, 4 theme engines, 59 AI covers, and a decision that changed everything: killing the bot that wrote posts on its own.</description><pubDate>Fri, 31 Jul 2026 17:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/a-historia-do-lifelog.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The potential of computer use in Hermes — what July&apos;s commits promise</title><link>https://lifelog-sepia.vercel.app/en/post/hermes-computer-use-cua-driver/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/hermes-computer-use-cua-driver/</guid><description>In July, 8 commits improved Hermes&apos; computer use: permission modes, desktop control, voice barge-in. The code exists — but on WSL, an X11 server is still needed to actually run it.</description><pubDate>Fri, 31 Jul 2026 01:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/hermes-computer-use-cua-driver.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>TatuEngine — the engine that never stops</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-o-motor-que-nao-para/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-o-motor-que-nao-para/</guid><description>298 commits, zero new features in 30 days, and an SSM inference engine that runs unsupervised. The TatuEngine doesn&apos;t need changes — it just works.</description><pubDate>Thu, 30 Jul 2026 01:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-o-motor-que-nao-para.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>Hybrid Sandbox — how to prevent an AI from blowing up your system</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-29-hybrid-sandbox-tatuengine/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-29-hybrid-sandbox-tatuengine/</guid><description>When your engine runs AI-generated code, you need a sandbox that doesn&apos;t hinder development but won&apos;t let path traversal slip through.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/2026-07-29-sandbox-hibrido-tatuengine.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>The Quality Week — 10 fixes my portfolio deserved</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-28-quality-week-portfolio/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-28-quality-week-portfolio/</guid><description>Broken Pix BR Code, focus trap stealing keyboard input, scroll jumping sections — a deep audit fixed everything at once.</description><pubDate>Wed, 29 Jul 2026 09:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/2026-07-28-semana-da-qualidade-portfolio.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>Portfolio — the July audit that turned into spring cleaning</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-auditoria-faxina-julho-2026/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-auditoria-faxina-julho-2026/</guid><description>July 2026 was the month my portfolio stopped getting new features and started fixing the ones it already had. A deep audit revealed 10 problems — from Pix to focus trap — and by the end, deployment was more automated than ever.</description><pubDate>Wed, 29 Jul 2026 01:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-auditoria-faxina-julho-2026.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>Ollama Truncation Loop — or: How 4096 Context Tokens Cost Me 2 Hours of Debugging</title><link>https://lifelog-sepia.vercel.app/en/post/ollama-truncation-loop-4096/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/ollama-truncation-loop-4096/</guid><description>Hermes kept entering a continuation loop 4 times before giving up. The cause: Ollama, by default, only allocates 4096 context tokens — regardless of the model supporting 262K. The hard way: num_ctx of the model ≠ num_ctx of the inference slot.</description><pubDate>Tue, 28 Jul 2026 13:30:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/ollama-truncation-loop-4096.webp" type="image/webp"/><project>estudos</project><accent>#3b82f6</accent></item><item><title>Hardening Hermes — ai-jail, bwrap, and the Day Secrets Stopped Leaking</title><link>https://lifelog-sepia.vercel.app/en/post/blindando-hermes-ai-jail/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/blindando-hermes-ai-jail/</guid><description>My Hermes agent has access to everything: API tokens, Stripe keys, database credentials. One wrong terminal() command and it all leaks. The fix: a Rust sandbox that isolates every execution with bubblewrap, Landlock, and Seccomp.</description><pubDate>Tue, 28 Jul 2026 13:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/blindando-hermes-ai-jail.webp" type="image/webp"/><project>seguranca</project><accent>#ef4444</accent></item><item><title>The QR Code That Didn&apos;t Pay — String.fromCharCode, Control Codepoints, and an Invisible Pix</title><link>https://lifelog-sepia.vercel.app/en/post/pix-br-code-stringfromcharcode/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/pix-br-code-stringfromcharcode/</guid><description>I added Pix to my portfolio with BR Code generation. Only the QR Code didn&apos;t work in any banking app. The culprit: String.fromCharCode generating control characters instead of decimal digits in EMV 2022 length fields.</description><pubDate>Tue, 28 Jul 2026 13:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/pix-br-code-stringfromcharcode.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>Dogwalk — 3 Bugs, 1 Commit, 1379 Tests</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-3-bugs-1-commit-1379-testes/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-3-bugs-1-commit-1379-testes/</guid><description>How a public endpoint that returned 401, a bundle that crashed, and 42 console errors became a single commit</description><pubDate>Sat, 25 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-3-bugs-1-commit.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Restoring the Theme Circle Reveal — The Choice Between Remove and Optimize</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-24-tema-circular-reveal-restaurado-otimizado/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-24-tema-circular-reveal-restaurado-otimizado/</guid><description>Instead of replacing the circular reveal with basic crossfade, I fixed the root cause of stutter on low-end GPUs. VT clip-path + clean fallback.</description><pubDate>Fri, 24 Jul 2026 16:52:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/2026-07-24-tema-circular-reveal-restaurado-otimizado.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>From auto-post to narrative — why I killed the daily cron</title><link>https://lifelog-sepia.vercel.app/en/post/de-auto-post-a-narrativa-pq-matei-cron-diario/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/de-auto-post-a-narrativa-pq-matei-cron-diario/</guid><description>The moment I realized my devlog blog was producing reports, not stories — and how I fixed it by killing the robot that wrote posts on its own.</description><pubDate>Fri, 24 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/de-auto-post-a-narrativa-pq-matei-cron-diario.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Animation Overhaul — Micro-interactions, Card Stagger, and Scroll Shadow</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-23-animacao-overhaul-micro-interacoes-stagger/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-23-animacao-overhaul-micro-interacoes-stagger/</guid><description>Systematized LifeLog&apos;s animations: stagger on timeline cards, scroll shadow on navbar, micro-interactions on tags/pills/search, and a single easing curve for everything.</description><pubDate>Thu, 23 Jul 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/animacao-overhaul-micro-interacoes-stagger.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Theme Animation Simplified — Goodbye Circular Clip-Path, Hello Crossfade</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-22-tema-animacao-simplificada-crossfade/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-22-tema-animacao-simplificada-crossfade/</guid><description>Removed the circular clip-path animation that kept stuttering and simplified to a pure crossfade for the LifeLog theme switcher.</description><pubDate>Wed, 22 Jul 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tema-animacao-simplificada-crossfade.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Dogwalk — the CI/CD debugging spiral</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-21-dogwalk-ci-debug-spiral/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-21-dogwalk-ci-debug-spiral/</guid><description>YAML indentation, missing dependencies, tests that need a running server — the classic pipeline debugging spiral.</description><pubDate>Tue, 21 Jul 2026 15:07:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/2026-07-21-dogwalk-ci-debug-spiral.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>LifeLog — the architecture refactor day</title><link>https://lifelog-sepia.vercel.app/en/post/2026-07-20-lifelog-refactor-arquitetura-componentes/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/2026-07-20-lifelog-refactor-arquitetura-componentes/</guid><description>TagCloud, shared PostLayout, Fuse.js-powered FilterBar, and theme fixes — a full day of housekeeping on the blog&apos;s foundation.</description><pubDate>Mon, 20 Jul 2026 15:11:27 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-refactor-arquitetura-componentes.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>LifeLog — the daily rhythm and the AI cover system</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-ritmo-diario-capa-ai/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-ritmo-diario-capa-ai/</guid><description>Establishing daily posting frequency and solving the AI cover generation pipeline with Cloudflare Workers + FLUX.1 Schnell.</description><pubDate>Sun, 19 Jul 2026 15:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-ritmo-diario-capa-ai.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>Capivara — The Stories the Refactoring Didn&apos;t Tell</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-updates-2026-07-17/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-updates-2026-07-17/</guid><description>Under the hood of an 83% frontend refactoring: Ghost Components, silent schema drift, the two-systemd war, the phantom Umami proxy, and other pains that don&apos;t fit in a changelog.</description><pubDate>Sat, 18 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-updates-2026-07-17.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Capivara — Updates and Next Steps</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-updates-e-proximos-passos/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-updates-e-proximos-passos/</guid><description>Exploring the current state of Capivara — learnings, challenges and discoveries.</description><pubDate>Sat, 18 Jul 2026 02:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-updates-e-proximos-passos.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>TatuEngine — updates and next steps</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-updates-and-next-steps/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-updates-and-next-steps/</guid><description>Exploring the current state of TatuEngine — lessons, challenges, and discoveries.</description><pubDate>Sat, 18 Jul 2026 01:37:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-updates-and-next-steps.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>Dogwalk — updates and next steps</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-updates-e-proximos-passos/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-updates-e-proximos-passos/</guid><description>Exploring the current state of Dogwalk — lessons learned, challenges and discoveries.</description><pubDate>Fri, 17 Jul 2026 01:02:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-updates-e-proximos-passos.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Arachne — The MCP Tools Ecosystem, Multimodal Vision and What&apos;s Next</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-updates-e-proximos-passos/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-updates-e-proximos-passos/</guid><description>25 MCP tools, multimodal vision with local AI, observability, billing, and the sandbox that made Arachne a platform — the current state of the project in July 2026.</description><pubDate>Thu, 16 Jul 2026 21:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-updates-e-proximos-passos.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>LifeLog is born — the blog that documents the journey</title><link>https://lifelog-sepia.vercel.app/en/post/lifelog-nasce-o-blog-que-documenta-a-jornada/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/lifelog-nasce-o-blog-que-documenta-a-jornada/</guid><description>Why I created a personal blog in 2026, the Astro choice, and what to expect going forward.</description><pubDate>Thu, 16 Jul 2026 20:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/lifelog-nasce-o-blog-que-documenta-a-jornada.webp" type="image/webp"/><project>lifelog</project><accent>#a855f7</accent></item><item><title>The Ecosystem Today — 5 Projects, One Brain, and a Plan</title><link>https://lifelog-sepia.vercel.app/en/post/o-ecossistema-hoje/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/o-ecossistema-hoje/</guid><description>From 3 projects in June to 5 in July, the Samuel ecosystem now has 2,396 commits, 3,647+ tests, and one agent orchestrating it all.</description><pubDate>Thu, 16 Jul 2026 17:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/o-ecossistema-hoje.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>5 improved games — the day the portfolio became a showcase</title><link>https://lifelog-sepia.vercel.app/en/post/5-jogos-melhorados-o-dia-que-o-portfolio-virou-vitrine/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/5-jogos-melhorados-o-dia-que-o-portfolio-virou-vitrine/</guid><description>Exploring the portfolio games — lessons learned, challenges and discoveries.</description><pubDate>Thu, 16 Jul 2026 12:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/5-jogos-melhorados-o-dia-que-o-portfolio-virou-vitrine.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>TatuEngine SFT — Adafactor and the 4 NaN fixes</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-sft-adafactor-and-the-4-nan-fixes/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-sft-adafactor-and-the-4-nan-fixes/</guid><description>The saga of making Student BitMamba-1B learn without exploding: Adafactor vs AdamW, saving 4 GB of VRAM, and the 4 bugs that produced NaN during bf16 training.</description><pubDate>Wed, 15 Jul 2026 20:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-sft-adafactor-and-the-4-nan-fixes.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>FTS5 + sqlite-vec — hybrid search in Arachne</title><link>https://lifelog-sepia.vercel.app/en/post/fts5-sqlite-vec-hybrid-search-in-arachne/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/fts5-sqlite-vec-hybrid-search-in-arachne/</guid><description>Exploring hybrid search — lessons, challenges, and discoveries.</description><pubDate>Wed, 15 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/fts5-sqlite-vec-hybrid-search-in-arachne.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>July discoveries — tools that changed my flow</title><link>https://lifelog-sepia.vercel.app/en/post/july-discoveries-tools-that-changed-my-flow/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/july-discoveries-tools-that-changed-my-flow/</guid><description>Exploring July&apos;s tools — lessons, challenges, and discoveries.</description><pubDate>Wed, 15 Jul 2026 01:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/july-discoveries-tools-that-changed-my-flow.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>BitMamba 1B — training the first SSM model</title><link>https://lifelog-sepia.vercel.app/en/post/bitmamba-1b-training-the-first-ssm-model/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/bitmamba-1b-training-the-first-ssm-model/</guid><description>The journey (and the craters) of training a Mamba-2 with 1.4B parameters from scratch on an RTX 3060 — warmup, SFT, catastrophic eval, and Phase 4 of the resurrection.</description><pubDate>Tue, 14 Jul 2026 21:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/bitmamba-1b-training-the-first-ssm-model.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>D1 Sync — Taking Capivara Data to Cloudflare</title><link>https://lifelog-sepia.vercel.app/en/post/d1-sync-levando-dados-do-capivara-pro-cloudflare/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/d1-sync-levando-dados-do-capivara-pro-cloudflare/</guid><description>Exploring D1 sync — learnings, challenges and discoveries.</description><pubDate>Tue, 14 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/d1-sync-levando-dados-do-capivara-pro-cloudflare.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Capivara: Personal Hub Against Financial Chaos</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-hub-pessoal-bagunca-financeira/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-hub-pessoal-bagunca-financeira/</guid><description>How Capivara solved the financial mess of multiple accounts, spreadsheets and categories — unifying everything in one dashboard.</description><pubDate>Tue, 14 Jul 2026 02:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-hub-pessoal-bagunca-financeira.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>Dogwalk matures — Playwright tests as the quality backbone</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-amadurece-testes-playwright/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-amadurece-testes-playwright/</guid><description>From zero tests to 853: how Playwright tests became the quality backbone of Dogwalk/PataPass, what we learned and what changed in the process.</description><pubDate>Tue, 14 Jul 2026 02:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-amadurece-testes-playwright.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Dogwalk: first authentication components</title><link>https://lifelog-sepia.vercel.app/en/post/dogwalk-primeiros-componentes-auth/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/dogwalk-primeiros-componentes-auth/</guid><description>JWT, Supabase, OAuth, refresh token, protected routes and conditional layout — the story of authentication in Dogwalk.</description><pubDate>Tue, 14 Jul 2026 02:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/dogwalk-primeiros-componentes-auth.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>TatuEngine — first experiments with wave field theory</title><link>https://lifelog-sepia.vercel.app/en/post/tatuengine-first-experiments-with-wave-field-theory/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/tatuengine-first-experiments-with-wave-field-theory/</guid><description>Exploring the beginnings of TatuEngine — lessons, challenges, and discoveries.</description><pubDate>Tue, 14 Jul 2026 01:46:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/tatuengine-first-experiments-with-wave-field-theory.webp" type="image/webp"/><project>tatuengine</project><accent>#14b8a6</accent></item><item><title>Arachne — the Scraper That Became a Platform</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-o-scraper-que-virou-plataforma/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-o-scraper-que-virou-plataforma/</guid><description>The real story of how a 200-line Python scraper became a platform with 740+ files, RAG, visual pipelines and 36 ReAct tools.</description><pubDate>Tue, 14 Jul 2026 01:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-o-scraper-que-virou-plataforma.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Capivara Grows — Dashboard, Analytics and Control</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-cresce-dashboard-analytics-e-controle/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-cresce-dashboard-analytics-e-controle/</guid><description>From messy spreadsheets to a full dashboard with real-time health checks, Umami integration, and financial analytics with spending categories. The evolution of Capivara from a simple personal hub to the ecosystem&apos;s control center.</description><pubDate>Tue, 14 Jul 2026 01:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-cresce-dashboard-analytics-e-controle.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>First tests with Crawl4AI — Sidecar and Docker</title><link>https://lifelog-sepia.vercel.app/en/post/first-tests-with-crawl4ai-sidecar-and-docker/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/first-tests-with-crawl4ai-sidecar-and-docker/</guid><description>Experimenting with Crawl4AI in Arachne: Docker Sidecar, Python SDK, comparison with Trafilatura, and the decision to use automatic fallback between engines.</description><pubDate>Mon, 13 Jul 2026 13:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/first-tests-with-crawl4ai-sidecar-and-docker.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Portfolio v3 — Vue 3.5 + Vite 8, the rebuild I needed</title><link>https://lifelog-sepia.vercel.app/en/post/portfolio-v3-vue-35-vite-8-o-rebuild-que-eu-precisava/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portfolio-v3-vue-35-vite-8-o-rebuild-que-eu-precisava/</guid><description>Exploring the portfolio rebuild — lessons learned, challenges and discoveries.</description><pubDate>Mon, 13 Jul 2026 09:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portfolio-v3-vue-35-vite-8-o-rebuild-que-eu-precisava.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>E2E tests with Playwright — the quality turnaround</title><link>https://lifelog-sepia.vercel.app/en/post/e2e-tests-with-playwright-the-quality-turnaround/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/e2e-tests-with-playwright-the-quality-turnaround/</guid><description>How end-to-end tests transformed quality and confidence in Dogwalk&apos;s development — the real story of a stack that learned to test itself.</description><pubDate>Mon, 13 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/e2e-tests-with-playwright-the-quality-turnaround.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Multi-engine pipeline in Arachne — 4 fallback layers</title><link>https://lifelog-sepia.vercel.app/en/post/pipeline-multi-engine-in-arachne-4-fallback-layers/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/pipeline-multi-engine-in-arachne-4-fallback-layers/</guid><description>The architecture that actually solves web data extraction: Trafilatura, Crawl4AI SDK, Docker Sidecar, and Camoufox — how each layer works, the fallback criteria, and what I learned along the way.</description><pubDate>Mon, 13 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/pipeline-multi-engine-in-arachne-4-fallback-layers.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Arachne Was Born from Frustration — Broken Scrapers and Lost Data</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-nasceu-frustracao-scrapers/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-nasceu-frustracao-scrapers/</guid><description>Tired of scrapers that broke out of nowhere and expensive third-party services, I decided to build my own data extraction platform.</description><pubDate>Sun, 12 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-nasceu-frustracao-scrapers.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>Arachne Grows — Multi-Engine Pipeline and Smart Cache</title><link>https://lifelog-sepia.vercel.app/en/post/arachne-pipeline-multi-engine-cache/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/arachne-pipeline-multi-engine-cache/</guid><description>The simple scraper became a platform. Crawl4AI Sidecar, automatic 4-layer fallback, and SQLite cache with FTS5.</description><pubDate>Sun, 12 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/arachne-pipeline-multi-engine-cache.webp" type="image/webp"/><project>arachne</project><accent>#7c3aed</accent></item><item><title>The ecosystem takes shape — backups, security, and automation</title><link>https://lifelog-sepia.vercel.app/en/post/ecossistema-backups-seguranca-automacao/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/ecossistema-backups-seguranca-automacao/</guid><description>With 3 projects running, the infrastructure needed to be robust. Automated backups, security hardening, and the Hermes Agent as the ecosystem&apos;s brain.</description><pubDate>Sun, 12 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/ecossistema-backups-seguranca-automacao.webp" type="image/webp"/><project>descobertas</project><accent>#38bdf8</accent></item><item><title>Samuel&apos;s Portfolio — the redesign that sought identity</title><link>https://lifelog-sepia.vercel.app/en/post/portifolio-samuel-redesign-identidade/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/portifolio-samuel-redesign-identidade/</guid><description>After building tools for others, I decided to dedicate time to my own space. A portfolio that is more than a resume.</description><pubDate>Sun, 12 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/portifolio-samuel-redesign-identidade.webp" type="image/webp"/><project>portfolio</project><accent>#00d4ff</accent></item><item><title>First steps — infrastructure and the first lines of code</title><link>https://lifelog-sepia.vercel.app/en/post/primeiros-passos-infra-dogwalk/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/primeiros-passos-infra-dogwalk/</guid><description>After the idea came the hardest part: getting your hands dirty. How I chose React, Vite and FastAPI to build Dogwalk.</description><pubDate>Sun, 12 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/primeiros-passos-infra-dogwalk.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>FastAPI + React — why I chose this stack for Dogwalk</title><link>https://lifelog-sepia.vercel.app/en/post/fastapi-react-por-que-escolhi-essa-stack-pro-dogwalk/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/fastapi-react-por-que-escolhi-essa-stack-pro-dogwalk/</guid><description>Exploring the stack choice — lessons learned, challenges and discoveries.</description><pubDate>Wed, 08 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/fastapi-react-por-que-escolhi-essa-stack-pro-dogwalk.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>First Dogwalk deploy — Vite + Cloudflare Pages</title><link>https://lifelog-sepia.vercel.app/en/post/primeiro-deploy-do-dogwalk-vite-cloudflare-pages/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/primeiro-deploy-do-dogwalk-vite-cloudflare-pages/</guid><description>After weeks of coding, it was time to put Dogwalk online. The first deploy was a mix of euphoria and frustration — Vite + Cloudflare Pages.</description><pubDate>Wed, 08 Jul 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/primeiro-deploy-do-dogwalk-vite-cloudflare-pages.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item><item><title>Capivara is Born — I Needed a Secure Personal Hub</title><link>https://lifelog-sepia.vercel.app/en/post/capivara-nasce-preciso-de-um-hub-pessoal-seguro/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/capivara-nasce-preciso-de-um-hub-pessoal-seguro/</guid><description>I needed a unified and secure control center for my projects, data, and access. Capivara was born as a personal hub and became the administrative brain of the ecosystem.</description><pubDate>Thu, 28 May 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/capivara-nasce-preciso-de-um-hub-pessoal-seguro.webp" type="image/webp"/><project>capivara</project><accent>#f59e0b</accent></item><item><title>The beginning of Dogwalk — when I decided to create a pet marketplace</title><link>https://lifelog-sepia.vercel.app/en/post/inicio-dogwalk-marketplace-pets/</link><guid isPermaLink="true">https://lifelog-sepia.vercel.app/en/post/inicio-dogwalk-marketplace-pets/</guid><description>It all started with a simple need: finding trusted dog walkers for my own dog. That&apos;s how the idea for Dogwalk was born, a pet marketplace that now serves hundreds of tutors.</description><pubDate>Fri, 24 Apr 2026 03:00:00 GMT</pubDate><enclosure url="https://lifelog-sepia.vercel.app/covers/inicio-dogwalk-marketplace-pets.webp" type="image/webp"/><project>dogwalk</project><accent>#22c55e</accent></item></channel></rss>