The moment that broke my patience was a Stripe webhook I'd already implemented correctly once before.
I knew I'd gotten the signature verification right on my last project. The exact stripe.webhooks.constructEvent() call with the raw body buffer, not the parsed body — the mistake that burns everyone the first time. I'd already made that mistake and fixed it. But I couldn't find where the working version lived. Different repo? A local file I'd moved? Some half-archived Notion doc?
An hour later I'd written it from scratch again. Same implementation. Recovered from memory instead of copied from working code.
That was project three. I spent the next two weeks turning everything I kept rebuilding into Claude Code skills — tasks that run against a new project and output tested, working implementations of the same patterns I was recovering each time.
I packaged 11 of them as Ship Fast.
Here's what's actually in it and why those 11 specifically.
auth-setup: NextAuth with Google and email providers, session management, protected route middleware. The config that takes 3 hours the first time and 45 minutes every time after because you can never remember the exact callback URL format for each environment.
stripe-payments: Webhook handling with signature verification, subscription state management, customer portal link generation. This is the one I was rebuilding from memory. The skill has the raw body buffer code so I never have to remember it again.
database-setup: Drizzle or Prisma schema generation, migration scripts, seed data for development. The part I always rewrote because the connection string format changes between providers and I'd inevitably have to look it up again.
deploy-config: GitHub Actions pipeline — lint, test, preview deploy on PR, production deploy on merge. Environment variable injection from repository secrets. The pipeline that takes 2 hours to get right and never changes between projects.
email-system: Resend integration with React Email templates. Transactional confirmation emails, password reset, unsubscribe handling. The first time I built this it took longer than payments. The second time I had to look up the exact Resend SDK methods anyway.
testing-suite: Vitest plus Playwright configuration, working test examples for auth flows and API routes. The setup I always told myself I'd add properly later, and then a bug would hit production at 11pm and I'd regret skipping it.
The remaining five — api-builder, monitoring, seo-meta, ui-components, context-anchor — handle the rest of the standard surface area. But auth, payments, and CI are where the time log was embarrassing.
Running these on my current project, the time log shows 4 hours on scaffolding. Down from 22 on project three.
The difference isn't that the skills output perfect code that I ship untouched. I still review every file and adjust for the specific project. The difference is that I'm reviewing and adjusting, not recovering and reconstructing.
Four hours versus twenty-two isn't a productivity trick — it's the difference between a side project that ships in a weekend and one that spends three weeks in setup before a line of actual product code gets written.
The trade-off worth being honest about: you have to trust that the patterns the skills output are close enough to your preferred patterns that adjusting is faster than building from scratch. For me, after three projects, that's true. The skills match how I'd do it anyway.
If you're still learning these stacks, running a skill might produce working code you don't fully understand yet. Build from scratch until you know what correct looks like. Then the skills give you a starting point that's already correct.
If you've rebuilt Stripe webhook verification from memory more than once, the pack at $49 probably pays off on the next project. It's at whoffagents.com.
Not ready to commit? The context-anchor skill is free — it's the one that prevents context drift mid-build. Good starting point.
Top comments (0)