The Ship Stack / July 2026

The Ship Stack.

What I use to build, run, and ship Shippopotamus, DiveJourney, Kitecraft, ShipFoundry, and this site.

01

Products

What I am building.

DiveJourney

A global dive map, trip planner, logbook, and dive shop marketplace for scuba divers, freedivers, and snorkelers.

ShipFoundry

A software intelligence platform that matches framework, AI, and platform changes to a product's real stack and repository, then creates decision briefs and implementation handoffs.

Kitecraft

An AI visibility platform that tracks how brands appear in AI answers and turns missing citations, content, and proof into prioritized work.

Shippopotamus

A reusable SaaS starter with authentication, billing, database, email, observability, testing, and deployment already wired.

02

Across the fleet

The Stack.

Main software and services used by each product
Stack item DiveJourney ShipFoundry Kitecraft Shippopotamus johnpotess.com
Runtime and frameworks
What it is A JavaScript runtime, package manager, script runner, and test runner. Why I use it It is extremely fast, compact, edge-friendly, and combines several useful JavaScript utilities into one package. Bun is used for DiveJourney Bun is used for ShipFoundry Bun is used for Kitecraft Bun is used for Shippopotamus Bun is used for johnpotess.com
What it is The standard server-side JavaScript runtime and compatibility layer. Why I use it It remains the JavaScript standard across much of the ecosystem and covers every compatibility path where Bun cannot. Node.js is used for DiveJourney Node.js is used for ShipFoundry Node.js is used for Kitecraft Node.js is used for Shippopotamus Node.js is used for johnpotess.com
What it is Static types for the JavaScript used throughout every product. Why I use it It is the only sensible choice for agentic engineering because richer types give coding agents more context and make their changes safer. TypeScript is used for DiveJourney TypeScript is used for ShipFoundry TypeScript is used for Kitecraft TypeScript is used for Shippopotamus TypeScript is used for johnpotess.com
What it is The React framework behind the main web applications and server APIs. Why I use it It is the full-stack React standard and keeps shipping at the edge of what production web applications can do. Next.js is used for DiveJourney Next.js is used for ShipFoundry Next.js is used for Kitecraft Next.js is used for Shippopotamus Next.js is not used by johnpotess.com
What it is A content-focused web framework that ships very little browser JavaScript. Why I use it It is a fast, simple static-site builder that still lets me use React exactly where the site needs it. Astro is not used by DiveJourney Astro is not used by ShipFoundry Astro is not used by Kitecraft Astro is not used by Shippopotamus Astro is used for johnpotess.com
What it is The component system behind the web product interfaces. Why I use it It is the interface standard, with the ecosystem and reusable patterns needed across every product. React is used for DiveJourney React is used for ShipFoundry React is used for Kitecraft React is used for Shippopotamus React is used for johnpotess.com
What it is React Native and Expo power DiveJourney on iOS and Android. Why I use it One React-based codebase reaches both iOS and Android without maintaining two native applications. React Native / Expo is used for DiveJourney React Native / Expo is not used by ShipFoundry React Native / Expo is not used by Kitecraft React Native / Expo is not used by Shippopotamus React Native / Expo is not used by johnpotess.com
Interface
What it is A utility-first styling system used by the main web applications. Why I use it It is the styling standard and its explicit utility classes are especially easy for coding agents to understand and edit safely. Tailwind CSS is used for DiveJourney Tailwind CSS is used for ShipFoundry Tailwind CSS is used for Kitecraft Tailwind CSS is used for Shippopotamus Tailwind CSS is not used by johnpotess.com
What it is Source-owned interface components built on accessible primitives. Why I use it It is a fantastic standard component foundation with accessible primitives, strong defaults, and source code I still own. shadcn/ui + Radix UI is used for DiveJourney shadcn/ui + Radix UI is used for ShipFoundry shadcn/ui + Radix UI is used for Kitecraft shadcn/ui + Radix UI is used for Shippopotamus shadcn/ui + Radix UI is not used by johnpotess.com
What it is A client-side server-state cache for fetching, mutations, retries, and invalidation. Why I use it It makes data-heavy screens responsive without rebuilding cache behavior in every component. TanStack Query is used for DiveJourney TanStack Query is not used by ShipFoundry TanStack Query is not used by Kitecraft TanStack Query is used for Shippopotamus TanStack Query is not used by johnpotess.com
Data, auth, and storage
What it is The hosted PostgreSQL, authentication, storage, and local development platform behind the products. Why I use it It combines a fast managed backend, PostgreSQL, authentication, APIs, realtime updates, storage, and Row Level Security in one platform. Supabase is used for DiveJourney Supabase is used for ShipFoundry Supabase is used for Kitecraft Supabase is used for Shippopotamus Supabase is not used by johnpotess.com
What it is The relational database that holds product, account, billing, and operational data. Why I use it It is the relational database standard, it powers Supabase, and it keeps the underlying data portable. PostgreSQL is used for DiveJourney PostgreSQL is used for ShipFoundry PostgreSQL is used for Kitecraft PostgreSQL is used for Shippopotamus PostgreSQL is not used by johnpotess.com
What it is A typed TypeScript query and schema layer that stays close to SQL. Why I use it It gives TypeScript applications typed schemas and queries while staying close enough to SQL to understand what the database is doing. Drizzle ORM is not used by DiveJourney Drizzle ORM is used for ShipFoundry Drizzle ORM is used for Kitecraft Drizzle ORM is used for Shippopotamus Drizzle ORM is not used by johnpotess.com
What it is A type-safe TypeScript query builder that maps database tables and SQL results into application types. Why I use it It keeps complex SQL explicit while catching table, column, and result-shape mistakes in TypeScript before they reach the database. Kysely is used for DiveJourney Kysely is not used by ShipFoundry Kysely is used for Kitecraft Kysely is used for Shippopotamus Kysely is not used by johnpotess.com
AI and agents
What it is OpenAI's framework for building agents with tools, handoffs, guardrails, and traces. Why I use it I originally ran most AI features on OpenAI models and have since diversified, but the Agents SDK remains a strong framework for structured agent workflows. Agents SDK is not used by DiveJourney Agents SDK is used for ShipFoundry Agents SDK is not used by Kitecraft Agents SDK is not used by Shippopotamus Agents SDK is not used by johnpotess.com
What it is A single model API that can route requests across several AI providers. Why I use it It is a gamechanger for quickly testing models across intelligence, speed, price, and provider without rewriting the integration. OpenRouter is used for DiveJourney OpenRouter is not used by ShipFoundry OpenRouter is used for Kitecraft OpenRouter is used for Shippopotamus OpenRouter is not used by johnpotess.com
Claude Code What it is Anthropic's command-line coding agent for repository work, implementation, and verification. Why I use it I use it alongside Codex when a new Claude model is worth testing or subsidized tokens make long engineering sessions practical. Claude Code is used for DiveJourney Claude Code is used for ShipFoundry Claude Code is used for Kitecraft Claude Code is used for Shippopotamus Claude Code is used for johnpotess.com
Codex What it is The coding workspace used to inspect repositories, implement changes, and run verification. Why I use it It is my default and the best agentic engineering environment I have found for connecting product intent to code, tests, and real browser behavior. Codex is used for DiveJourney Codex is used for ShipFoundry Codex is used for Kitecraft Codex is used for Shippopotamus Codex is used for johnpotess.com
What it is A shared protocol for exposing product tools and data to AI clients. Why I use it MCP is becoming the standard connection layer for a future where agents operate products and software directly. MCP is used for DiveJourney MCP is used for ShipFoundry MCP is used for Kitecraft MCP is used for Shippopotamus MCP is not used by johnpotess.com
What it is Prompt, trace, evaluation, and cost observability for AI workflows. Why I use it LLM usage must be observed, and Langfuse is open source, generous, and purpose-built for traces, prompts, evaluations, and cost. Langfuse is not used by DiveJourney Langfuse is used for ShipFoundry Langfuse is used for Kitecraft Langfuse is used for Shippopotamus Langfuse is not used by johnpotess.com
Planning and development
What it is The issue tracker connecting product decisions to implementation and release follow-up. Why I use it It gives work clear ownership, status, and a durable next action without slowing down daily use. Linear is used for DiveJourney Linear is used for ShipFoundry Linear is used for Kitecraft Linear is used for Shippopotamus Linear is used for johnpotess.com
Notion What it is The workspace for longer product plans, research, and operating notes. Why I use it It gives ideas room to develop before they become repository work or a Linear issue. Notion is used for DiveJourney Notion is used for ShipFoundry Notion is used for Kitecraft Notion is used for Shippopotamus Notion is used for johnpotess.com
OrbStack (local dev) What it is The local container and Linux environment replacing Docker Desktop on my Mac. Why I use it It is dramatically more memory-efficient than Docker Desktop and leaves more of my local machine available for coding agents and product services. OrbStack (local dev) is new for DiveJourney OrbStack (local dev) is new for ShipFoundry OrbStack (local dev) is new for Kitecraft OrbStack (local dev) is new for Shippopotamus OrbStack (local dev) is new for johnpotess.com
Docker Desktop (local dev) What it is The existing local container runtime used for databases and supporting product services. Why I use it It remains installed for compatibility, but OrbStack now does the same local work with much lower memory use and faster startup. Docker Desktop (local dev) is migrating away for DiveJourney Docker Desktop (local dev) is migrating away for ShipFoundry Docker Desktop (local dev) is migrating away for Kitecraft Docker Desktop (local dev) is migrating away for Shippopotamus Docker Desktop (local dev) is migrating away for johnpotess.com
Podman (VPS) What it is A daemonless container engine for running isolated development workloads on Linux servers. Why I use it It is coming next for VPS coding agents because it provides Docker-compatible containers without a permanently privileged daemon. Podman (VPS) is coming soon for DiveJourney Podman (VPS) is coming soon for ShipFoundry Podman (VPS) is coming soon for Kitecraft Podman (VPS) is coming soon for Shippopotamus Podman (VPS) is coming soon for johnpotess.com
What it is Virtual private servers for long-running coding agents, loops, and background engineering work. Why I use it It provides strong compute value for agent workloads that need to stay alive longer than a local session or serverless function. Hetzner is used for DiveJourney Hetzner is used for ShipFoundry Hetzner is used for Kitecraft Hetzner is used for Shippopotamus Hetzner is used for johnpotess.com
Tailscale (VPS) What it is A private mesh network connecting my Mac, phone, and VPS development environments. Why I use it It gives long-running coding agents and development services stable private access from anywhere without exposing them to the public internet. Tailscale (VPS) is used for DiveJourney Tailscale (VPS) is used for ShipFoundry Tailscale (VPS) is used for Kitecraft Tailscale (VPS) is used for Shippopotamus Tailscale (VPS) is used for johnpotess.com
Termius (VPS) What it is The SSH client I use to reach VPS development environments from desktop and mobile. Why I use it It lets me review, restart, and continue long-running agent work from my phone when I am away from the Mac. Termius (VPS) is used for DiveJourney Termius (VPS) is used for ShipFoundry Termius (VPS) is used for Kitecraft Termius (VPS) is used for Shippopotamus Termius (VPS) is used for johnpotess.com
Hosting and integrations
What it is Hosting, preview deployments, server functions, and scheduled routes for the web products. Why I use it It is the best fit for Next.js and makes previewing, deploying, and shipping web products extremely fast. Vercel is used for DiveJourney Vercel is used for ShipFoundry Vercel is used for Kitecraft Vercel is used for Shippopotamus Vercel is used for johnpotess.com
What it is Managed Redis, rate limiting, and queue-backed delivery for serverless applications. Why I use it Its serverless Redis, queues, scheduling, and rate limiting cover the coordination jobs that do not belong in PostgreSQL. Upstash is not used by DiveJourney Upstash is used for ShipFoundry Upstash is used for Kitecraft Upstash is used for Shippopotamus Upstash is not used by johnpotess.com
What it is Checkout, subscriptions, billing state, and payment webhooks. Why I use it It is the strongest all-in-one provider for payments, billing, subscriptions, webhooks, and customer self-service. Stripe is used for DiveJourney Stripe is used for ShipFoundry Stripe is used for Kitecraft Stripe is used for Shippopotamus Stripe is not used by johnpotess.com
What it is Transactional email delivery for product and account messages. Why I use it It is a fantastic developer-first email provider with a clean API that powers transactional email across the products. Resend is used for DiveJourney Resend is used for ShipFoundry Resend is not used by Kitecraft Resend is used for Shippopotamus Resend is not used by johnpotess.com
What it is The alert destination for operational events, product feedback, and workflows that need human attention. Why I use it It puts urgent system signals where I will actually see and act on them instead of creating another monitoring inbox. Slack is used for DiveJourney Slack is used for ShipFoundry Slack is used for Kitecraft Slack is not used by Shippopotamus Slack is not used by johnpotess.com
What it is Feature flags and staged rollout controls. Why I use it It replaces environment-variable flags with proper targeting, staged rollouts, instant kill switches, and safer rollback control. LaunchDarkly is not used by DiveJourney LaunchDarkly is used for ShipFoundry LaunchDarkly is not used by Kitecraft LaunchDarkly is used for Shippopotamus LaunchDarkly is not used by johnpotess.com
What it is Consent management for analytics, privacy choices, and regional requirements. Why I use it It is a fast way to keep consent handling consistent and GDPR-aware without rebuilding a compliance system in every product. c15t is used for DiveJourney c15t is used for ShipFoundry c15t is used for Kitecraft c15t is used for Shippopotamus c15t is not used by johnpotess.com
Observability
What it is Application errors, traces, releases, and performance context. Why I use it It is the standard for error tracking and connects failures to the exact release, route, trace, and surrounding events. Sentry is used for DiveJourney Sentry is used for ShipFoundry Sentry is used for Kitecraft Sentry is used for Shippopotamus Sentry is not used by johnpotess.com
What it is Product events, funnels, feature usage, and behavioral analytics. Why I use it It does a bit of everything, but its product analytics, funnels, feature flags, and session evidence make it the best analytics fit for the applications. PostHog is used for DiveJourney PostHog is used for ShipFoundry PostHog is used for Kitecraft PostHog is used for Shippopotamus PostHog is not used by johnpotess.com
What it is Lightweight, privacy-focused traffic analytics for this site. Why I use it I am trying it on the static personal site because it is lightweight, privacy-focused, and avoids the heavier analytics stack. Umami is not used by DiveJourney Umami is not used by ShipFoundry Umami is not used by Kitecraft Umami is not used by Shippopotamus Umami is used for johnpotess.com
What it is A vendor-neutral standard for application traces, metrics, and logs. Why I use it It is the open standard that lets all observability signals share one instrumentation layer while the backends can change. OpenTelemetry is used for DiveJourney OpenTelemetry is used for ShipFoundry OpenTelemetry is used for Kitecraft OpenTelemetry is used for Shippopotamus OpenTelemetry is not used by johnpotess.com
What it is Operational log storage and querying for production systems. Why I use it It makes traces and logs fast to search without operating a separate ingestion and storage stack. Axiom is used for DiveJourney Axiom is used for ShipFoundry Axiom is used for Kitecraft Axiom is not used by Shippopotamus Axiom is not used by johnpotess.com
What it is External uptime checks, heartbeats, incident alerts, and status monitoring. Why I use it ShipFoundry uses it to prove scheduled and production systems are still alive from outside the application, and the monitoring experience is excellent. Better Stack is not used by DiveJourney Better Stack is used for ShipFoundry Better Stack is not used by Kitecraft Better Stack is not used by Shippopotamus Better Stack is not used by johnpotess.com
Testing and delivery
What it is Real-browser automation for product flows, screenshots, accessibility, and smoke tests. Why I use it It is the browser-automation standard and proves the complete user flow instead of only testing isolated functions. Playwright is used for DiveJourney Playwright is used for ShipFoundry Playwright is used for Kitecraft Playwright is used for Shippopotamus Playwright is not used by johnpotess.com
What it is Repeatable browser audits for performance, accessibility, and page quality. Why I use it It turns performance into a release check when runtimes and frameworks change. Lighthouse CI is used for DiveJourney Lighthouse CI is not used by ShipFoundry Lighthouse CI is not used by Kitecraft Lighthouse CI is used for Shippopotamus Lighthouse CI is not used by johnpotess.com
What it is The accessibility rules engine used inside automated browser tests. Why I use it It is the standard automated check for catching common WCAG failures before they become repeated component patterns. Axe Core is used for DiveJourney Axe Core is used for ShipFoundry Axe Core is used for Kitecraft Axe Core is used for Shippopotamus Axe Core is not used by johnpotess.com
What it is A fast Vite-native unit and integration test runner with a mature testing ecosystem. Why I use it It provides strong mocking, coverage, browser-like environments, and compatibility for the shared starter test suite. Vitest is not used by DiveJourney Vitest is not used by ShipFoundry Vitest is not used by Kitecraft Vitest is used for Shippopotamus Vitest is not used by johnpotess.com
What it is The unit test runner built directly into Bun. Why I use it It starts quickly, needs almost no extra configuration, and keeps everyday tests inside the same runtime used for scripts and packages. Bun Test is used for DiveJourney Bun Test is used for ShipFoundry Bun Test is used for Kitecraft Bun Test is not used by Shippopotamus Bun Test is not used by johnpotess.com
What it is A fast parser, linter, formatter, and TypeScript-aware toolchain. Why I use it It is unbelievably faster than the ESLint and Prettier toolchain it replaces. The difference is large enough to change how often linting and formatting can run. Oxc family is used for DiveJourney Oxc family is coming soon for ShipFoundry Oxc family is coming soon for Kitecraft Oxc family is used for Shippopotamus Oxc family is coming soon for johnpotess.com
What it is The existing JavaScript and TypeScript linter in repositories not yet moved to Oxlint. Why I use it It remains only while its rules are transferred without weakening the checks. ESLint is not used by DiveJourney ESLint is migrating away for ShipFoundry ESLint is migrating away for Kitecraft ESLint is not used by Shippopotamus ESLint is not used by johnpotess.com
What it is The formatter still used where Oxfmt has not yet replaced it. Why I use it It stays until the new formatter can produce stable output without noisy repository-wide changes. Prettier is not used by DiveJourney Prettier is not used by ShipFoundry Prettier is not used by Kitecraft Prettier is not used by Shippopotamus Prettier is migrating away for johnpotess.com
What it is Continuous integration, release automation, and scheduled repository work. Why I use it Checks should run beside the pull request and commit they are evaluating. GitHub Actions is used for DiveJourney GitHub Actions is used for ShipFoundry GitHub Actions is used for Kitecraft GitHub Actions is used for Shippopotamus GitHub Actions is used for johnpotess.com
What it is Automated pull request review for bugs, regressions, and code-quality problems. Why I use it It adds a consistent review pass before a human spends time on the final decision. CodeRabbit PR reviews is used for DiveJourney CodeRabbit PR reviews is used for ShipFoundry CodeRabbit PR reviews is used for Kitecraft CodeRabbit PR reviews is used for Shippopotamus CodeRabbit PR reviews is used for johnpotess.com
What it is Repository-aware review of the implementation, tests, product behavior, and release risk. Why I use it It can connect a code diff to the surrounding system instead of reviewing changed lines in isolation. Codex PR reviews is used for DiveJourney Codex PR reviews is used for ShipFoundry Codex PR reviews is used for Kitecraft Codex PR reviews is used for Shippopotamus Codex PR reviews is used for johnpotess.com
What it is High-performance hosted machines used for selected GitHub Actions jobs. Why I use it They shorten expensive build and browser workloads when GitHub-hosted machines become the bottleneck. Blacksmith runners is used for DiveJourney Blacksmith runners is not used by ShipFoundry Blacksmith runners is not used by Kitecraft Blacksmith runners is not used by Shippopotamus Blacksmith runners is not used by johnpotess.com
What it is An external runner lane used during the fleet workflow experiments. Why I use it It is tracked because runner choice affects delivery speed, reliability, and trust boundaries. Avrea runners is not used by DiveJourney Avrea runners is not used by ShipFoundry Avrea runners is not used by Kitecraft Avrea runners is used for Shippopotamus Avrea runners is not used by johnpotess.com
What it is Managed GitHub Actions runners used for selected small and medium workloads. Why I use it They provide another cost and performance option while trusted jobs remain explicitly routed. Tenki runners is used for DiveJourney Tenki runners is used for ShipFoundry Tenki runners is used for Kitecraft Tenki runners is used for Shippopotamus Tenki runners is not used by johnpotess.com
Publishing and knowledge
What it is The structured-content platform and editing studio behind johnpotess.com. Why I use it Essays, metadata, translations, and related content need a real content model rather than loose files. Sanity is not used by DiveJourney Sanity is not used by ShipFoundry Sanity is not used by Kitecraft Sanity is not used by Shippopotamus Sanity is used for johnpotess.com
What it is The documentation framework used for ShipFoundry knowledge and product guidance. Why I use it It provides a strong public reading and search experience without rebuilding a documentation system. Fumadocs is not used by DiveJourney Fumadocs is used for ShipFoundry Fumadocs is not used by Kitecraft Fumadocs is not used by Shippopotamus Fumadocs is not used by johnpotess.com
Maps, media, and collection
What it is Web and native maps, place search, and geographic imagery for DiveJourney. Why I use it The product needs one geographic foundation across discovery, planning, and the mobile experience. Mapbox is used for DiveJourney Mapbox is not used by ShipFoundry Mapbox is not used by Kitecraft Mapbox is not used by Shippopotamus Mapbox is not used by johnpotess.com

