Denn.s Waweru

Full Stack TypeScript Developer

Crafting exceptional web experiences with full-stack TypeScript. Based in Nairobi, Kenya.

Scroll

What I build with

What I build with

Scroll to explore

Web

React · Next.js · TanStack · Tailwind CSS · TypeScript

Mobile

React Native · Expo · Capacitor · PWA · TypeScript

AI

RAG · Chatbots · Workflows · Agents

Backend

Node.js · Docker · AWS · GCP · Cloudflare · Linux Servers · Supabase

How I work

Ownership

End-to-end project ownership

From architecture through deployment and the work after launch. I stay accountable for the entire lifecycle, not just my part.

1

Architecture

System design & direction

Data modeling, stack decisions, and reviews before you commit. I help teams choose paths they can live with.

2

Teams

Team multiplier

I lead, mentor, and collaborate across product, design, and engineering, translating constraints so the work actually lands.

3

Open source

Contributor & builder

Maintainable code by default, open source contributions, and tools built on the fly: CLIs, Chrome extensions, web apps, and MCPs that remove friction and multiply what a team can ship.

4

Why I choose what I choose

Ten tools, one reasoned stack at a time.

Language

TypeScript

01

TypeScript is the discipline layer. I use it to make intent explicit before bugs get a chance to become runtime surprises.

Strict types keep API boundaries honest, make refactors less dramatic, and let the editor become a design tool for the system instead of a spellchecker.

Strict contractsRefactorsDXAPI safety

01 / 10

Swipe the card

Projects

Open source projects

Pinned highlights, recently pushed repos, and topic filters — pulled live from GitHub.

tigawanna

tigawanna

8 days ago

Full-stack TypeScript monorepo — TanStack Start site, Elysia API, Expo apps, and shared packages.

  • typescript
  • tanstack
  • elysia
  • monorepo
expo-widget-bridge

expo-widget-bridge

about 2 months ago

Android home-screen widgets powered by custom Expo native modules and Jetpack Compose.

  • expo
  • react-native
  • android
  • typescript
tanstack-theme-kit

tanstack-theme-kit

2 months ago

SSR-friendly theme provider for TanStack Start with DaisyUI and zero flash on load.

  • react
  • tanstack
  • theming
  • ssr

Articles

Wr.ting in public.

Published on Dev.to.

vite-plugin-graphql-usage

vite-plugin-graphql-usage

Automating GraphQL operation discovery in Vite — five hours well spent on a five-minute problem.

  • graphql
  • vite
  • typescript

Today I. learned

Cool things I. recently learned.

Small lessons, debugging wins, and notes — stored in Tirso so I can add new ones from the admin panel later.

TIL

Eliminating Theme Flash in Next.js Without Sacrificing Caching or Streaming

Storing a user’s theme preference in localStorage is convenient—no server round-trips, no cookie consent headaches. But it creates a classic problem: on the first paint, the page always shows the default theme, then quickly swaps to the saved one once JavaScript loads. That jarring flicker is known as a flash of incorrect theme. A common alternative is to store the theme in a cookie, read it server-side, and inject the correct class or data-attribute directly into the HTML. This eliminates the flash, but it comes with painful trade-offs: Caching suffers – The server can no longer return a static, cacheable response because the HTML depends on a per-user cookie. CDN caching and stale-while-revalidate effectively break. Streaming breaks – If you’re using Next.js App Router’s streaming or Suspense, you now need to await cookies() at the very root layout, blocking the entire stream and defeating the purpose. So we’re caught between a flicker and a performance cliff.

TIL

queueMicrotask : What It Is and When to Use It

While building a reusable shortcut hints component with TanStack Hotkeys, I hit React's "Cannot update a component while rendering a different component" error. Here's how queueMicrotask fixes it -- and when you should (and shouldn't) reach for it.

TIL

typesafe tanstack query client setup

Tanstack query client setup with typed keys and meta options , The meta : {invalidates} is setup to invalidate all queries with that key prefix

TIL

Loading process env variables into your vite project (for DEV only)

Need environment variables only during development (like debug flags or local API URLs)? Here’s how to conditionally load them in Vite without leaking secrets:

TIL

Adding Typings for JSON parse

Technique for making JSON parse emit the input object type instead of any

Contact

Let's make the next system less haunted.

Open to projects, collaborations, and useful conversations about TypeScript, product architecture, and web systems.