Skip to content

// Stack

Sixteen tools, used on purpose.

What I build with, how long I have used it and how often. If a tool is not here, I will say so before I learn it on your budget.

How to read the levels

Daily
On most working days. Ask me anything.
Weekly
In regular use. I ship with it without looking things up.
Comfortable
I can deliver with it, a little slower.
01Languages4 tools
ToolYearsLevelWhat I use it for
TypeScript6 yrDailyStrict mode, no any. Types end to end, from the database to the screen.
JavaScript6 yrDailyThe platform underneath everything else, and still where the bugs live.
Node.js6 yrDailyAPIs, background jobs and the glue between services.
SQL4 yrWeeklySchemas, migrations and the queries an ORM gets wrong.
02Frameworks4 tools
ToolYearsLevelWhat I use it for
React6 yrDailyWeb apps and dashboards. Plain state until it needs more.
React Native / Expo4 yrDailyOne codebase for iOS and Android, built for the field and bad signal.
Next.js4 yrWeeklyThe default when a product needs a server and a deadline.
Tailwind CSS3 yrWeeklyFast styling that stays close to the component.
03Data4 tools
ToolYearsLevelWhat I use it for
Postgres5 yrDailyModel the data first. Constraints in the database, not in hope.
Supabase4 yrDailyAuth, storage and row-level security for most of what I ship.
Drizzle or Prisma3 yrWeeklyTyped queries and migrations that live in the repo.
REST and GraphQL6 yrWeeklyAPIs for apps and partners, with the docs written down.
04Ship and AI4 tools
ToolYearsLevelWhat I use it for
Vercel / Railway4 yrWeeklyPreview deploys on every pull request, and servers for the jobs that run long.
Cloudflare3 yrComfortableDNS, caching and the odd worker at the edge.
GitHub Actions5 yrWeeklyType checks and tests on every push. Nothing ships red.
OpenAI / Anthropic APIs2 yrWeeklyAI features that earn their place, with a fallback when they do not.

Years are counted from the first paid project, not the first tutorial.

// Start a project

Tell me what you are building.

Three quick picks so the first reply is useful. You finish the message on the contact page.

01What do you need?
02Rough budget

brief.ts

draft, not sent

export const brief = {

kind: null, // not picked yet

budget: null, // not picked yet

name: null, // not typed yet

}

or write to hello@bokoisaac.com

Nothing is sent from this page. Your picks are kept in this browser tab and wait for you on the contact form.