<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Daniel Brain]]></title><description><![CDATA[CTO of OneText (YC W23). My personal blog for tech writing and other stuff!]]></description><link>https://blog.danielbrain.ai</link><generator>RSS for Node</generator><lastBuildDate>Sat, 24 Oct 2026 10:27:43 GMT</lastBuildDate><atom:link href="https://blog.danielbrain.ai/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[New posts live here now]]></title><description><![CDATA[Plus a full index of everything I wrote on Medium]]></description><link>https://blog.danielbrain.ai/new-posts-live-here-now</link><guid isPermaLink="true">https://blog.danielbrain.ai/new-posts-live-here-now</guid><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 24 Oct 2026 08:58:20 GMT</pubDate><content:encoded><![CDATA[<p>I've been writing on Medium at <a href="https://bluepnume.medium.com">bluepnume.medium.com</a> since 2015. Mostly JavaScript and TypeScript, a lot about cross-domain iframes from my years on PayPal Checkout, a run of Bitcoin posts, and more recently commerce and SMS from building <a href="https://www.onetext.com">OneText</a>.</p>
<p>From now on, new posts will live here, at <a href="https://blog.danielbrain.ai">blog.danielbrain.ai</a>.</p>
<p>At some point I'll move the old articles over too. Until then they stay on Medium, and every one of them is linked below, so if you're looking for something I wrote, it's here.</p>
<h2>Everything on Medium so far (56 articles)</h2>
<h3>2026</h3>
<ul>
<li><a href="https://bluepnume.medium.com/typescripts-number-type-is-a-lie-6b3b10dd8f54">TypeScript’s number type is a lie</a> (May 27)</li>
</ul>
<h3>2025</h3>
<ul>
<li><a href="https://bluepnume.medium.com/a-slightly-better-usestate-cac0e27fddd4">A slightly better useState</a> (Jun 10)</li>
</ul>
<h3>2024</h3>
<ul>
<li><a href="https://bluepnume.medium.com/the-shortest-strangest-engineering-interview-ive-ever-done-950e8fa95f4e">The shortest, strangest engineering interview I’ve ever done.</a> (Aug 16)</li>
</ul>
<h3>2022</h3>
<ul>
<li><a href="https://bluepnume.medium.com/nine-terrible-ways-to-use-typescript-enums-and-one-good-way-f9c7ec68bf15">Nine terrible ways to use TypeScript enums, and one good way.</a> (Dec 15)</li>
<li><a href="https://bluepnume.medium.com/the-only-kind-of-test-i-write-6bc550622ac3">The only kind of test I write</a> (Dec 2)</li>
<li><a href="https://bluepnume.medium.com/im-interviewing-a-little-differently-this-time-round-2382ff295329">I’m interviewing a little differently this time round.</a> (Oct 19)</li>
<li><a href="https://bluepnume.medium.com/its-not-actually-supposed-to-be-difficult-23800e59e97f">It’s not actually supposed to be difficult.</a> (Oct 8)</li>
<li><a href="https://bluepnume.medium.com/dtc-brands-have-a-huge-blind-spot-vaulting-13ea7ef5b2f">DTC brands have a huge blind spot: vaulting</a> (Sep 12)</li>
<li><a href="https://bluepnume.medium.com/subscriptions-are-out-refills-are-in-311fd6e41e5e">Subscriptions are out, refills are in.</a> (Aug 25)</li>
<li><a href="https://bluepnume.medium.com/you-dont-know-jack-about-sms-ce68304c3d5c">You don’t know jack about SMS</a> (Aug 5)</li>
</ul>
<h3>2021</h3>
<ul>
<li><a href="https://bluepnume.medium.com/serializing-functions-589bf37a3a2">The Magic of Serializing Functions</a> (Sep 19)</li>
<li><a href="https://bluepnume.medium.com/fooled-by-certainty-27bd9d02300c">Fooled by Certainty</a> (Jun 21)</li>
<li><a href="https://bluepnume.medium.com/bitcoin-cutting-through-the-bullshit-8a969852ed44">Bitcoin: cutting through the bullshit</a> (Jun 13)</li>
<li><a href="https://bluepnume.medium.com/building-bitcoin-in-javascript-1a82534765ec">Building Bitcoin in JavaScript</a> (May 20)</li>
<li><a href="https://bluepnume.medium.com/a-follow-up-on-bitcoins-s2f-model-e759b95ea1d">A follow up on Bitcoin’s S2F model</a> (Apr 30)</li>
<li><a href="https://bluepnume.medium.com/you-dont-need-s2f-to-value-bitcoin-9027edef2ebe">You don’t need S2F to value Bitcoin</a> (Apr 24)</li>
<li><a href="https://bluepnume.medium.com/why-bitcoin-5710a57e391a">Why Bitcoin?</a> (Mar 31)</li>
<li><a href="https://bluepnume.medium.com/big-questions-i-have-about-nfts-a3dfc73709a3">Big questions I have about NFTs</a> (Mar 15)</li>
<li><a href="https://bluepnume.medium.com/trading-crypto-and-being-able-to-sleep-at-night-1e978dbbfdb0">Trading Crypto, and being able to sleep at night</a> (Feb 15)</li>
<li><a href="https://bluepnume.medium.com/the-next-chapter-of-brainblocks-open-source-2a6c62c50b2c">The next chapter of BrainBlocks: Open Source</a> (Feb 1)</li>
</ul>
<h3>2020</h3>
<ul>
<li><a href="https://bluepnume.medium.com/writing-regex-in-jsx-without-releasing-zalgo-f1f2f91e764d">Writing Regex in JSX, without releasing Zalgo</a> (Aug 7)</li>
<li><a href="https://bluepnume.medium.com/javascript-tree-shaking-like-a-pro-7bf96e139eb7">JavaScript tree shaking, like a pro</a> (Jan 19)</li>
</ul>
<h3>2019</h3>
<ul>
<li><a href="https://bluepnume.medium.com/iframes-are-just-terrible-heres-how-they-could-be-better-974b731f0fb4">Iframes are just terrible. Here’s how they could be better.</a> (Aug 18)</li>
<li><a href="https://bluepnume.medium.com/functional-ish-javascript-205c05d0ed08">Functional-ish JavaScript</a> (May 15)</li>
<li><a href="https://bluepnume.medium.com/google-chromes-portals-like-iframes-but-better-and-worse-29e0bbb3f78e">Google Chrome’s Portals: like iframes, but better, and worse.</a> (May 9)</li>
<li><a href="https://bluepnume.medium.com/how-many-keywords-can-you-place-in-a-row-in-javascript-fa9046b4c1ff">How many keywords can you place in a row in javascript?</a> (Feb 7)</li>
</ul>
<h3>2018</h3>
<ul>
<li><a href="https://bluepnume.medium.com/ie-intranet-and-trusted-modes-a852d3a0bd47">IE Intranet and Trusted Modes</a> (Dec 4)</li>
<li><a href="https://bluepnume.medium.com/jsx-is-a-stellar-invention-even-with-react-out-of-the-picture-c597187134b7">JSX is a stellar invention, even with React out of the picture.</a> (Nov 8)</li>
<li><a href="https://bluepnume.medium.com/blockchain-is-revolutionary-but-could-it-be-effortless-1bc85f58667e">Blockchain is revolutionary. But could it be effortless?</a> (Nov 4)</li>
<li><a href="https://bluepnume.medium.com/building-a-react-esque-component-using-vanilla-javascript-ddc99e76b867">Building a React-esque component using vanilla javascript.</a> (Sep 16)</li>
<li><a href="https://bluepnume.medium.com/xcomponent-is-now-zoid-78625334bbac">xcomponent, PayPal’s open-source cross-domain-component library, is now zoid!</a> (May 31)</li>
<li><a href="https://bluepnume.medium.com/brainblocks-and-nano-two-months-on-cfd69afadf36">BrainBlocks and Nano, two months on!</a> (Mar 24)</li>
<li><a href="https://bluepnume.medium.com/introducing-brainblocks-my-weekend-hack-project-to-build-a-simple-checkout-app-for-raiblocks-5f5770c06c14">Introducing BrainBlocks — my weekend hack project to build a simple checkout app for RaiBlocks</a> (Jan 12)</li>
</ul>
<h3>2017</h3>
<ul>
<li><a href="https://bluepnume.medium.com/hacking-chromes-payment-request-api-into-paypal-s-iframe-buttons-617e3d806be9">Hacking Chrome’s Payment Request Api into PayPal’s iframe buttons</a> (Oct 28)</li>
<li><a href="https://bluepnume.medium.com/introducing-paypals-open-source-cross-domain-javascript-suite-95f991b2731d">Introducing PayPal’s open-source cross-domain javascript suite</a> (Oct 15)</li>
<li><a href="https://bluepnume.medium.com/reinventing-cross-origin-requests-without-cors-b9c4cb645376">Reinventing cross-origin requests, without CORS</a> (Sep 6)</li>
<li><a href="https://bluepnume.medium.com/safaris-new-tracking-rules-and-enabling-cross-domain-data-storage-85241eea7483">Safari’s new third party tracking rules, and enabling cross-domain data storage</a> (Aug 30)</li>
<li><a href="https://bluepnume.medium.com/intentionally-unleashing-zalgo-with-promises-ab3f63ead2fd">Intentionally unleashing Zalgo with synchronous promises</a> (Jun 15)</li>
<li><a href="https://bluepnume.medium.com/introducing-support-for-cross-domain-glimmer-components-with-xcomponent-21287c9f91f1">Introducing support for cross-domain Glimmer components, with zoid</a> (Apr 6)</li>
<li><a href="https://bluepnume.medium.com/turn-your-web-app-into-a-cross-domain-component-with-5-lines-of-code-ced01e6795f9">Turn your web-app into a cross-domain component with five lines of code</a> (Mar 27)</li>
<li><a href="https://bluepnume.medium.com/creating-a-cross-domain-react-component-with-xcomponent-fbcccc4778fd">Creating a cross-domain React component, with zoid</a> (Mar 20)</li>
<li><a href="https://bluepnume.medium.com/less-is-more-reducing-thousands-of-paypal-buttons-into-a-single-iframe-using-xcomponent-d902d71d8875">Less is more: reducing thousands of PayPal buttons into a single iframe, using zoid</a> (Mar 17)</li>
<li><a href="https://bluepnume.medium.com/allowing-multiple-domains-to-render-your-app-in-an-iframe-using-x-frame-options-da3b0a7949ca">Allowing multiple domains to render your app in an iframe, using X-FRAME-OPTIONS</a> (Mar 14)</li>
<li><a href="https://bluepnume.medium.com/even-with-async-await-you-probably-still-need-promises-9b259854c161">Even with async/await, raw promises are still key to writing optimal concurrent javascript</a> (Feb 21)</li>
<li><a href="https://bluepnume.medium.com/every-known-way-to-get-references-to-windows-in-javascript-223778bede2d">Every known way to get references to windows, in javascript</a> (Feb 3)</li>
<li><a href="https://bluepnume.medium.com/theres-no-need-to-define-all-javascript-vars-once-at-the-top-of-a-function-and-there-hasn-t-been-a66b31f21822">There’s no need to declare all javascript vars once at the top of a function, and there hasn’t been…</a> (Jan 27)</li>
<li><a href="https://bluepnume.medium.com/introducing-grumbler-an-opinionated-javascript-module-template-612245e06d00">Configuration files, npm modules and lost sleep — why publishing front-end modules is painful, and…</a> (Jan 18)</li>
</ul>
<h3>2016</h3>
<ul>
<li><a href="https://bluepnume.medium.com/introducing-xcomponent-seamless-cross-domain-web-components-from-paypal-c0144f3e82bf">Introducing zoid — cross-domain, React-like components using iframes</a> (Nov 28)</li>
<li><a href="https://bluepnume.medium.com/introducing-post-robot-smart-cross-domain-messaging-from-paypal-bebf27c8619e">Introducing post-robot — smart cross-domain messaging, from PayPal</a> (Sep 30)</li>
<li><a href="https://bluepnume.medium.com/open-source-from-paypal-checkout-krakenjs-385c80926581">Open Source javascript offerings from PayPal Checkout! #krakenjs</a> (Jun 1)</li>
<li><a href="https://bluepnume.medium.com/dependency-injection-in-angular-isn-t-worth-it-more-lessons-learned-from-scaling-paypal-checkout-2189ec9c21a0">Dependency injection in Angular isn’t worth it. More lessons learned from scaling PayPal Checkout.</a> (Apr 3)</li>
<li><a href="https://bluepnume.medium.com/how-we-manage-sane-tagging-releasing-and-shrink-wrapping-for-paypal-checkout-d1e37f20533a">Auto-shrink-wrapping in PayPal Checkout, and how it’s saved us more than once</a> (Feb 10)</li>
<li><a href="https://bluepnume.medium.com/learn-about-promises-before-you-start-using-async-await-eb148164a9c8">Understand promises before you start using async/await</a> (Jan 19)</li>
<li><a href="https://bluepnume.medium.com/async-javascript-is-much-more-fun-when-you-spend-less-time-thinking-about-control-flow-8580ce9f73fc">Async javascript is much more fun when you memoize.</a> (Jan 9)</li>
</ul>
<h3>2015</h3>
<ul>
<li><a href="https://bluepnume.medium.com/fighting-technical-debt-and-feature-creep-with-data-7de6370c2b58">Fighting technical debt and feature creep, with data</a> (Oct 18)</li>
<li><a href="https://bluepnume.medium.com/sane-scalable-angular-apps-are-tricky-but-not-impossible-lessons-learned-from-paypal-checkout-c5320558d4ef">Sane, scalable Angular apps are tricky, but not impossible. Lessons learned from PayPal Checkout.</a> (Sep 26)</li>
</ul>
<p>You can also find everything else I've worked on at <a href="https://danielbrain.ai">danielbrain.ai</a>.</p>
]]></content:encoded></item></channel></rss>