<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Platform For One</title>
    <description>The latest articles on DEV Community by Platform For One (@platformforone).</description>
    <link>https://dev.to/platformforone</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4128455%2Fa0692c32-4060-43b3-9f36-f38e684ea3f7.jpg</url>
      <title>DEV Community: Platform For One</title>
      <link>https://dev.to/platformforone</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/platformforone"/>
    <language>en</language>
    <item>
      <title>04. Eighty seconds that changed the plan</title>
      <dc:creator>Platform For One</dc:creator>
      <pubDate>Fri, 25 Sep 2026 07:08:11 +0000</pubDate>
      <link>https://dev.to/platformforone/04-eighty-seconds-that-changed-the-plan-3mp1</link>
      <guid>https://dev.to/platformforone/04-eighty-seconds-that-changed-the-plan-3mp1</guid>
      <description>&lt;p&gt;I got to measurements and got a number that forced me to reshuffle the whole plan.&lt;/p&gt;

&lt;p&gt;One agent step: a context of about 6 thousand tokens, an answer of about 350 tokens: &lt;strong&gt;77.5 seconds&lt;/strong&gt;. Of those, 48 seconds went to prompt processing alone; generation was not even the main cost.&lt;/p&gt;

&lt;p&gt;Now multiply. An agent rarely solves a task in one iteration; ten iterations is 13 minutes &lt;strong&gt;before&lt;/strong&gt; the tests run. Add the tests and a second pass.&lt;/p&gt;

&lt;p&gt;An unpleasant consequence followed: the whole value of the future stages, the queue, the isolation, the sandbox, rested on the assumption that a local model can drive an agent loop. And nobody had checked that assumption.&lt;/p&gt;

&lt;p&gt;The decision: put a separate short experiment on five to ten real tasks in front of the construction. Not "I'll try and see", but with thresholds written down in advance: what percentage of tasks must be solved, in what time, how many broken answers are acceptable.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>03. Client keys without a database</title>
      <dc:creator>Platform For One</dc:creator>
      <pubDate>Wed, 23 Sep 2026 07:01:31 +0000</pubDate>
      <link>https://dev.to/platformforone/03-client-keys-without-a-database-4mdo</link>
      <guid>https://dev.to/platformforone/03-client-keys-without-a-database-4mdo</guid>
      <description>&lt;p&gt;I wanted to hand out different gateway keys to different clients: to see who spent how much, and to revoke access one at a time rather than all at once.&lt;/p&gt;

&lt;p&gt;The stock way in LiteLLM is to stand up Postgres for that. A database just for keys on a single laptop looked like overkill, so I went through a custom auth function instead.&lt;/p&gt;

&lt;p&gt;I stumbled on something non-obvious: in the pinned version this function &lt;strong&gt;replaces the built-in check entirely&lt;/strong&gt;. There is no fallback to the master key inside it. So if you write it naively, "I check my keys and hand the rest to the gateway", the master key stops working and the admin endpoints fall off. I learned this not from the docs but from the source of that tag.&lt;/p&gt;

&lt;p&gt;The fix: my function checks both the client keys and the master key, reading the latter straight from the environment.&lt;/p&gt;

&lt;p&gt;The price: I am tied to the behaviour of one specific gateway version, and on every upgrade this is the first thing to re-check.&lt;/p&gt;

</description>
      <category>api</category>
      <category>authentication</category>
      <category>backend</category>
      <category>security</category>
    </item>
    <item>
      <title>02. The first working path, and the first hole in it</title>
      <dc:creator>Platform For One</dc:creator>
      <pubDate>Mon, 21 Sep 2026 09:00:14 +0000</pubDate>
      <link>https://dev.to/platformforone/02-the-first-working-path-and-the-first-hole-in-it-2k9a</link>
      <guid>https://dev.to/platformforone/02-the-first-working-path-and-the-first-hole-in-it-2k9a</guid>
      <description>&lt;p&gt;The first step was simple: a local model, a gateway in front of it, a web UI on top. It worked within an evening.&lt;/p&gt;

&lt;p&gt;Then I looked at it soberly and found four things, each of which made "it works" untrue:&lt;/p&gt;

&lt;p&gt;— the gateway answered &lt;code&gt;200&lt;/code&gt; to a request with no key at all;&lt;br&gt;
— I was starting the runtime by hand, and after a reboot it did not come back;&lt;br&gt;
— the images sat on floating tags, so the next &lt;code&gt;pull&lt;/code&gt; could break everything silently;&lt;br&gt;
— none of this lived in Git.&lt;/p&gt;

&lt;p&gt;The conclusion became a rule for me: &lt;strong&gt;whatever is started by hand and not written down as a script or config is considered non-existent.&lt;/strong&gt; Not "should be tidied up someday", non-existent. Otherwise moving to another machine turns into archaeology from memory.&lt;/p&gt;

&lt;p&gt;Fixed: autostart through launchd, keys on every entrance, image versions pinned, everything under Git.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>01. Why build your own at all</title>
      <dc:creator>Platform For One</dc:creator>
      <pubDate>Fri, 18 Sep 2026 09:00:16 +0000</pubDate>
      <link>https://dev.to/platformforone/01-why-build-your-own-at-all-166l</link>
      <guid>https://dev.to/platformforone/01-why-build-your-own-at-all-166l</guid>
      <description>&lt;p&gt;I am building a home AI platform. Not a chat with a model, a platform: you give it a task, close the laptop, walk away; it does the work on its own and hands back the result later.&lt;/p&gt;

&lt;p&gt;The reason is not saving on subscriptions. The reason is that some of my data I do not want to send outside at all, and some tasks I want to leave running overnight without questions about limits.&lt;/p&gt;

&lt;p&gt;The hardware is a MacBook Pro M3 Pro, 36 GB. It is not a server, and that is the whole point of interest: almost everything I run into from here on will hit memory, not code.&lt;/p&gt;

&lt;p&gt;The rule I put at the very start, and will keep bumping into all the way: the platform has no right to get in the way of my main work on the same machine.&lt;/p&gt;

&lt;p&gt;From here on I will write it up step by step: what I wanted, what I stumbled on, what I decided, and what I pay for it.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>hardware</category>
      <category>software</category>
    </item>
  </channel>
</rss>
