<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Arnau Lafuente · Blog</title><description>Arnau Lafuente&apos;s portfolio: freelance developer specialised in games, simulators and prototypes. Seven years building automotive simulators with Unity, Unreal and CAN bus.</description><link>https://arlaf.dev/</link><language>en-US</language><item><title>The local web UI: FastAPI inside the app</title><link>https://arlaf.dev/en/blog/ui-web-local/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/ui-web-local/</guid><description>A physical knob would be optimal. Building one, not. I put the UI in the browser and made it reachable from any device on the LAN.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>frontend</category><category>fastapi</category><category>react</category><category>websocket</category></item><item><title>The trip becomes a blog</title><link>https://arlaf.dev/en/blog/el-viatge-es-fa-blog/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/el-viatge-es-fa-blog/</guid><description>The blog used to be flat text you read once and forgot. The recall mode turns it into the trip&apos;s artifact: editable blocks, your own photos, and a PDF you can take with you.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>blog</category><category>editor</category><category>media</category><category>pdf</category></item><item><title>Identity: spectrum R/G/B/W</title><link>https://arlaf.dev/en/blog/identitat-spectrum/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/identitat-spectrum/</guid><description>The name took longer to surface than the architecture. When it did, everything fell into place — even the brand colors.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>marca</category><category>identitat</category><category>colors</category><category>tipografia</category></item><item><title>Observing without seeing the user</title><link>https://arlaf.dev/en/blog/observar-sense-veure/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/observar-sense-veure/</guid><description>I need to know what broke. I don&apos;t need to know whose screen broke. That distinction defines the entire observability layer.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>observability</category><category>sentry</category><category>privacy</category></item><item><title>BMAD: plan before writing code</title><link>https://arlaf.dev/en/blog/bmad-i-branches/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/bmad-i-branches/</guid><description>If I just write code, I lose the thread by week three. If I over-plan, I lose it sooner. I had to learn to plan without drowning in planning.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>procés</category><category>bmad</category><category>git</category><category>branches</category></item><item><title>Three repos, one promise</title><link>https://arlaf.dev/en/blog/tres-repos-una-promesa/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/tres-repos-una-promesa/</guid><description>Three modes in the product; three repos in the code. Not a coincidence. The same instinct applied twice: separate the things that move at different speeds.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>architecture</category><category>repos</category><category>bmad</category></item><item><title>Host architecture: events, settings, scheduler</title><link>https://arlaf.dev/en/blog/arquitectura-python/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/arquitectura-python/</guid><description>Three decisions changed how I think about this host. None is dramatic on its own. Together, they make all the difference.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>python</category><category>arquitectura</category><category>eventbus</category><category>scheduler</category></item><item><title>Fuel: real data over the map</title><link>https://arlaf.dev/en/blog/combustible-i-realitat/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/combustible-i-realitat/</guid><description>A pretty map isn&apos;t a product. A map that saves you twelve euros by filling up 4 km further down is. The trick lives in the combination prices + corridor + camper.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>fuel</category><category>data</category><category>miteco</category><category>osm</category></item><item><title>Why a binary protocol (and not JSON)</title><link>https://arlaf.dev/en/blog/protocol-binari/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/protocol-binari/</guid><description>The easy option was JSON. It was also the option that made 30 FPS physically impossible. A six-byte-overhead binary protocol clears the bottleneck.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>protocol</category><category>host</category><category>firmware</category><category>performance</category></item><item><title>Geofence: knowing you arrived without you saying so</title><link>https://arlaf.dev/en/blog/geofence-i-presencia/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/geofence-i-presencia/</guid><description>A check-in is the silliest piece of friction in software. Always-on GPS is surveillance. In between lives the geofence with a dwell window.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>geofence</category><category>pwa</category><category>privacy</category></item><item><title>The firmware: Arduino and critical timing</title><link>https://arlaf.dev/en/blog/firmware-arduino/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/firmware-arduino/</guid><description>An Arduino Uno has 2 KB of RAM. A 300-LED strip is 900 bytes just for pixel buffers. Every decision is a question of space.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>firmware</category><category>arduino</category><category>neopixel</category><category>state-machine</category></item><item><title>POIs that surface on their own</title><link>https://arlaf.dev/en/blog/pois-que-apareixen-sols/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/pois-que-apareixen-sols/</guid><description>An empty planner is intimidating. A planner that already populates the corridor — with everything you don&apos;t like removable — is a conversation.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>ai</category><category>llm</category><category>poi</category><category>discovery</category></item><item><title>Planning and driving are two different brains</title><link>https://arlaf.dev/en/blog/planificar-vs-conduir/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/planificar-vs-conduir/</guid><description>A dense screen that works at home with coffee is unreadable in the cab with the sun overhead. The temptation was a toggle. The temptation was wrong.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>ui</category><category>ux</category><category>state-machine</category></item><item><title>From script to product</title><link>https://arlaf.dev/en/blog/de-script-a-producte/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/de-script-a-producte/</guid><description>There was a 200-line script. It worked. The story did not end there — without the next step, there would be no family.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>procés</category><category>refactor</category><category>brand</category></item><item><title>What CamperRoute is</title><link>https://arlaf.dev/en/blog/que-es-camperroute/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/que-es-camperroute/</guid><description>I set out to organise a camper trip. I ended up designing a product with three modes. This post explains why three were necessary.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>camperroute</category><category>intro</category><category>product</category><category>ux</category></item><item><title>What Lumware is</title><link>https://arlaf.dev/en/blog/que-es-lumware/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/que-es-lumware/</guid><description>I set out to blink a few LEDs. I ended up designing a software family for programmable light strips.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>lumware</category><category>intro</category><category>hardware</category><category>software</category><category>brand</category></item><item><title>Hi, welcome to the notebook</title><link>https://arlaf.dev/en/blog/hola/</link><guid isPermaLink="true">https://arlaf.dev/en/blog/hola/</guid><description>What you&apos;ll find here: short notes on in-progress projects, electronics and what I&apos;m learning as a freelancer.</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate><category>meta</category></item></channel></rss>