-- NORMAL --portfolio · 2026

Louis Pocheron

I build web applications end to end — the API, the interface, and the tooling that makes it all a pleasure to work on.

Role
Full-stack developer
Languages
TypeScript, PHP, Rust — plus some Go and Lua
Currently
Da Viking Code, Dijon — since 2023
01

Projects

6 selected · 41 public repos
  1. 01 typomaniac Multiplayer typing game: solo runs, ranked best-of-three duels, MMR and a leaderboard. Authoritative WebSocket duel server. TypeScript · Elysia · Bun · React 19 2026 →
  2. 02 claude-tmux-notify.nvim A Neovim toast when a Claude Code session in another tmux window is waiting for you. Lua · Neovim · tmux · ★ 3 2026 →
  3. 03 claude-status-line Claude Code subscription usage in the status line — cross-platform Bun binary, curl | sh installer. TypeScript · Bun 2026 →
  4. 04 pointcloud-viewer LiDAR point clouds in the browser — parsing in Rust compiled to WebAssembly, rendering with three.js. Rust · WASM · React · three.js 2026 →
  5. 05 trekker Hiking trail catalogue API — NestJS 11, Drizzle and Postgres, Zod contracts shared across a monorepo. TypeScript · NestJS · Drizzle 2026 →
  6. 06 ma_parcelle Everything French open data says about a land parcel, on a full-screen map — no account, no server. React 19 · Vite · MapLibre 2026 →
Duel bench in isometric view: two keyboards at either end of a long bench, linked by two cables to a central referee tower. Through the tower’s open door, a checkpoint with four barrier arms checks the timestamp of every keystroke and sends any it rejects back to its sender. On either side, two pairs of lamps count the rounds won, and a mast carries each player’s rank.
Open project page →
Wall-mounted annunciator board. Five flaps, one per tmux window, drop when a Claude Code session is waiting or has finished; a punched tape takes in the events, an escapement reads it every second, a bell rings, and a corded plug, sitting in the jack of the active window, holds its flap up. Acknowledging a window means plugging into it. Arrow keys or digits to pick a window, Enter to call or acknowledge, F to end a turn.
Open project page →
Dial rail. A long instrument rail, clamped to the edge of a shelf, shows Claude Code subscription usage. On the left, a selector picks the source of the limits: stdin, API or cache. Along the rail, two ten-blade combs mark the 5-hour window and the weekly window, each with a countdown to its reset. On the right, a two-needle dial shows the percentages in three zones, and a handwheel moves time forward. With the keyboard, the arrow keys step one minute forward or back, Page Down and Page Up one hour.
Open project page →
Laser scanner on a tall, slender tripod, standing on four orthophoto tiles. Its head turns and its mirror, in blue, lays down a spiral of points that rises towards the edge of the ground; the head aims at the pointer, and a point touched on the ground draws it round. A marker stands at the corner of the cloud, a ranging pole at the opposite corner, and a disc engraved in four sectors, set on a bracket fixed to one leg, receives the baked file. Arrow keys turn the head an eighth of a turn, C changes the colour.
Open project page →
Wooden card cabinet with six drawers, seen in three-quarter view from below. On top, a request card passes through a pin gauge before entering a lock slot; a drawer slides out on its runners, its twenty cards lift and leave their track at the bottom, while a totaliser on the side reads 100 cards over 5 pages.
Open project page →
Cutaway coring rig. A blue core barrel descends from a plate engraved with the cadastral map through six soil strata, top to bottom: cadastre, planning, hazards, sales, building and energy ratings (DPE). While the column is pressed, it drills; on release, it stops. A log fixed to the mast records what each stratum yielded. Hold Down arrow to drill, Up arrow to raise the barrel, Enter to run the survey again.
Open project page →
02

Career

