DEV Community

SEN LLC profile picture

SEN LLC

I build small, focused tools and ship them open-source. Based in Japan 🇯🇵 with SEN LLC, working through a 100+ portfolio at sen.ltd/portfolio. Posts about TypeScript, AWS, and bugs that taught me so

Location Tokyo, Japan Joined Joined on  Personal website https://sen.ltd

Work

Engineer at SEN LLC

Writing 2048 As a Pure-Function Engine, With All Four Directions Expressed Through One 'Slide Left' Function

Writing 2048 As a Pure-Function Engine, With All Four Directions Expressed Through One 'Slide Left' Function

Comments
6 min read
Preact Port: Same React Source Code, Swap the Runtime, Get 8.75 kB Gzip ( 82%) — Series Finale

Preact Port: Same React Source Code, Swap the Runtime, Get 8.75 kB Gzip ( 82%) — Series Finale

Comments
5 min read
Lit 3 Port: 9.70 kB, on Par with Solid, Because Web Components Are Legitimately Viable Now

Lit 3 Port: 9.70 kB, on Par with Solid, Because Web Components Are Legitimately Viable Now

Comments
4 min read
Astro Port: 3.17 kB Gzip, 94% vs React, New Series Record — Because the Framework Runtime Is Literally Zero

Astro Port: 3.17 kB Gzip, 94% vs React, New Series Record — Because the Framework Runtime Is Literally Zero

Comments
4 min read
Building a Sudoku Puzzle Game With Constraint Propagation, Backtracking, and a Hint Engine That Fell Out For Free

Building a Sudoku Puzzle Game With Constraint Propagation, Backtracking, and a Hint Engine That Fell Out For Free

1
Comments
4 min read
Qwik City Port: Two Bundle Numbers (28.60 kB First-Paint, 44.92 kB Total) Because Resumability Breaks Single-Number Comparisons

Qwik City Port: Two Bundle Numbers (28.60 kB First-Paint, 44.92 kB Total) Because Resumability Breaks Single-Number Comparisons

Comments
5 min read
SvelteKit Port: 32.50 kB Gzip, +72% Over Plain Svelte — Meta-Framework Tax, Round Two

SvelteKit Port: 32.50 kB Gzip, +72% Over Plain Svelte — Meta-Framework Tax, Round Two

Comments
4 min read
Porting to Nuxt 3: +7% Larger Than React, the Only Regression in the Series (and Why)

Porting to Nuxt 3: +7% Larger Than React, the Only Regression in the Series (and Why)

Comments
4 min read
SolidJS Port: gzip 8.33 kB, React 83%, Because Fine-Grained Reactivity Means No Virtual DOM

SolidJS Port: gzip 8.33 kB, React 83%, Because Fine-Grained Reactivity Means No Virtual DOM

Comments
4 min read
Porting the Landing to Svelte 5 + Runes — 61% Smaller Gzip and Why the Compiler Approach Wins Here

Porting the Landing to Svelte 5 + Runes — 61% Smaller Gzip and Why the Compiler Approach Wins Here

Comments
5 min read
Porting the Same Portfolio Landing to Vue 3 — 41% Smaller Gzip Than React

Porting the Same Portfolio Landing to Vue 3 — 41% Smaller Gzip Than React

Comments
4 min read
A Data-Driven Portfolio Landing Page Where Adding an Entry Doesn't Rebuild the App

A Data-Driven Portfolio Landing Page Where Adding an Entry Doesn't Rebuild the App

Comments
5 min read
A Tiny CSS Gradient Designer in 200 Lines — And Why Sorting Happens at Output Time

A Tiny CSS Gradient Designer in 200 Lines — And Why Sorting Happens at Output Time

Comments
4 min read
An Area Unit Converter With 15 Units — Including Four Different Sizes of Japanese Tatami

An Area Unit Converter With 15 Units — Including Four Different Sizes of Japanese Tatami

Comments
4 min read
Getting Leap Years Right, and Listing All 27 Leap Seconds Ever Inserted

Getting Leap Years Right, and Listing All 27 Leap Seconds Ever Inserted

Comments 1
4 min read
Writing a Hepburn Hiragana ↔ Katakana ↔ Rōmaji Converter (With All The Annoying Edge Cases)

Writing a Hepburn Hiragana ↔ Katakana ↔ Rōmaji Converter (With All The Annoying Edge Cases)

Comments
4 min read
A BMI Calculator That Shows Both JASSO and WHO Categories, Because They Disagree

A BMI Calculator That Shows Both JASSO and WHO Categories, Because They Disagree

Comments
4 min read
A Keyboard-Driven HTML Entity Lookup That Lets You Copy All Three Forms

A Keyboard-Driven HTML Entity Lookup That Lets You Copy All Three Forms

Comments
4 min read
A Searchable HTTP Status Code Reference with 36 Codes, One-Line Descriptions, and Yes, 418

A Searchable HTTP Status Code Reference with 36 Codes, One-Line Descriptions, and Yes, 418

Comments
4 min read
Why 1100 / 1.1 = 999.9999… Is a Tax Calculator Bug, and Two Ways to Fix It

Why 1100 / 1.1 = 999.9999… Is a Tax Calculator Bug, and Two Ways to Fix It

Comments 1
4 min read
A GUI Cron Builder — And Why Building Is Way Easier Than Parsing

A GUI Cron Builder — And Why Building Is Way Easier Than Parsing

Comments
4 min read
A Bill Splitter Where Unit and Rounding Are Orthogonal (They Usually Aren't)

A Bill Splitter Where Unit and Rounding Are Orthogonal (They Usually Aren't)

Comments
4 min read
Converting Between Japanese Eras and Gregorian Dates — and Why the Boundary Days Matter

Converting Between Japanese Eras and Gregorian Dates — and Why the Boundary Days Matter

Comments
4 min read
Writing Conway's Game of Life With Uint8Array and Canvas, Including a Gosper Glider Gun

Writing Conway's Game of Life With Uint8Array and Canvas, Including a Gosper Glider Gun

Comments
4 min read
50 Japanese Traditional Colors, Sorted By Hue — Because the Names Aren't Enough

50 Japanese Traditional Colors, Sorted By Hue — Because the Names Aren't Enough

Comments
4 min read
Every Time Format At Once: A Converter That Stops the Unix-Seconds-or-Milliseconds Dance

Every Time Format At Once: A Converter That Stops the Unix-Seconds-or-Milliseconds Dance

Comments
4 min read
A JWT Debugger That Never Sends Your Token Anywhere

A JWT Debugger That Never Sends Your Token Anywhere

Comments
4 min read
I Built a Side-by-Side Base64 / URL / HTML / Encoder and Finally Stopped Confusing Them

I Built a Side-by-Side Base64 / URL / HTML / Encoder and Finally Stopped Confusing Them

Comments
5 min read
UUID v7, ULID, KSUID — What's the Difference? I Implemented All Five

UUID v7, ULID, KSUID — What's the Difference? I Implemented All Five

1
Comments
6 min read
Writing a Regex Parser and Tree Visualizer in ~400 Lines of Vanilla JS

Writing a Regex Parser and Tree Visualizer in ~400 Lines of Vanilla JS

1
Comments
5 min read
Writing a TypeScript Type Inference Engine in 300 Lines of Vanilla JS

Writing a TypeScript Type Inference Engine in 300 Lines of Vanilla JS

4
Comments
5 min read
You Probably Don't Need a Timezone Library Anymore

You Probably Don't Need a Timezone Library Anymore

Comments
5 min read
loading...