close

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

Envelope Encryption for .env Files, the Right Way (PHP CLI, Stdlib Only)

Envelope Encryption for .env Files, the Right Way (PHP CLI, Stdlib Only)

Comments
9 min read
Mocking an OpenAPI Spec From Scratch in 600 Lines of TypeScript

Mocking an OpenAPI Spec From Scratch in 600 Lines of TypeScript

Comments
9 min read
Parsing RSS and Atom From Scratch in Rust with quick-xml

Parsing RSS and Atom From Scratch in Rust with quick-xml

Comments
10 min read
The Four Pagination Strategies Every Backend Dev Should Know

The Four Pagination Strategies Every Backend Dev Should Know

Comments
9 min read
zod-to-schema: A Zero-Config CLI That Runs Your TypeScript In-Process

zod-to-schema: A Zero-Config CLI That Runs Your TypeScript In-Process

Comments
8 min read
A local requestbin in 200 lines of PHP — why self-hosting beats webhook.site for production debugging

A local requestbin in 200 lines of PHP — why self-hosting beats webhook.site for production debugging

Comments
9 min read
The `notify` crate is surprisingly pleasant — I built a cross-platform file watcher in four dependencies

The `notify` crate is surprisingly pleasant — I built a cross-platform file watcher in four dependencies

Comments
8 min read
SSE Is the Right Answer More Often Than You Think — A Hono + TypeScript Reference Service

SSE Is the Right Answer More Often Than You Think — A Hono + TypeScript Reference Service

Comments
9 min read
Parsing phpinfo() in Pure PHP — or, How to Diff Two Containers

Parsing phpinfo() in Pure PHP — or, How to Diff Two Containers

Comments
8 min read
gron Was Right: Flat JSON Is Easier to Grep (A Rust Take With Four Formats and a Round-Trip)

gron Was Right: Flat JSON Is Easier to Grep (A Rust Take With Four Formats and a Round-Trip)

Comments
10 min read
HTTP Cookies in the Wild Are a Mess — I Built a CLI That Eats Them

HTTP Cookies in the Wild Are a Mess — I Built a CLI That Eats Them

Comments
8 min read
Password Generation Is About Entropy, Not Randomness

Password Generation Is About Entropy, Not Randomness

Comments
8 min read
HMAC Webhook Signing Isn't Complicated — the Formats Are

HMAC Webhook Signing Isn't Complicated — the Formats Are

Comments
8 min read
A Minimal HTTP Debug Server in Rust with axum

A Minimal HTTP Debug Server in Rust with axum

Comments
10 min read
I Wrote a JWT Verifier in 150 Lines. You Probably Shouldn't — But Here's What I Learned.

I Wrote a JWT Verifier in 150 Lines. You Probably Shouldn't — But Here's What I Learned.

Comments 1
9 min read
hexview: writing a color-aware hex dump in Rust with one dependency

hexview: writing a color-aware hex dump in Rust with one dependency

Comments
9 min read
A TypeScript API Starter With Sharp Boundaries — Hono + Zod + better-sqlite3

A TypeScript API Starter With Sharp Boundaries — Hono + Zod + better-sqlite3

Comments
8 min read
Writing a Safe SQL INSERT Generator Taught Me Why ORMs Exist

Writing a Safe SQL INSERT Generator Taught Me Why ORMs Exist

Comments
7 min read
RFC 5545 is a 200-Page Spec. Your iCalendar Feed Needs About 150 Lines.

RFC 5545 is a 200-Page Spec. Your iCalendar Feed Needs About 150 Lines.

Comments
9 min read
PHP as a Microservice: A Markdown-to-HTML API in 200 Lines of Slim 4

PHP as a Microservice: A Markdown-to-HTML API in 200 Lines of Slim 4

Comments
8 min read
Read composer.lock Directly: A 1000-Line CLI That Beats composer show --tree

Read composer.lock Directly: A 1000-Line CLI That Beats composer show --tree

Comments
8 min read
Why a Tiny Audit Tool Beats a Big Security Framework (laravel-audit)

Why a Tiny Audit Tool Beats a Big Security Framework (laravel-audit)

Comments
9 min read
What's Actually In This CSV? A Zero-Dep Python Profiler

What's Actually In This CSV? A Zero-Dep Python Profiler

Comments
9 min read
Perceptual Image Diff Without NumPy — Building a Pillow-Only CLI

Perceptual Image Diff Without NumPy — Building a Pillow-Only CLI

Comments
9 min read
When the Library IS the Product: A 200-Line FastAPI Wrapper for wordcloud

When the Library IS the Product: A 200-Line FastAPI Wrapper for wordcloud

Comments
8 min read
Building a Furigana HTTP Service in Python: Why It's Not Just a Lookup Table

Building a Furigana HTTP Service in Python: Why It's Not Just a Lookup Table

Comments
6 min read
Japanese Width Conversion Without Regex: Full↔Half ASCII, Katakana, and the Dakuten Merge Problem

Japanese Width Conversion Without Regex: Full↔Half ASCII, Katakana, and the Dakuten Merge Problem

Comments
9 min read
Slugifying Japanese URLs Is Harder Than You Think — I Built a Focused CLI

Slugifying Japanese URLs Is Harder Than You Think — I Built a Focused CLI

Comments
10 min read
Every Link Preview in Your App Is the Same 30 Lines You Haven't Written Yet

Every Link Preview in Your App Is the Same 30 Lines You Haven't Written Yet

Comments
7 min read
Generating a Valid RSS Feed From Scratch in Stdlib Python

