SIGIL / 06
// three properties, one essence

Applications.

The banner site, the annual card, and the blog. One system — but each keeps its own character: the hub stays sleek, the card stays warm, the blog stays utilitarian.

ryanrampersad.com
WORKSelected
Projects
WRITINGField
Notes
HISTORYA Timeline
of Work
COLOPHONHow It's
Made
BANNER SITE · ryanrampersad.com/ hero · live ribbon · bloom · index row
card.ryanrampersad.com

Ryan
Rampersad

Saint Paul, MN · mailed each December
// THE 2025–2026 LETTER

Another year, another card in the mail — a short letter, a few photos, and Roxy the dog insisting on the last word.

Every December a physical card goes out to whoever asks for one. The site is just the doorway: read this year's letter, browse the archive, or request your own to find in the mailbox.

┌─ ✶ ───────────────────────────┐
│   C A R D  ·  MMXXV — MMXXVI   │
└─────────────────────── ✶ ──────┘
Request a card →featuring Roxy
ANNUAL CARD · card.ryanrampersad.com/ warmth kept — cursive · ping · dithered ribbon · ascii
ryanmr.com
Ryan Rampersad // DEV NOTES
2026·07

Shell heredoc JSON without the escaping pain

Piping JSON into a CLI from bash, cleanly.

2026·05

Reasons to avoid Prisma

When the ORM's abstractions cost more than they saved.

2026·03

Responsive columns with CSS grid

auto-fit, minmax, and the one line that does the work.

2026·01

Zod: optional vs default

The subtle difference that bites in forms.

// READING · 2026·07 · 4 MIN

Shell Heredoc JSON
Without The Escaping Pain

Quoting JSON inside a shell command is a losing game. A quoted heredoc turns the whole block into a literal — no escaping, no interpolation surprises.

$ cat <<'JSON' | api post { "signal": "#FF0000" } JSON
The single-quoted delimiter is the whole trick: it stops the shell from touching a thing.
BLOG · ryanmr.com/ utilitarian kept — mono dates · red code rail