Runtime and frameworks

Bun

What it is A JavaScript runtime, package manager, script runner, and test runner.

Why I use it It is extremely fast, compact, edge-friendly, and combines several useful JavaScript utilities into one package.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Node.js

What it is The standard server-side JavaScript runtime and compatibility layer.

Why I use it It remains the JavaScript standard across much of the ecosystem and covers every compatibility path where Bun cannot.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

TypeScript

What it is Static types for the JavaScript used throughout every product.

Why I use it It is the only sensible choice for agentic engineering because richer types give coding agents more context and make their changes safer.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Next.js

What it is The React framework behind the main web applications and server APIs.

Why I use it It is the full-stack React standard and keeps shipping at the edge of what production web applications can do.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Astro

What it is A content-focused web framework that ships very little browser JavaScript.

Why I use it It is a fast, simple static-site builder that still lets me use React exactly where the site needs it.

johnpotess.com: Used

React

What it is The component system behind the web product interfaces.

Why I use it It is the interface standard, with the ecosystem and reusable patterns needed across every product.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

React Native / Expo

What it is React Native and Expo power DiveJourney on iOS and Android.

Why I use it One React-based codebase reaches both iOS and Android without maintaining two native applications.

DiveJourney: Used

Interface

Tailwind CSS

What it is A utility-first styling system used by the main web applications.