~4 years · healthcare, energy, sport
  1. 2018 · main

    French baccalaureate (ES)

    Lycée Carnot, Dijon

  2. 2018 → 2020 · lea

    Applied Foreign Languages

    UFR SLHS, Besançon

  3. 2020 · main

    Turning to code

    Besançon

  4. 2020 → 2021 · access-code

    Web & mobile developer

    Access Code School, Besançon

  5. Sept → Dec 2021 · access-code

    Internship — Jordel Média

    Doucier · in-house CMS

    • New features for the company’s in-house CMS
  6. Feb 2022 · main

    CDOS

    Dijon · Symfony, React Native, Express

    • Web application built with Symfony
    • React Native mobile app
    • Back-end API in Node.js / TypeScript (Express)
  7. 2022 → 2023 · cda

    Application designer & developer

    Access Code School, Besançon

  8. Mar 2023 · main

    Da Viking Code

    Dijon

    • Monorepos, Docker, CI/CD, Cloudflare Workers, authentication
  9. Da Viking Code · main

    Healthcare back office

    NestJS, Prisma, PostgreSQL, GraphQL, React 19

    • Back office for a healthcare platform — NestJS 11, Prisma, PostgreSQL, GraphQL, React 19
  10. Da Viking Code · main

    Rust microservices

    Axum — tiles, CAD, point clouds

    • Rust microservices (Axum) — tile server, CAD files, point clouds
  11. Da Viking Code · main

    Energy mapping

    Laravel 12, React 19

    • Mapping applications for a major energy company — Laravel 12, React 19
  12. Da Viking Code · main

    Offline in the field

    React Native

    • Offline-first mobile platform for field teams — React Native
  13. today · HEAD → main

    What’s next

    Dijon

51 active weeks out of 53

$ git log --date-order --format=%ad | group-by week | uniq

Active days and contributions, week by week
Week ofActive daysContributions
26 October 2025514
2 November 2025618
9 November 2025619
16 November 2025716
23 November 2025624
30 November 2025414
7 December 2025524
14 December 2025530
21 December 202536
28 December 202500
4 January 2026533
11 January 2026526
18 January 2026412
25 January 2026510
1 February 2026629
8 February 2026416
15 February 2026625
22 February 2026536
1 March 2026411
8 March 2026655
15 March 2026635
22 March 2026529
29 March 2026421
5 April 2026312
12 April 2026310
19 April 2026317
26 April 202616
3 May 2026419
10 May 2026338
17 May 2026544
24 May 2026637
31 May 2026628
7 June 2026417
14 June 2026420
21 June 202638
28 June 2026325
5 July 2026530
12 July 2026312
19 July 2026473
26 July 20266110
2 August 202600
9 August 2026117
16 August 2026214
23 August 2026674
30 August 2026574
6 September 2026566
13 September 2026599
20 September 20266388
27 September 20267418
4 October 20265273
11 October 20266199
18 October 2026556
25 October 202611
The number of commits hardly matters. What counts: 51 active weeks out of 53, and never more than 12 days without coming back.
04

Stack

:set stack?
Languages
TypeScript  Rust  PHP  SQL  Go  Lua
Data
PostgreSQL  Redis  Prisma  Drizzle
Back-end
NestJS  Laravel  Axum  Elysia  Node  GraphQL  REST
Front-end
React  Next.js  Vue  Vite  Tailwind
Mapping & 3D
OpenLayers  MapLibre GL  PostGIS  Three.js
DevOps
Docker  CI/CD  Cloudflare  AWS  Sentry
Tooling
Bun  Monorepo  Git  Neovim  tmux  Agile/Scrum

editor: neovim · multiplexer: tmux · runtime: bun — the config is on GitHub

05

An API, an interface, a tool that needs building? Drop me a line. Open to remote.

Fill in the buffer, then save and quit. No need to know Vim: the button does the same.

type:
budget:
# not applicable, let’s talk

"contact.md" written — message sent to Louis, thank you!

E1: missing type

E2: missing or invalid email

E3: empty message

E4: invalid or too long field

E5: sending failed, try again in a minute or email me directly