Kai Lindgren. Full-stack engineer.
Full-stack engineer, currently open

Kai Lindgren

TypeScriptReactNext.jsNodePostgresRustElixir
Start a project github.com/kailindgren →

Selected projects

2026

Roster — a CRM for VCs

Full stack build in six months. Rich-record database, custom views, live news pipeline. 240 firms, 1200 seats at launch. Two engineers, one designer.

TypeScriptNext.jsPostgresTrigger.dev
2025

Basin — real-time finance dashboard

Stripe + Plaid ingest, categorization engine, sub-minute latency to the dashboard. Handled 42M transactions in the first year.

RustElixirClickHouseKafka
2024

Signal — feedback triage pipeline

Ingest from Intercom, Slack, Twitter, email. Automatic tagging with a small open source model. Ships to Linear on demand.

PythonFastAPIPostgresVector search
2023

Draft — headless editorial calendar

Open source. Month, week, list view over a shared Postgres schema. Publishes to Ghost, Substack, Buffer, X, custom CMS webhooks.

ElixirPhoenixLiveView

Experience

2024 → now

Founding engineer

Roster (Seed, 8 people)

Design and build the core CRM surface end to end. Own the news pipeline, the auth, and half of the frontend.

2021 → 2024

Senior engineer

Runway (Series B, 60 people)

Built the CI/CD platform frontend and the workspace shell. Led the migration from Rails to Next.js in eight months, no downtime.

2018 → 2021

Engineer

Stripe

Payments infra team. Rate limiter, retry queue, part of the 2020 API v2 launch.

2016 → 2018

Junior engineer

Basecamp

Rails, Ruby, first taste of a slow-mode engineering culture.

Skills

TypeScript, React, Next.js8y
Node, Fastify, tRPC7y
Elixir, Phoenix, LiveView4y
Rust, actix, sqlx3y
Python, FastAPI6y
Postgres, ClickHouse8y
Kubernetes, Terraform5y
Kafka, NATS, Redis streams4y
DDD, event sourcing4y

Open for one project this quarter.

Founding or lead engineer, product-shaped work, small teams only. Send a note.

Start a project kai@kailindgren.dev
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon
© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon© BrowserMoon