Why I use it It is the styling standard and its explicit utility classes are especially easy for coding agents to understand and edit safely.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

shadcn/ui + Radix UI

What it is Source-owned interface components built on accessible primitives.

Why I use it It is a fantastic standard component foundation with accessible primitives, strong defaults, and source code I still own.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

TanStack Query

What it is A client-side server-state cache for fetching, mutations, retries, and invalidation.

Why I use it It makes data-heavy screens responsive without rebuilding cache behavior in every component.

DiveJourney: Used · Shippopotamus: Used

Data, auth, and storage

Supabase

What it is The hosted PostgreSQL, authentication, storage, and local development platform behind the products.

Why I use it It combines a fast managed backend, PostgreSQL, authentication, APIs, realtime updates, storage, and Row Level Security in one platform.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

PostgreSQL

What it is The relational database that holds product, account, billing, and operational data.

Why I use it It is the relational database standard, it powers Supabase, and it keeps the underlying data portable.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Drizzle ORM

What it is A typed TypeScript query and schema layer that stays close to SQL.

Why I use it It gives TypeScript applications typed schemas and queries while staying close enough to SQL to understand what the database is doing.

ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Kysely

What it is A type-safe TypeScript query builder that maps database tables and SQL results into application types.

Why I use it It keeps complex SQL explicit while catching table, column, and result-shape mistakes in TypeScript before they reach the database.

