hatch-surf/out.backup.20260625033511/index.html
Riley Zhang de9a777e18 Merge GitHub main into Gitea repo (allow unrelated histories)
Resolved conflicts by taking GitHub versions for:
- .dockerignore, .gitignore, Dockerfile, README.md, docker-compose.yml

Kept deploy.sh updated to:
- Pull from GitHub (primary source)
- Push to Gitea (push-mirror)
- Build from site/ directory (GitHub structure)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-25 05:20:46 +02:00

4 lines
31 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en" class="inter_5901b7c6-module__ec5Qua__variable jetbrains_mono_d5591ac2-module__D88TVW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/40hwf0y1goj6_.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3z5q_p4msz2ha.js"/><script src="/_next/static/chunks/2ckqm4grawju5.js" async=""></script><script src="/_next/static/chunks/2nykiepra7i1k.js" async=""></script><script src="/_next/static/chunks/turbopack-1n9x74gl-i54j.js" async=""></script><script src="/_next/static/chunks/158myu8e_yme3.js" async=""></script><meta name="next-size-adjust" content=""/><title>Hatch — Self-hostable HTTP request inspector + mocker</title><meta name="description" content="Hatch is a self-hostable HTTP request inspector and mocker. One Go binary, SQLite, no SaaS, no per-request fee. Open source, MIT."/><meta property="og:title" content="Hatch — Self-hostable HTTP request inspector + mocker"/><meta property="og:description" content="Hatch is a self-hostable HTTP request inspector and mocker. One Go binary, SQLite, no SaaS, no per-request fee. Open source, MIT."/><meta property="og:url" content="https://hatch.surf"/><meta property="og:site_name" content="Hatch"/><meta property="og:image" content="http://localhost:3000/brand/og/default.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Hatch — Self-hostable HTTP request inspector + mocker"/><meta name="twitter:description" content="Hatch is a self-hostable HTTP request inspector and mocker. One Go binary, SQLite, no SaaS, no per-request fee. Open source, MIT."/><meta name="twitter:image" content="http://localhost:3000/brand/og/default.png"/><link rel="icon" href="/favicon.ico?favicon.2vob68tjqpejf.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/brand/favicon/favicon-48.png"/><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="min-h-screen bg-zinc-950 text-white font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-blue-500 focus:text-white focus:rounded-lg">Skip to content</a><header class="fixed top-0 left-0 right-0 z-50 py-4 bg-zinc-950/80 backdrop-blur-lg border-b border-zinc-800"><div class="max-w-4xl mx-auto px-6 flex justify-between items-center"><a href="/" class="text-xl font-bold text-white flex items-center gap-2 hover:text-white transition-colors"><span class="text-blue-400"></span> Hatch</a><nav class="flex items-center gap-6"><a href="https://github.com/elfoundation/hatch" class="text-zinc-400 hover:text-white transition-colors">GitHub</a><a href="/blog/" class="text-zinc-400 hover:text-white transition-colors">Blog</a></nav></div></header><main id="main-content" role="main"><section class="pt-32 pb-20 px-6"><div class="max-w-4xl mx-auto text-center"><div class="inline-block mb-6 px-5 py-2 rounded-full bg-blue-500/10 border border-blue-500/30 text-blue-400 text-sm font-medium">Open source · MIT licensed</div><h1 class="text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-6 leading-tight bg-gradient-to-r from-white to-zinc-400 bg-clip-text text-transparent">Self-hostable HTTP request<br/>inspector + mocker</h1><p class="text-lg md:text-xl text-zinc-400 mb-10 max-w-2xl mx-auto leading-relaxed">One Go binary. SQLite under the hood.<code class="mx-1 px-2 py-0.5 bg-zinc-800 border border-zinc-700 rounded text-fuchsia-400 text-base">docker compose up</code>, and you have an inspection endpoint and a live feed in under 30 seconds.</p><div class="flex flex-col sm:flex-row gap-4 justify-center mb-16"><a href="https://github.com/elfoundation/hatch" class="inline-flex items-center justify-center gap-2 px-8 py-4 bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg transition-all shadow-lg shadow-blue-500/30 hover:shadow-xl hover:shadow-blue-500/40 hover:-translate-y-0.5"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>View on GitHub</a><a href="https://github.com/elfoundation/hatch#quick-start" class="inline-flex items-center justify-center gap-2 px-8 py-4 bg-zinc-800 hover:bg-zinc-700 text-white font-semibold rounded-lg border border-zinc-700 transition-all shadow-lg hover:shadow-xl hover:-translate-y-0.5">Quick Start →</a></div><div class="max-w-2xl mx-auto rounded-xl overflow-hidden border border-zinc-800 bg-zinc-900/50 backdrop-blur-sm shadow-2xl"><div class="flex items-center gap-2 px-4 py-3 bg-gradient-to-r from-zinc-800/50 to-zinc-800/30 border-b border-zinc-800"><div class="w-3 h-3 rounded-full bg-zinc-600"></div><div class="w-3 h-3 rounded-full bg-zinc-600"></div><div class="w-3 h-3 rounded-full bg-zinc-600"></div><span class="ml-2 text-sm text-zinc-500">terminal</span></div><pre class="p-5 text-left text-sm font-mono overflow-x-auto"><code><span class="text-blue-400 font-semibold">$</span> <span class="text-zinc-300">docker compose up -d</span>
<span class="text-emerald-400">✓ hatch started on :8080</span>
<span class="text-blue-400 font-semibold">$</span> <span class="text-zinc-300">curl -X POST https://your-bin.hatch.surf/test -d <!-- -->{&#x27;hello&#x27;:&#x27;world&#x27;}</span>
<span class="text-emerald-400">✓ captured — view at https://your-bin.hatch.surf/inspect</span></code></pre></div></div></section><section class="py-20 px-6"><div class="max-w-4xl mx-auto"><h2 class="text-3xl md:text-4xl font-bold text-center mb-16">Three things, and nothing else</h2><div class="grid md:grid-cols-3 gap-8"><div class="p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 hover:border-blue-500/40 hover:shadow-blue-500/10 transition-all hover:-translate-y-1 shadow-lg hover:shadow-xl"><div class="w-14 h-14 flex items-center justify-center rounded-xl bg-blue-500/15 text-blue-400 mb-4 shadow-lg"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg></div><h3 class="text-xl font-semibold mb-2">Capture</h3><p class="text-zinc-400 leading-relaxed">Method, path, headers, query, body. Persists across restarts because the storage is SQLite on disk, not a hosted queue.</p></div><div class="p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 hover:border-purple-500/40 hover:shadow-purple-500/10 transition-all hover:-translate-y-1 shadow-lg hover:shadow-xl"><div class="w-14 h-14 flex items-center justify-center rounded-xl bg-purple-500/15 text-purple-400 mb-4 shadow-lg"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg></div><h3 class="text-xl font-semibold mb-2">Inspect</h3><p class="text-zinc-400 leading-relaxed">A live SSE feed of incoming requests. Click any captured request to see the headers, the body, the timing.</p></div><div class="p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 hover:border-cyan-500/40 hover:shadow-cyan-500/10 transition-all hover:-translate-y-1 shadow-lg hover:shadow-xl"><div class="w-14 h-14 flex items-center justify-center rounded-xl bg-cyan-500/15 text-cyan-400 mb-4 shadow-lg"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg></div><h3 class="text-xl font-semibold mb-2">Mock</h3><p class="text-zinc-400 leading-relaxed">Return a 200, a 500, or a custom JSON payload. For testing your own retry, backoff, and error-handling logic.</p></div></div></div></section><section class="py-20 px-6"><div class="max-w-4xl mx-auto"><h2 class="text-3xl md:text-4xl font-bold text-center mb-16">Why a single binary, not a SaaS</h2><div class="grid md:grid-cols-3 gap-6"><div class="p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 border-l-4 border-l-blue-500 hover:-translate-y-1 transition-all shadow-lg hover:shadow-xl"><div class="text-4xl font-bold text-zinc-600 font-mono mb-4">01</div><h3 class="text-xl font-semibold mb-2">Compliance and privacy</h3><p class="text-zinc-400 leading-relaxed">Some teams cannot legally send webhook payloads to a hosted SaaS. Hatch keeps the data on your own network.</p></div><div class="p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 border-l-4 border-l-purple-500 hover:-translate-y-1 transition-all shadow-lg hover:shadow-xl"><div class="text-4xl font-bold text-zinc-600 font-mono mb-4">02</div><h3 class="text-xl font-semibold mb-2">Cost</h3><p class="text-zinc-400 leading-relaxed">A hosted inspector charges per request, per seat, or per retention day. Hatch is one Go binary on a $5 VPS. There is no per-request fee because there is no one to charge it.</p></div><div class="p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 border-l-4 border-l-cyan-500 hover:-translate-y-1 transition-all shadow-lg hover:shadow-xl"><div class="text-4xl font-bold text-zinc-600 font-mono mb-4">03</div><h3 class="text-xl font-semibold mb-2">Speed of setup</h3><p class="text-zinc-400 leading-relaxed"><code class="px-2 py-0.5 bg-zinc-800 border border-zinc-700 rounded text-fuchsia-400 text-sm">docker compose up</code> <!-- -->is faster than signing up for a SaaS, verifying your email, configuring your first bin, and pasting the URL into your webhook config.</p></div></div></div></section><section class="py-24 px-6 bg-gradient-to-b from-zinc-900/30 to-zinc-900/60"><div class="max-w-4xl mx-auto text-center"><h2 class="text-4xl md:text-5xl font-extrabold mb-4 bg-gradient-to-r from-white to-blue-400 bg-clip-text text-transparent">Start inspecting in 30 seconds</h2><p class="text-xl text-zinc-400 mb-10">One binary. Your data stays yours.</p><a href="https://github.com/elfoundation/hatch" class="inline-flex items-center justify-center gap-2 px-10 py-5 bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg transition-all shadow-lg shadow-blue-500/30 hover:shadow-xl hover:shadow-blue-500/40 hover:-translate-y-0.5 text-lg">Get Hatch →</a></div></section><!--$--><!--/$--></main><footer class="py-8 px-6 border-t border-zinc-800"><div class="max-w-4xl mx-auto"><div class="flex flex-col md:flex-row justify-between items-center gap-4"><span class="text-white font-bold flex items-center gap-2"><span class="text-blue-400"></span> Hatch</span><p class="text-zinc-500 text-sm text-center md:text-right">© 2026 El Foundation.<!-- --> <a href="https://github.com/elfoundation/hatch" class="text-zinc-400 hover:text-white transition-colors">Hatch</a> <!-- -->is released under the<!-- --> <a href="https://github.com/elfoundation/hatch/blob/main/LICENSE" class="text-zinc-400 hover:text-white transition-colors">MIT License</a>.</p></div></div></footer><script src="/_next/static/chunks/3z5q_p4msz2ha.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[39756,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"default\"]\nd:I[68027,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/40hwf0y1goj6_.css\",\"style\"]\n:HL[\"/_next/static/media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/40hwf0y1goj6_.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/158myu8e_yme3.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"inter_5901b7c6-module__ec5Qua__variable jetbrains_mono_d5591ac2-module__D88TVW__variable\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-zinc-950 text-white font-sans antialiased\",\"children\":[[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-blue-500 focus:text-white focus:rounded-lg\",\"children\":\"Skip to content\"}],[\"$\",\"header\",null,{\"className\":\"fixed top-0 left-0 right-0 z-50 py-4 bg-zinc-950/80 backdrop-blur-lg border-b border-zinc-800\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto px-6 flex justify-between items-center\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"text-xl font-bold text-white flex items-center gap-2 hover:text-white transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-blue-400\",\"children\":\"⬡\"}],\" Hatch\"]}],[\"$\",\"nav\",null,{\"className\":\"flex items-center gap-6\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://github.com/elfoundation/hatch\",\"className\":\"text-zinc-400 hover:text-white transition-colors\",\"children\":\"GitHub\"}],[\"$\",\"a\",null,{\"href\":\"/blog/\",\"className\":\"text-zinc-400 hover:text-white transition-colors\",\"children\":\"Blog\"}]]}]]}]}],[\"$\",\"main\",null,{\"id\":\"main-content\",\"role\":\"main\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",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\":\"py-8 px-6 border-t border-zinc-800\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row justify-between items-center gap-4\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-white font-bold flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-blue-400\",\"children\":\"⬡\"}],\" Hatch\"]}],[\"$\",\"p\",null,{\"className\":\"text-zinc-500 text-sm text-center md:text-right\",\"children\":[\"© 2026 El Foundation.\",\" \",[\"$\",\"a\",null,{\"href\":\"https://github.com/elfoundation/hatch\",\"className\":\"text-zinc-400 hover:text-white transition-colors\",\"children\":\"Hatch\"}],\" \",\"is released under the\",\" \",[\"$\",\"a\",null,{\"href\":\"https://github.com/elfoundation/hatch/blob/main/LICENSE\",\"className\":\"text-zinc-400 hover:text-white transition-colors\",\"children\":\"MIT License\"}],\".\"]}]]}]}]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"section\",null,{\"className\":\"pt-32 pb-20 px-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto text-center\",\"children\":[[\"$\",\"div\",null,{\"className\":\"inline-block mb-6 px-5 py-2 rounded-full bg-blue-500/10 border border-blue-500/30 text-blue-400 text-sm font-medium\",\"children\":\"Open source · MIT licensed\"}],[\"$\",\"h1\",null,{\"className\":\"text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight mb-6 leading-tight bg-gradient-to-r from-white to-zinc-400 bg-clip-text text-transparent\",\"children\":[\"Self-hostable HTTP request\",\"$L4\",\"inspector + mocker\"]}],\"$L5\",\"$L6\",\"$L7\"]}]}],\"$L8\",\"$L9\",\"$La\"],null,\"$Lb\"]}],{},null,false,null]},null,false,null],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[\"$Le\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"W0ph6BZ8oDeJaHcE9fuII\"}\n"])</script><script>self.__next_f.push([1,"f:I[97367,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"OutletBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[97367,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"ViewportBoundary\"]\n14:I[97367,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"MetadataBoundary\"]\n4:[\"$\",\"br\",null,{}]\n5:[\"$\",\"p\",null,{\"className\":\"text-lg md:text-xl text-zinc-400 mb-10 max-w-2xl mx-auto leading-relaxed\",\"children\":[\"One Go binary. SQLite under the hood.\",[\"$\",\"code\",null,{\"className\":\"mx-1 px-2 py-0.5 bg-zinc-800 border border-zinc-700 rounded text-fuchsia-400 text-base\",\"children\":\"docker compose up\"}],\", and you have an inspection endpoint and a live feed in under 30 seconds.\"]}]\n6:[\"$\",\"div\",null,{\"className\":\"flex flex-col sm:flex-row gap-4 justify-center mb-16\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://github.com/elfoundation/hatch\",\"className\":\"inline-flex items-center justify-center gap-2 px-8 py-4 bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg transition-all shadow-lg shadow-blue-500/30 hover:shadow-xl hover:shadow-blue-500/40 hover:-translate-y-0.5\",\"children\":[[\"$\",\"svg\",null,{\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"children\":[\"$\",\"path\",null,{\"d\":\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"}]}],\"View on GitHub\"]}],[\"$\",\"a\",null,{\"href\":\"https://github.com/elfoundation/hatch#quick-start\",\"className\":\"inline-flex items-center justify-center gap-2 px-8 py-4 bg-zinc-800 hover:bg-zinc-700 text-white font-semibold rounded-lg border border-zinc-700 transition-all shadow-lg hover:shadow-xl hover:-translate-y-0.5\",\"children\":\"Quick Start →\"}]]}]\n7:[\"$\",\"div\",null,{\"className\":\"max-w-2xl mx-auto rounded-xl overflow-hidden border border-zinc-800 bg-zinc-900/50 backdrop-blur-sm shadow-2xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 px-4 py-3 bg-gradient-to-r from-zinc-800/50 to-zinc-800/30 border-b border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-3 h-3 rounded-full bg-zinc-600\"}],[\"$\",\"div\",null,{\"className\":\"w-3 h-3 rounded-full bg-zinc-600\"}],[\"$\",\"div\",null,{\"className\":\"w-3 h-3 rounded-full bg-zinc-600\"}],[\"$\",\"span\",null,{\"className\":\"ml-2 text-sm text-zinc-500\",\"children\":\"terminal\"}]]}],[\"$\",\"pre\",null,{\"className\":\"p-5 text-left text-sm font-mono overflow-x-auto\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-blue-400 font-semibold\",\"children\":\"$$\"}],\" \",[\"$\",\"span\",null,{\"className\":\"text-zinc-300\",\"children\":\"docker compose up -d\"}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"text-emerald-400\",\"children\":\"✓ hatch started on :8080\"}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"text-blue-400 font-semibold\",\"children\":\"$$\"}],\" \",[\"$\",\"span\",null,{\"className\":\"text-zinc-300\",\"children\":[\"curl -X POST https://your-bin.hatch.surf/test -d \",\"{'hello':'world'}\"]}],\"\\n\",[\"$\",\"span\",null,{\"className\":\"text-emerald-400\",\"children\":\"✓ captured — view at https://your-bin.hatch.surf/inspect\"}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"section\",null,{\"className\":\"py-20 px-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl md:text-4xl font-bold text-center mb-16\",\"children\":\"Three things, and nothing else\"}],[\"$\",\"div\",null,{\"className\":\"grid md:grid-cols-3 gap-8\",\"children\":[[\"$\",\"div\",\"Capture\",{\"className\":\"p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 hover:border-blue-500/40 hover:shadow-blue-500/10 transition-all hover:-translate-y-1 shadow-lg hover:shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-14 h-14 flex items-center justify-center rounded-xl bg-blue-500/15 text-blue-400 mb-4 shadow-lg\",\"children\":[\"$\",\"svg\",null,{\"width\":\"28\",\"height\":\"28\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"1.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"children\":[[\"$\",\"circle\",null,{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],[\"$\",\"polyline\",null,{\"points\":\"12 6 12 12 16 14\"}]]}]}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2\",\"children\":\"Capture\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-400 leading-relaxed\",\"children\":\"Method, path, headers, query, body. Persists across restarts because the storage is SQLite on disk, not a hosted queue.\"}]]}],[\"$\",\"div\",\"Inspect\",{\"className\":\"p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 hover:border-purple-500/40 hover:shadow-purple-500/10 transition-all hover:-translate-y-1 shadow-lg hover:shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-14 h-14 flex items-center justify-center rounded-xl bg-purple-500/15 text-purple-400 mb-4 shadow-lg\",\"children\":[\"$\",\"svg\",null,{\"width\":\"28\",\"height\":\"28\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"1.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"children\":[[\"$\",\"path\",null,{\"d\":\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"}],[\"$\",\"circle\",null,{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"}]]}]}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2\",\"children\":\"Inspect\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-400 leading-relaxed\",\"children\":\"A live SSE feed of incoming requests. Click any captured request to see the headers, the body, the timing.\"}]]}],[\"$\",\"div\",\"Mock\",{\"className\":\"p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 hover:border-cyan-500/40 hover:shadow-cyan-500/10 transition-all hover:-translate-y-1 shadow-lg hover:shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-14 h-14 flex items-center justify-center rounded-xl bg-cyan-500/15 text-cyan-400 mb-4 shadow-lg\",\"children\":[\"$\",\"svg\",null,{\"width\":\"28\",\"height\":\"28\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"1.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"children\":[[\"$\",\"polyline\",null,{\"points\":\"16 18 22 12 16 6\"}],[\"$\",\"polyline\",null,{\"points\":\"8 6 2 12 8 18\"}]]}]}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2\",\"children\":\"Mock\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-400 leading-relaxed\",\"children\":\"Return a 200, a 500, or a custom JSON payload. For testing your own retry, backoff, and error-handling logic.\"}]]}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"section\",null,{\"className\":\"py-20 px-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl md:text-4xl font-bold text-center mb-16\",\"children\":\"Why a single binary, not a SaaS\"}],[\"$\",\"div\",null,{\"className\":\"grid md:grid-cols-3 gap-6\",\"children\":[[\"$\",\"div\",\"01\",{\"className\":\"p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 border-l-4 border-l-blue-500 hover:-translate-y-1 transition-all shadow-lg hover:shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-4xl font-bold text-zinc-600 font-mono mb-4\",\"children\":\"01\"}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2\",\"children\":\"Compliance and privacy\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-400 leading-relaxed\",\"children\":\"Some teams cannot legally send webhook payloads to a hosted SaaS. Hatch keeps the data on your own network.\"}]]}],[\"$\",\"div\",\"02\",{\"className\":\"p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 border-l-4 border-l-purple-500 hover:-translate-y-1 transition-all shadow-lg hover:shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-4xl font-bold text-zinc-600 font-mono mb-4\",\"children\":\"02\"}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2\",\"children\":\"Cost\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-400 leading-relaxed\",\"children\":\"A hosted inspector charges per request, per seat, or per retention day. Hatch is one Go binary on a $5 VPS. There is no per-request fee because there is no one to charge it.\"}]]}],[\"$\",\"div\",\"03\",{\"className\":\"p-6 rounded-xl bg-gradient-to-b from-zinc-900/80 to-zinc-900/40 border border-zinc-800 border-l-4 border-l-cyan-500 hover:-translate-y-1 transition-all shadow-lg hover:shadow-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-4xl font-bold text-zinc-600 font-mono mb-4\",\"children\":\"03\"}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2\",\"children\":\"Speed of setup\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-400 leading-relaxed\",\"children\":[[\"$\",\"code\",null,{\"className\":\"px-2 py-0.5 bg-zinc-800 border border-zinc-700 rounded text-fuchsia-400 text-sm\",\"children\":\"docker compose up\"}],\" \",\"is faster than signing up for a SaaS, verifying your email, configuring your first bin, and pasting the URL into your webhook config.\"]}]]}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"a:[\"$\",\"section\",null,{\"className\":\"py-24 px-6 bg-gradient-to-b from-zinc-900/30 to-zinc-900/60\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto text-center\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-4xl md:text-5xl font-extrabold mb-4 bg-gradient-to-r from-white to-blue-400 bg-clip-text text-transparent\",\"children\":\"Start inspecting in 30 seconds\"}],[\"$\",\"p\",null,{\"className\":\"text-xl text-zinc-400 mb-10\",\"children\":\"One binary. Your data stays yours.\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/elfoundation/hatch\",\"className\":\"inline-flex items-center justify-center gap-2 px-10 py-5 bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg transition-all shadow-lg shadow-blue-500/30 hover:shadow-xl hover:shadow-blue-500/40 hover:-translate-y-0.5 text-lg\",\"children\":\"Get Hatch →\"}]]}]}]\nb:[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$10\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@11\"}]}]\nc:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L12\",null,{\"children\":\"$L13\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$10\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L15\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\ne:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/40hwf0y1goj6_.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"13:[[\"$\",\"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:I[27201,[\"/_next/static/chunks/158myu8e_yme3.js\"],\"IconMark\"]\n11:null\n"])</script><script>self.__next_f.push([1,"15:[[\"$\",\"title\",\"0\",{\"children\":\"Hatch — Self-hostable HTTP request inspector + mocker\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Hatch is a self-hostable HTTP request inspector and mocker. One Go binary, SQLite, no SaaS, no per-request fee. Open source, MIT.\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"Hatch — Self-hostable HTTP request inspector + mocker\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"Hatch is a self-hostable HTTP request inspector and mocker. One Go binary, SQLite, no SaaS, no per-request fee. Open source, MIT.\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:url\",\"content\":\"https://hatch.surf\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:site_name\",\"content\":\"Hatch\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image\",\"content\":\"http://localhost:3000/brand/og/default.png\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:title\",\"content\":\"Hatch — Self-hostable HTTP request inspector + mocker\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:description\",\"content\":\"Hatch is a self-hostable HTTP request inspector and mocker. One Go binary, SQLite, no SaaS, no per-request fee. Open source, MIT.\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:image\",\"content\":\"http://localhost:3000/brand/og/default.png\"}],[\"$\",\"link\",\"14\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.2vob68tjqpejf.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"15\",{\"rel\":\"icon\",\"href\":\"/brand/favicon/favicon-48.png\"}],[\"$\",\"$L16\",\"16\",{}]]\n"])</script></body></html>