<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Rossmel Abasto&apos;s blog</title><description>Notes on what I build: frontend, fullstack, AI and Linux.</description><link>https://portfolio.rossmel.com/</link><language>en-us</language><item><title>From 13 GB to 2.7 GB: choosing format and resolution for scanned manga</title><link>https://portfolio.rossmel.com/en/blog/manga-13-gb-to-2-7-gb/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/manga-13-gb-to-2-7-gb/</guid><description>A series of scanned manga weighed 800 MB per volume. I compared JPEG, WebP and AVIF on real pages, found the point where the screentone breaks down and brought it to a fifth of the size.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><category>homelab</category><category>python</category><category>performance</category></item><item><title>transcribe: from one voice note to an open-source terminal tool</title><link>https://portfolio.rossmel.com/en/blog/transcribe-local-transcription-in-the-terminal/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/transcribe-local-transcription-in-the-terminal/</guid><description>I needed to turn a voice note into text without uploading it anywhere. That same night the ten-line script became an interactive CLI with subtitles, tests and an MIT license.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><category>python</category><category>ai</category><category>open-source</category><category>cli</category></item><item><title>Notebook: my notes as a chat with myself, now open source</title><link>https://portfolio.rossmel.com/en/blog/notebook-notes-with-memory/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/notebook-notes-with-memory/</guid><description>It started as a two-day experiment so I would stop losing my university notes. Two months later I rebuilt it measuring everything, kept it running for free and released the code under the MIT license.</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>ai</category><category>rag</category><category>open-source</category><category>node</category></item><item><title>Your own Netflix at home: a media center with Jellyfin, Docker and secure access</title><link>https://portfolio.rossmel.com/en/blog/home-media-center-with-jellyfin/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/home-media-center-with-jellyfin/</guid><description>How I built Selflix, my Jellyfin media center on a modest home server: Docker, the folder structure Jellyfin expects, access from outside without opening ports, per-person accounts and the pitfalls that cost me hours.</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><category>homelab</category><category>linux</category><category>docker</category></item><item><title>Long-running LLM jobs: multiple providers, a resumable queue and live progress</title><link>https://portfolio.rossmel.com/en/blog/long-running-llm-jobs/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/long-running-llm-jobs/</guid><description>Analyzing a contract clause by clause can take minutes. In AdvAI I solved it with a model pool that respects each provider&apos;s limits, a worker that survives restarts and Server-Sent Events to show progress.</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>llm</category><category>python</category><category>backend</category></item><item><title>An AI agent that runs my server: memory in files and skills as procedures</title><link>https://portfolio.rossmel.com/en/blog/an-ai-agent-that-runs-my-server/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/an-ai-agent-that-runs-my-server/</guid><description>My homelab is maintained by an agent (OpenClaw) running 24/7. What makes it reliable isn&apos;t the model: it&apos;s memory written in Markdown, explicit red lines and procedures with success criteria. Here&apos;s how I organized it.</description><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>linux</category></item><item><title>Anonymizing a contract before sending it to an LLM (without another LLM)</title><link>https://portfolio.rossmel.com/en/blog/anonymizing-contracts-before-calling-an-llm/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/anonymizing-contracts-before-calling-an-llm/</guid><description>In AdvAI no name, ID number or tax ID leaves the machine: a rule-based anonymizer swaps them for stable placeholders and the system restores them in the answer. How it works and why I didn&apos;t use AI for it.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>llm</category><category>privacy</category><category>python</category></item><item><title>Thesis PDFs: extracting data with AI without trusting it with everything, and showing them without eating all the RAM</title><link>https://portfolio.rossmel.com/en/blog/thesis-pdfs-ai-extraction-and-memory/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/thesis-pdfs-ai-extraction-and-memory/</guid><description>In SGPG, my university&apos;s thesis management system, every PDF is processed in the browser: deterministic rules where possible, an LLM where it pays off and heuristic fallbacks. Plus a viewer that only draws the visible pages.</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>llm</category><category>nextjs</category><category>performance</category></item><item><title>Switching bootloaders without fear: test Limine once with BootNext</title><link>https://portfolio.rossmel.com/en/blog/switching-bootloaders-without-fear/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/switching-bootloaders-without-fear/</guid><description>For rOS, my flavor of Arch, I replaced GRUB with Limine without risking the boot: install it side by side, test it on a single reboot and promote it only if it works. Idempotent scripts, pacman hooks and atomic copies to the ESP.</description><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><category>linux</category></item><item><title>Truly offline-first: a water billing app with Electron and SQLite</title><link>https://portfolio.rossmel.com/en/blog/offline-first-electron-sqlite/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/offline-first-electron-sqlite/</guid><description>Link&apos;u records meter readings and issues bills for a rural community where the internet isn&apos;t guaranteed. SQLite as the source of truth, all logic in the main process, rates frozen on every bill and AES-256-GCM encrypted backups.</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><category>electron</category><category>react</category><category>security</category></item><item><title>A citizen report map with react-leaflet (and how I&apos;d rewrite it today)</title><link>https://portfolio.rossmel.com/en/blog/citizen-report-map-with-react-leaflet/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/citizen-report-map-with-react-leaflet/</guid><description>At the Hackacom 2023 hackathon we built Canasta: a map where neighbors report problems in the city and others join in to fix them. I go over the real code, the classic Leaflet icon bug and what I&apos;d change three years later.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><category>react</category><category>frontend</category></item><item><title>Coding before and after AI: what years of doing it by hand left me</title><link>https://portfolio.rossmel.com/en/blog/coding-before-and-after-ai/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/coding-before-and-after-ai/</guid><description>I learned the old-school way, and we only brought AI into our work during my last year at WANT. What changed, what didn&apos;t, and how I decide when to let AI move fast and when to review with a magnifying glass.</description><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>career</category></item><item><title>How I stopped an LLM from inventing articles of the Civil Code</title><link>https://portfolio.rossmel.com/en/blog/stopping-an-llm-from-inventing-legal-citations/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/stopping-an-llm-from-inventing-legal-citations/</guid><description>In AdvAI, my capstone project, the model doesn&apos;t write legal citations: it only picks from real sources and the system inserts the verbatim text. That&apos;s how I went from &quot;sounds right&quot; to verifiable citations.</description><pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>llm</category><category>rag</category><category>python</category></item><item><title>How I built this portfolio: one file for the website, the resume and two languages</title><link>https://portfolio.rossmel.com/en/blog/portfolio-and-resume-from-one-file/</link><guid isPermaLink="true">https://portfolio.rossmel.com/en/blog/portfolio-and-resume-from-one-file/</guid><description>This site and my PDF resume come from the same data file. Astro, GSAP animations driven by attributes, a WebGL shader with a CSS plan B, a resume that passes ATS filters and a subdomain solved with 10 lines at the edge.</description><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate><category>frontend</category><category>performance</category></item></channel></rss>