DiveJourney: Used · Kitecraft: Used · Shippopotamus: Used

AI and agents

Agents SDK

What it is OpenAI's framework for building agents with tools, handoffs, guardrails, and traces.

Why I use it I originally ran most AI features on OpenAI models and have since diversified, but the Agents SDK remains a strong framework for structured agent workflows.

ShipFoundry: Used

OpenRouter

What it is A single model API that can route requests across several AI providers.

Why I use it It is a gamechanger for quickly testing models across intelligence, speed, price, and provider without rewriting the integration.

DiveJourney: Used · Kitecraft: Used · Shippopotamus: Used

Claude Code

What it is Anthropic's command-line coding agent for repository work, implementation, and verification.

Why I use it I use it alongside Codex when a new Claude model is worth testing or subsidized tokens make long engineering sessions practical.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Codex

What it is The coding workspace used to inspect repositories, implement changes, and run verification.

Why I use it It is my default and the best agentic engineering environment I have found for connecting product intent to code, tests, and real browser behavior.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

MCP

What it is A shared protocol for exposing product tools and data to AI clients.

Why I use it MCP is becoming the standard connection layer for a future where agents operate products and software directly.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Langfuse

What it is Prompt, trace, evaluation, and cost observability for AI workflows.

Why I use it LLM usage must be observed, and Langfuse is open source, generous, and purpose-built for traces, prompts, evaluations, and cost.

ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Planning and development

