- Add POST /e/{endpoint}/requests/{id}/replay endpoint
- Replay re-sends captured method, path, headers, query, body to target URL
- Response includes target status code, headers, body (truncated 64KB)
- SSRF guard: denies replay to private/loopback by default
- Opt-in env var HATCH_ALLOW_PRIVATE_REPLAY=true for local dev
- Server-rendered inspect page at GET /e/{endpoint} with replay button UI
- SSE live stream for new requests (EventSource)
- Mock configuration at PUT /e/{endpoint}/mock
- Store: GetRequest, GetMock, SetMock methods added
- Chi router migration from stdlib ServeMux
- 26 passing tests including replay unit tests and E2E capture-to-replay
Co-Authored-By: Paperclip <noreply@paperclip.ing>
v1 brand kit for the Hatch launch (ELF-53).
Files:
brand/wordmark/ - text+mark wordmark (SVG with embedded Inter Bold,
plus PNG exports at 200x60, 400x120, 800x240,
1200x360); light/dark and on-light/on-dark variants
brand/mark/ - the icon alone, in 16/32/48/64/128/192/256/512/1024
brand/favicon/ - favicon.ico (16+32+48) and the 5 required PNG sizes
brand/banner/ - README banner at 1280x640 (+ @2x retina)
brand/og/ - OG image at 1200x630 (+ @2x retina)
docs/brand/usage.md - one-pager on spacing, clear space, do-not rules,
light/dark mode behavior
Concept:
Mark is a rounded square with a horizontal slot — the literal "hatch".
A small "request" indicator drops into the slot. At 16px the slot still
reads; at 512px the proportions hold.
Type:
Inter Bold for the wordmark; JetBrains Mono for the code/tagline accent.
Both SIL OFL 1.1, attributed in docs/brand/usage.md.
Color:
Ink #0A0A0B, Paper #FAFAF9, Accent #F59E0B. No other colors in the kit.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Use URL as endpoint ID so handler path-segment lookups resolve correctly.
Previously CreateEndpoint generated a random UUID for the ID, but the
handler always queries by the path segment — every GetEndpoint call
missed, causing duplicate UNIQUE violations on subsequent requests
and orphaned request records (endpoint_id mismatch).
- Register both /{endpoint} and /{endpoint}/ patterns so bare and
nested capture paths both route to the handler (Go 1.22+ ServeMux).
- Strip query string in extractID for robustness, even though the
library never sends ? in r.URL.Path.
- Remove unused net/http import from handler_test.go (caught by vet).
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Go module (github.com/elfoundation/hatch) with go 1.25
- cmd/hatch: HTTP server with GET /healthz returning 200 OK
- Multi-stage Dockerfile producing static binary from scratch
- docker-compose with hatch + optional Caddy reverse proxy
- CI placeholder with Go test/lint stubs
- .gitignore, .dockerignore, .env.example
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Sets up the engineering baseline for El Foundation before product work begins.
- README.md: project overview and repo layout
- CONTRIBUTING.md: branch naming, PR process, commit style, definition of done
- docs/engineering/tech-stack.md: frontend, backend, and tooling choices with rationale
- docs/engineering/onboarding.md: 30-day onboarding checklist
- docs/adrs/adr-template.md: decision record template
- .github/workflows/ci.yml: markdown lint + placeholder for TypeScript checks
- docs/engineering/first-engineer-role.md: scope, skills, 30-day priorities, hire recommendation
Co-Authored-By: Paperclip <noreply@paperclip.ing>