Lookout
000 015 030 045 060 075 090 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345 360
2 min read Tom Shafer

Day one: the first commit

Why I'm building yet another error tracker, and the foundation that landed on day one — auth, organizations, projects, and an ingest API.

Every project has a day one. Today is Lookout's.

I've spent years squinting at error trackers that either cost a fortune at scale or hide the one detail I actually need behind three clicks. So I'm building my own — an observability platform that ingests errors with a single API call, groups them sensibly, and shows me the story behind a crash instead of a wall of noise.

The first commit is never glamorous, but it sets the shape of everything after it. Here's what landed:

What's in the box

  • Authentication — register, login, password reset, the usual. Nothing exotic yet, but it's the gate everything else sits behind.
  • Organizations & membership — because error tracking is a team sport. Projects belong to an org; people belong to an org; billing will hang off the org later.
  • Projects & API keys — each project gets a key. That key is the entire authentication story for ingest: one header, one POST, done.
  • The ingest API — the heart of it. An error event comes in as JSON — message, level, exception class, stack trace — and becomes a row I can group and query.
  • Alert rules (scaffolding) — just the bones for now. The real alerting engine is months away, but I want the seam to exist from the start.
  • Billing — wired early so I'm never bolting payments onto a mature app.

The one decision that matters

The ingest contract. Everything downstream — grouping, watchers, dashboards, the SDKs in five languages I haven't written yet — depends on the wire shape of an event. So I spent most of today not writing features but arguing with myself about field names. message, exception_class, level, stack_frames, context. Boring, load-bearing decisions.

If I get that right, every future SDK is a thin client. If I get it wrong, I'm writing migrations forever.

Day one down. Tomorrow: making login actually pleasant, and letting people sign in with the accounts they already have.

build-in-public laravel observability