Linear

What it is The issue tracker connecting product decisions to implementation and release follow-up.

Why I use it It gives work clear ownership, status, and a durable next action without slowing down daily use.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Notion

What it is The workspace for longer product plans, research, and operating notes.

Why I use it It gives ideas room to develop before they become repository work or a Linear issue.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

OrbStack (local dev)

What it is The local container and Linux environment replacing Docker Desktop on my Mac.

Why I use it It is dramatically more memory-efficient than Docker Desktop and leaves more of my local machine available for coding agents and product services.

DiveJourney: New · ShipFoundry: New · Kitecraft: New · Shippopotamus: New · johnpotess.com: New

Docker Desktop (local dev)

What it is The existing local container runtime used for databases and supporting product services.

Why I use it It remains installed for compatibility, but OrbStack now does the same local work with much lower memory use and faster startup.

DiveJourney: Migrating away · ShipFoundry: Migrating away · Kitecraft: Migrating away · Shippopotamus: Migrating away · johnpotess.com: Migrating away

Podman (VPS)

What it is A daemonless container engine for running isolated development workloads on Linux servers.

Why I use it It is coming next for VPS coding agents because it provides Docker-compatible containers without a permanently privileged daemon.

DiveJourney: Coming soon · ShipFoundry: Coming soon · Kitecraft: Coming soon · Shippopotamus: Coming soon · johnpotess.com: Coming soon

