| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/splitstream-web/.next/server/app/ |
Upload File : |
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/002zte3riz0h6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2xx73w8k5o69w.js"/><script src="/_next/static/chunks/0_bmh1s0g_5m3.js" async=""></script><script src="/_next/static/chunks/390e59xl7grtx.js" async=""></script><script src="/_next/static/chunks/3ss6b_eo0gpqh.js" async=""></script><script src="/_next/static/chunks/turbopack-0frl60onblppy.js" async=""></script><script src="/_next/static/chunks/3u-4v10_yuvs8.js" async=""></script><script src="/_next/static/chunks/31jk64s9j6agx.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-HZ8Z4XP611" as="script"/><title>About — Splitstream</title><meta name="description" content="Production-shaped A/B testing platform: sticky bucketing, mutex experiment groups, Sample Ratio Mismatch detection, guardrail metrics, an Octane carve-out for the hot path, and a Bayesian stats engine whose decision rule is empirically calibrated — not asserted."/><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><header class="border-b border-(--color-paper-dim) bg-(--color-paper)"><div class="mx-auto flex max-w-6xl items-center justify-between px-6 py-5"><a class="text-lg font-bold tracking-tight text-(--color-ink) no-underline" href="/">Splitstream<span class="ml-2 rounded-full bg-(--color-accent-soft) px-2 py-0.5 text-xs font-medium text-(--color-accent) align-middle">portfolio demo</span></a><nav class="hidden md:flex items-center gap-5 text-sm text-(--color-ink-dim)"><a href="/docs">Docs</a><a href="/reference">API reference</a><a href="/sdks">SDKs</a><a href="/bucketing">Bucketing</a><a href="/stats-playground">Stats playground</a><a href="/with-pennant">With Pennant</a><a href="/about">About</a></nav><button type="button" aria-label="Open menu" aria-expanded="false" aria-controls="site-mobile-nav" class="md:hidden inline-flex items-center justify-center rounded-md border border-(--color-paper-dim) p-2 text-(--color-ink) cursor-pointer"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg></button></div></header><main class="mx-auto max-w-6xl px-6 py-10"><article class="prose"><h1 class="text-3xl font-bold">About this demo</h1><p><strong>Splitstream is a portfolio demonstration.</strong>It is not a hosted service, it is not for production traffic, and there is no SLA. Treat the live URL the way you'd treat a static demo of an infrastructure product — click around, read the docs, run the SDKs in a test app. Don't route real users through it.</p><h2>What this is for</h2><p>Splitstream demonstrates that the same architect — Philip Rehberger — can ship the <em>whole</em> experimentation surface a growth team expects, not just an API:</p><ul><li>Variant assignment with sticky bucketing and mutex experiment groups.</li><li>Event ingest with COPY-based batching, Redis-buffered backpressure, and DLQ.</li><li>A Bayesian stats engine with <em>empirical</em> calibration — 360,000 null-effect simulations live in the repo at<!-- --> <code>stats/calibration_results.json</code>.</li><li>SRM detection and guardrail metrics.</li><li>An admin with a peek-event audit log (because the platform's credibility lives or dies on methodological discipline).</li><li>SDKs in TypeScript, React, PHP (Laravel-ready), and Python (Django + FastAPI), plus the<!-- --> <a href="/with-pennant">growth umbrella</a> for the joint Pennant pair.</li><li>A docs surface (this site) with<!-- --> <a href="/reference">Scalar-embedded OpenAPI</a> reference, conceptual guides, and a calibration table that explains why the shipped defaults are what they are.</li></ul><h2>What it is not</h2><ul><li><strong>Not production-grade.</strong>Production-shaped. Honest framing — there's no on-call rotation, no nine-nines target, no enterprise SOC2 audit.</li><li><strong>Not a hosted service.</strong> Self-host the API from the repo. The demo URL is a single instance on a shared EC2 box.</li><li><strong>Not a hand-rolled multi-armed bandit framework.</strong> <!-- -->Bayesian threshold stopping only in v1. mSPRT, always-valid e-values, and Thompson-sampling bandits are documented as v2 contract surfaces but not implemented.</li></ul><h2>Who built it</h2><p><a href="https://philiprehberger.com">Philip Rehberger</a>— Laravel, TypeScript, PHP, Python, PostgreSQL. Production-shipping experimentation infrastructure isn't most freelancers' wheelhouse. Splitstream is the artifact that says I can do it.</p><h2>Get in touch</h2><ul><li>Email: <a href="mailto:hello@philiprehberger.com">hello@philiprehberger.com</a></li><li>Upwork:<!-- --> <a href="https://www.upwork.com/freelancers/philiprehberger">upwork.com/freelancers/philiprehberger</a></li><li>LinkedIn:<!-- --> <a href="https://www.linkedin.com/in/philiprehberger/">linkedin.com/in/philiprehberger</a></li><li>GitHub:<!-- --> <a href="https://github.com/philiprehberger">github.com/philiprehberger</a></li></ul></article><!--$--><!--/$--></main><footer class="border-t border-(--color-paper-dim) mt-20"><div class="mx-auto flex max-w-6xl items-center justify-between px-6 py-8 text-sm text-(--color-ink-dim)"><div>Splitstream is a portfolio demonstration by<!-- --> <a href="https://philiprehberger.com">Philip Rehberger</a>.</div><div class="flex flex-wrap gap-4"><a href="https://github.com/philiprehberger/splitstream">GitHub</a><a href="/pricing">Pricing</a><a href="/downloads">Downloads</a><a href="/status">Status</a><a href="/about">About this demo</a></div></div></footer><script src="/_next/static/chunks/2xx73w8k5o69w.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[79404,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n3:I[88287,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n4:I[74895,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n5:I[4561,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"\"]\n6:I[70805,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n12:I[52576,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/002zte3riz0h6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"about\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"about\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/002zte3riz0h6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/31jk64s9j6agx.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"main\",null,{\"className\":\"mx-auto max-w-6xl px-6 py-10\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"footer\",null,{\"className\":\"border-t border-(--color-paper-dim) mt-20\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex max-w-6xl items-center justify-between px-6 py-8 text-sm text-(--color-ink-dim)\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"Splitstream is a portfolio demonstration by\",\" \",[\"$\",\"a\",null,{\"href\":\"https://philiprehberger.com\",\"children\":\"Philip Rehberger\"}],\".\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-4\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://github.com/philiprehberger/splitstream\",\"children\":\"GitHub\"}],[\"$\",\"$L5\",null,{\"href\":\"/pricing\",\"children\":\"Pricing\"}],[\"$\",\"$L5\",null,{\"href\":\"/downloads\",\"children\":\"Downloads\"}],[\"$\",\"$L5\",null,{\"href\":\"/status\",\"children\":\"Status\"}],[\"$\",\"$L5\",null,{\"href\":\"/about\",\"children\":\"About this demo\"}]]}]]}]}],[\"$\",\"$L6\",null,{}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"article\",null,{\"className\":\"prose\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-3xl font-bold\",\"children\":\"About this demo\"}],[\"$\",\"p\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Splitstream is a portfolio demonstration.\"}],\"It is not a hosted service, it is not for production traffic, and there is no SLA. Treat the live URL the way you'd treat a static demo of an infrastructure product — click around, read the docs, run the SDKs in a test app. Don't route real users through it.\"]}],[\"$\",\"h2\",null,{\"children\":\"What this is for\"}],[\"$\",\"p\",null,{\"children\":[\"Splitstream demonstrates that the same architect — Philip Rehberger — can ship the \",[\"$\",\"em\",null,{\"children\":\"whole\"}],\" experimentation surface a growth team expects, not just an API:\"]}],[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"Variant assignment with sticky bucketing and mutex experiment groups.\"}],[\"$\",\"li\",null,{\"children\":\"Event ingest with COPY-based batching, Redis-buffered backpressure, and DLQ.\"}],[\"$\",\"li\",null,{\"children\":[\"A Bayesian stats engine with \",[\"$\",\"em\",null,{\"children\":\"empirical\"}],\" calibration — 360,000 null-effect simulations live in the repo at\",\" \",[\"$\",\"code\",null,{\"children\":\"stats/calibration_results.json\"}],\".\"]}],[\"$\",\"li\",null,{\"children\":\"SRM detection and guardrail metrics.\"}],[\"$\",\"li\",null,{\"children\":\"An admin with a peek-event audit log (because the platform's credibility lives or dies on methodological discipline).\"}],\"$L7\",\"$L8\"]}],\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\",\"$Le\"]}],null,\"$Lf\"]}],{},null,false,null]},null,false,\"$@10\"]},null,false,null],\"$L11\",false]],\"m\":\"$undefined\",\"G\":[\"$12\",[\"$L13\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"d4p1Nsp7dnkNrIm-L0oJl\"}\n"])</script><script>self.__next_f.push([1,"14:I[51858,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"OutletBoundary\"]\n15:\"$Sreact.suspense\"\n18:I[51858,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"ViewportBoundary\"]\n1a:I[51858,[\"/_next/static/chunks/3u-4v10_yuvs8.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"MetadataBoundary\"]\n7:[\"$\",\"li\",null,{\"children\":[\"SDKs in TypeScript, React, PHP (Laravel-ready), and Python (Django + FastAPI), plus the\",\" \",[\"$\",\"$L5\",null,{\"href\":\"/with-pennant\",\"children\":\"growth umbrella\"}],\" for the joint Pennant pair.\"]}]\n8:[\"$\",\"li\",null,{\"children\":[\"A docs surface (this site) with\",\" \",[\"$\",\"$L5\",null,{\"href\":\"/reference\",\"children\":\"Scalar-embedded OpenAPI\"}],\" reference, conceptual guides, and a calibration table that explains why the shipped defaults are what they are.\"]}]\n9:[\"$\",\"h2\",null,{\"children\":\"What it is not\"}]\na:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Not production-grade.\"}],\"Production-shaped. Honest framing — there's no on-call rotation, no nine-nines target, no enterprise SOC2 audit.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Not a hosted service.\"}],\" Self-host the API from the repo. The demo URL is a single instance on a shared EC2 box.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Not a hand-rolled multi-armed bandit framework.\"}],\" \",\"Bayesian threshold stopping only in v1. mSPRT, always-valid e-values, and Thompson-sampling bandits are documented as v2 contract surfaces but not implemented.\"]}]]}]\nb:[\"$\",\"h2\",null,{\"children\":\"Who built it\"}]\nc:[\"$\",\"p\",null,{\"children\":[[\"$\",\"a\",null,{\"href\":\"https://philiprehberger.com\",\"children\":\"Philip Rehberger\"}],\"— Laravel, TypeScript, PHP, Python, PostgreSQL. Production-shipping experimentation infrastructure isn't most freelancers' wheelhouse. Splitstream is the artifact that says I can do it.\"]}]\nd:[\"$\",\"h2\",null,{\"children\":\"Get in touch\"}]\ne:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[\"Email: \",[\"$\",\"a\",null,{\"href\":\"mailto:hello@philiprehberger.com\",\"children\":\"hello@philiprehberger.com\"}]]}],[\"$\",\"li\",null,{\"children\":[\"Upwork:\",\" \",[\"$\",\"a\",null,{\"href\":\"https://www.upwork.com/freelancers/philiprehberger\",\"children\":\"upwork.com/freelancers/philiprehberger\"}]]}],[\"$\",\"li\",null,{\"children\":[\"LinkedIn:\",\" \",[\"$\",\"a\",null,{\"href\":\"https://www.linkedin.com/in/philiprehberger/\",\"children\":\"linkedin.com/in/philiprehberger\"}]]}],[\"$\",\"li\",null,{\"children\":[\"GitHub:\",\" \",[\"$\",\"a\",null,{\"href\":\"https://github.com/philiprehberger\",\"children\":\"github.com/philiprehberger\"}]]}]]}]\nf:[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@16\"}]}]\n17:[]\n10:\"$W17\"\n11:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1b\"}]}]}],null]}]\n13:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/002zte3riz0h6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"16:null\n1b:[[\"$\",\"title\",\"0\",{\"children\":\"About — Splitstream\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Production-shaped A/B testing platform: sticky bucketing, mutex experiment groups, Sample Ratio Mismatch detection, guardrail metrics, an Octane carve-out for the hot path, and a Bayesian stats engine whose decision rule is empirically calibrated — not asserted.\"}]]\n"])</script></body></html>