Skip to content
Corentin GS

Traces

A record of work, projects, travels, tournaments, and the lessons they left behind. Mostly for myself, so future me can remember how any of it happened.

At work

Jun 2024 — Jun 2025

ChessMood

Making chess analysis searchable

At ChessMood I built the backend for game analysis. I designed the ingestion pipeline: an outbox, ordered queues, and idempotent SQS workers. I also built Lab, a shared store for games, engine evaluations, and metadata.

As principal maintainer of the Go chess library, I rewrote more than half the codebase. PGN parsing dropped from 26 seconds to 0.888 seconds in multithreaded mode; replacing the legacy Python parser gave a further 14× speed-up.

I processed 300+ hours of chess video. OpenCV and FFmpeg pre-filters made the board-recognition model roughly 10× faster, and made frame-accurate position search possible.

Oct 2025 — May 2026

Basalt

Making traces useful at scale

At Basalt, I redesigned a trace platform processing roughly one terabyte of telemetry per day. I moved storage toward Kafka, ClickHouse, and Quickwit, then reshaped ClickHouse queries: work that took dozens of seconds and hundreds of gigabytes of RAM now completes in under a second.

I built a custom OpenTelemetry Collector extension that adds authenticated, transformed ingestion. I also fixed multi-day traces that broke the original partitioning assumptions.

I led an internal workshop on refactoring toward TDD, clearer domain boundaries, CQRS where it helps, and end-to-end coverage across Go and TypeScript services.

Craft, with proof

I write concurrent Go as something people can reason about.

Go Concurrency Patterns: A Practical Reading Order

I treat observability as a property of the system, not a dashboard added later.

OpenTelemetry Go Compile-Time with otelc

I use tests to make structural change safer.

TDD Isn't About Bugs — It's Your Permission to Refactor

PGN parsing: 26 s → 0.888 s · ~1 TB of traces/day · 95 stars on Chess