# abchaudary.me

## Track record

- 99.95% uptime on hybrid on-prem and cloud infrastructure
- Monthly cloud spend cut by 45%
- 80% of critical vulnerabilities closed within two quarters
- An EdTech platform moved off AWS to self-hosted managed cloud, nginx in front of the apps: roughly 70% lower infrastructure cost, zero downtime, servers and security posture owned single handed
- Self-hosted LLMs (GPT-OSS, Llama, Qwen) fine-tuned behind a custom chat and evaluation engine, proposal through to production
- 12+ years, working remotely with full hours overlap for the US, UK and EU

## Projects

- [abchaudary.me](https://abchaudary.me/projects/abchaudary-me): This site: Next.js 16 and Payload CMS on Postgres, rebuilt around a fixed design. Every route ships a plain-Markdown twin for machines that run no JavaScript.
- [Emotions AI](https://abchaudary.me/projects/emotions-ai): Emotions AI reads facial expressions from a webcam in real time using face-api.js. The models ship with the page, so no frame ever leaves the browser.
- [AudioViz](https://abchaudary.me/projects/audioviz): AudioViz is a Vue 3 audio visualiser and waveform generator. The rendering is vanilla JavaScript against the AudioContext and Canvas APIs, off the framework.
- [Psychedelica](https://abchaudary.me/projects/psychedelica): Psychedelica is a Three.js and Tone.js experience of drifting wireframe geometry and reactive sound, opening on a photosensitivity warning you clear first.
- [MusicGen](https://abchaudary.me/projects/musicgen): MusicGen is a browser instrument collection built on Tone.js and Three.js: a touch theremin, a stylophone, a synth, and four grid and circle sequencers.
- [AlgoViz](https://abchaudary.me/projects/algoviz): AlgoViz visualises sorting, searching and pathfinding in React. An audio toggle plays each compared value as a tone, using the value directly as its frequency.

## Writing

- [Why a Loading Screen Can't Wait for React to Hydrate](https://abchaudary.me/blog/preloader-before-react-hydration-nextjs): A React-driven loading overlay can't leave before the bundle it hides has hydrated, because that's the same cost it's meant to be covering for.
- [Why generateMetadata in Next.js Must Be Async](https://abchaudary.me/blog/nextjs-generatemetadata-async-module-scope-bug): A synchronous metadata builder reading an unprimed module-scope snapshot put localhost:3000 in page titles and emptied their Person JSON-LD across ten routes.
- [Why backdrop-filter Breaks After a Lightning CSS Build](https://abchaudary.me/blog/backdrop-filter-lightning-css-bug): Lightning CSS merges duplicate backdrop-filter declarations and keeps the wrong one, deleting a glass effect and the containing block it quietly provided.
