Shahathir (•◡•)

24 · Batu Caves, Selangor, Malaysia · 🇲🇾

professionally distracted

My Career Journey

  1. Financial Risk Group logo

    Financial Risk Group

    1yrs 3mos

    Assistant Software Developer

    Jun 2025 – Present

  2. Estee Lauder Companies logo

    Estee Lauder Companies

    6mos

    Software Engineer Intern

    Sep 2024 – Mar 2025

Tools & Platforms

TypeScript
JavaScript
Java
Python
PHP
Go
HTML5
CSS3
React
Next.js
Vite
Angular
Redux
React Router
Tailwind CSS
shadcn/ui
Material UI
Sass
Bootstrap
React Native
Node.js
TypeScript
JavaScript
Java
Python
PHP
Go
HTML5
CSS3
React
Next.js
Vite
Angular
Redux
React Router
Tailwind CSS
shadcn/ui
Material UI
Sass
Bootstrap
React Native
Node.js
Bun
Django
FastAPI
Spring Boot
Java Servlets
Express
PostgreSQL
MySQL
MS SQL Server
SQLite
Appwrite
Docker
AWS
Cloudflare
Nginx
Vercel
Netlify
DigitalOcean
Git
DBeaver
Postman
Bun
Django
FastAPI
Spring Boot
Java Servlets
Express
PostgreSQL
MySQL
MS SQL Server
SQLite
Appwrite
Docker
AWS
Cloudflare
Nginx
Vercel
Netlify
DigitalOcean
Git
DBeaver
Postman

Words I Live By

Shahathir is currently not listening to anything
Shahathir is currently not listening to anything

2026 © shahathir.me

Changelogs · Old site

  • AboutAbout
  • ThoughtsThoughts
  • TILTIL
  • BookmarksBookmarks
  • ExperienceExperience
  • ProjectsProjects
  • AccoladesAccolades
  • PhotographyPhotography
  • SongsSongs
  • StatsStats
  • UsesUses
  • ChatChat
  • Resume BuilderResume Builder
  • AboutAbout
  • ThoughtsThoughts
  • TILTIL
  • BookmarksBookmarks
  • ExperienceExperience
  • ProjectsProjects
  • AccoladesAccolades
  • PhotographyPhotography
  • SongsSongs
  • StatsStats
  • UsesUses
  • ChatChat
  • Resume BuilderResume Builder

Today I Learned

Short notes on things picked up along the way.

43 posts

  1. A slash command should activate the skill, not paste it in

    Jul 11, 2026

    The obvious way to wire "/skill" is to splice the skill's text into the prompt. That silently throws away progressive disclosure. The better move is to make the slash command a directive to the model.

    aiagentsux
  2. Angular Signal Forms: create the form once, make the model reactive

    Jul 10, 2026

    A dynamic form whose fields arrive async is the case that bites. Recreating form() when the fields change throws at runtime — the fix is one stable form, a reactive model, and per-item rules via applyEach.

    angularformssignals
  3. Letting users teach an agent new skills at runtime

    Jul 10, 2026

    An agent's built-in skills are frozen at deploy. A SKILL.md folder a user uploads — mounted as a second skills root and synced by content hash — teaches the agent a workflow that's live on the next message, no deploy.

    aistrandsagents
  4. Angular Signal Forms: when the model signal is the form

    Jul 9, 2026

    We're migrating a large app off Reactive Forms. Signal Forms collapse the parallel form-state + valueChanges dance into one thing — the model signal you already own, with validity and errors as signals you read directly.

    angularformssignals
  5. Validating a generated spreadsheet by recalculating it headless

    Jul 9, 2026

    A programmatically generated .xlsx has formula strings but no computed values. To know the formulas even work, drive headless LibreOffice to recompute — with one non-obvious flag.

    pythonautomationai
…