← Selected work Grantline / Case study Source ↗

Grantline

Identity from a signed grant, never a header.

Live · policy-checked grants · Updated 2026

Go · React · TypeScript · ed25519

Hosted on Render. The first open may take up to about 60 seconds; the proof below remains available immediately.

Context
Independent identity project · 2026
My role
Designer and sole engineer
Team
Solo build
Evidence
Signed five-minute grants · policy checks

POST /v1/sessions · grant past TTL

{ "error": "expired" }

Passwords and spoofable tenant headers confuse authentication with authorization. Humans, machines, and agents need short-lived access that still fails closed.

Trust path

Trust path

Failure

  • Wrong key or replayed challenge.

    Invalid signature / already used. Challenges are 60s and single-use.

  • X-Tenant-Id: globex on an acme grant.

    Echoed and ignored. /v1/me still returns acme.

  • Machine opens billing.api.

    403. Kind and role fail the resource policy.

  • Grant past TTL.

    Open session returns expired. Sessions expire lazily on list.

Inspect

Live Open product ↗

Source GitHub ↗

Wake time Allow up to about 60 seconds on the first request.

What I would improve next

  1. Add signing-key rotation, grant revocation, and a durable policy and audit store.
  2. Replace the software proof adapter with real WebAuthn for people and KMS-backed keys for services.
  3. Model delegated authority explicitly so an agent can receive a narrower grant than its human sponsor.