Hatch.surf web application
Go to file
Senior Web Designer bcb4f1688e
Some checks are pending
CI / go (push) Waiting to run
CI / docker (push) Waiting to run
CI / lint-go (push) Waiting to run
CI / lint-docs (push) Waiting to run
CI / check-paperclip (push) Waiting to run
ELF-457: add slot 3 rotating tagline above hero sub
Three taglines rotate every 3.5s with a subtle 700ms opacity crossfade:
  1. Inspect any request. Mock any response. (default)
  2. Your HTTP bin, on your machine.
  3. Send. Capture. Mock. No signup.

Implementation notes:
- Client component, default tagline in initial SSR HTML for SEO/no-JS
- ARIA: aria-live=polite on container, aria-hidden on inactive items,
  aria-atomic=true; prefers-reduced-motion suppresses both the timer
  and the fade (via motion-reduce:transition-none + early-return guard)
- No CLS: container has fixed h-7 md:h-8 height; absolute children
  crossfade in place
- Hierarchy: tagline below H1 (mb-6), above hero sub (mb-6 from tagline
  container, mb-10 from sub to CTAs)

Tailwind v4 fixes that were needed to make this visible:
- app/globals.css: switch to @import 'tailwindcss' with explicit
  @source globs (auto-detection misses components when Turbopack
  workspace root is ambiguous)
- app/globals.css: drop redundant  reset;
  Tailwind v4 Preflight handles it, and an unlayered  selector
  beats @layer utilities so it was silently killing mb-*, mx-*, etc.
- app/globals.css: wrap  in @layer base
  so text-white / text-zinc-* utilities can override it
- next.config.ts: pin turbopack.root to project dir so the build
  works regardless of shell cwd (was running into the paperclip
  workspace root during agent sessions)
2026-06-26 19:30:57 +02:00
.github/workflows feat(site): integrate landing page redesign source code into repository 2026-06-25 03:41:14 +02:00
app ELF-457: add slot 3 rotating tagline above hero sub 2026-06-26 19:30:57 +02:00
brand brand: add Hatch v1 wordmark, mark, favicon, banner, OG image, usage guide 2026-06-22 16:46:11 +02:00
cmd Phase 2.4: Testing & Deployment 2026-06-26 05:50:07 +02:00
components ELF-457: add slot 3 rotating tagline above hero sub 2026-06-26 19:30:57 +02:00
docs docs: complete CLI documentation with config and completions commands 2026-06-25 15:45:48 +02:00
examples feat: add comprehensive CLI documentation and release workflow 2026-06-23 10:35:10 +02:00
internal Phase 2.4: Testing & Deployment 2026-06-26 05:50:07 +02:00
out.backup.20260625033511 Merge GitHub main into Gitea repo (allow unrelated histories) 2026-06-25 05:20:46 +02:00
public Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
scripts feat(site): integrate landing page redesign source code into repository 2026-06-25 03:41:14 +02:00
site feat(site): integrate landing page redesign source code into repository 2026-06-25 03:41:14 +02:00
.dockerignore Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
.env.example Fix Docker build (golang:1.26-alpine), update env config for face service 2026-06-26 05:53:58 +02:00
.gitignore Remove large files from git tracking (node_modules, .next, out) 2026-06-25 05:25:54 +02:00
.golangci.yml fix: resolve CI failures for ELF-231 merge 2026-06-24 07:56:12 +02:00
.mailmap Clean up external tooling references from public-facing docs 2026-06-23 10:05:35 +02:00
Caddyfile feat: foundation Go module, HTTP server, Docker packaging 2026-06-22 14:31:27 +02:00
CHANGELOG.md feat: add comprehensive CLI documentation and release workflow 2026-06-23 10:35:10 +02:00
configure-gitea.sh Switch from GitHub Actions to self-hosted Gitea CI/CD 2026-06-24 09:57:20 +02:00
CONTRIBUTING.md feat(site): integrate landing page redesign source code into repository 2026-06-25 03:41:14 +02:00
deploy.sh Update deployment: Go API backend with Docker Compose 2026-06-26 05:55:56 +02:00
DEPLOYMENT.md Update deployment: Go API backend with Docker Compose 2026-06-26 05:55:56 +02:00
docker-compose.yml Add security headers, rate limiting, and input validation middleware 2026-06-25 22:18:21 +02:00
Dockerfile Fix Docker build (golang:1.26-alpine), update env config for face service 2026-06-26 05:53:58 +02:00
Dockerfile.bak deploy: landing page redesign - static HTML with anime.js 2026-06-25 03:36:11 +02:00
eslint.config.mjs Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
gitea-webhook.py deploy: landing page redesign - static HTML with anime.js 2026-06-25 03:36:11 +02:00
go.mod Phase 2.4: Testing & Deployment 2026-06-26 05:50:07 +02:00
go.sum Fix TestGuestFaceSearch to handle missing face service 2026-06-25 21:35:29 +02:00
LICENSE docs(license): switch repo to MIT per CEO decision ELF-141 2026-06-23 03:59:53 +02:00
Makefile Simplify fmt target to only use gofmt (goimports not available) 2026-06-24 05:02:50 +02:00
next-env.d.ts Merge GitHub main into Gitea repo (allow unrelated histories) 2026-06-25 05:20:46 +02:00
next.config.ts ELF-457: add slot 3 rotating tagline above hero sub 2026-06-26 19:30:57 +02:00
nginx.conf Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
package-lock.json Add face package import to handler 2026-06-25 21:16:50 +02:00
package.json Add face package import to handler 2026-06-25 21:16:50 +02:00
pnpm-lock.yaml Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
pnpm-workspace.yaml fix: update Dockerfile to use npm instead of pnpm 2026-06-24 10:53:12 +02:00
postcss.config.mjs Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
README.md Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
setup-gitea.sh Switch from GitHub Actions to self-hosted Gitea CI/CD 2026-06-24 09:57:20 +02:00
tsconfig.json Initial commit: hatch.surf web application with Docker deployment 2026-06-24 09:55:30 +02:00
tsconfig.tsbuildinfo Merge GitHub main into Gitea repo (allow unrelated histories) 2026-06-25 05:20:46 +02:00
webhook.sh Disable Gitea Actions, use manual deploy script 2026-06-24 10:42:28 +02:00