Generating a Valid RSS Feed From Scratch in Stdlib Python

Comments
10 min read
Counting Moras: Why Your 5-7-5 Haiku Validator is Probably Wrong

Counting Moras: Why Your 5-7-5 Haiku Validator is Probably Wrong

Comments
9 min read
Text Generation Before Transformers: Building a Markov Chain in 200 Lines of Python

Text Generation Before Transformers: Building a Markov Chain in 200 Lines of Python

Comments
10 min read
Writing `tail -f | jq` That Doesn't Feel Like a Rube Goldberg Machine

Writing `tail -f | jq` That Doesn't Feel Like a Rube Goldberg Machine

Comments
10 min read
Building a Hash Identifier Without ML — Just Rules, Scores, and Honesty About Ambiguity

Building a Hash Identifier Without ML — Just Rules, Scores, and Honesty About Ambiguity

Comments
8 min read
How ULID Actually Works: Implementing the Codec in 60 Lines of Python

How ULID Actually Works: Implementing the Codec in 60 Lines of Python

Comments
10 min read
A 150-Line FastAPI Service for 'Is Today a Holiday?'

A 150-Line FastAPI Service for 'Is Today a Holiday?'

Comments
8 min read
When does this cron run next? Give it its own 70 MB container

When does this cron run next? Give it its own 70 MB container

Comments
8 min read
How to Make Sense of a HAR File Without DevTools

How to Make Sense of a HAR File Without DevTools

Comments
8 min read
Python's urllib.robotparser Is Subtly Wrong — and Why That Matters for SEO

Python's urllib.robotparser Is Subtly Wrong — and Why That Matters for SEO

Comments
8 min read
Writing a Polite Crawler: sitemap-gen for the Sites SSGs Forgot

Writing a Polite Crawler: sitemap-gen for the Sites SSGs Forgot

Comments
9 min read
What's actually in a modern favicon set (and why everyone gets it wrong)

What's actually in a modern favicon set (and why everyone gets it wrong)

Image 1
Comments
10 min read
I Built a FastAPI QR Code Service and the Library Choice Mattered More Than the Code

I Built a FastAPI QR Code Service and the Library Choice Mattered More Than the Code

Comments
9 min read
The Right-Sized Image Service: A FastAPI Watermarker in ~110 MB

The Right-Sized Image Service: A FastAPI Watermarker in ~110 MB

Comments
10 min read
grep's flat output is the wrong abstraction for exploratory searches

grep's flat output is the wrong abstraction for exploratory searches

Comments
9 min read
Dead Code in Python Is Undecidable — So I Built a Detector That Admits It

Dead Code in Python Is Undecidable — So I Built a Detector That Admits It

Comments
10 min read
Building linkcheck: Why I Stopped Parsing Markdown with Regex

Building linkcheck: Why I Stopped Parsing Markdown with Regex

Comments
9 min read
Writing a Privacy Tool You Can Actually Trust: exif-stripper in 500 Lines of Python

Writing a Privacy Tool You Can Actually Trust: exif-stripper in 500 Lines of Python

Comments
8 min read
A 60 MB FastAPI Service That Extracts Text From PDFs (and Why It Beats Tika for the 90% Case)

A 60 MB FastAPI Service That Extracts Text From PDFs (and Why It Beats Tika for the 90% Case)

Comments
8 min read
Stop Using `diff` on CSV Files — Build a Semantic CSV Diff in 200 Lines of Python

Stop Using `diff` on CSV Files — Build a Semantic CSV Diff in 200 Lines of Python

Comments
9 min read
Your .env.example Is Not a Schema. Here's a 400-Line Python CLI That Fixes That

Your .env.example Is Not a Schema. Here's a 400-Line Python CLI That Fixes That

Comments
9 min read
I Built a jq Alternative That Speaks JSONPath — and Deliberately Wrote Almost No Parser Code

I Built a jq Alternative That Speaks JSONPath — and Deliberately Wrote Almost No Parser Code

Comments
9 min read
Same Game in Vanilla JS — Flood Fill, Gravity, and Column Compression

Same Game in Vanilla JS — Flood Fill, Gravity, and Column Compression

Comments
4 min read
100 Projects in 4 Days — A Meta-Dashboard Celebrating the Milestone

100 Projects in 4 Days — A Meta-Dashboard Celebrating the Milestone

Comments
3 min read
A Memory Card Matching Game With CSS 3D Flip and Immutable State

A Memory Card Matching Game With CSS 3D Flip and Immutable State

Comments
3 min read
A Loan Calculator With 元利均等 vs 元金均等 and Prepayment Simulation

A Loan Calculator With 元利均等 vs 元金均等 and Prepayment Simulation

Comments
3 min read
An International Tip Calculator — Because Tipping Customs Are Wildly Different

An International Tip Calculator — Because Tipping Customs Are Wildly Different

Comments
3 min read
An IPv4 Subnet Calculator With Binary Visualization and /31 Handling

An IPv4 Subnet Calculator With Binary Visualization and /31 Handling

Comments
3 min read
Cron Expression to Natural Language — In English and Japanese

Cron Expression to Natural Language — In English and Japanese

Comments
3 min read
A YAML ↔ JSON Converter With a Handwritten YAML Subset Parser

A YAML ↔ JSON Converter With a Handwritten YAML Subset Parser

Comments
3 min read
A Countdown Tracker That Handles DST, Timezones, and Calendar-Day Math Correctly

A Countdown Tracker That Handles DST, Timezones, and Calendar-Day Math Correctly

Comments
3 min read
loading...