Skip to content

Tools

For shaping ideas, building products, and keeping things running. A mix of what I use now and what helped along the way.

20 tools. Open one for the notes.

Design

  • FigmaInterface decisions

    A shared canvas makes interface decisions easier to discuss. Components, variants, and prototypes let me work through the details while keeping the broader system in view.

    Visit Figma (opens in a new tab)
  • Magic PatternsDesign system

    Useful for turning an idea into something I can react to. Bringing existing components and visual rules into a prototype makes it easier to explore a direction before investing in the full build.

    Visit Magic Patterns (opens in a new tab)

Build

  • Claude CodeMain coding

    Working directly in a repository keeps the conversation close to the code. It is useful for tracing a problem across files, making a concrete change, and running the checks needed to review it.

    Visit Claude Code (opens in a new tab)
  • CodexImplementation and review

    The useful part is the loop between intent, implementation, and verification. I can work through an interface, inspect the result in a browser, and review the changes together.

    Visit Codex (opens in a new tab)
  • AntigravityEvals

    Useful for exploring how agents approach a task and checking the work they produce. Keeping the editor, terminal, and browser close together helps make the result easier to inspect.

    Visit Antigravity (opens in a new tab)
  • Next.jsWeb apps

    Routing, server rendering, and application code can live in one project. That makes it practical to grow a small working idea into a complete web product without stitching together every layer from scratch.

    Visit Next.js (opens in a new tab)
  • Expo · React NativeNative iOS

    A familiar React workflow with access to native capabilities. Expo makes the build and device-testing loop more approachable, leaving more attention for how the app feels in someone’s hand.

    Visit Expo · React Native (opens in a new tab)
  • TypeScriptShared contract packages

    Types make assumptions visible. Shared contracts help the interface and the services behind it agree on the shape of data, and make changes easier to follow across a codebase.

    Visit TypeScript (opens in a new tab)
  • Tailwind CSSResponsive styling

    Keeping styling close to the markup makes small visual iterations quick. A common spacing and color vocabulary helps those changes stay consistent across screen sizes.

    Visit Tailwind CSS (opens in a new tab)
  • shadcn/uiUI foundations

    The components live in the project, so I can understand how they work and compose them for the product. It is a useful starting point for common controls while leaving room for a distinct visual language.

    Visit shadcn/ui (opens in a new tab)

Ship & learn

  • GitHubVersion control and review

    Pull requests give a change a clear boundary: what changed, why, and how it was checked. The history becomes a record I can return to when a design or engineering decision needs context.

    Visit GitHub (opens in a new tab)
  • LinearPlanning and follow-through

    A useful place to turn a broad idea into work small enough to finish. Issues and projects keep the next step, its context, and the remaining decisions in one place.

    Visit Linear (opens in a new tab)
  • VercelPreviews and deployment

    A preview URL makes the work tangible before it reaches production. Reviewing an actual page on different screens is more useful than trying to settle every detail from a static capture.

    Visit Vercel (opens in a new tab)
  • SupabaseAuth and row-level security

    Postgres and authentication sit close together, with access rules that can be expressed at the database layer. That makes it easier to reason about who should be able to read or change a record.

    Visit Supabase (opens in a new tab)
  • NeonPostgres for smaller services

    A managed Postgres database is a good fit when a small feature needs real persistence. It keeps the data model familiar without adding database-server maintenance to the project.

    Visit Neon (opens in a new tab)
  • PostHogProduct analytics

    Events and funnels help connect a design decision to what people actually do. Useful for finding where a flow loses people and deciding what deserves a closer look.

    Visit PostHog (opens in a new tab)
  • promptfooEvaluation gates

    A repeatable set of cases gives prompt and model changes something concrete to answer to. I can compare outputs against explicit expectations instead of relying on a few convincing examples.

    Visit promptfoo (opens in a new tab)
  • ResendProduct and authentication email

    Email is part of the product experience, especially at sign-in. A focused API and delivery logs make it easier to connect the application flow to what was actually sent.

    Visit Resend (opens in a new tab)

Earlier workflows

  • NotionThe first tracking database

    The first version of my personal health tracker was a Notion database. It gave the idea enough structure to become a habit, while remaining easy to change as I learned what I wanted to track.

    Visit Notion (opens in a new tab)
  • Apple ShortcutsPersonal automation

    An iOS Shortcut connected Apple Health to that early tracking database. It is a good way to test a useful workflow with the tools already on the phone, before building a dedicated app around it.

    Visit Apple Shortcuts (opens in a new tab)