What I use
A snapshot of the hardware, software, and small habits I actually use day-to-day. Updated occasionally — last touched May 2026.
Editor & terminal
- VS CodePrimary editor. Workspace per project, minimal extensions: ESLint, Prettier, GitLens, Tailwind IntelliSense, Flutter, Error Lens.
- JetBrains MonoMonospace font with ligatures. JetBrains Nerd Font variant for terminal glyphs.
- Zsh + Oh My ZshWith
git,z,fast-syntax-highlighting, and a custom prompt that shows git branch + Node version. - tmuxOne session per project. Three panes: editor / dev server / logs.
- fzf + ripgrepFuzzy file search and grep — wired into Ctrl-T / Ctrl-R bindings.
- zoxideSmarter
cd.z projinstead of long paths.
Hardware
- Lenovo Legion 5Daily driver. 16GB RAM, NVMe SSD, dual-boot but mostly stays on Ubuntu.
- Ubuntu 24.04 LTSPrimary OS. Faster for Docker workflows and node-gyp builds than my Windows partition.
- External 27" 1440p monitorVertical for code review, horizontal for designs and dashboards.
- Mechanical keyboard, 75% layoutTactile switches. Function row matters for IDE shortcuts.
- Logitech MX MasterHorizontal scroll for wide log panels & spreadsheets is non-negotiable.
- Wired Ethernet when possibleCuts a noticeable amount of "wait, what?" out of WhatsApp calls with clients.
Backend dev
- Node.js + TypeScriptDefault for most APIs. Strict
tsconfig, noany, no implicit return. - Express / NestJSExpress for small services, NestJS when DI & modules pay off.
- MongoDB + MongooseDefault for flexible schemas. PostgreSQL when relations dominate.
- RedisSessions, rate limits, pubsub fan-out for WebSockets.
- PinoStructured JSON logging.
pino-prettyfor local, raw JSON for prod. - ZodRuntime validation that also gives me TypeScript types. Worth every byte.
Frontend & mobile
- Next.js + TailwindApp Router. Tailwind for components, occasional CSS modules for one-off layouts.
- Flutter + DartClean Architecture, Bloc for state. Riverpod only when the project starts with it.
- FigmaFor reading client mockups. I don't design from scratch — that's not my job.
DevOps & deployment
- Docker + Docker ComposeEvery project ships with a
docker-compose.ymlthat brings up the whole stack. - DigitalOcean DropletsCheap, predictable, Linux. SSH + Caddy + Docker = production.
- VercelFor static + Next.js frontends with no backend logic.
- CaddyReverse proxy with automatic HTTPS. Simpler config than Nginx for small fleets.
- GitHub ActionsBuild, lint, test on PR. Deploy to DO via SSH on push to main.
- CloudflareDNS + CDN + DDoS shield. Free tier covers most of what clients need.
Daily tools
- Postman / BrunoPostman for collections shared with clients. Bruno for solo work — local files, git-friendly.
- TablePlusGUI for Mongo + Postgres. Saved queries beat the CLI for one-off investigations.
- NotionProject notes, client docs, post-mortems.
- ObsidianPersonal knowledge base + draft blog posts in Markdown.
- Linear / GitHub IssuesLinear for paid project clients. GitHub Issues for OSS contributions.
- WhatsApp WebLike it or not, the primary client comms channel in the MENA region.
Open source I depend on
- nanoidEvery ID I generate. Top contributor and grateful daily user.
- Helmet.jsFirst middleware I import into every Express app. Contributing back keeps me sharp on security defaults.
- express-validatorInput validation that won't surprise you in production.
- Mongoose / Pino / ZodThe Node trio. Honestly couldn't do my job without them.
- adhan_dartPrayer-times for Islamic apps. I'm the top contributor — it's the one I maintain most actively.
If you want to copy my setup verbatim, don't. Pick the parts that solve a problem you actually have today; replace everything else with what you already know. Tooling is the wrong place to spend your novelty budget.