Skip to content

How I Use AI

AI is a core part of how I build software. I use it as a development partner, not a replacement — for writing code, reviewing architecture, automating content pipelines, and shipping faster without cutting corners.

What I Use

Claude Code

My primary coding tool. I use it for building features, debugging, architecture decisions, code review, SEO auditing, accessibility fixes, and performance optimization. Every active project has a CLAUDE.md file that gives Claude full context on the codebase.

Anthropic API

Integrated directly into production applications. Claude generates articles, extracts metadata, and processes content in batches — with human review at every step.

How I Use It

Full-Stack Development

Building features end-to-end — from database schemas to UI components. Claude Code handles the implementation while I focus on architecture and product decisions.

Content Automation

Automated pipelines that pull from social feeds, generate SEO-optimized articles, and publish to production. Quality guardrails ensure nothing ships without validation.

Planning & Architecture

Breaking down complex projects into implementation plans, evaluating tradeoffs, and mapping out migrations before writing a single line of code.

Project Memory

I maintain detailed context files and memory systems across projects so AI retains architectural decisions, hard-won lessons, and domain knowledge between sessions.

Planning & Migrations

Before I write code, I use AI to think through the plan. For new projects, that means mapping out the data model, API surface, and component hierarchy. For migrations, it means understanding every dependency, every breaking change, and every rollback path before touching a line of code.

Portfolio: Next.js to Astro 6

Migrated this portfolio from Next.js to Astro 6 — a full framework swap. I used Claude Code to audit the existing codebase, map every route and data dependency, plan the content pipeline migration from local MDX to Contentful-powered generation, and identify which patterns would translate directly versus what needed to be rethought. The CLAUDE.md file became the migration spec: routes, content schema, environment variables, and deployment config all documented before the first commit.

Client Platform: Netlify to Vercel

Migrated a multi-property real estate platform from Netlify to Vercel while simultaneously upgrading the Astro framework version. Claude Code helped analyze the existing deployment config, identify Netlify-specific features that needed Vercel equivalents, and plan the DNS cutover. I maintained 15+ memory files tracking domain mappings, CMS backup procedures, and architectural decisions across the migration — so every session picked up exactly where the last one left off.

How I plan with AI

I don't ask AI to "plan a migration." I feed it the codebase via CLAUDE.md, describe the target state, and work through the plan iteratively — challenging assumptions, stress-testing edge cases, and building a step-by-step checklist. The plan lives in the conversation until it's solid, then gets committed as documentation. By the time I start coding, the hard decisions are already made.

Quality Assurance

I use AI to systematically audit and improve five quality dimensions across every project. This isn't a one-time pass — it's how I work. After features ship, I run AI-assisted audits to catch what I missed and fix it before users notice.

Performance

Audit Core Web Vitals and Lighthouse scores, then fix what matters — not just chase green numbers

Optimize image delivery with modern formats (AVIF, WebP) and responsive sizing via CDN parameters

Defer third-party scripts like analytics so they don't block first paint

Set aggressive cache headers for hashed build assets and static files

Enable prefetching for instant-feeling page navigation

SEO

Diagnose indexing issues in Google Search Console — crawl errors, redirect chains, canonical mismatches

Implement structured data (JSON-LD) for rich search results — Article, FAQPage, BreadcrumbList, Person schemas

Add Open Graph and Twitter meta tags with proper og:type differentiation

Generate and validate sitemaps, configure robots.txt, and fix trailing slash inconsistencies

Normalize canonical URLs across www/non-www and trailing slash variants

Accessibility

Add skip-to-content links, proper focus-visible outlines, and keyboard navigation support

Fix heading hierarchy — no skipped levels, semantic document structure

Implement ARIA attributes: aria-live for dynamic content, aria-pressed for toggle buttons, aria-hidden for decorative elements

Add screen reader text for external links and icon-only controls

Respect prefers-reduced-motion by disabling animations and scroll behavior

Content Quality

Set model-tier quality floors — capable models for body content, fast models for metadata only

Enforce "never fabricate" rules in AI configurations to prevent hallucinated content

Validate AI-generated HTML for proper structure before publishing

Run human review on every piece of generated content before it hits production

Monitor for quality signals — content flagged by search engines gets investigated and the pipeline gets adjusted

Best Practices

Run full Lighthouse audits across Performance, Accessibility, Best Practices, and SEO categories

Fix issues systematically — heading order, image dimensions, cache policies, render-blocking resources

Maintain CLAUDE.md files as living documentation so every AI session starts with full project context

Track decisions in memory files so hard-won lessons carry forward across sessions and projects

Review every AI-generated commit before pushing — I own what ships

The Workflow

01

Context

CLAUDE.md defines the project — architecture, constraints, conventions, and what not to do.

02

Plan

Work through the approach iteratively — stress-test edge cases and make hard decisions before coding.

03

Build

Claude Code implements features, fixes bugs, runs audits. I direct the work and review everything.

04

Launch

Review every change, commit, push, and verify the deploy. Nothing ships without my sign-off.

05

Memory

Lessons and decisions get saved to memory files so context carries across sessions.

Case Studies

