Skip to content

Should You Use Claude Code Scaffolding or Buy a Boilerplate for Mobile App Development?

Problem

I spent hours setting up a new React Native project. Configure Expo. Set up directory structure. Install base dependencies. Wire environment variables. Add authentication. Set up payments. By the time I started building actual features, I’d burned through a full day of repetitive setup work.

Then I saw developers paying $200-500 for boilerplate templates. They claimed it saved them time. But I also kept hearing about AI scaffolding—generating project structures with tools like Claude Code skills.

Which approach actually works better?

I tried both. Here’s what I learned.

What I tried first: Boilerplate

I bought a popular React Native boilerplate for $199. It promised “everything you need to build production apps.”

What I got:
- Authentication (email, social, biometric)
- Payment integration (Stripe, RevenueCat)
- Navigation setup
- State management (Redux + Redux Toolkit)
- UI components (20+ screens)
- Push notifications
- Analytics
- Deep linking
- Dark mode support

Sounds comprehensive. But here’s what actually happened:

Week 1: Understanding the codebase
→ 47 files in the navigation folder alone
→ Redux setup for simple state I didn't need
→ Payment integration for features I wasn't using
Week 2: Stripping out what I didn't need
→ Removed biometric auth (my app didn't need it)
→ Removed Redux (switched to Zustand)
→ Removed deep linking (not in MVP)
→ Removed 15 screens I wouldn't use
Week 3: Fixing what broke
→ Navigation broke after removing screens
→ State management errors from Redux removal
→ Dependency conflicts from updating packages

I spent three weeks fighting the boilerplate. The “production-ready” code became “my-custom-app-ready” after extensive modification.

What I tried next: Scaffolding

Then I discovered vibecode-cli, a Claude Code skill that scaffolds projects.

Terminal window
# Install the skill
claude skill install vibecode-cli
# Describe what I needed
claude "Set up an Expo app with TypeScript, authentication via Supabase, and Stripe payments"

The skill generated exactly what I requested:

Generated structure:
app/
├── (auth)/
│ ├── login.tsx
│ └── register.tsx
├── (tabs)/
│ ├── home.tsx
│ └── profile.tsx
└── _layout.tsx
components/
├── Button.tsx
└── Input.tsx
lib/
├── supabase.ts
└── stripe.ts
app.json
.env.example
package.json

The difference: I got exactly what I asked for, not a pre-packaged everything-bagel.

Comparison: What actually matters

Cost

Boilerplate: $199-500 upfront
Scaffolding: $0 (Claude subscription covers it)

But cost isn’t just money. It’s time spent adapting.

Customization

Boilerplate: Medium
→ Start with everything, strip down
→ Fight against the template's decisions
→ Template author's patterns, not yours
Scaffolding: High
→ Generate exactly what you need
→ No unused code to remove
→ Patterns follow your requirements

Time to start

Both get you running in minutes. But time to your app differs:

Boilerplate timeline:
Day 1: Clone and run
Day 2-7: Understand the structure
Day 8-14: Remove unwanted features
Day 15-21: Fix broken dependencies
Day 22+: Build actual features
Scaffolding timeline:
Day 1: Generate structure
Day 2+: Build features directly

Feature depth

This is where boilerplate advocates make their strongest case.

Boilerplate advantage:
- Battle-tested payment flows
- Edge cases handled (subscription renewals, failed payments)
- Tested across devices
- Community support
Scaffolding reality:
- Generates basic payment setup
- You implement edge cases
- You test across devices
- No community (just your code)

But here’s what changed my mind: the scaffolding skill I used already knew about payments.

lib/stripe.ts
// Generated by vibecode-cli when I mentioned payments
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function createPaymentIntent(amount: number) {
return stripe.paymentIntents.create({
amount,
currency: 'usd',
automatic_payment_methods: { enabled: true },
});
}
export async function createSubscription(customerId: string, priceId: string) {
return stripe.subscriptions.create({
customer: customerId,
items: [{ price: priceId }],
});
}

The payment scaffolding wasn’t random code. It followed Stripe’s recommended patterns.

When scaffolding wins

1. You know what you need

Terminal window
# Specific requirements
claude "Expo app with TypeScript, Supabase auth, and Tab navigation"
# → Generates exactly that
# vs. buying boilerplate with:
# → Redux (you wanted Zustand)
# → Firebase (you wanted Supabase)
# → Stack navigation (you wanted Tabs)

2. You want to understand your codebase

Boilerplate:
- 100+ files you didn't write
- Patterns you didn't choose
- Dependencies you didn't evaluate
Scaffolding:
- Every file exists because you requested it
- You understand the patterns (Claude explains as it generates)
- Dependencies match your requirements

3. You’re building an MVP

MVP needs:
- Core feature implementation
- Basic auth
- Simple payment
Don't need:
- Biometric auth
- Deep linking
- Push notifications
- Analytics
- 20 unused screens
Scaffolding: Generate only MVP features
Boilerplate: Pay for everything, use 20%

When boilerplate wins

1. Complex domain requirements

If you’re building a marketplace with:

- Multi-vendor payments
- Commission splits
- Escrow handling
- Tax calculations
- International payments
- Fraud detection

A specialized marketplace boilerplate has solved these problems. Scaffolding generates basics; it doesn’t encode domain expertise.

2. No Claude Code access

Scaffolding requires Claude Code. If your team doesn’t use it, boilerplate is the only option.

3. You need proven patterns

Boilerplate:
- "Used by 10,000+ apps"
- "Production-tested"
- Regular updates
Scaffolding:
- Generated code is yours
- You maintain it
- No updates unless you update

Common mistakes I made

Mistake 1: Assuming scaffolding produces “random” code

I thought AI-generated code would be inconsistent or lack structure. But skills use proven patterns:

// Scaffolding follows Expo conventions
// Generated app.json
{
"expo": {
"name": "my-app",
"slug": "my-app",
"version": "1.0.0",
"sdkVersion": "52.0.0", // Current, not made up
"orientation": "portrait",
"scheme": "myapp"
}
}
// Boilerplate I bought used SDK 49
// Required manual upgrade

Mistake 2: Buying boilerplate for features I’d never use

Boilerplate advertised:
- Social auth (Google, Apple, Facebook, Twitter)
- I only needed Google
- Paid for 3 unused integrations
Scaffolding:
- Generated only Google auth
- $199 saved

Mistake 3: Thinking scaffolding is “one-shot”

I expected scaffolding to generate everything perfectly in one prompt. It’s iterative:

Terminal window
# First pass
claude "Set up Expo app with TypeScript"
# → Basic structure
# Second pass
claude "Add Supabase authentication to the existing project"
# → Auth integration
# Third pass
claude "Add Stripe payments for subscriptions"
# → Payment setup

Each iteration builds on the previous. You’re not stuck with the initial scaffold.

The math that convinced me

Boilerplate cost:
$199 (purchase)
+ 21 days (adapting template)
= $199 + 3 weeks of time
Scaffolding cost:
$0 (Claude subscription already paid)
+ 1 day (generating and iterating)
= 1 day of time

Even if scaffolding takes 3 days to match boilerplate’s feature set, you’re still ahead.

What about maintenance?

Boilerplate:
- Template author releases v2.0
- Breaking changes
- Migration required
- Or stay on outdated version
Scaffolding:
- No external updates to break your code
- You control all changes
- No migration headaches
- Also: no security patches from template

Trade-off: Boilerplate gives you security updates from maintainers. Scaffolding means you own security.

Summary

After trying both approaches, scaffolding via Claude Code skills wins for most cases. You generate exactly what you need, adapt quickly, and avoid paying for features you won’t use.

Boilerplates still have a place for specialized domains (marketplaces, social networks with complex features) where the domain knowledge encoded in the template exceeds what scaffolding currently provides.

My recommendation: Start with scaffolding. If you hit a wall where you need deep domain expertise (complex payment flows, specialized auth requirements), then consider a boilerplate for that specific problem. Don’t buy a boilerplate first and try to fit your app into someone else’s architecture.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments