Fantasy baseball for the dozen-owner, auction-draft, keeper-league crowd that Yahoo and ESPN never really served. The app is live for OGBA — auction has wrapped and the season is in flight. Current focus is the day-to-day of running a team: a daily league cockpit on the home page (today's matchups, standings, trade proposals, league activity, injured list), smarter add/drop with live previews of how a move affects the roster, and an injured-list workflow that doesn't fight the user. Next up: tightening the in-season correctness of the standings, the daily stat lines, and the league dashboard.
james chang / now
What I'm up to /now.
A Derek Sivers-style /now page — the truth about where my time is going this month, not a "currently building" list that never updates.
active
where the time is going · 2 projects
The personal site at jameschang.co — homepage, project deep-dives, and a Derek Sivers-style /now page that auto-updates from eight feeds (WHOOP, Spotify, Plex, Goodreads, MLB stats, fantasy standings, Google Calendar) plus per-project TLDRs synced daily from each repo's CLAUDE.md. Recently shipped: a public bucket list, a feed staleness monitor that opens a GitHub issue when anything goes quiet, Google Calendar integration for upcoming events, and a cron-driven /now project hub that classifies each project as active or back-burner based on real GitHub activity. Plain HTML/CSS/JS on GitHub Pages — no build step, ~78 KB page weight, Lighthouse 100/100/100/100.
back-burner
shipping but not daily · 6 projects
An AI trading experiment — Claude makes the buy / sell / hold calls, a small web app handles the data and execution, and a paper-trading account at Alpaca is the live target (no real money yet). 24/30 paper trades executed (as of 2026-05-14); 6 more needed to gate the Phase G live switch. Only Test 4 ($10k portfolio) is active; three $100 test portfolios deactivated (spent). Fixed: BTC/ETH removed from Claude prompts (StockHistoricalDataClient returned wrong $35 price for crypto tickers). Decision modes, oversight activity, pause/resume UI, sign-out all shipped.
The compliance platform I wished existed when I was importing — one place to manage CPSIA certificates, Prop 65 labels, PFAS tracking across 15 states, and FSVP audits for food brands. All four compliance modules are feature-complete: CPC version history + supersession, expanded PFAS substance database (EPA CompTox PFASMASTER), OEHHA Prop 65 weekly auto-update with diff alerts, and a tokenized B2B PFAS declaration request flow for supplier questionnaires. Just rebuilt the /learn content hub with two batches of compliance guides. Put the product through seven rounds of rigorous AI-assisted code review — security, performance, and architecture. Next up: start lining up the first paying customers.
A barbeque competition judging platform — replaces clipboards, carbon copies, and spreadsheet math with real-time digital scoring for organizers, table captains, and judges. Just wrapped a shipping-readiness pass: analytics installed, search-engine basics in place, and an automated check on every code change before it ships. Next up: a richer test setup so the app gets exercised against a real database, ahead of piloting at a sanctioned competition this season.
A marketplace for hard-to-get Taipei restaurant reservations — a scraper pulls listings from inline.app, and a modern web storefront with Stripe handles the buy side. Recent AI-assisted work has been mostly scaffolding: an admin dashboard, a way for Claude Code to poke at the scraper and database directly, and project-specific shortcuts for running tests and keeping docs in sync. Honest blocker: neither side of the transaction is live yet — checkout isn't wired and the scraper has barely been run — so the next push is getting one full listing-to-purchase flow working with real data.
Laravel 8 API backend for Tastemakers — live on Railway at api.tastemakersapp.com. GitHub auto-deploy active (push to main → Railway builds automatically). Debug/diagnostic routes removed (debug-schema, debug-signup, run-schema-fix, clear-cache). Remaining security work: unauthenticated delete endpoints and IDOR vulnerabilities. Production DB is empty — all real data still on legacy Namecheap MySQL host.
My food blog from 2007–present, rebuilt from Wayback Machine archives and Instagram exports — 1,639 posts and 1,400+ mapped restaurants live at thirstypig.com. Venue tags long-tail push ongoing: 655 venue JSONs published, 885 posts displaying tag pills, 699 venues in venues.yaml. Python test suite at 118 (+ new test_scrape_google.py for auth_gated() heuristic). Next up: keep extending venue tags (use curate_candidates.py --min-posts 1), then roll out the Bold Red Poster redesign across the rest of the site.
on the calendar
via google calendar · Auto-updated May 28, 2026 at 3:09 AM PDT · 10 upcoming
- Best Dam BBQ · · Boulder City, NV
- IBEW So Cal BBQ & Chili · · Santa Ana, CA
- 22nd Burnt Offerings BBQ · · Riverside, CA
- BBQ Jackpot · · Las Vegas, NV
exploring
Wired the entire Claude-assisted project ecosystem into a single, searchable knowledge base — todos, docs, decision records, and session notes across all 8 active projects, linked and cross-referenced in one vault. Synced across Mac and iPhone via iCloud. Built a pipeline from Obsidian → GitHub → thirstypig.com for the restaurant hit list, so updating the list on my phone updates the blog automatically.
Testing an MCP server that gives Claude Code (and any other MCP-aware agent) read/write access to my Upnote notes. The pull is keeping fleeting thoughts, draft prompts, and reference notes outside the chat window but still accessible to whatever agent is doing the work — no context-switching to the app to copy a paragraph back in. Running it alongside the Obsidian setup to see whether one becomes the canonical capture tool, or whether they cleanly split (Upnote for raw thinking, Obsidian for project ops).
Using Claude Design to redesign three of my sites — The Fantastic Leagues, Aleph, and The Thirsty Pig. Of the AI design tools I was comparing (Figma AI and Lovable were the others), Claude Design earned the spot — it generates component specs and UI code I can wire straight into the existing stacks instead of scaffolding a new app.
Codex alongside Claude Code
Running OpenAI's Codex CLI agent in a second terminal tab alongside Claude Code, to see whether a multi-agent split makes sense for day-to-day work. The hypothesis: Codex is especially strong at test generation, so the experiment is "Claude writes the feature, Codex writes the tests." Early instinct for this repo's style: one agent deep beats two agents shallow. Want to run it on a harder codebase before I commit.
// back-burner — circling back when there’s a real reason to
Open-source AI agent — Peter Steinberger’s project that runs locally and interfaces with Claude, GPT, or DeepSeek via messaging platforms. Tabled for now: between Claude Code and Cursor I haven’t hit a workflow gap that warrants standing up a third agent surface. Worth a second look if a use case shows up that needs the messaging-app entrypoint specifically.
health · recovery
via WHOOP api
Auto-updated May 31, 2026 at 4:43 AM PDT via WHOOP API · day strain 4.2 · sleep efficiency 94%
off the clock
board service · sgv eats · sports
- Chinese American Museum — serving on the board of CAMLA in downtown Los Angeles since Feb 2026.
- Eating my way through the SGV — receipts logged at The Thirsty Pig.
- Sports — Trojan football, Cleveland Browns, Lakers in rotation.
Dodgers: 37-20. Last: L 3-4 vs PHI · Next: Sun 1:10PM vs PHI.
Auto-updated May 31, 2026 at 2:23 AM PDT via MLB Stats API.
Los Doyers: 3rd of 8 · 48 pts · OGBA 2026
Auto-updated May 31, 2026 at 2:23 AM PDT via The Fantastic Leagues.
watching · listening · reading
- The Lincoln Lawyer S04E05 — “You're the One That I Want” · 13h ago
- Marshals S01E07 — “Family Business” · 1w ago
- Captain America: The Winter Soldier · 1w ago
- Dutton Ranch S01E02 — “Earn Another Day” · 1w ago
- John Wick: Chapter 2 · 2w ago
Auto-updated May 31, 2026 at 12:52 PM PDT via Plex.
// favorites
- Tulsa King
- The Diplomat
- The Lincoln Lawyer
- Pluribus
- A Knight of the Seven Kingdoms
- Landman
- The Bear
- “Return of the Mack” — Mark Morrison ·
- “People Everyday - Metamorphosis Mix” — Arrested Development ·
- “Jump” — Kris Kross ·
- “Word Up” — Cameo ·
- “Jump Around - 30 Years Remaster” — House Of Pain ·
Auto-updated May 31, 2026 at 3:52 PM PDT via Spotify Web API.
// favorite podcasts
- Baseball Tonight with Buster Olney
- How I AI
- Lenny’s Podcast
- The Kevin Rose Show
- Diggnation
- The Deal
- The Tim Ferriss Show
Currently reading
- 100 Things Dodgers Fans Should Know & Do Before They Die (100 Things...Fans Should Know) — Jon Weisman
- The Arm: Inside the Billion-Dollar Mystery of the Most Valuable Commodity in Sports — Jeff Passan
Recently read
- 勇於追夢 --- 張秀瓊博士的媒體人生: 資深媒體人的媒體人生系列 (Traditional Chinese Edition) — 張 秀瓊 ★★★★★
- China Rich Girlfriend (Crazy Rich Asians, #2) — Kevin Kwan
- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money—That the Poor and Middle Class Do Not! — Robert T. Kiyosaki
- The Windup Girl — Paolo Bacigalupi
- Sapiens: A Brief History of Humankind — Yuval Noah Harari
Auto-updated May 31, 2026 at 2:23 AM PDT via Goodreads.