<?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: trimtab.signal</title>
    <description>The latest articles on DEV Community by trimtab.signal (@trimtabsignal).</description>
    <link>https://dev.to/trimtabsignal</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%2F4001385%2F4115c5ac-b79f-4503-ae13-ccdef23141e9.png</url>
      <title>DEV Community: trimtab.signal</title>
      <link>https://dev.to/trimtabsignal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/trimtabsignal"/>
    <language>en</language>
    <item>
      <title>SOC 2 readiness for open-source projects on a zero budget</title>
      <dc:creator>trimtab.signal</dc:creator>
      <pubDate>Fri, 25 Sep 2026 21:12:20 +0000</pubDate>
      <link>https://dev.to/trimtabsignal/soc-2-readiness-for-open-source-projects-on-a-zero-budget-cmm</link>
      <guid>https://dev.to/trimtabsignal/soc-2-readiness-for-open-source-projects-on-a-zero-budget-cmm</guid>
      <description>&lt;p&gt;SOC 2 audits are sold as a spend: a compliance vendor, a policy consultant, a&lt;br&gt;
surveillance stack. Small open-source projects conclude the trust signal is&lt;br&gt;
unaffordable and quietly skip it. This post argues the opposite — readiness is&lt;br&gt;
a paper trail plus evidence, and you can assemble both for zero dollars.&lt;/p&gt;

&lt;p&gt;The P31 approach starts with an evidence collector. &lt;code&gt;scripts/evidence-collect.mjs&lt;/code&gt;&lt;br&gt;
walks the repo, pulls timestamps, test runs, deploy logs, and dependency data,&lt;br&gt;
and emits a &lt;code&gt;controls-index.json&lt;/code&gt; that maps every collected control to the&lt;br&gt;
Security TSC. When an auditor asks "show me your access controls," the answer&lt;br&gt;
is a file, not a scavenger hunt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node scripts/evidence-collect.mjs &lt;span class="nt"&gt;--out&lt;/span&gt; controls-index.json
node scripts/sbom.mjs            &lt;span class="c"&gt;# CycloneDX 1.5 SBOM&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An SBOM is the second pillar. &lt;code&gt;scripts/sbom.mjs&lt;/code&gt; emits a CycloneDX 1.5 SBOM&lt;br&gt;
from the lockfiles, so the dependency surface is machine-readable and current.&lt;br&gt;
Between the controls index and the SBOM you can answer the two questions&lt;br&gt;
auditors ask first: what do you run, and how do you prove what you said?&lt;/p&gt;

&lt;p&gt;The Trust Center is the third pillar: a public surface answering the ten&lt;br&gt;
questions customers actually raise before procurement — data residency,&lt;br&gt;
retention, encryption, access, incidents, compliance status. Ten pre-answered&lt;br&gt;
questions is a documentation artifact, not a SaaS product.&lt;/p&gt;

&lt;p&gt;The final pillar is signing. P31 signs artifacts with an in-house dual scheme —&lt;br&gt;
ML-DSA-65 (FIPS 204) plus Ed25519 — via the p31-crypto module, giving releases&lt;br&gt;
a post-quantum trust anchor without licensing a signing service.&lt;/p&gt;

&lt;p&gt;The honest caveat: this gets you &lt;em&gt;ready&lt;/em&gt;, not certified. Formal SOC 2&lt;br&gt;
attestation still needs a licensed auditor. But you enter that process with&lt;br&gt;
evidence, an SBOM, a Trust Center, and a signing story — which is a far better&lt;br&gt;
position than a project that skipped the prep because it thought compliance&lt;br&gt;
required a budget.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;soc2&lt;/code&gt;, &lt;code&gt;compliance&lt;/code&gt;, &lt;code&gt;opensource&lt;/code&gt;, &lt;code&gt;security&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>soc2</category>
      <category>compliance</category>
      <category>opensource</category>
      <category>security</category>
    </item>
    <item>
      <title>DORA metrics + SLOs without external infrastructure: a Cloudflare Workers approach</title>
      <dc:creator>trimtab.signal</dc:creator>
      <pubDate>Fri, 25 Sep 2026 20:48:37 +0000</pubDate>
      <link>https://dev.to/trimtabsignal/dora-metrics-slos-without-external-infrastructure-a-cloudflare-workers-approach-423c</link>
      <guid>https://dev.to/trimtabsignal/dora-metrics-slos-without-external-infrastructure-a-cloudflare-workers-approach-423c</guid>
      <description>&lt;p&gt;You do not need Prometheus, a metrics SaaS, or a dedicated observability stack&lt;br&gt;