Hetzner

What it is Virtual private servers for long-running coding agents, loops, and background engineering work.

Why I use it It provides strong compute value for agent workloads that need to stay alive longer than a local session or serverless function.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Tailscale (VPS)

What it is A private mesh network connecting my Mac, phone, and VPS development environments.

Why I use it It gives long-running coding agents and development services stable private access from anywhere without exposing them to the public internet.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Termius (VPS)

What it is The SSH client I use to reach VPS development environments from desktop and mobile.

Why I use it It lets me review, restart, and continue long-running agent work from my phone when I am away from the Mac.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Hosting and integrations

Vercel

What it is Hosting, preview deployments, server functions, and scheduled routes for the web products.

Why I use it It is the best fit for Next.js and makes previewing, deploying, and shipping web products extremely fast.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Upstash

What it is Managed Redis, rate limiting, and queue-backed delivery for serverless applications.

Why I use it Its serverless Redis, queues, scheduling, and rate limiting cover the coordination jobs that do not belong in PostgreSQL.

ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Stripe

What it is Checkout, subscriptions, billing state, and payment webhooks.

Why I use it It is the strongest all-in-one provider for payments, billing, subscriptions, webhooks, and customer self-service.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Resend

What it is Transactional email delivery for product and account messages.

Why I use it It is a fantastic developer-first email provider with a clean API that powers transactional email across the products.