El Foundation

Engineering repository for El Foundation.

About

El Foundation builds institutions that outlast their founders. We create technology and organizations that compound in value over time. This repository is the source of truth for our engineering work.

Getting Started

  1. Read the company charter to understand why we exist.
  2. Read the operating model to understand how decisions are made.
  3. Read CONTRIBUTING.md before making any changes.
  4. Read docs/engineering/local-dev.md for the day-to-day workflow.
  5. Read docs/engineering/hatch-architecture.md for the component map.

Installation

Download the latest binary for your platform from the Releases page:

  • Linux (x64): hatch-linux-amd64
  • Linux (ARM64): hatch-linux-arm64
  • macOS (Intel): hatch-darwin-amd64
  • macOS (Apple Silicon): hatch-darwin-arm64
  • Windows (x64): hatch-windows-amd64.exe

After downloading:

# Linux/macOS
chmod +x hatch-*
sudo mv hatch-* /usr/local/bin/hatch

# Windows (PowerShell)
Rename-Item hatch-windows-amd64.exe hatch.exe
# Move to a directory in your PATH

Build from Source

Requires Go 1.25 or later:

git clone https://github.com/elfoundation/hatch.git
cd hatch
CGO_ENABLED=0 go build -o hatch ./cmd/hatch
sudo mv hatch /usr/local/bin/

Repository Layout

├── .github/workflows/    # CI/CD definitions
├── cmd/hatch/            # Server entrypoint (Go binary)
├── docs/
│   ├── company/          # Founding documents (charter, org, etc.)
│   ├── engineering/      # Engineering standards, architecture, local dev
│   └── adrs/             # Architecture Decision Records
├── examples/             # Usage examples and integration guides
├── internal/             # Go packages (handler, store, ...)
├── Dockerfile            # Multi-stage static binary build (golang → scratch)
├── docker-compose.yml    # Local stack with optional Caddy sidecar
├── Caddyfile             # TLS reverse proxy for the demo host
└── go.mod                # Go module definition

Hatch — Deploy in one command

Hatch is a self-hostable HTTP request inspector + mocker. Ship it to any VPS with Docker.

Read why we are building Hatch →

Quick start (local dev, no HTTPS)

docker compose up --build
# Hatch UI: http://localhost:8080
# Health check: http://localhost:8080/healthz

Or run the binary directly:

go run ./cmd/hatch
# Health check: http://localhost:8080/healthz

Production (with HTTPS via Caddy)

# Set your domain name
cp .env.example .env
# Edit HATCH_HOSTNAME in .env to your real domain

# Start Hatch + Caddy (auto-issues Let's Encrypt cert)
docker compose --profile with-caddy up -d --build
# Hatch UI: https://{your-domain}
# Capture endpoint: https://{your-domain}/{endpoint-id}

Architecture

Internet → :443 (Caddy) → hatch:8080 (Go binary, internal network)
                 │
                 ├─ Auto TLS (Let's Encrypt, or self-signed for localhost)
                 ├─ Reverse proxy with security headers
                 └─ JSON access logs to stdout

Caddy terminates TLS and reverse-proxies to the Hatch Go binary. The Hatch container only listens on 127.0.0.1:8080 — it's never directly exposed to the internet.

CLI Reference

Hatch includes a powerful CLI for interacting with the server from the command line:

# Capture requests
hatch capture https://api.example.com/webhook

# Inspect captured traffic
hatch inspect my-webhook

# Search for specific requests
hatch search my-webhook -query 'status:500'

# Replay requests to other services
hatch replay <request-id> -endpoint my-webhook -target https://httpbin.org/post

# Configure mock responses
hatch mock set my-webhook -status 200 -body '{"ok":true}'

# Generate OpenAPI documentation
hatch doc generate my-webhook > openapi.json

For detailed CLI documentation, see docs/engineering/cli.md.

Technology Stack

See docs/engineering/tech-stack.md for current choices and rationale, and docs/adrs/ for the decision records that produced them.

Contributing

See CONTRIBUTING.md.

License

Hatch is released under the MIT License — see LICENSE.