DEV Community

Manraj Sidhu
Manraj Sidhu

Posted on

How I Shipped a Full-Stack Product in 30 Days With Claude Code, Linear, and Discord

I built a full-stack product in 30 days of evenings and weekends. Solo. Using Claude Code as my pair programmer, wired into Linear for ticket tracking and Discord for build notifications.

The result: VGC Team Report — a team report builder for competitive Pokemon (VGC). Players paste their teams and get detailed breakdowns with matchup plans, damage calcs, speed tiers, and shareable reports.

This post is about the workflow — specifically how I connected Claude Code to Linear and Discord to create a one-person development pipeline that actually ships.

The Numbers

  • 274 commits in 30 days
  • ~42,000 lines of TypeScript
  • 25 features tracked and shipped via Linear
  • 66 React components, 41 API routes, 22 custom hooks
  • Auth (Clerk), database (Neon Postgres), PWA, i18n in 7 languages
  • Continuously deployed on Vercel

The Stack

  • Next.js 16 (App Router)
  • React 19
  • TypeScript (strict mode)
  • Tailwind CSS v4
  • Clerk for auth
  • Neon for serverless Postgres
  • Vercel for hosting and deploys
  • Linear for ticket tracking
  • Discord for build notifications
  • Claude Code as the AI development partner

The Workflow: Linear -> Claude -> Discord -> Vercel

This is what a typical session looks like:

  1. Claude runs linear_get_in_progress to check my Linear board for tickets
  2. Picks the highest priority ticket (bugs first, always)
  3. Reads relevant files and implements the feature or fix
  4. Runs tsc --noEmit && npm run build — if it fails, Claude fixes the errors
  5. Commits with the ticket ID: VGC-42: Add speed tier chart
  6. Pushes to main
  7. Posts a comment on the Linear ticket via GraphQL — commit URL + changed files
  8. Moves the ticket to In Review
  9. Calls discord_notify_build — posts an embed to Discord #builds with the commit, changed file list, and deploy status
  10. Vercel auto-deploys from main
  11. Moves to the next ticket

This isn't hypothetical. I wrote a linear.sh bash script with functions that Claude calls directly:

  • linear_get_in_progress — queries Linear GraphQL for In Progress tickets
  • linear_move_issue — moves a ticket to a new state
  • linear_comment_with_changes — posts a comment with the commit link and changed files
  • discord_notify_build — sends a Discord embed with commit info and deploy status

Claude calls these via bash. The whole flow — implement, verify, commit, update Linear, notify Discord — happens in one session without me touching any of those systems.

The CLAUDE.md Operating Manual

The key to making this work is a CLAUDE.md file at the repo root. Claude reads it at the start of every session. Mine contains:

Git strategy:

  • Trunk-based development — push direct to main for routine work
  • Feature branches only for large or risky changes
  • npx tsc --noEmit && npm run build before every push — non-negotiable

Linear workflow:

  • The exact state IDs for "In Progress" and "In Review"
  • How to query for tickets, implement them, commit with the VGC-XX prefix
  • How to post the commit comment and move the ticket state
  • Rule: bug tickets are always worked on first, regardless of priority number

Discord notifications:

  • The discord_notify_build function format
  • Different embeds for direct-to-main pushes vs PR flows

Failure handling:

  • Build fails → fix and retry, never push broken code
  • Linear API fails → still commit and push, note the failure to the user
  • Production breaks → git revert, push to main, notify Discord, move ticket back

Code conventions:

  • Follow existing patterns, no drive-by refactors
  • Commit messages: VGC-XX: description for tracked work

This file is the single most valuable thing in the project. Every session starts with full context. No re-explaining, no drift, no "can you check the codebase structure?"

Automated Monitoring

Beyond the dev workflow, I set up two Vercel cron jobs:

  • Daily (9 AM): Site health check, stale ticket scan, SEO audit, DB health — posts alerts to Discord only if something's wrong
  • Weekly (Friday 5 PM): Linear progress digest, user growth, dependency updates — always posts a summary to Discord

These run on Vercel's free tier. Real-time uptime monitoring is handled by UptimeRobot with 5-minute pings.

What Worked

Trunk-based development with type-checking gates. Every push to main auto-deploys on Vercel. The gatekeeper is tsc --noEmit && npm run build. The feedback loop is minutes, not days.

Linear ticket traceability. Every commit links back to a ticket. Every ticket has a comment with the commit URL and changed files. When something breaks, I trace it to the exact change and the exact intent.

Discord as an audit trail. Every build posts to #builds. It sounds like overkill for a solo project, but scrolling through the channel to see what shipped this week is genuinely useful.

The CLAUDE.md as living infrastructure. I update it whenever the workflow changes. New conventions, new failure modes, new scripts — they go in the file. The tool gets better over time.

What Didn't Work

CSS and visual design. Claude produces functional layouts but doesn't have design taste. I make all the visual decisions and often rewrite styling.

Debugging hydration and timing issues. Race conditions, hydration mismatches, animation timing — Claude is better at implementing known patterns than diagnosing novel bugs.

Linear GraphQL escaping. Nested JSON in bash curl commands was unreliable. I had to build the helper script with proper escaping to make it work consistently.

Letting the CLAUDE.md go stale. If I didn't update it for a few days, output quality dropped. The file needs maintenance like any other infrastructure.

The Takeaways

The bottleneck for a solo developer isn't writing code. It's maintaining context across sessions and keeping momentum. A good CLAUDE.md and a wired-up workflow solve this.

Vibe coding without guardrails produces slop. Vibe coding with type-checking gates, ticket traceability, and automated deploys produces a real product. The engineering isn't in the typing — it's in the system.

AI doesn't replace engineering judgment — it amplifies it. The decisions about what to build, how to structure it, and when to ship are still yours. The tools let you act on those decisions faster.

30 days. Evenings and weekends. One engineer with Claude, Linear, and Discord. A product people are actually using.

Check it out: pokemonvgcteamreport.com

Top comments (0)