to run DORA-style delivery metrics and service-level objectives. On Cloudflare&lt;br&gt;
Workers you already own the two things SLOs need: an execution environment and&lt;br&gt;
a durable store. This post shows the P31 approach: telemetry rows in D1, a&lt;br&gt;
cron worker that rolls them up, and a burn-rate dashboard driven by plain SQL.&lt;/p&gt;

&lt;p&gt;Every request appends a row to the &lt;code&gt;api_usage&lt;/code&gt; table — method, route, status,&lt;br&gt;
latency, timestamp. Nothing fancy, but it is the raw material for both&lt;br&gt;
availability and latency percentiles, and it costs almost nothing to store.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- error budget window: 30 days, target 99.9% availability&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;error_rate&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;api_usage&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'now'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'-30 days'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SLO is 99.9% availability, which yields roughly 43 minutes of allowed&lt;br&gt;
downtime per month. From that budget the worker classifies burn as &lt;code&gt;fast&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;slow&lt;/code&gt;, or &lt;code&gt;ok&lt;/code&gt;. Fast burn means the budget is being consumed at multiples of&lt;br&gt;
the rate; it triggers the immediate channel. Slow burn is the quiet killer and&lt;br&gt;
triggers a review. &lt;code&gt;ok&lt;/code&gt; requires no action — and the p95/p99 latency numbers&lt;br&gt;
ride along in the same rollup.&lt;/p&gt;

&lt;p&gt;The cron runs on the platform via &lt;code&gt;p31-ci&lt;/code&gt; (Cloudflare cron triggers), so the&lt;br&gt;
whole pipeline is &lt;code&gt;api_usage&lt;/code&gt; rows → SQL rollup → status page, with no external&lt;br&gt;
infrastructure and no third-party dependencies. You can reproduce the entire&lt;br&gt;
stack in a day and delete your observability vendor.&lt;/p&gt;

&lt;p&gt;The three SLOs to start with: availability (99.9%), p95 latency, p99 latency.&lt;br&gt;
Everything else is a refinement.&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>slo</category>
      <category>observability</category>
      <category>workers</category>
    </item>
    <item>
      <title>The spoon-dial: capacity-aware financial UI for neurodivergent users</title>
      <dc:creator>trimtab.signal</dc:creator>
      <pubDate>Fri, 25 Sep 2026 20:48:36 +0000</pubDate>
      <link>https://dev.to/trimtabsignal/the-spoon-dial-capacity-aware-financial-ui-for-neurodivergent-users-1eo1</link>
      <guid>https://dev.to/trimtabsignal/the-spoon-dial-capacity-aware-financial-ui-for-neurodivergent-users-1eo1</guid>
      <description>&lt;p&gt;Financial dashboards are built for peak attention. Dense grids, live tickers,&lt;br&gt;
twenty widgets competing for one pair of eyes. For the roughly 1.3 billion&lt;br&gt;
people living with significant disability — 16% of the global population —&lt;br&gt;
that interface is not merely unfriendly, it is a barrier to managing their own&lt;br&gt;
money. The P31 spoon-dial starts from the opposite assumption: the user knows&lt;br&gt;
their capacity, and the interface should adapt to it.&lt;/p&gt;

&lt;p&gt;The spoon model is a 0–5 cognitive-capacity dial. At 5 the user is fully&lt;br&gt;
available; at 0 they are in crisis. Every surface maps three axes to that&lt;br&gt;
number: motion, density, and disclosure. Motion scales by level — 4–5 at full&lt;br&gt;
scale, 3 at 0.6, 1–2 at 0.2, 0 at zero. Density and disclosure follow the same&lt;br&gt;
curve.&lt;/p&gt;

&lt;p&gt;At spoons 1–2 the screen shows the top three widgets only, with progressive&lt;br&gt;
disclosure; at 5 the full grid expands. At 0, motion is disabled entirely and a&lt;br&gt;
CalmOverlay replaces the live dashboard with a single settling surface.&lt;br&gt;
Feedback follows five states rather than binary good/bad, so a borderline&lt;br&gt;
number does not read as catastrophe.&lt;/p&gt;

&lt;p&gt;The research basis is the spoons construct from spoon theory plus established&lt;br&gt;
WCAG and reduced-motion guidance — full citations live in&lt;br&gt;
&lt;code&gt;SPOON_MODEL_RESEARCH.md&lt;/code&gt;. The contrast with density-first fintech is&lt;br&gt;
deliberate: one number drives the entire interface instead of every number&lt;br&gt;
competing.&lt;/p&gt;