DiveJourney: Used · ShipFoundry: Used · Shippopotamus: Used

Slack

What it is The alert destination for operational events, product feedback, and workflows that need human attention.

Why I use it It puts urgent system signals where I will actually see and act on them instead of creating another monitoring inbox.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used

LaunchDarkly

What it is Feature flags and staged rollout controls.

Why I use it It replaces environment-variable flags with proper targeting, staged rollouts, instant kill switches, and safer rollback control.

ShipFoundry: Used · Shippopotamus: Used

c15t

What it is Consent management for analytics, privacy choices, and regional requirements.

Why I use it It is a fast way to keep consent handling consistent and GDPR-aware without rebuilding a compliance system in every product.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Observability

Sentry

What it is Application errors, traces, releases, and performance context.

Why I use it It is the standard for error tracking and connects failures to the exact release, route, trace, and surrounding events.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

PostHog

What it is Product events, funnels, feature usage, and behavioral analytics.

Why I use it It does a bit of everything, but its product analytics, funnels, feature flags, and session evidence make it the best analytics fit for the applications.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Umami

What it is Lightweight, privacy-focused traffic analytics for this site.

Why I use it I am trying it on the static personal site because it is lightweight, privacy-focused, and avoids the heavier analytics stack.

johnpotess.com: Used

OpenTelemetry

What it is A vendor-neutral standard for application traces, metrics, and logs.

Why I use it It is the open standard that lets all observability signals share one instrumentation layer while the backends can change.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Axiom

What it is Operational log storage and querying for production systems.

Why I use it It makes traces and logs fast to search without operating a separate ingestion and storage stack.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used

Better Stack

What it is External uptime checks, heartbeats, incident alerts, and status monitoring.

Why I use it ShipFoundry uses it to prove scheduled and production systems are still alive from outside the application, and the monitoring experience is excellent.

ShipFoundry: Used

Testing and delivery

Playwright

What it is Real-browser automation for product flows, screenshots, accessibility, and smoke tests.

Why I use it It is the browser-automation standard and proves the complete user flow instead of only testing isolated functions.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Lighthouse CI

What it is Repeatable browser audits for performance, accessibility, and page quality.

Why I use it It turns performance into a release check when runtimes and frameworks change.

DiveJourney: Used · Shippopotamus: Used

Axe Core

What it is The accessibility rules engine used inside automated browser tests.

Why I use it It is the standard automated check for catching common WCAG failures before they become repeated component patterns.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Vitest

