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 Permalink 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>