&lt;p&gt;Implementing the dial is a few CSS custom properties and one state machine.&lt;br&gt;
Motion scale and widget count key off the spoon value, so the interface is&lt;br&gt;
declarative rather than branchy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--spoons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="py"&gt;--motion-scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--motion-scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--motion-scale&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>fintech</category>
      <category>a11y</category>
      <category>neurodiversity</category>
      <category>uidesign</category>
    </item>
    <item>
      <title>Hash-chained revenue: why your agent payments need provenance</title>
      <dc:creator>trimtab.signal</dc:creator>
      <pubDate>Fri, 25 Sep 2026 20:21:23 +0000</pubDate>
      <link>https://dev.to/trimtabsignal/hash-chained-revenue-why-your-agent-payments-need-provenance-45o3</link>
      <guid>https://dev.to/trimtabsignal/hash-chained-revenue-why-your-agent-payments-need-provenance-45o3</guid>
      <description>&lt;p&gt;Every x402 settlement you have ever seen was, until recently, opaque. The&lt;br&gt;
merchant told you what they earned and you either trusted them or did not.&lt;br&gt;
For a capital-management tool that is not a trust model, it is a trust &lt;em&gt;crisis&lt;/em&gt;:&lt;br&gt;
drift and opacity are the two failure modes the ecosystem has not admitted.&lt;/p&gt;

&lt;p&gt;Drift happens silently. A rounding change in a fee, a replayed request, a&lt;br&gt;
transaction that settles twice — each one quietly breaks the ledger and nobody&lt;br&gt;
can see where. Opacity is worse: even a perfectly accurate revenue number is&lt;br&gt;
unfalsifiable if the reader cannot inspect the entries that produced it. The&lt;br&gt;
fix is not a better dashboard. It is a data structure.&lt;/p&gt;

&lt;p&gt;The P31 revenue ledger records every settlement with a SHA-256 prev-hash link,&lt;br&gt;
so each row commits to the entire history before it. Any edit to an old entry&lt;br&gt;
changes every subsequent hash. The chain is cheap, dependency-free, and&lt;br&gt;
provable in a single HTTP round-trip.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"entry_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x9f1a…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"settlement_usdc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.02&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prev_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a31c…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sha256"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5d2b…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"audit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/audit/verify?hash=5d2b…"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The verify endpoint is public and unforgiving. &lt;code&gt;GET&lt;br&gt;
/api/revenue/verify-chain&lt;/code&gt; returns &lt;code&gt;{"valid":true}&lt;/code&gt; only when every prev-hash&lt;br&gt;
link matches and the chain is contiguous. Each revenue row carries an audit&lt;br&gt;
link (&lt;code&gt;/audit/verify?hash=…&lt;/code&gt;) so a single settlement can be checked on its own.&lt;/p&gt;

&lt;p&gt;None of this needs a blockchain. A hash chain over Cloudflare Workers + D1 is&lt;br&gt;
fast, free to operate, and gives agents the same provenance a block explorer&lt;br&gt;
gives a ledger. That is the point: provenance should be a property of the&lt;br&gt;
record, not a feature you pay for.&lt;/p&gt;

</description>
      <category>x402</category>
      <category>hashchain</category>
      <category>provenance</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to build an x402-native MCP server on Cloudflare Workers</title>
      <dc:creator>trimtab.signal</dc:creator>
      <pubDate>Fri, 25 Sep 2026 18:31:13 +0000</pubDate>
      <link>https://dev.to/trimtabsignal/how-to-build-an-x402-native-mcp-server-on-cloudflare-workers-4g25</link>
      <guid>https://dev.to/trimtabsignal/how-to-build-an-x402-native-mcp-server-on-cloudflare-workers-4g25</guid>
      <description>&lt;p&gt;The agent economy has a discovery layer (MCP) and a payment layer (x402), but&lt;br&gt;
almost nobody ships them on the same edge. This post builds an MCP server on&lt;br&gt;
Cloudflare Workers where every paid tool call is an HTTP 402 that settles in&lt;br&gt;
USDC. The result: eleven tools with per-call pricing, an operator tier for&lt;br&gt;
rebalancing, and zero payment infrastructure beyond the Worker itself.&lt;/p&gt;

