Hatch.surf web application
Go to file
Riley Zhang 6f03ff2465 Add linting, formatting, and test infrastructure for Phase 1
- Add .golangci.yml with sensible linting rules
- Add Makefile with test, lint, fmt, vet, build targets
- Enhance CI pipeline with Go formatting check and golangci-lint job
- Create shared testutil.FakeRepository for handler tests
- Refactor handler tests to use shared FakeRepository
- Add data/ and coverage.out to .gitignore

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-24 04:59:52 +02:00
.github/workflows Add linting, formatting, and test infrastructure for Phase 1 2026-06-24 04:59:52 +02:00
brand brand: add Hatch v1 wordmark, mark, favicon, banner, OG image, usage guide 2026-06-22 16:46:11 +02:00
cmd/hatch Add E2E smoke test — one-command DoD gate (ELF-23 Task 8) 2026-06-22 19:22:56 +02:00
docs docs(license): switch repo to MIT per CEO decision ELF-141 2026-06-23 03:59:53 +02:00
internal Add linting, formatting, and test infrastructure for Phase 1 2026-06-24 04:59:52 +02:00
site Add static site for hatch.sh with blog post 2026-06-23 09:53:50 +02:00
.dockerignore feat: foundation Go module, HTTP server, Docker packaging 2026-06-22 15:07:44 +02:00
.env.example feat: foundation Go module, HTTP server, Docker packaging 2026-06-22 15:07:44 +02:00
.gitignore Add linting, formatting, and test infrastructure for Phase 1 2026-06-24 04:59:52 +02:00
.golangci.yml Add linting, formatting, and test infrastructure for Phase 1 2026-06-24 04:59:52 +02:00
Caddyfile feat: foundation Go module, HTTP server, Docker packaging 2026-06-22 15:07:44 +02:00
CONTRIBUTING.md docs+license: realign engineering foundation to Go stack per ADR-0001/0002 2026-06-22 15:12:04 +02:00
docker-compose.yml feat: foundation Go module, HTTP server, Docker packaging 2026-06-22 15:07:44 +02:00
Dockerfile fix: copy go.sum in Docker build stage for reproducible deps 2026-06-22 15:07:44 +02:00
go.mod feat: add one-click replay for captured requests 2026-06-22 16:58:42 +02:00
go.sum feat: add one-click replay for captured requests 2026-06-22 16:58:42 +02:00
LICENSE docs(license): switch repo to MIT per CEO decision ELF-141 2026-06-23 03:59:53 +02:00
Makefile Add linting, formatting, and test infrastructure for Phase 1 2026-06-24 04:59:52 +02:00
README.md Add link to blog post in README 2026-06-23 09:54:49 +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.

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
├── 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.

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.