<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/sitemap_generator/default/sitemap.xsl"?>
<!--Generated by the Simple XML Sitemap Drupal module: https://drupal.org/project/simple_sitemap.-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
 <url>
  <loc>https://www.dealmobile.co.uk/</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>weekly</changefreq>
  <priority>1.0</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/cv</loc>
  <lastmod>2026-10-26T08:12:46+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.9</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.8</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/contact</loc>
  <changefreq>yearly</changefreq>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/making-large-uploads-resumable</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/making-large-uploads-resumable/hero.png</image:loc>
   <image:caption>A row of twelve chunks: the first eight are marked as already held by the server, the last four are highlighted as the ones sent now, with the client asking the server for its status.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/making-large-uploads-resumable/hero-dark.png</image:loc>
   <image:caption>A row of twelve chunks: the first eight are marked as already held by the server, the last four are highlighted as the ones sent now, with the client asking the server for its status.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/one-source-of-truth-behind-a-static-app</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/one-source-of-truth-behind-a-static-app/hero.png</image:loc>
   <image:caption>A flow from the CMS to a snapshot of static JSON files to a highlighted gate and then the app, with the gate also leading to “Any drift: no build”.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/one-source-of-truth-behind-a-static-app/hero-dark.png</image:loc>
   <image:caption>A flow from the CMS to a snapshot of static JSON files to a highlighted gate and then the app, with the gate also leading to “Any drift: no build”.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/publishing-to-apple-news-from-php</loc>
  <lastmod>2026-10-26T08:12:46+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/publishing-to-apple-news-from-php/hero.png</image:loc>
   <image:caption>A diagram of PHP objects becoming a multipart POST of article.json, metadata and an image, signed with HHMAC, and sent to Apple News.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/publishing-to-apple-news-from-php/hero-dark.png</image:loc>
   <image:caption>A diagram of PHP objects becoming a multipart POST of article.json, metadata and an image, signed with HHMAC, and sent to Apple News.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/saving-websites-for-offline-reading</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/saving-websites-for-offline-reading/hero.png</image:loc>
   <image:caption>Five page addresses on the left, each with an arrow to the file it is saved as on the right, with the numbered news address folded into one file name highlighted.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/saving-websites-for-offline-reading/hero-dark.png</image:loc>
   <image:caption>Five page addresses on the left, each with an arrow to the file it is saved as on the right, with the numbered news address folded into one file name highlighted.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-the-solar-calendar-has-13-months</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-the-solar-calendar-has-13-months/hero.png</image:loc>
   <image:caption>Thirteen identical blocks of four weeks, each starting on a Monday, with a highlighted extra week at the end for leap years. The heading reads “364 days = 52 whole weeks”.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-the-solar-calendar-has-13-months/hero-dark.png</image:loc>
   <image:caption>Thirteen identical blocks of four weeks, each starting on a Monday, with a highlighted extra week at the end for leap years. The heading reads “364 days = 52 whole weeks”.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/combining-keyword-and-vector-search</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/combining-keyword-and-vector-search/hero.png</image:loc>
   <image:caption>Diagram of keyword search and vector search feeding a merge step that puts their scores on one scale, followed by a highlighted cross-encoder that reads the query and chunk together and decides the final order.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/combining-keyword-and-vector-search/hero-dark.png</image:loc>
   <image:caption>Diagram of keyword search and vector search feeding a merge step that puts their scores on one scale, followed by a highlighted cross-encoder that reads the query and chunk together and decides the final order.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/counting-developer-activity-from-git</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/counting-developer-activity-from-git/hero.png</image:loc>
   <image:caption>Diagram, with example figures, of one commit touching a source file and a lock file: the source file’s lines are counted, while the lock file’s thousands of lines are left out of the total and listed separately.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/counting-developer-activity-from-git/hero-dark.png</image:loc>
   <image:caption>Diagram, with example figures, of one commit touching a source file and a lock file: the source file’s lines are counted, while the lock file’s thousands of lines are left out of the total and listed separately.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/calendar-feed-and-badge-from-a-worker</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/calendar-feed-and-badge-from-a-worker/hero.png</image:loc>
   <image:caption>The Solar Calendar’s live badge reading 19 Winterfylleþ 2026, above a real calendar feed event titled “☀ 19 Winterfylleþ”.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/calendar-feed-and-badge-from-a-worker/hero-dark.png</image:loc>
   <image:caption>The Solar Calendar’s live badge reading 19 Winterfylleþ 2026, above a real calendar feed event titled “☀ 19 Winterfylleþ”.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/fetching-feeds-from-untrusted-urls</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/fetching-feeds-from-untrusted-urls/hero.png</image:loc>
   <image:caption>A terminal showing RSS to JSON refusing three addresses, including the cloud metadata address written as IPv6, each with the message “Refusing to connect ... private or reserved address”.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/fetching-feeds-from-untrusted-urls/hero-dark.png</image:loc>
   <image:caption>A terminal showing RSS to JSON refusing three addresses, including the cloud metadata address written as IPv6, each with the message “Refusing to connect ... private or reserved address”.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/testing-servers-against-an-upload-protocol</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/testing-servers-against-an-upload-protocol/hero.png</image:loc>
   <image:caption>Terminal output of TurboPush’s conformance suite, a list of passing checks with the two that found bugs in the PHP endpoint highlighted, ending in 74 checks, 70 passed, 0 failed.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/testing-servers-against-an-upload-protocol/hero-dark.png</image:loc>
   <image:caption>Terminal output of TurboPush’s conformance suite, a list of passing checks with the two that found bugs in the PHP endpoint highlighted, ending in 74 checks, 70 passed, 0 failed.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/cloning-repositories-without-a-token-in-the-url</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/cloning-repositories-without-a-token-in-the-url/hero.png</image:loc>
   <image:caption>Diagram of git asking a short-lived GIT_ASKPASS script for the password and receiving the token, with the remote URL saved in the repository config shown with a user name only and the token-in-URL form struck through.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/cloning-repositories-without-a-token-in-the-url/hero-dark.png</image:loc>
   <image:caption>Diagram of git asking a short-lived GIT_ASKPASS script for the password and receiving the token, with the remote URL saved in the repository config shown with a user name only and the token-in-URL form struck through.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/finding-the-dull-parts-of-a-screen-recording</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/finding-the-dull-parts-of-a-screen-recording/hero.png</image:loc>
   <image:caption>A chart of motion scores across a 30 second test clip: flat near zero, apart from one tall block from about 15 to 20 seconds that is highlighted as the part kept, above a dashed threshold line.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/finding-the-dull-parts-of-a-screen-recording/hero-dark.png</image:loc>
   <image:caption>A chart of motion scores across a 30 second test clip: flat near zero, apart from one tall block from about 15 to 20 seconds that is highlighted as the part kept, above a dashed threshold line.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/indexing-code-by-function-class-and-method</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/indexing-code-by-function-class-and-method/hero.png</image:loc>
   <image:caption>Diagram of one source file split into four chunks: a function, a class summary (highlighted), and two methods, each labelled with its name.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/indexing-code-by-function-class-and-method/hero-dark.png</image:loc>
   <image:caption>Diagram of one source file split into four chunks: a function, a class summary (highlighted), and two methods, each labelled with its name.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/live-coverage-on-apple-news-from-php</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/live-coverage-on-apple-news-from-php/hero.png</image:loc>
   <image:caption>A diagram of the liveCoverageState values moving from NONE to LIVE, highlighted, to COMPLETED, above a stack of live posts listed newest first.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/live-coverage-on-apple-news-from-php/hero-dark.png</image:loc>
   <image:caption>A diagram of the liveCoverageState values moving from NONE to LIVE, highlighted, to COMPLETED, above a stack of live posts listed newest first.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/one-json-shape-for-rss-atom-and-rdf</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/one-json-shape-for-rss-atom-and-rdf/hero.png</image:loc>
   <image:caption>Three boxes, RSS 2.0, RSS 1.0 and Atom, each with arrows pointing to one highlighted box labelled channel[‘item’], always a list.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/one-json-shape-for-rss-atom-and-rdf/hero-dark.png</image:loc>
   <image:caption>Three boxes, RSS 2.0, RSS 1.0 and Atom, each with arrows pointing to one highlighted box labelled channel[‘item’], always a list.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/rewriting-an-old-scraper-around-curl-multi</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/rewriting-an-old-scraper-around-curl-multi/hero.png</image:loc>
   <image:caption>Terminal output from Scrape’s search mode on a test listing, with the same report.pdf listed twice under two different local paths and both entries highlighted.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/rewriting-an-old-scraper-around-curl-multi/hero-dark.png</image:loc>
   <image:caption>Terminal output from Scrape’s search mode on a test listing, with the same report.pdf listed twice under two different local paths and both entries highlighted.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/taxing-a-household-one-earner-at-a-time</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/taxing-a-household-one-earner-at-a-time/hero.png</image:loc>
   <image:caption>A flow from two earners through “Tax each alone” and “Rules on top” to the result, with a highlighted path showing one person skipping the rules and keeping the calculator’s own figures.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/taxing-a-household-one-earner-at-a-time/hero-dark.png</image:loc>
   <image:caption>A flow from two earners through “Tax each alone” and “Rules on top” to the result, with a highlighted path showing one person skipping the rules and keeping the calculator’s own figures.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/testing-an-api-client-without-the-network</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/testing-an-api-client-without-the-network/hero.png</image:loc>
   <image:caption>A terminal showing the Puzzler PHP SDK’s offline test run ending in OK, 25 tests, 55 assertions.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/testing-an-api-client-without-the-network/hero-dark.png</image:loc>
   <image:caption>A terminal showing the Puzzler PHP SDK’s offline test run ending in OK, 25 tests, 55 assertions.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/turning-web-pages-into-clean-markdown</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/turning-web-pages-into-clean-markdown/hero.png</image:loc>
   <image:caption>An example page made of navigation, a cookie banner, a newsletter box, the article, a most-read list, share buttons and a footer, with only the article highlighted, and the clean Markdown it becomes beside it.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/turning-web-pages-into-clean-markdown/hero-dark.png</image:loc>
   <image:caption>An example page made of navigation, a cookie banner, a newsletter box, the article, a most-read list, share buttons and a footer, with only the article highlighted, and the clean Markdown it becomes beside it.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-fourth-screen-on-the-living-room-tv</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-fourth-screen-on-the-living-room-tv/hero.png</image:loc>
   <image:caption>The laptop’s desktop drawn to scale: the 3840 by 2160 TV screen on the left, then the laptop’s own panel, then two portrait 4K monitors.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-fourth-screen-on-the-living-room-tv/hero-dark.png</image:loc>
   <image:caption>The laptop’s desktop drawn to scale: the 3840 by 2160 TV screen on the left, then the laptop’s own panel, then two portrait 4K monitors.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/decluttering-a-tcl-google-tv</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/decluttering-a-tcl-google-tv/home-screen.png</image:loc>
   <image:caption>The TV’s home screen after decluttering: one Fire Stick input and a row of apps, with nothing recommended.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/letting-an-agent-drive-the-tv</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/letting-an-agent-drive-the-tv/hero.png</image:loc>
   <image:caption>The loop each batch went round: a batch file, the batch script, me checking the TV, and the changelog.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/letting-an-agent-drive-the-tv/hero-dark.png</image:loc>
   <image:caption>The loop each batch went round: a batch file, the batch script, me checking the TV, and the changelog.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/the-packages-i-kept-on-a-google-tv</loc>
  <lastmod>2026-10-25T22:31:47+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/the-packages-i-kept-on-a-google-tv/hero.png</image:loc>
   <image:caption>Ten of the keep-list’s packages, each with the reason it’s kept: the speech recogniser and MediaTek’s picture quality, both checked on the TV, then menus, Wi-Fi, volume and boot loops reported elsewhere, and the setup’s own apps.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/the-packages-i-kept-on-a-google-tv/hero-dark.png</image:loc>
   <image:caption>Ten of the keep-list’s packages, each with the reason it’s kept: the speech recogniser and MediaTek’s picture quality, both checked on the TV, then menus, Wi-Fi, volume and boot loops reported elsewhere, and the setup’s own apps.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-tv-remote-from-the-command-line</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-tv-remote-from-the-command-line/hero.png</image:loc>
   <image:caption>The TV’s pairing screen, asking for the code DAE61C to be entered on the tcl_tv PC.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-markdown-version-of-every-page</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-markdown-version-of-every-page/hero.png</image:loc>
   <image:caption>On the left, the top of a project page on this site, with the Markdown link in the masthead circled. On the right, the start of that page’s Markdown version: front matter with the title, address, type and summary, then the title as a heading and the first paragraph.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-markdown-version-of-every-page/hero-dark.png</image:loc>
   <image:caption>On the left, the top of a project page on this site, with the Markdown link in the masthead circled. On the right, the start of that page’s Markdown version: front matter with the title, address, type and summary, then the title as a heading and the first paragraph.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/gates-not-a-models-word</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/gates-not-a-models-word/hero.png</image:loc>
   <image:caption>A card headed Gates decide, a model’s word doesn’t: a step is done when the checks say so. A model saying it’s done is not evidence. A check that couldn’t run is never a pass. A reviewer can block but never pass. Trying to break the checks found real bypasses, all fixed. In grey: they don’t prove the code is right.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/gates-not-a-models-word/hero-dark.png</image:loc>
   <image:caption>A card headed Gates decide, a model’s word doesn’t: a step is done when the checks say so. A model saying it’s done is not evidence. A check that couldn’t run is never a pass. A reviewer can block but never pass. Trying to break the checks found real bypasses, all fixed. In grey: they don’t prove the code is right.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/mullet-2-coding-jobs-you-can-leave-running</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/mullet-2-coding-jobs-you-can-leave-running/hero.png</image:loc>
   <image:caption>A card headed Two decisions, the rest unattended, about Mullet 2’s first real night. I decide the plan and the merge. First test runs: 2 steps in 32 seconds, 5 steps in about two minutes. 24 October: three of its own features, each one merged after I read the diff, and the reviewer stopped real bugs.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/mullet-2-coding-jobs-you-can-leave-running/hero-dark.png</image:loc>
   <image:caption>A card headed Two decisions, the rest unattended, about Mullet 2’s first real night. I decide the plan and the merge. First test runs: 2 steps in 32 seconds, 5 steps in about two minutes. 24 October: three of its own features, each one merged after I read the diff, and the reviewer stopped real bugs.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/running-your-own-claude-subscription-unattended</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/running-your-own-claude-subscription-unattended/hero.png</image:loc>
   <image:caption>A card headed Your login, nobody else’s, about what Mullet does with Claude. The worker is the normal claude command. Claude credentials are never read, stored or passed. A key in your shell can silently bill per token. Why a subscription: per token costs far more. In grey: whether it suits your plan is for you to check.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/running-your-own-claude-subscription-unattended/hero-dark.png</image:loc>
   <image:caption>A card headed Your login, nobody else’s, about what Mullet does with Claude. The worker is the normal claude command. Claude credentials are never read, stored or passed. A key in your shell can silently bill per token. Why a subscription: per token costs far more. In grey: whether it suits your plan is for you to check.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-mullet-doesnt-use-freellmapi</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-mullet-doesnt-use-freellmapi/hero.png</image:loc>
   <image:caption>A card headed Why Mullet doesn’t use FreeLLMAPI: choose each model yourself, and check its work either way. With a router, who did the work is hidden from me, each tier has its own terms, and when quota runs out a weaker model takes over unseen. So I pick each model myself.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-mullet-doesnt-use-freellmapi/hero-dark.png</image:loc>
   <image:caption>A card headed Why Mullet doesn’t use FreeLLMAPI: choose each model yourself, and check its work either way. With a router, who did the work is hidden from me, each tier has its own terms, and when quota runs out a weaker model takes over unseen. So I pick each model myself.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-30-minute-test-suite-in-five</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-30-minute-test-suite-in-five/hero.png</image:loc>
   <image:caption>Two bars: the old Mullet test run of about 30 minutes in series, and the new run of about 5 minutes across 8 workers.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-30-minute-test-suite-in-five/hero-dark.png</image:loc>
   <image:caption>Two bars: the old Mullet test run of about 30 minutes in series, and the new run of about 5 minutes across 8 workers.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/safe-by-default-a-local-ai-server-and-a-cheap-model-with-a-shell</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/safe-by-default-a-local-ai-server-and-a-cheap-model-with-a-shell/hero.png</image:loc>
   <image:caption>A card headed Safe by default: three defaults I didn’t like, closed before 2.1.0. The local server now refuses requests not from you, fetching pages is limited to public addresses, and cheap models get reading and browsing only. In grey: one exception left in, and documented.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/safe-by-default-a-local-ai-server-and-a-cheap-model-with-a-shell/hero-dark.png</image:loc>
   <image:caption>A card headed Safe by default: three defaults I didn’t like, closed before 2.1.0. The local server now refuses requests not from you, fetching pages is limited to public addresses, and cheap models get reading and browsing only. In grey: one exception left in, and documented.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/we-checked-the-bill-and-our-ledger-was-wrong-by-half</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/we-checked-the-bill-and-our-ledger-was-wrong-by-half/hero.png</image:loc>
   <image:caption>A card headed I checked the bill: my ledger against what the providers billed. A weekend of jobs: about $38 in the ledger, about $50 billed. One provider: $8.04 in the ledger, $20.15 billed. Its requests and tokens matched to 0.2%, but the dollars did not.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/we-checked-the-bill-and-our-ledger-was-wrong-by-half/hero-dark.png</image:loc>
   <image:caption>A card headed I checked the bill: my ledger against what the providers billed. A weekend of jobs: about $38 in the ledger, about $50 billed. One provider: $8.04 in the ledger, $20.15 billed. Its requests and tokens matched to 0.2%, but the dollars did not.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/cheap-models-only-for-work-that-is-safe-to-be-wrong-about</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/cheap-models-only-for-work-that-is-safe-to-be-wrong-about/hero.png</image:loc>
   <image:caption>Cheap only where a gate can catch it. Figures from 101 attempts: a worker said done 72 times, 30 of those then failed a gate, and the review was the first gate to fail for 23 of the 40 failures. Below them, the rule: cheap first only where something independent checks.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/cheap-models-only-for-work-that-is-safe-to-be-wrong-about/hero-dark.png</image:loc>
   <image:caption>Cheap only where a gate can catch it. Figures from 101 attempts: a worker said done 72 times, 30 of those then failed a gate, and the review was the first gate to fail for 23 of the 40 failures. Below them, the rule: cheap first only where something independent checks.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/decision-records-for-a-solo-project</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/decision-records-for-a-solo-project/hero.png</image:loc>
   <image:caption>A card headed Eleven decision records: so nobody undoes a rule whose reason I’ve forgotten. The useful part is the consequences. The first six are under 250 words. They are read by me, contributors and coding agents. Worth it on my own: yes, they cost so little. In grey: a long, exact record beats a short, vague one.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/decision-records-for-a-solo-project/hero-dark.png</image:loc>
   <image:caption>A card headed Eleven decision records: so nobody undoes a rule whose reason I’ve forgotten. The useful part is the consequences. The first six are under 250 words. They are read by me, contributors and coding agents. Worth it on my own: yes, they cost so little. In grey: a long, exact record beats a short, vague one.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/having-a-second-agent-review-the-first-agents-work-and-what-it-found</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/having-a-second-agent-review-the-first-agents-work-and-what-it-found/hero.png</image:loc>
   <image:caption>A card headed What the second review found, in Mullet’s own changes before 2.3.0 was released. A feature meant to save a paused job could pass a step whose review never finished. The other findings were smaller, each one fixed with a test. In grey: a review that finds nothing proves nothing.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/having-a-second-agent-review-the-first-agents-work-and-what-it-found/hero-dark.png</image:loc>
   <image:caption>A card headed What the second review found, in Mullet’s own changes before 2.3.0 was released. A feature meant to save a paused job could pass a step whose review never finished. The other findings were smaller, each one fixed with a test. In grey: a review that finds nothing proves nothing.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/putting-the-sandbox-behind-an-interface</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/putting-the-sandbox-behind-an-interface/hero.png</image:loc>
   <image:caption>Same sandbox, new interface. A table headed check and result. Argument lists compared, old code against new: 15,552. Differences: 0. Below it, two lines: shared tests that every backend must pass, and when no backend works, the work is refused and never runs unsandboxed.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/putting-the-sandbox-behind-an-interface/hero-dark.png</image:loc>
   <image:caption>Same sandbox, new interface. A table headed check and result. Argument lists compared, old code against new: 15,552. Differences: 0. Below it, two lines: shared tests that every backend must pass, and when no backend works, the work is refused and never runs unsandboxed.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/we-read-101-attempts-before-changing-anything</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/we-read-101-attempts-before-changing-anything/hero.png</image:loc>
   <image:caption>A card headed 101 attempts, 40 failed: what I counted before changing anything. 23 failed because a reviewer blocked a real defect, 2 on tests, and the rest mostly on how a step was planned. Workers said done 72 times, and 30 of those failed a check.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/we-read-101-attempts-before-changing-anything/hero-dark.png</image:loc>
   <image:caption>A card headed 101 attempts, 40 failed: what I counted before changing anything. 23 failed because a reviewer blocked a real defect, 2 on tests, and the rest mostly on how a step was planned. Workers said done 72 times, and 30 of those failed a check.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/rules-from-a-game-framework-for-web-and-print</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/rules-from-a-game-framework-for-web-and-print/hero.png</image:loc>
   <image:caption>Rules from a game framework. tokens: fixed once, never repeated. bug strings: no ‘undefined’ on screen. review: read a value, do not judge. briefs: required fields, no guessing. art: no text inside generated images.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/rules-from-a-game-framework-for-web-and-print/hero-dark.png</image:loc>
   <image:caption>Rules from a game framework. tokens: fixed once, never repeated. bug strings: no ‘undefined’ on screen. review: read a value, do not judge. briefs: required fields, no guessing. art: no text inside generated images.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-pdf-service-that-only-runs-on-your-machine</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-pdf-service-that-only-runs-on-your-machine/hero.png</image:loc>
   <image:caption>Terminal output headed “Asked to serve the network, it will not start”. Started with PRINTMD_HOST=0.0.0.0, the service says it is refusing to start because it only binds a loopback address such as 127.0.0.1. Started with PRINTMD_AUTH=token, it says this edition’s PDF API runs only on your own computer and hosting it is not supported.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/a-pdf-service-that-only-runs-on-your-machine/hero-dark.png</image:loc>
   <image:caption>Terminal output headed “Asked to serve the network, it will not start”. Started with PRINTMD_HOST=0.0.0.0, the service says it is refusing to start because it only binds a loopback address such as 127.0.0.1. Started with PRINTMD_AUTH=token, it says this edition’s PDF API runs only on your own computer and hosting it is not supported.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/page-options-custom-size-continuous-fit</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/page-options-custom-size-continuous-fit/hero.png</image:loc>
   <image:caption>PrintMD’s Page options dialog open over a lunch menu document: Custom size is ticked at 100 by 210 millimetres, the layout is One continuous page, Fit is set to Fit width and the margin is 8 millimetres.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/page-options-custom-size-continuous-fit/hero-dark.png</image:loc>
   <image:caption>PrintMD’s Page options dialog open over a lunch menu document: Custom size is ticked at 100 by 210 millimetres, the layout is One continuous page, Fit is set to Fit width and the margin is 8 millimetres.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/print-quality-pdfs-from-a-browser</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/print-quality-pdfs-from-a-browser/hero.png</image:loc>
   <image:caption>The PrintMD editor in the Dealmobile template with a release checklist: on the left the Markdown, on the right the printed page with italic section headings, a three-column table of steps and commands, and a code block labelled Bash.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/print-quality-pdfs-from-a-browser/hero-dark.png</image:loc>
   <image:caption>The PrintMD editor in the Dealmobile template with a release checklist: on the left the Markdown, on the right the printed page with italic section headings, a three-column table of steps and commands, and a code block labelled Bash.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-i-built-printmd</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-i-built-printmd/hero.png</image:loc>
   <image:caption>The PrintMD editor in the Unbranded template: on the left, the Markdown for a short note about moving team docs to Markdown, with a bulleted list, a table and a quotation; on the right, the same note as a printed page with a serif text face and a ruled Before and After table.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-i-built-printmd/hero-dark.png</image:loc>
   <image:caption>The PrintMD editor in the Unbranded template: on the left, the Markdown for a short note about moving team docs to Markdown, with a bulleted list, a table and a quotation; on the right, the same note as a printed page with a serif text face and a ruled Before and After table.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/checking-repos-for-prompt-injection-before-an-ai-reads-them</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/checking-repos-for-prompt-injection-before-an-ai-reads-them/hero.png</image:loc>
   <image:caption>Checked before an AI reads it. A prompt-injection scan of a search pool’s sources, 3 November 2026. text files, 18 public repos: 5,861. text files, Mullet’s own code: 1,401. agent-facing files read in full: 36. bidirectional or tag characters: none. encoded payloads: none. anything malicious: none. Kept out anyway: a blog quoting a system-reminder tag.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/checking-repos-for-prompt-injection-before-an-ai-reads-them/hero-dark.png</image:loc>
   <image:caption>Checked before an AI reads it. A prompt-injection scan of a search pool’s sources, 3 November 2026. text files, 18 public repos: 5,861. text files, Mullet’s own code: 1,401. agent-facing files read in full: 36. bidirectional or tag characters: none. encoded payloads: none. anything malicious: none. Kept out anyway: a blog quoting a system-reminder tag.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/mullets-code-is-private-now</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/mullets-code-is-private-now/hero.png</image:loc>
   <image:caption>Mullet’s code is private now. While I work on a new idea. the code: private. the writing: stays on this site. questions: the contact form.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/mullets-code-is-private-now/hero-dark.png</image:loc>
   <image:caption>Mullet’s code is private now. While I work on a new idea. the code: private. the writing: stays on this site. questions: the contact form.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tuning-a-search-pool-content-beat-weights</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/tuning-a-search-pool-content-beat-weights/hero.png</image:loc>
   <image:caption>Content beat weights. A Trawl pool scored on 15 questions with known answers. round 1, wizard config: MRR 0.489, hit@1 0.333, hit@5 0.733, hit@10 0.733. round 2, languages in, noise out: 0.533, 0.400, 0.667, 0.800. round 3, synonyms, 2 tests fixed: 0.542, 0.400, 0.667, 0.867. Every search-time setting tried: the same as round 1.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/tuning-a-search-pool-content-beat-weights/hero-dark.png</image:loc>
   <image:caption>Content beat weights. A Trawl pool scored on 15 questions with known answers. round 1, wizard config: MRR 0.489, hit@1 0.333, hit@5 0.733, hit@10 0.733. round 2, languages in, noise out: 0.533, 0.400, 0.667, 0.800. round 3, synonyms, 2 tests fixed: 0.542, 0.400, 0.667, 0.867. Every search-time setting tried: the same as round 1.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-a-forked-worker-can-wait-for-ever</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.7</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-a-forked-worker-can-wait-for-ever/hero.png</image:loc>
   <image:caption>28 minutes in, and not a second of CPU. The code pass of a Trawl reindex started through Mullet’s MCP server, 3 November 2026. top shows the MCP server, 1080119, at 13:38 of CPU time, and its three workers, 1523106, 1523107 and 1523108, in state S at 0:00.00. ps shows each worker waiting in futex_wait_queue, 28:46 after it started. Below: the job still reported “running”.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-a-forked-worker-can-wait-for-ever/hero-dark.png</image:loc>
   <image:caption>28 minutes in, and not a second of CPU. The code pass of a Trawl reindex started through Mullet’s MCP server, 3 November 2026. top shows the MCP server, 1080119, at 13:38 of CPU time, and its three workers, 1523106, 1523107 and 1523108, in state S at 0:00.00. ps shows each worker waiting in futex_wait_queue, 28:46 after it started. Below: the job still reported “running”.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/about</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/about/hero.png</image:loc>
   <image:caption>A timeline from 2004 to now with one bar per job: Summit Media, eCommerce Associates, Tigerfish, Wonga, Turner Broadcasting, then Bright Sites, first as a senior developer to 2018 and then as a senior development consultant, marked in red.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/about/hero-dark.png</image:loc>
   <image:caption>A timeline from 2004 to now with one bar per job: Summit Media, eCommerce Associates, Tigerfish, Wonga, Turner Broadcasting, then Bright Sites, first as a senior developer to 2018 and then as a senior development consultant, marked in red.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/accessibility</loc>
  <lastmod>2026-10-25T20:46:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/accessibility/hero.png</image:loc>
   <image:caption>The home page of this site shown twice side by side, in the light theme on the left and the dark theme on the right, with the same text readable in both.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/accessibility/hero-dark.png</image:loc>
   <image:caption>The home page of this site shown twice side by side, in the light theme on the left and the dark theme on the right, with the same text readable in both.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/colophon</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/colophon/hero.png</image:loc>
   <image:caption>A chain of five boxes: Markdown files in content, a CMS, a theme written for the site (highlighted), Cloudflare, and the visitor’s browser. Below it, a note that almost everything comes from this domain, the two exceptions being Cloudflare’s spam check and visit counter.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/colophon/hero-dark.png</image:loc>
   <image:caption>A chain of five boxes: Markdown files in content, a CMS, a theme written for the site (highlighted), Cloudflare, and the visitor’s browser. Below it, a note that almost everything comes from this domain, the two exceptions being Cloudflare’s spam check and visit counter.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/cookies</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/cookies/hero.png</image:loc>
   <image:caption>Four cards: the session cookie, set only if you send the contact form (highlighted); Cloudflare Web Analytics, which uses no cookies; the light or dark choice, kept in local storage and not a cookie; and Cloudflare’s own cookie for bot checks.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/cookies/hero-dark.png</image:loc>
   <image:caption>Four cards: the session cookie, set only if you send the contact form (highlighted); Cloudflare Web Analytics, which uses no cookies; the light or dark choice, kept in local storage and not a cookie; and Cloudflare’s own cookie for bot checks.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/legal</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/legal/hero.png</image:loc>
   <image:caption>Four boxes stacked top to bottom: your browser, Cloudflare, 123 Reg and Tom Gould, who runs the site as an individual (highlighted), beside the words “A personal site: sells nothing, no advertising”.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/legal/hero-dark.png</image:loc>
   <image:caption>Four boxes stacked top to bottom: your browser, Cloudflare, 123 Reg and Tom Gould, who runs the site as an individual (highlighted), beside the words “A personal site: sells nothing, no advertising”.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/privacy</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/privacy/hero.png</image:loc>
   <image:caption>The contact form’s four fields, name, email address, reason and message, lead to two boxes: the message is emailed to me and not kept by the site, and short-lived anti-spam records last from 5 minutes to 30 days.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/privacy/hero-dark.png</image:loc>
   <image:caption>The contact form’s four fields, name, email address, reason and message, lead to two boxes: the message is emailed to me and not kept by the site, and short-lived anti-spam records last from 5 minutes to 30 days.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/terms</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/terms/hero.png</image:loc>
   <image:caption>Three cards: what is welcome (read, link, share, quote short extracts with a link back), what to ask first (anything beyond a short extract), and what not to do (break or overload the site, enter non-public parts, send spam).</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/terms/hero-dark.png</image:loc>
   <image:caption>Three cards: what is welcome (read, link, share, quote short extracts with a link back), what to ask first (anything beyond a short extract), and what not to do (break or overload the site, enter non-public parts, send spam).</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/dealmobile</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/dealmobile/dealmobile-2012.png</image:loc>
   <image:title>Deal Mobile in June 2012, comparing the HTC One X with the Samsung Galaxy S III. From the Internet Archive’s Wayback Machine.</image:title>
   <image:caption>The Deal Mobile home page in June 2012: the DealMobile.co.uk logo, a menu of phones, deals, Android, pay as you go, SIM-free, SIM-only, broadband and free gifts, the date the deals were last updated, and an article comparing the HTC One X with the Samsung Galaxy S III.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/dealmobile/dealmobile-2018.png</image:loc>
   <image:title>Deal Mobile in December 2018, with the Galaxy S7 and the iPhone 6s at the top. Also from the Wayback Machine.</image:title>
   <image:caption>The Deal Mobile home page in December 2018, saying it had 1,372 phones, 29,300 tariffs and 134,430 deals, with the Samsung Galaxy S7 and the iPhone 6s at the top of the list.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/dealmobile/hero.png</image:loc>
   <image:caption>A timeline from 2011 to 2026. Deal Mobile, the phone deals site, runs from late 2011 to 2019, with 994,202 deals in November 2011 and 1,032,942 at the end of 2015, then a holding page and this site, highlighted.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/pages/dealmobile/hero-dark.png</image:loc>
   <image:caption>A timeline from 2011 to 2026. Deal Mobile, the phone deals site, runs from late 2011 to 2019, with 994,202 deals in November 2011 and 1,032,942 at the end of 2015, then a holding page and this site, highlighted.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/apple-news-api</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/apple-news-api.png</image:loc>
   <image:caption>PHP code from the library’s quick start: an article is created with an identifier, a title and a language, a title, a photo and a body are added to it, and createArticle publishes it to a channel and prints the new article’s ID.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/apple-news-api-dark.png</image:loc>
   <image:caption>PHP code from the library’s quick start: an article is created with an identifier, a title and a language, a title, a photo and a body are added to it, and createArticle publishes it to a channel and prints the new article’s ID.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/puzzler-php-sdk</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/puzzler-php-sdk.png</image:loc>
   <image:caption>A terminal showing one signed request built by the Puzzler PHP SDK: the POST address, client ID, API key and timestamp headers, a highlighted signature and the JSON body.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/puzzler-php-sdk-dark.png</image:loc>
   <image:caption>A terminal showing one signed request built by the Puzzler PHP SDK: the POST address, client ID, API key and timestamp headers, a highlighted signature and the JSON body.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/reelify</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/reelify.png</image:loc>
   <image:caption>A 30 second recording shown as a bar of idle, active and idle stretches, with an arrow labelled reelify process pointing to a 5.7 second summary and a frame from it.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/reelify-dark.png</image:loc>
   <image:caption>A 30 second recording shown as a bar of idle, active and idle stretches, with an arrow labelled reelify process pointing to a 5.7 second summary and a frame from it.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/rss-to-json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/rss-to-json.png</image:loc>
   <image:caption>A feed item as XML on the left and the JSON that RSS to JSON’s command prints for it on the right, with attributes under @attributes and repeated categories as a list.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/rss-to-json-dark.png</image:loc>
   <image:caption>A feed item as XML on the left and the JSON that RSS to JSON’s command prints for it on the right, with attributes under @attributes and repeated categories as a list.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/scrape</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/scrape.png</image:loc>
   <image:caption>Terminal output from Scrape downloading five files from a test directory listing into a local folder tree, ending in 5 successful and 0 failed.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/scrape-dark.png</image:loc>
   <image:caption>Terminal output from Scrape downloading five files from a test directory listing into a local folder tree, ending in 5 successful and 0 failed.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/scrapepy</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/scrapepy.png</image:loc>
   <image:caption>A Markdown file written by ScrapePy: its frontmatter with title, URL, date, page type, word count and domain highlighted, followed by the page’s heading and first link.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/scrapepy-dark.png</image:loc>
   <image:caption>A Markdown file written by ScrapePy: its frontmatter with title, URL, date, page type, word count and domain highlighted, followed by the page’s heading and first link.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/solar-calendar</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/solar-calendar-light.png</image:loc>
   <image:caption>The month view for the 8th month of solar 2026, with Gregorian dates beside each day and today marked.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/solar-calendar-dark.png</image:loc>
   <image:caption>The month view for the 8th month of solar 2026, with Gregorian dates beside each day and today marked.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/turbopush</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/turbopush-light.png</image:loc>
   <image:caption>The TurboPush demo, headed “Big files, sent in chunks.”: a drop zone for up to five files of 50 MB, with options to make chunks fail and to carry on after a reload.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/turbopush-dark.png</image:loc>
   <image:caption>The TurboPush demo, headed “Big files, sent in chunks.”: a drop zone for up to five files of 50 MB, with options to make chunks fail and to carry on after a reload.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/where-should-i-live</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/where-should-i-live-light.png</image:loc>
   <image:caption>The results page filtered to Europe for a business owner on £150,000 with a UK passport: 42 cities match, and Limassol in Cyprus ranks first with a score of 85, a 15% tax rate and monthly costs of £1,211.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/where-should-i-live-dark.png</image:loc>
   <image:caption>The results page filtered to Europe for a business owner on £150,000 with a UK passport: 42 cities match, and Limassol in Cyprus ranks first with a score of 85, a 15% tax rate and monthly costs of £1,211.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/github-auditor</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/github-auditor.png</image:loc>
   <image:caption>Part of a GitHub Auditor activity report, rendered from its Markdown: a developer leaderboard of commits, lines, pull requests and reviews, a separate table for a dependency bot, and the lines left out of each person’s count. The organisation, repositories and people are made-up sample data.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/github-auditor-dark.png</image:loc>
   <image:caption>Part of a GitHub Auditor activity report, rendered from its Markdown: a developer leaderboard of commits, lines, pull requests and reviews, a separate table for a dependency bot, and the lines left out of each person’s count. The organisation, repositories and people are made-up sample data.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/mullet</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/mullet-outcome.png</image:loc>
   <image:caption>Mullet, coding jobs that run while I’m away. On 24 October it built three of its own features overnight, each in five to seven steps. A step is done when its own checks pass, each feature was merged after I read the diff, and the code is private.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/mullet-outcome-dark.png</image:loc>
   <image:caption>Mullet, coding jobs that run while I’m away. On 24 October it built three of its own features overnight, each in five to seven steps. A step is done when its own checks pass, each feature was merged after I read the diff, and the code is private.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/trove</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/trove.png</image:loc>
   <image:caption>A Trove search in a terminal for “write a custom reranker plugin”, over an index of Trove’s own documentation used as sample data. Each of the three results shows its re-ranking, keyword, vector and combined scores, and the plugin guide comes first although another chunk had a higher combined score.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/trove-dark.png</image:loc>
   <image:caption>A Trove search in a terminal for “write a custom reranker plugin”, over an index of Trove’s own documentation used as sample data. Each of the three results shows its re-ranking, keyword, vector and combined scores, and the plugin guide comes first although another chunk had a higher combined score.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/tcl-google-tv-tools</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/tcl-google-tv-tools.png</image:loc>
   <image:caption>The TV’s home screen after decluttering, in Projectivy Launcher: one Fire Stick input, then a row of apps starting with TV, BBC iPlayer, ITVX, Channel 4, 5 and Netflix, with nothing recommended.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/printmd</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/printmd.png</image:loc>
   <image:caption>The PrintMD editor with a short document called Paper sizes, briefly: the Markdown on the left, with its front matter and a table of A sizes, and on the right the cover page in the Dealmobile template, its title in heavy black type with the last word in red italic.</image:caption>
  </image:image>
  <image:image>
   <image:loc>https://www.dealmobile.co.uk/sites/default/files/content/images/products/printmd-dark.png</image:loc>
   <image:caption>The PrintMD editor with a short document called Paper sizes, briefly: the Markdown on the left, with its front matter and a table of A sizes, and on the right the cover page in the Dealmobile template, its title in heavy black type with the last word in red italic.</image:caption>
  </image:image>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/typescript</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/php</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/security</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/javascript</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/testing</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/data</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/apis</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/python</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/scraping</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/markdown</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/ai</loc>
  <lastmod>2026-10-20T16:43:59+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/search</loc>
  <lastmod>2026-10-20T16:43:59+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/android</loc>
  <lastmod>2026-10-23T09:39:14+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/mullet</loc>
  <lastmod>2026-10-25T14:57:40+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/tcl-google-tv-tools</loc>
  <lastmod>2026-10-25T14:57:40+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/printmd</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.4</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/index.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/index.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/cv.md</loc>
  <lastmod>2026-10-26T08:12:46+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/cv.json</loc>
  <lastmod>2026-10-26T08:12:46+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/contact.json</loc>
  <changefreq>yearly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/making-large-uploads-resumable.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/making-large-uploads-resumable.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/one-source-of-truth-behind-a-static-app.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/one-source-of-truth-behind-a-static-app.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/publishing-to-apple-news-from-php.md</loc>
  <lastmod>2026-10-26T08:12:46+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/publishing-to-apple-news-from-php.json</loc>
  <lastmod>2026-10-26T08:12:46+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/saving-websites-for-offline-reading.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/saving-websites-for-offline-reading.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-the-solar-calendar-has-13-months.md</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-the-solar-calendar-has-13-months.json</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/combining-keyword-and-vector-search.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/combining-keyword-and-vector-search.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/counting-developer-activity-from-git.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/counting-developer-activity-from-git.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/calendar-feed-and-badge-from-a-worker.md</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/calendar-feed-and-badge-from-a-worker.json</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/fetching-feeds-from-untrusted-urls.md</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/fetching-feeds-from-untrusted-urls.json</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/testing-servers-against-an-upload-protocol.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/testing-servers-against-an-upload-protocol.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/cloning-repositories-without-a-token-in-the-url.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/cloning-repositories-without-a-token-in-the-url.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/finding-the-dull-parts-of-a-screen-recording.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/finding-the-dull-parts-of-a-screen-recording.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/indexing-code-by-function-class-and-method.md</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/indexing-code-by-function-class-and-method.json</loc>
  <lastmod>2026-11-01T22:36:55+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/live-coverage-on-apple-news-from-php.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/live-coverage-on-apple-news-from-php.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/one-json-shape-for-rss-atom-and-rdf.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/one-json-shape-for-rss-atom-and-rdf.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/rewriting-an-old-scraper-around-curl-multi.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/rewriting-an-old-scraper-around-curl-multi.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/taxing-a-household-one-earner-at-a-time.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/taxing-a-household-one-earner-at-a-time.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/testing-an-api-client-without-the-network.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/testing-an-api-client-without-the-network.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/turning-web-pages-into-clean-markdown.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/turning-web-pages-into-clean-markdown.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-fourth-screen-on-the-living-room-tv.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-fourth-screen-on-the-living-room-tv.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/decluttering-a-tcl-google-tv.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/decluttering-a-tcl-google-tv.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/letting-an-agent-drive-the-tv.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/letting-an-agent-drive-the-tv.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/the-packages-i-kept-on-a-google-tv.md</loc>
  <lastmod>2026-10-25T22:31:47+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/the-packages-i-kept-on-a-google-tv.json</loc>
  <lastmod>2026-10-25T22:31:47+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-tv-remote-from-the-command-line.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-tv-remote-from-the-command-line.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-markdown-version-of-every-page.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-markdown-version-of-every-page.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/gates-not-a-models-word.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/gates-not-a-models-word.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/mullet-2-coding-jobs-you-can-leave-running.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/mullet-2-coding-jobs-you-can-leave-running.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/running-your-own-claude-subscription-unattended.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/running-your-own-claude-subscription-unattended.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-mullet-doesnt-use-freellmapi.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-mullet-doesnt-use-freellmapi.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-30-minute-test-suite-in-five.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-30-minute-test-suite-in-five.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/safe-by-default-a-local-ai-server-and-a-cheap-model-with-a-shell.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/safe-by-default-a-local-ai-server-and-a-cheap-model-with-a-shell.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/we-checked-the-bill-and-our-ledger-was-wrong-by-half.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/we-checked-the-bill-and-our-ledger-was-wrong-by-half.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/cheap-models-only-for-work-that-is-safe-to-be-wrong-about.md</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/cheap-models-only-for-work-that-is-safe-to-be-wrong-about.json</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/decision-records-for-a-solo-project.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/decision-records-for-a-solo-project.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/having-a-second-agent-review-the-first-agents-work-and-what-it-found.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/having-a-second-agent-review-the-first-agents-work-and-what-it-found.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/putting-the-sandbox-behind-an-interface.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/putting-the-sandbox-behind-an-interface.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/we-read-101-attempts-before-changing-anything.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/we-read-101-attempts-before-changing-anything.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/rules-from-a-game-framework-for-web-and-print.md</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/rules-from-a-game-framework-for-web-and-print.json</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-pdf-service-that-only-runs-on-your-machine.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/a-pdf-service-that-only-runs-on-your-machine.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/page-options-custom-size-continuous-fit.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/page-options-custom-size-continuous-fit.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/print-quality-pdfs-from-a-browser.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/print-quality-pdfs-from-a-browser.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-i-built-printmd.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-i-built-printmd.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/checking-repos-for-prompt-injection-before-an-ai-reads-them.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/checking-repos-for-prompt-injection-before-an-ai-reads-them.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/mullets-code-is-private-now.md</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/mullets-code-is-private-now.json</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tuning-a-search-pool-content-beat-weights.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tuning-a-search-pool-content-beat-weights.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-a-forked-worker-can-wait-for-ever.md</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/why-a-forked-worker-can-wait-for-ever.json</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/about.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/about.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/accessibility.md</loc>
  <lastmod>2026-10-25T20:46:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/accessibility.json</loc>
  <lastmod>2026-10-25T20:46:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/colophon.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/colophon.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/cookies.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/cookies.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/legal.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/legal.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/privacy.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/privacy.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/terms.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/terms.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/dealmobile.md</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/dealmobile.json</loc>
  <lastmod>2026-10-25T22:06:26+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/apple-news-api.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/apple-news-api.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/puzzler-php-sdk.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/puzzler-php-sdk.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/reelify.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/reelify.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/rss-to-json.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/rss-to-json.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/scrape.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/scrape.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/scrapepy.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/scrapepy.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/solar-calendar.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/solar-calendar.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/turbopush.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/turbopush.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/where-should-i-live.md</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/where-should-i-live.json</loc>
  <lastmod>2026-11-04T01:43:24+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/github-auditor.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/github-auditor.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/mullet.md</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/mullet.json</loc>
  <lastmod>2026-11-04T02:31:11+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/trove.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/trove.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/tcl-google-tv-tools.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/tcl-google-tv-tools.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/printmd.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/projects/printmd.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/typescript.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/typescript.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/php.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/php.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/security.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/security.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/javascript.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/javascript.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/testing.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/testing.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/data.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/data.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/apis.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/apis.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/python.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/python.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/scraping.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/scraping.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/markdown.md</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/markdown.json</loc>
  <lastmod>2026-10-20T10:43:31+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/ai.md</loc>
  <lastmod>2026-10-20T16:43:59+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/ai.json</loc>
  <lastmod>2026-10-20T16:43:59+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/search.md</loc>
  <lastmod>2026-10-20T16:43:59+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/search.json</loc>
  <lastmod>2026-10-20T16:43:59+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/android.md</loc>
  <lastmod>2026-10-23T09:39:14+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/android.json</loc>
  <lastmod>2026-10-23T09:39:14+01:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/mullet.md</loc>
  <lastmod>2026-10-25T14:57:40+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/mullet.json</loc>
  <lastmod>2026-10-25T14:57:40+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/tcl-google-tv-tools.md</loc>
  <lastmod>2026-10-25T14:57:40+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/tcl-google-tv-tools.json</loc>
  <lastmod>2026-10-25T14:57:40+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/printmd.md</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
 <url>
  <loc>https://www.dealmobile.co.uk/writing/tag/printmd.json</loc>
  <lastmod>2026-11-02T11:22:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.3</priority>
 </url>
</urlset>