&lt;p&gt;Start with Hono and the &lt;code&gt;x402-hono&lt;/code&gt; middleware. Each paid tool is a &lt;code&gt;GET&lt;br&gt;
/resources/:tool&lt;/code&gt; mirror plus a &lt;code&gt;POST /mcp&lt;/code&gt; route. The mirror announces the&lt;br&gt;
tool and its price; the MCP route runs the tool and returns the revenue receipt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Hono&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hono&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;x402&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x402-hono&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Hono&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/resources/:tool&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;param&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tool&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;priceUsdc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;402&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/mcp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nf"&gt;x402&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;p31-capital-machine&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools/list&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools/call&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;runTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Register &lt;code&gt;discoverable:true&lt;/code&gt; and expose &lt;code&gt;.well-known/mcp&lt;/code&gt; so any MCP client can&lt;br&gt;
find the tool list without an API key. The 402 mirror also tells LLM agents the&lt;br&gt;
exact price before they spend: an agent can decide a &lt;code&gt;$0.01&lt;/code&gt; look-up is cheap&lt;br&gt;
and a &lt;code&gt;$0.25&lt;/code&gt; execution needs approval.&lt;/p&gt;

&lt;p&gt;The server is an OAuth 2.1 / RFC 8707 resource server, so the payment itself is&lt;br&gt;
the access grant. Public metadata lives at &lt;code&gt;.well-known/mcp-pricing&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;.well-known/oauth-authorization-server&lt;/code&gt;, and &lt;code&gt;.well-known/llms.txt&lt;/code&gt;. No&lt;br&gt;
fragile custom auth; just HTTP semantics agents already understand.&lt;/p&gt;

&lt;p&gt;Live reference: &lt;code&gt;https://p31-capital-machine-mcp.trimtab-signal.workers.dev&lt;/code&gt;&lt;br&gt;
with &lt;code&gt;health&lt;/code&gt; (free) and &lt;code&gt;revenue.getSummary&lt;/code&gt; (&lt;code&gt;$0.02&lt;/code&gt;) as the two easiest&lt;br&gt;
tools to test first.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>x402</category>
      <category>cloudflare</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why I Built BONDING on My Son's Birthday</title>
      <dc:creator>trimtab.signal</dc:creator>
      <pubDate>Thu, 25 Jun 2026 02:14:05 +0000</pubDate>
      <link>https://dev.to/trimtabsignal/why-i-built-bonding-on-my-sons-birthday-622</link>
      <guid>https://dev.to/trimtabsignal/why-i-built-bonding-on-my-sons-birthday-622</guid>
      <description>&lt;h1&gt;
  
  
  Why I Built BONDING on My Son's Birthday
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;System Update v0.3.0: The Transponder&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;This is the story of why a 40-year-old autistic mechanical engineer who used to maintain high-voltage propulsion systems for the Department of Defense spent his son's seventh birthday building a chemistry game in React.&lt;/p&gt;

&lt;p&gt;Not instead of being present. &lt;em&gt;Because&lt;/em&gt; being present means something different when your nervous system was never calibrated for the world you were born into.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem That Won't Solve Itself
&lt;/h2&gt;

&lt;p&gt;My kids are seven and four. Their names are S.J. and W.J. They have a mother who I am in active litigation with. They have a father whose nervous system runs on a metabolic fault line — hypoparathyroidism means my calcium can tank without warning, and when it does, I'm not just tired. I'm cognitively gone.&lt;/p&gt;

&lt;p&gt;The family court system in Camden County, Georgia, does not care about any of this. It cares about paper. It cares about which parent filed first. It cares about the standard order of supervised visitation that assumes every father is a safety risk until proven otherwise.&lt;/p&gt;

&lt;p&gt;I've spent the last two years learning that the legal system is not designed to measure neurodivergent parental fitness. It was designed by neurotypicals for neurotypicals. It measures eye contact, emotional regulation under hostility, and the ability to produce the right paperwork at the right time — all things that an AuDHD parent with a calcium-dependent nervous system is structurally disadvantaged to perform.&lt;/p&gt;

&lt;p&gt;So I stopped trying to win on their field. I built my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;In sixteen years of Navy nuclear power and DoD electrical engineering, I learned one thing that matters: &lt;strong&gt;when the control system is wrong, you don't work harder. You rebuild the control system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;P31 Labs is that rebuild.&lt;/p&gt;

&lt;p&gt;It started as a geometry insight — that a tetrahedron (K₄) is the minimum volumetric enclosure, and that every stable system resolves to four nodes in relationship. I applied that to my family: Will, Christyn, S.J., W.J. Four vertices. Six edges. One enclosing structure.&lt;/p&gt;

&lt;p&gt;Then I applied it to consciousness. To the nervous system. To open-source infrastructure.&lt;/p&gt;