Projects from the last year where AI was a significant part of the development process.

FusePop Content Pipeline

Anthropic API Batch Processing Supabase

The Problem

FusePop is a pop culture and art platform that needs a steady stream of content. Manually curating and writing articles doesn't scale, but publishing low-quality AI slop kills SEO and reader trust.

The Solution

I built an automated pipeline that ingests posts from Bluesky, uses Claude to generate long-form articles, extracts metadata and categories, and publishes to Supabase. The system uses Anthropic's Batch API for cost-efficient bulk processing with split submit/collect GitHub Actions workflows.

Key Decision

Early on, I used Haiku for article body generation to save on costs. Google flagged the output as low-value content. I set a quality floor — Sonnet minimum for article bodies, Haiku only for quick tasks like category detection and SEO slug generation. Content quality went up, and the Google issue resolved. That lesson is now baked into the project's memory files so it's never repeated.

This Portfolio

Claude Code Astro SEO

The Problem

After migrating from Next.js to Astro, Google Search Console showed 10 pages not indexed across four different error categories — redirect errors, canonical mismatches, and crawl issues. Performance and accessibility hadn't been audited since the migration.

The Solution

Used Claude Code to diagnose each indexing issue. Root cause: canonical URLs were missing trailing slashes (Astro enforces them), and the www/non-www domain wasn't consistent. Fixed all canonical URLs, updated the site URL everywhere, added noindex to the 404 page. Then ran a full audit — added JSON-LD structured data to every page, Open Graph tags, proper sitemap configuration, and Google Analytics.

Then Kept Going

Accessibility pass: skip-to-content link, focus-visible outlines, ARIA attributes, prefers-reduced-motion support, heading hierarchy fixes. Performance pass: deleted 461KB of unused font files, deferred analytics to after page load, added AVIF/WebP image delivery via Contentful's Image API, enabled Astro prefetch, set immutable cache headers for build assets. Each pass was a focused Claude Code session building on the previous one.

CampSwarm

Claude Code Next.js Python

The Problem

Campsite reservations at popular parks sell out instantly. Campers need real-time monitoring across multiple reservation systems — recreation.gov and ReserveCalifornia — with instant notifications when spots open up.

The Solution

Built a two-part system entirely with Claude Code. Python backend handles the scraping pipeline — fetching availability data from multiple APIs, parsing different response formats, and sending notifications. Next.js frontend with Supabase and tRPC gives users a dashboard to configure their monitors. The architecture, multi-tenant data model, and notification system were all planned and built through Claude Code sessions.

What Worked

Claude Code was especially useful for the Python backend — a language I use less frequently than TypeScript. It handled the API integration patterns, data parsing logic, and error handling while I focused on the product requirements and system architecture. Memory files captured the "test before pushing" feedback early on, which stuck for the rest of the project.

SearchPerfection

Claude Code Next.js Web Workers

The Problem

Small businesses and freelancers need SEO analysis but existing tools are expensive, complex, or require technical knowledge to interpret. I wanted to build something that crawls a site and gives actionable results without the learning curve.

The Solution

Built a SaaS application with a Web Worker-based crawling engine that runs analysis in the browser. The isomorphic analysis pipeline checks pages for SEO issues, accessibility problems, and social media tag completeness. Claude Code helped architect the worker communication protocol, the analysis rule engine, and the tiered pricing model with Stripe integration.

AI's Role

The CLAUDE.md for this project is one of the most detailed — it documents the entire isomorphic pipeline, the security model for handling user-submitted URLs, and the pricing tier structure. Claude Code was critical for the Web Worker architecture, which involves careful message passing and state management that's easy to get wrong. A future milestone plans to add AI-powered analysis as a premium tier.

Client Projects

Claude Code Astro Sanity CMS

The Problem

Contracted to take over and maintain multiple websites for a real estate and hospitality company. The codebases were inherited from a previous agency, with different stacks, hosting providers, and CMS configurations across properties. Documentation was minimal.

The Solution

Used Claude Code to onboard onto each codebase rapidly. Built comprehensive CLAUDE.md files documenting the architecture, deployment config, CMS structure, and domain mappings for every property. Executed platform migrations (Netlify to Vercel), framework upgrades, and ongoing feature development — all while maintaining the memory system that made context-switching between properties seamless.

Context at Scale

This project has the most extensive memory system of anything I've worked on — 15+ files tracking domain configurations, security considerations, CMS backup procedures, architectural decisions, and client preferences. When I switch from one property to another, Claude Code picks up the full context immediately. No re-onboarding, no searching through old Slack threads. The memory system pays for itself every time I open a different repo.

How I Think About It

01

Human in the loop

AI generates, I review. Nothing ships to production without my sign-off — especially content. I set explicit rules like "never fabricate" in my AI configurations.

02

Context is everything

Every project gets a CLAUDE.md with architecture docs, constraints, and conventions. Memory files capture lessons learned so context carries across sessions, not just within them.

03

Quality floors

I set minimum model tiers for different tasks. Quick metadata extraction can use a fast model. Article generation needs a capable one. I learned this the hard way when lower-tier output got flagged by Google.