<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://mederic.me/blog</id>
  <title>Mederic Burlet · Blog</title>
  <updated>2026-10-05T00:00:00.000Z</updated>
  <link rel="alternate" href="https://mederic.me/blog"/>
  <link rel="self" href="https://mederic.me/blog/atom.xml"/>
  <author>
    <name>Mederic Burlet</name>
    <uri>https://mederic.me</uri>
  </author>
  <generator version="0.1.0">Neurowire</generator>
  <entry>
    <id>https://mederic.me/blog/oqf-freezing-a-format-at-v0-1</id>
    <title>Why Open Quest Format froze its file format at v0.1 while the packages keep changing</title>
    <link rel="alternate" href="https://mederic.me/blog/oqf-freezing-a-format-at-v0-1"/>
    <updated>2026-10-05T00:00:00.000Z</updated>
    <published>2026-10-05T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-quest-format"/>
    <category term="formats"/>
    <category term="open-source"/>
    <summary type="text">Open Quest Format has two version numbers. The file format was frozen at OQF1 in the first release and can only grow by appending columns, while the TypeScript packages stay 0.x and are still allowed to break their API. This post explains why the two are kept apart and how the append-only rule works.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/oqf-dialogue-as-a-sibling</id>
    <title>Why Open Quest Format keeps dialogue separate from quests</title>
    <link rel="alternate" href="https://mederic.me/blog/oqf-dialogue-as-a-sibling"/>
    <updated>2026-10-04T00:00:00.000Z</updated>
    <published>2026-10-04T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-quest-format"/>
    <category term="gamedev"/>
    <category term="architecture"/>
    <summary type="text">In Open Quest Format, conversations live in their own model. A quest step points at a dialogue by reference and only receives the flags and events the dialogue sets, which is what makes it possible to plug in Ink and Yarn Spinner.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/rust-native-module-four-targets</id>
    <title>Shipping a Rust native module to four targets from one CI</title>
    <link rel="alternate" href="https://mederic.me/blog/rust-native-module-four-targets"/>
    <updated>2026-10-03T00:00:00.000Z</updated>
    <published>2026-10-03T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-steamworks"/>
    <category term="rust"/>
    <category term="ci"/>
    <summary type="text">How cozy-steamworks turns one Rust crate into four prebuilt .node binaries, packs them into a tarball on GitHub Releases, and why a plain git dependency on the repo cannot work.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/oqf-what-every-quest-has-in-common</id>
    <title>What Skyrim and Baldur's Gate 3 quests have in common</title>
    <link rel="alternate" href="https://mederic.me/blog/oqf-what-every-quest-has-in-common"/>
    <updated>2026-10-02T00:00:00.000Z</updated>
    <published>2026-10-02T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-quest-format"/>
    <category term="gamedev"/>
    <category term="architecture"/>
    <summary type="text">A walkthrough of the Open Quest Format model: how steps form a flat graph, how objectives count events, how rewards and endings are emitted as events and flags, and why so much is left to the engine on purpose.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/steam-leaderboards-global-stats-gotchas</id>
    <title>Adding leaderboards and global stats to steamworks.js: what Steam doesn't tell you</title>
    <link rel="alternate" href="https://mederic.me/blog/steam-leaderboards-global-stats-gotchas"/>
    <updated>2026-10-01T00:00:00.000Z</updated>
    <published>2026-10-01T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-steamworks"/>
    <category term="cozy-coast"/>
    <category term="gamedev"/>
    <summary type="text">Notes from adding leaderboards, aggregated global stats and screenshots to my steamworks.js fork, covering handles that only last one Steam session, throttled uploads that resolve as if nothing went wrong, and global totals that run about a day behind.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/oqf-compact-format</id>
    <title>Measuring the OQF compact format: 677 tokens against 1,200 for JSON</title>
    <link rel="alternate" href="https://mederic.me/blog/oqf-compact-format"/>
    <updated>2026-09-30T00:00:00.000Z</updated>
    <published>2026-09-30T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-quest-format"/>
    <category term="formats"/>
    <category term="ai"/>
    <summary type="text">I measured Open Quest Format's compact serialization against its own JSON output on the reference quest to see where the bytes and tokens go, and what the line format costs in return.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/steam-callbacks-cant-wait-for-javascript</id>
    <title>Deciding Steam session requests in Rust, before JavaScript can answer</title>
    <link rel="alternate" href="https://mederic.me/blog/steam-callbacks-cant-wait-for-javascript"/>
    <updated>2026-09-29T00:00:00.000Z</updated>
    <published>2026-09-29T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-steamworks"/>
    <category term="cozy-coast"/>
    <category term="rust"/>
    <summary type="text">ISteamNetworkingMessages expects a session to be accepted or rejected before its callback returns, and JavaScript can't run in time. So my steamworks.js fork decides from a Rust-side allow list that JavaScript fills in ahead of time.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/oqf-provably-completable-quests</id>
    <title>Proving a quest is completable before anyone plays it</title>
    <link rel="alternate" href="https://mederic.me/blog/oqf-provably-completable-quests"/>
    <updated>2026-09-28T00:00:00.000Z</updated>
    <published>2026-09-28T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-quest-format"/>
    <category term="gamedev"/>
    <category term="architecture"/>
    <summary type="text">Open Quest Format keeps its condition language to eleven operators and no scripts, so that the validator can find unreachable steps, dead ends and quests with no reachable ending. This post explains how the search works and what that limit costs.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/forking-steamworks-js</id>
    <title>Forking steamworks.js for Cozy Coast's multiplayer hub</title>
    <link rel="alternate" href="https://mederic.me/blog/forking-steamworks-js"/>
    <updated>2026-09-27T00:00:00.000Z</updated>
    <published>2026-09-27T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-steamworks"/>
    <category term="cozy-coast"/>
    <category term="gamedev"/>
    <summary type="text">Upstream steamworks.js 0.4.0 only offered legacy P2P, an unfiltered lobby list and no friends API, which was not enough for Cozy Coast's multiplayer. This covers what the fork added, what it removed, and what it costs to maintain a fork for a single game.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/oqf-no-engine-owns-your-quests</id>
    <title>Why I wrote an open quest spec instead of a plugin</title>
    <link rel="alternate" href="https://mederic.me/blog/oqf-no-engine-owns-your-quests"/>
    <updated>2026-09-26T00:00:00.000Z</updated>
    <published>2026-09-26T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-quest-format"/>
    <category term="gamedev"/>
    <category term="open-source"/>
    <summary type="text">Open Quest Format 0.1.0 is an Apache-licensed, versioned quest spec with a reference parser, validator and runtime, so quest content can outlive the engine or plugin you picked first.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/neurowire-sync-federation</id>
    <title>The laptop that was closed all day</title>
    <link rel="alternate" href="https://mederic.me/blog/neurowire-sync-federation"/>
    <updated>2026-09-03T00:00:00.000Z</updated>
    <published>2026-09-03T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <category term="architecture"/>
    <summary type="text">NWF Sync is a four-route read-only protocol for pulling feed journals between machines, built for the case direct fetching cannot solve: items that already scrolled off the front page while you were away.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/neurowire-tail-streaming</id>
    <title>Tail: following a feed instead of re-fetching it</title>
    <link rel="alternate" href="https://mederic.me/blog/neurowire-tail-streaming"/>
    <updated>2026-09-02T10:30:00.000Z</updated>
    <published>2026-09-02T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">Neurowire 0.8.0 replaces every polling loop in the codebase with one async generator, so the CLI, watch mode, and the server-sent-events endpoint cannot drift on cadence, dedupe, or politeness.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/neurowire-tap-wizard</id>
    <title>A tap wizard with zero LLM calls</title>
    <link rel="alternate" href="https://mederic.me/blog/neurowire-tap-wizard"/>
    <updated>2026-09-01T12:00:00.000Z</updated>
    <published>2026-09-01T12:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">Neurowire 0.8.0 generates CSS-selector taps by ranking candidates from page structure and gating every one behind eight deterministic checks, with no model and no API key anywhere in the loop.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/press-kit-as-code</id>
    <title>Generating a press kit from the running game</title>
    <link rel="alternate" href="https://mederic.me/blog/press-kit-as-code"/>
    <updated>2026-08-26T10:30:00.000Z</updated>
    <published>2026-08-26T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-coast"/>
    <category term="tools"/>
    <summary type="text">Twelve social cards built from HTML and CSS templates, filled with real screenshots captured from the running game, and rebuilt with one command instead of a design tool.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/one-changelog-three-surfaces</id>
    <title>One changelog file, three places it shows up</title>
    <link rel="alternate" href="https://mederic.me/blog/one-changelog-three-surfaces"/>
    <updated>2026-08-25T00:00:00.000Z</updated>
    <published>2026-08-25T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-coast"/>
    <category term="architecture"/>
    <summary type="text">A single typed changelog file feeds an in-game badge, a Settings tab and a public website page, so release notes cannot drift between the product and its marketing.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/cozy-coast-tally-no-accounts</id>
    <title>A public tally with no accounts and no IDs</title>
    <link rel="alternate" href="https://mederic.me/blog/cozy-coast-tally-no-accounts"/>
    <updated>2026-08-23T10:30:00.000Z</updated>
    <published>2026-08-23T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-coast"/>
    <category term="privacy"/>
    <summary type="text">Cozy Coast ships analytics that count events instead of people: opt in, no account, no device ID, and a public page as the whole reporting layer. Here is what that costs.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/cozy-coast-beta-numbers</id>
    <title>What the beta tally told me about my own game</title>
    <link rel="alternate" href="https://mederic.me/blog/cozy-coast-beta-numbers"/>
    <updated>2026-08-22T00:00:00.000Z</updated>
    <published>2026-08-22T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-coast"/>
    <category term="research"/>
    <summary type="text">The Cozy Coast beta counted 160,966 catches and 50,418 seagull greetings. The action that pays nothing was the most repeated one, and the economy changed because of it.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/cozy-coast-desktop-widget-electron</id>
    <title>Building a game that behaves like a desktop widget</title>
    <link rel="alternate" href="https://mederic.me/blog/cozy-coast-desktop-widget-electron"/>
    <updated>2026-08-21T10:30:00.000Z</updated>
    <published>2026-08-21T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-coast"/>
    <category term="architecture"/>
    <summary type="text">Cozy Coast is an Electron and Phaser game built as a borderless desktop widget first, which changes the window model, the render budget and the packaging pipeline.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/cozy-coast-multiplayer-no-servers</id>
    <title>Cozy Coast multiplayer runs on zero servers</title>
    <link rel="alternate" href="https://mederic.me/blog/cozy-coast-multiplayer-no-servers"/>
    <updated>2026-08-21T00:00:00.000Z</updated>
    <published>2026-08-21T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="cozy-coast"/>
    <category term="architecture"/>
    <summary type="text">Cozy Coast shipped a multiplayer hub with no backend at all. Steam handles lobby discovery, connection brokering and packet relay, and the host relays player state.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/ghostwriter-getting-started</id>
    <title>Getting started with Ghostwriter, step by step</title>
    <link rel="alternate" href="https://mederic.me/blog/ghostwriter-getting-started"/>
    <updated>2026-07-20T10:30:00.000Z</updated>
    <published>2026-07-20T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <summary type="text">A plain walkthrough of installing and using the free Ghostwriter tool: where the files go, how to ask for a rewrite, what the clean-up step does, and how much of a difference it actually made in testing.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/ghostwriter-spot-ai-writing</id>
    <title>How to spot AI writing before you hit send</title>
    <link rel="alternate" href="https://mederic.me/blog/ghostwriter-spot-ai-writing"/>
    <updated>2026-07-19T10:30:00.000Z</updated>
    <published>2026-07-19T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="quality"/>
    <summary type="text">A quick, non-technical checklist for catching the giveaway signs of AI-written text in your own drafts: the vocabulary, the lists of three, the flat rhythm, the long dash, and the too-neat ending.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/langdrift-translation-drift</id>
    <title>Langdrift: scoring how differently a translation lands</title>
    <link rel="alternate" href="https://mederic.me/blog/langdrift-translation-drift"/>
    <updated>2026-07-19T00:00:00.000Z</updated>
    <published>2026-07-19T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="research"/>
    <category term="translation"/>
    <summary type="text">Langdrift compares audio of an original and its translation and returns a drift score: how far apart the two land cognitively, catching accurate but off translations.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/ghostwriter-why-humanizing-fails</id>
    <title>Why 'make it sound human' never quite works</title>
    <link rel="alternate" href="https://mederic.me/blog/ghostwriter-why-humanizing-fails"/>
    <updated>2026-07-18T10:30:00.000Z</updated>
    <published>2026-07-18T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <summary type="text">AI writing gives itself away on three levels: the characters, the words, and the shape of the whole piece. The deepest one is decided while the text is being written, which is why a clean-up pass at the end cannot fully fix it.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/verso-json-presentations</id>
    <title>Verso: one JSON source, decks branched per audience</title>
    <link rel="alternate" href="https://mederic.me/blog/verso-json-presentations"/>
    <updated>2026-07-18T00:00:00.000Z</updated>
    <published>2026-07-18T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="presentations"/>
    <summary type="text">Verso defines presentations as JSON instead of slide documents, so one source can branch per audience and export to PDF, HTML, or PNG cleanly.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/ghostwriter-human-writing</id>
    <title>AI writing has a tell. I built a free tool that removes it.</title>
    <link rel="alternate" href="https://mederic.me/blog/ghostwriter-human-writing"/>
    <updated>2026-07-17T10:30:00.000Z</updated>
    <published>2026-07-17T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <summary type="text">Ghostwriter is a free, open-source tool that makes AI-written text read like a person wrote it, by removing the hidden characters, the giveaway words, and the report-shaped structure that flag it as machine-made.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/petrify-on-device</id>
    <title>Petrify: removing people from footage, entirely on-device</title>
    <link rel="alternate" href="https://mederic.me/blog/petrify-on-device"/>
    <updated>2026-07-17T00:00:00.000Z</updated>
    <published>2026-07-17T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="computer-vision"/>
    <summary type="text">Petrify detects and removes people from fixed-camera footage while keeping the live timestamp ticking, running fully on your own machine with no cloud upload.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/scope-beats-autonomy</id>
    <title>Scope beats autonomy: a contrarian take on AI agents</title>
    <link rel="alternate" href="https://mederic.me/blog/scope-beats-autonomy"/>
    <updated>2026-07-16T00:00:00.000Z</updated>
    <published>2026-07-16T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="agents"/>
    <category term="mcp"/>
    <summary type="text">Open-ended autonomous agents make great demos and poor production systems. Tightly scoped, observable, boring agents are what actually survive real workloads.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/multi-agent-reasoning</id>
    <title>Multi-agent workflows a single engineer can reason about</title>
    <link rel="alternate" href="https://mederic.me/blog/multi-agent-reasoning"/>
    <updated>2026-07-15T00:00:00.000Z</updated>
    <published>2026-07-15T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="agents"/>
    <category term="mcp"/>
    <category term="architecture"/>
    <summary type="text">A focused multi-agent system one engineer can reason about beats a sprawling one nobody trusts. Scope each agent, define tools explicitly, and observe everything.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/measuring-ai-productivity</id>
    <title>An honest look at AI productivity claims, and how to measure 2-3x</title>
    <link rel="alternate" href="https://mederic.me/blog/measuring-ai-productivity"/>
    <updated>2026-07-14T00:00:00.000Z</updated>
    <published>2026-07-14T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="research"/>
    <category term="productivity"/>
    <category term="fsi"/>
    <summary type="text">A 2-3x productivity gain is real when you measure build success, cycle time, and effort reduction, not vanity metrics. Here is how to tell the difference.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/evals-for-delivery-teams</id>
    <title>Evals for delivery teams: trusting AI output without re-checking every line</title>
    <link rel="alternate" href="https://mederic.me/blog/evals-for-delivery-teams"/>
    <updated>2026-07-13T00:00:00.000Z</updated>
    <published>2026-07-13T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="research"/>
    <category term="enablement"/>
    <category term="architecture"/>
    <summary type="text">Trustworthy AI output comes from evals built into the real pipeline, not a benchmark: evaluate what matters, gate at the right point, and keep review habits that scale.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/no-code-ai-workflow</id>
    <title>Build a tiny no-code AI workflow that saves you an hour a week</title>
    <link rel="alternate" href="https://mederic.me/blog/no-code-ai-workflow"/>
    <updated>2026-07-12T10:30:00.000Z</updated>
    <published>2026-07-12T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="productivity"/>
    <summary type="text">Chain a trigger, an AI step, and an action in a no-code tool like Zapier, Make, or n8n to automate one small repetitive task end to end, no programming needed.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/make-yourself-unnecessary</id>
    <title>Make yourself unnecessary: what good advisory leaves behind</title>
    <link rel="alternate" href="https://mederic.me/blog/make-yourself-unnecessary"/>
    <updated>2026-07-12T00:00:00.000Z</updated>
    <published>2026-07-12T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="enablement"/>
    <summary type="text">Good advisory leaves a team stronger, not dependent. Capability and judgement should stay with the team, through co-delivery, explicit reasoning, and grown champions.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/make-a-song-with-suno</id>
    <title>Make a full song with AI in ten minutes using Suno</title>
    <link rel="alternate" href="https://mederic.me/blog/make-a-song-with-suno"/>
    <updated>2026-07-11T10:30:00.000Z</updated>
    <published>2026-07-11T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <category term="music"/>
    <summary type="text">Describe the song you want, pick a style, generate a couple of takes, refine the parts you do not like, then export. Suno makes a full track in minutes.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/predicting-ai-adoption</id>
    <title>What predicts whether an AI cohort actually sticks</title>
    <link rel="alternate" href="https://mederic.me/blog/predicting-ai-adoption"/>
    <updated>2026-07-11T00:00:00.000Z</updated>
    <published>2026-07-11T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="ai-adoption"/>
    <category term="enablement"/>
    <category term="research"/>
    <summary type="text">Across 700+ practitioners, durable AI adoption tracks three predictors: training on their own codebase, role-specific tracks, and internal champions seeded in the team.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/nano-banana-explained</id>
    <title>Nano Banana, explained: what Google's image model is good at</title>
    <link rel="alternate" href="https://mederic.me/blog/nano-banana-explained"/>
    <updated>2026-07-10T10:30:00.000Z</updated>
    <published>2026-07-10T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="image-gen"/>
    <summary type="text">Nano Banana is the nickname for Google's Gemini image model, great at quick edits and keeping a subject consistent across pictures, with a few known limits.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/sia-copilot-anatomy</id>
    <title>Singapore Airlines: a website feature in five weeks, down from nine</title>
    <link rel="alternate" href="https://mederic.me/blog/sia-copilot-anatomy"/>
    <updated>2026-07-10T00:00:00.000Z</updated>
    <published>2026-07-10T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="copilot"/>
    <category term="fsi"/>
    <category term="ai-adoption"/>
    <summary type="text">Embedding GitHub Copilot across Singapore Airlines' delivery lifecycle cut a feature from nine weeks to five, with 95% of the work AI-generated and effort down 60%.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/local-vs-cloud-ai</id>
    <title>Local vs cloud AI: when to run models on your own machine</title>
    <link rel="alternate" href="https://mederic.me/blog/local-vs-cloud-ai"/>
    <updated>2026-07-09T10:30:00.000Z</updated>
    <published>2026-07-09T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <summary type="text">Run AI locally for privacy, no per-use cost, and offline use if you have decent hardware, or use cloud AI when you want the most capable models with zero setup.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/three-training-tracks</id>
    <title>AI training needs a track per role, not one shared workshop</title>
    <link rel="alternate" href="https://mederic.me/blog/three-training-tracks"/>
    <updated>2026-07-09T00:00:00.000Z</updated>
    <published>2026-07-09T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="enablement"/>
    <category term="fsi"/>
    <summary type="text">Engineers, leads, POs, QA, designers, and managers use AI for different work, so one shared workshop gives everyone half-relevant material. Role-specific tracks outperform it.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/replicate-run-any-model</id>
    <title>Replicate: run almost any AI model without the setup</title>
    <link rel="alternate" href="https://mederic.me/blog/replicate-run-any-model"/>
    <updated>2026-07-08T10:30:00.000Z</updated>
    <published>2026-07-08T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <summary type="text">Replicate lets you run open AI models for images, audio, video, and text through a simple interface, with no GPU or environment to set up on your side.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/demo-to-production-gap</id>
    <title>The demo-to-production gap is an organisational problem</title>
    <link rel="alternate" href="https://mederic.me/blog/demo-to-production-gap"/>
    <updated>2026-07-08T00:00:00.000Z</updated>
    <published>2026-07-08T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="ai-adoption"/>
    <summary type="text">A better model does not close the demo-to-production gap. The skills that win a pilot do not generalise, so architecture, guardrails, and behaviour change close it.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/voice-cloning-elevenlabs</id>
    <title>Cloning a voice with ElevenLabs, responsibly</title>
    <link rel="alternate" href="https://mederic.me/blog/voice-cloning-elevenlabs"/>
    <updated>2026-07-07T10:30:00.000Z</updated>
    <published>2026-07-07T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <category term="voice"/>
    <summary type="text">You can clone a voice with ElevenLabs in minutes, but only do it with a voice you own or have clear permission to use, never someone else's.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/adoption-behaviour-change</id>
    <title>Adoption is a behaviour change, not a tooling rollout</title>
    <link rel="alternate" href="https://mederic.me/blog/adoption-behaviour-change"/>
    <updated>2026-07-07T00:00:00.000Z</updated>
    <published>2026-07-07T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="ai-adoption"/>
    <category term="enablement"/>
    <summary type="text">Tools do not change behaviour, practice does. A launch plus a generic workshop spikes then fades, while role-specific practice and champions make adoption durable.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/spotting-ai-slop</id>
    <title>How to spot AI slop and keep your own output good</title>
    <link rel="alternate" href="https://mederic.me/blog/spotting-ai-slop"/>
    <updated>2026-07-06T10:30:00.000Z</updated>
    <published>2026-07-06T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="quality"/>
    <summary type="text">AI slop is low-effort, generic text with vague filler, endless hedging, and no sources, and you avoid it by adding specifics, your own voice, and real editing.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/prompting-is-editing</id>
    <title>Prompting is editing, not incantation</title>
    <link rel="alternate" href="https://mederic.me/blog/prompting-is-editing"/>
    <updated>2026-07-06T10:30:00.000Z</updated>
    <published>2026-07-06T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="prompting"/>
    <summary type="text">The real skill with AI is not finding magic words, it is giving feedback. Draft, say what is wrong, refine, repeat until the answer is right.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/modern-prompting-no-roleplay</id>
    <title>Stop role-playing your prompts: what works on modern AI</title>
    <link rel="alternate" href="https://mederic.me/blog/modern-prompting-no-roleplay"/>
    <updated>2026-07-06T10:30:00.000Z</updated>
    <published>2026-07-06T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="prompting"/>
    <summary type="text">You no longer need to tell modern AI it is a world-class expert or beg it to think step by step. Give it a clear goal, real context, and the format you want.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/anatomy-of-a-good-prompt</id>
    <title>The anatomy of a good prompt, and three myths to drop</title>
    <link rel="alternate" href="https://mederic.me/blog/anatomy-of-a-good-prompt"/>
    <updated>2026-07-06T10:30:00.000Z</updated>
    <published>2026-07-06T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="prompting"/>
    <summary type="text">A good prompt is just five plain parts: a goal, real context, the output format, a few constraints, and an example or two. No magic words required.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/ai-image-gen-replicate-nano-banana</id>
    <title>AI image generation, made simple: Replicate and Nano Banana</title>
    <link rel="alternate" href="https://mederic.me/blog/ai-image-gen-replicate-nano-banana"/>
    <updated>2026-07-06T01:49:17.000Z</updated>
    <published>2026-07-06T01:49:17.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="image-gen"/>
    <summary type="text">Want AI images without a powerful GPU? Use Nano Banana for quick photo edits, Replicate to try many models in your browser, and a LoRA for a repeatable style.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/neurowire-taps-selectors</id>
    <title>Taps: turning feed-less websites into real feeds</title>
    <link rel="alternate" href="https://mederic.me/blog/neurowire-taps-selectors"/>
    <updated>2026-07-06T00:00:00.000Z</updated>
    <published>2026-07-06T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">Neurowire taps are per-host CSS-selector recipes that turn a plain HTML listing page into a real feed, so a site with no RSS becomes a first-class source.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/never-paste-into-chatbot</id>
    <title>What you should never paste into a chatbot</title>
    <link rel="alternate" href="https://mederic.me/blog/never-paste-into-chatbot"/>
    <updated>2026-07-05T10:30:00.000Z</updated>
    <published>2026-07-05T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="privacy"/>
    <summary type="text">Assume anything you paste into a chatbot may be stored or used for training, so never share passwords, secrets, other people's data, or confidential work.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/dogfooding-neurowire-feeds</id>
    <title>Dogfooding @neurowire/core to power this blog's feeds</title>
    <link rel="alternate" href="https://mederic.me/blog/dogfooding-neurowire-feeds"/>
    <updated>2026-07-05T00:00:00.000Z</updated>
    <published>2026-07-05T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">This site publishes its own Atom, JSON Feed, and NWF feeds from one canonical Neurowire model, because dogfooding your own library is the most honest test it gets.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/understanding-loras</id>
    <title>Understanding LoRAs without the jargon</title>
    <link rel="alternate" href="https://mederic.me/blog/understanding-loras"/>
    <updated>2026-07-04T10:30:00.000Z</updated>
    <published>2026-07-04T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="image-gen"/>
    <summary type="text">A LoRA is a small add-on file that teaches an image model one style, character or subject without retraining the whole thing, and you can stack a few.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/nocturne-design-system</id>
    <title>Nocturne: an open-source Cyberpunk 2077 design system</title>
    <link rel="alternate" href="https://mederic.me/blog/nocturne-design-system"/>
    <updated>2026-07-04T06:21:07.000Z</updated>
    <published>2026-07-04T06:21:07.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="design-systems"/>
    <summary type="text">Nocturne is an open-source design system inspired by Cyberpunk 2077 and Edgerunners: near-black surfaces, one hot neon accent, clipped corners, and machine-voice type, shipped as design tokens, framework-agnostic CSS, and React components.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/building-neurowire</id>
    <title>Building Neurowire: one canonical model, six feed formats</title>
    <link rel="alternate" href="https://mederic.me/blog/building-neurowire"/>
    <updated>2026-07-04T00:00:00.000Z</updated>
    <published>2026-07-04T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <category term="architecture"/>
    <summary type="text">Neurowire treats feeds as a data-modelling problem: one canonical model that every parser produces and every serializer reads, so adding a format is a single serializer.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/everyday-ai-toolkit</id>
    <title>The everyday AI toolkit: Claude, Suno, ElevenLabs and friends</title>
    <link rel="alternate" href="https://mederic.me/blog/everyday-ai-toolkit"/>
    <updated>2026-07-03T10:30:00.000Z</updated>
    <published>2026-07-03T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="tools"/>
    <summary type="text">Match the job to the tool: Claude for writing and thinking, Suno for music, ElevenLabs for voice, and Replicate for running image models like Flux.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/open-web-feeds</id>
    <title>The open web forgot about feeds, and that is worth fixing</title>
    <link rel="alternate" href="https://mederic.me/blog/open-web-feeds"/>
    <updated>2026-07-03T00:00:00.000Z</updated>
    <published>2026-07-03T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="feeds"/>
    <category term="open-source"/>
    <summary type="text">Feeds let you publish once and let anything read it. As they eroded, following became an account on someone else's platform. Owning what you read is independence.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/ai-for-your-day-10-wins</id>
    <title>AI for your actual day: ten small wins most people miss</title>
    <link rel="alternate" href="https://mederic.me/blog/ai-for-your-day-10-wins"/>
    <updated>2026-07-02T11:30:00.000Z</updated>
    <published>2026-07-02T11:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="productivity"/>
    <summary type="text">AI is most useful for small daily tasks like drafting replies, summarising documents, planning trips, and tidying spreadsheets, not just for big flashy projects.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/nwf-format-design</id>
    <title>Designing NWF: a feed format 62% smaller than JSON Feed</title>
    <link rel="alternate" href="https://mederic.me/blog/nwf-format-design"/>
    <updated>2026-07-02T10:30:00.000Z</updated>
    <published>2026-07-02T10:30:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">NWF is Neurowire's native feed format, roughly 62% smaller than the equivalent JSON Feed yet fully round-trippable, using interning, relative links, and date deltas.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/fact-check-ai-answer</id>
    <title>How to fact-check an AI answer in 30 seconds</title>
    <link rel="alternate" href="https://mederic.me/blog/fact-check-ai-answer"/>
    <updated>2026-07-01T13:00:00.000Z</updated>
    <published>2026-07-01T13:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="everyday-ai"/>
    <category term="quality"/>
    <summary type="text">Open the cited source and check it actually says what the AI claims, then cross-check one independent source, paying closest attention to numbers, dates, and names.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/unremarkable-workflow</id>
    <title>Why I optimise for the unremarkable workflow, not the wow demo</title>
    <link rel="alternate" href="https://mederic.me/blog/unremarkable-workflow"/>
    <updated>2026-07-01T10:00:00.000Z</updated>
    <published>2026-07-01T10:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="ai-adoption"/>
    <category term="enablement"/>
    <summary type="text">A hundred engineers using AI by default beats one jaw-dropping demo. Production compounds on the thousandth unremarkable run, so measure throughput, not wow.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/neurowire-taps-pack</id>
    <title>Neurowire Taps Pack: 271 curated sources, 24 themes</title>
    <link rel="alternate" href="https://mederic.me/blog/neurowire-taps-pack"/>
    <updated>2026-06-29T00:00:00.000Z</updated>
    <published>2026-06-29T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">The Taps Pack is a ready-made library of 271 vetted sources for Neurowire, grouped into 24 themes from Frontier AI Labs to Food. It's the curation layer ahead of the upcoming Neurowire SaaS.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/neurowire-docs-launch</id>
    <title>Neurowire: an open feed engine, now with full docs</title>
    <link rel="alternate" href="https://mederic.me/blog/neurowire-docs-launch"/>
    <updated>2026-06-28T00:00:00.000Z</updated>
    <published>2026-06-28T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="open-source"/>
    <category term="feeds"/>
    <summary type="text">Neurowire turns any source, even feed-less websites, into one canonical feed you can serialize to Atom, JSON Feed, Markdown, RSS, or its own compact NWF format. The full documentation site is now live.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/why-ai-pilots-stall</id>
    <title>Why AI pilots stall before production</title>
    <link rel="alternate" href="https://mederic.me/blog/why-ai-pilots-stall"/>
    <updated>2026-06-25T00:00:00.000Z</updated>
    <published>2026-06-20T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="ai-adoption"/>
    <category term="enablement"/>
    <summary type="text">AI pilots stall because they optimise for a demo, not for adoption. Production requires architecture, guardrails, and a change in how teams work, not a better model.</summary>
  </entry>
  <entry>
    <id>https://mederic.me/blog/700-engineers-on-adoption</id>
    <title>What 700 trained engineers taught me about adoption</title>
    <link rel="alternate" href="https://mederic.me/blog/700-engineers-on-adoption"/>
    <updated>2026-05-12T00:00:00.000Z</updated>
    <published>2026-05-12T00:00:00.000Z</published>
    <author>
      <name>Mederic Burlet</name>
      <uri>https://mederic.me</uri>
    </author>
    <category term="enablement"/>
    <category term="ai-adoption"/>
    <summary type="text">After training 700+ practitioners, the pattern is clear: adoption is a behaviour change, not a tooling rollout. Role-specific practice and internal champions are what make it stick.</summary>
  </entry>
</feed>