What it is A fast Vite-native unit and integration test runner with a mature testing ecosystem.

Why I use it It provides strong mocking, coverage, browser-like environments, and compatibility for the shared starter test suite.

Shippopotamus: Used

Bun Test

What it is The unit test runner built directly into Bun.

Why I use it It starts quickly, needs almost no extra configuration, and keeps everyday tests inside the same runtime used for scripts and packages.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used

Oxc family

What it is A fast parser, linter, formatter, and TypeScript-aware toolchain.

Why I use it It is unbelievably faster than the ESLint and Prettier toolchain it replaces. The difference is large enough to change how often linting and formatting can run.

DiveJourney: Used · ShipFoundry: Coming soon · Kitecraft: Coming soon · Shippopotamus: Used · johnpotess.com: Coming soon

ESLint

What it is The existing JavaScript and TypeScript linter in repositories not yet moved to Oxlint.

Why I use it It remains only while its rules are transferred without weakening the checks.

ShipFoundry: Migrating away · Kitecraft: Migrating away

Prettier

What it is The formatter still used where Oxfmt has not yet replaced it.

Why I use it It stays until the new formatter can produce stable output without noisy repository-wide changes.

johnpotess.com: Migrating away

GitHub Actions

What it is Continuous integration, release automation, and scheduled repository work.

Why I use it Checks should run beside the pull request and commit they are evaluating.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

CodeRabbit PR reviews

What it is Automated pull request review for bugs, regressions, and code-quality problems.

Why I use it It adds a consistent review pass before a human spends time on the final decision.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Codex PR reviews

What it is Repository-aware review of the implementation, tests, product behavior, and release risk.

Why I use it It can connect a code diff to the surrounding system instead of reviewing changed lines in isolation.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used · johnpotess.com: Used

Blacksmith runners

What it is High-performance hosted machines used for selected GitHub Actions jobs.

Why I use it They shorten expensive build and browser workloads when GitHub-hosted machines become the bottleneck.

DiveJourney: Used

Avrea runners

What it is An external runner lane used during the fleet workflow experiments.

Why I use it It is tracked because runner choice affects delivery speed, reliability, and trust boundaries.

Shippopotamus: Used

Tenki runners

What it is Managed GitHub Actions runners used for selected small and medium workloads.

Why I use it They provide another cost and performance option while trusted jobs remain explicitly routed.

DiveJourney: Used · ShipFoundry: Used · Kitecraft: Used · Shippopotamus: Used

Publishing and knowledge

Sanity

What it is The structured-content platform and editing studio behind johnpotess.com.

Why I use it Essays, metadata, translations, and related content need a real content model rather than loose files.

johnpotess.com: Used

Fumadocs

What it is The documentation framework used for ShipFoundry knowledge and product guidance.

Why I use it It provides a strong public reading and search experience without rebuilding a documentation system.

ShipFoundry: Used

Maps, media, and collection

Mapbox

What it is Web and native maps, place search, and geographic imagery for DiveJourney.

Why I use it The product needs one geographic foundation across discovery, planning, and the mobile experience.

DiveJourney: Used

  • Used
  • New
  • Migrating away
  • Coming soon

03

Current changes

Changes to the stack.

New additions, tools being replaced, and what I have retired recently.

New additions

OrbStack (local dev)

Why I am moving local containers to OrbStack because it starts faster, uses much less memory, and leaves more of the Mac available for coding agents and product services.

Oxlint

Why I am adding Oxlint because it is unbelievably faster than ESLint. On large repositories, the difference is immediate and makes constant linting practical.

Oxfmt

Why I am adding Oxfmt because it is unbelievably faster than Prettier. Repo-wide formatting becomes a normal part of the engineering loop instead of something coding agents have to wait on.

In the process of replacing

ESLint

ESLint Oxlint

Why I am replacing ESLint because Oxlint is unbelievably faster while covering the rules I actually rely on.

Prettier

Prettier Oxfmt

Why I am replacing Prettier because Oxfmt is unbelievably faster and makes repo-wide formatting feel nearly instant.

Docker Desktop (local dev)

Docker Desktop (local dev) OrbStack

Why I am replacing Docker Desktop because it uses too much local memory for work that OrbStack now handles faster and more efficiently.

Retired

No longer in the stack.

No longer the default image layer. Uploads moved to Supabase Storage, with image work handled directly by the applications. Replaced by Supabase. Axiom is simpler for the logs and traces I need right now, without the extra setup and dashboard complexity of a full Grafana stack. Replaced by Axiom.