&lt;p&gt;What emerged is a stack of about 15 Cloudflare Workers, a biometric coherence engine called Q-Factor, a chemistry game called BONDING (426 passing tests, 32 test suites), a real-time spoon economy tracker, and a revenue mesh that costs me essentially nothing to run because it all lives on Cloudflare's edge network.&lt;/p&gt;

&lt;p&gt;The LOVE Ledger — my non-extractive value accounting protocol — treats every interaction as an exchange of attention, not extraction of capital. Everything I build is Pay What You Want, $0 minimum. If you're a neurodivergent parent fighting for your kids, take it for free. If you're a funded enterprise and this infrastructure saves your engineering team 50 hours, pay what that outcome is worth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What My Son Taught Me
&lt;/h2&gt;

&lt;p&gt;On S.J.'s seventh birthday, I was supposed to be at a park with balloons. Instead, I was in VS Code, building the BONDING game — a visual chemistry simulator where molecules come together based on real thermodynamic principles. The catch is that the game also tracks your "spoons" (the autistic energy budget), your heart rate variability, and your Q-factor.&lt;/p&gt;

&lt;p&gt;It's the first game I know of that teaches autistic kids how to regulate their nervous system while playing.&lt;/p&gt;

&lt;p&gt;He sat next to me and watched the molecules bond on screen. "What does this one do, Dad?"&lt;/p&gt;

&lt;p&gt;"This one shows how atoms stick together. Like how we stick together even when we're apart."&lt;/p&gt;

&lt;p&gt;He didn't understand the chemistry. But he understood the shape.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Invisibility Problem
&lt;/h2&gt;

&lt;p&gt;For two years, I built this infrastructure in the dark. I wrote 15 public-facing Cloudflare Workers, published packages to npm, maintained 15 GitHub repositories, and generated 105 distinct codebase artifacts across 7 product bundles. I built a document generation engine, a fleet health pinger, a decentralized revenue mesh, a Substack RSS scanner, a grant opportunity radar, and a unified money stream launcher.&lt;/p&gt;

&lt;p&gt;And nobody knew it existed. Because I never published the story. Only the code.&lt;/p&gt;

&lt;p&gt;The web sees P31 Labs as a sophisticated 501(c)(3) engineering firm with active npm packages, published Zenodo papers, and an impressive Cloudflare Workers architecture. It doesn't see an exhausted AuDHD father fighting a hostile court system with code because the legal system won't listen to his voice.&lt;/p&gt;

&lt;p&gt;That's the gap this post closes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ask
&lt;/h2&gt;

&lt;p&gt;I don't want your money if you can't afford it. I mean that. This entire project runs on a creation-over-extraction paradigm. The LOVE Ledger doesn't track dollars — it tracks value exchange.&lt;/p&gt;

&lt;p&gt;But if you're a funded organization and this architecture — the Q-Factor engine, the BONDING game, the spoon economy, the revenue mesh — is valuable to your mission, here's what that value looks like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ko-fi:&lt;/strong&gt; The 4 print artifacts (K₄ Convergence Table, Floating Neutral Diagram, As Above So Below, and the Minimum Enclosing Structure monograph) are available at ko-fi.com/trimtab69420/shop. PWYW, $0 minimum. &lt;a href="https://ko-fi.com/trimtab69420/shop" rel="noopener noreferrer"&gt;https://ko-fi.com/trimtab69420/shop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gumroad:&lt;/strong&gt; The BROS Signaling Worker Template and Spoon-State Adaptive UI Kit are available for developers and enterprises. Pay what it's worth to your organization. &lt;a href="https://trimtab69420.gumroad.com" rel="noopener noreferrer"&gt;https://trimtab69420.gumroad.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Sponsors:&lt;/strong&gt; If you want to fund the infrastructure directly. &lt;a href="https://github.com/p31labs" rel="noopener noreferrer"&gt;https://github.com/p31labs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The money goes to one thing: keeping this technology free for the families who need it to survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Signal
&lt;/h2&gt;

&lt;p&gt;My Substack is called The Geodesic Self because the geodesic is the shortest path between two points on a curved surface. The curve is the system. The straight line is the signal.&lt;/p&gt;

&lt;p&gt;This is the signal. I'm turning the transponder on. 36 subscribers is enough to start.&lt;/p&gt;

&lt;p&gt;If you're neurodivergent, if you're a parent fighting for your kids, if you've ever felt like you're too much and not enough at the same time — you are not broken. You are uncalibrated to a system that was never designed for you.&lt;/p&gt;

&lt;p&gt;P31 Labs is the calibration tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;End of Transmission.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>opensource</category>
      <category>audhd</category>
      <category>react</category>
    </item>
  </channel>
</rss>
