# Stripe Setup Guide for DashCaddy.net

## 1. Create a Stripe Account

Go to [stripe.com](https://stripe.com) and create an account (or log in).

## 2. Create Your Product and Prices

In the Stripe Dashboard:

1. Go to **Products** > **Add Product**
2. Name: `DashCaddy Premium`
3. Description: `Premium license for DashCaddy - Self-hosting dashboard`
4. Create two prices:
   - **Monthly**: $20.00 USD / month (recurring)
   - **Yearly**: $99.00 USD / year (recurring)
5. Note down both **Price IDs** (they look like `price_1234...`)

## 3. Get Your API Keys

1. Go to **Developers** > **API Keys**
2. Copy your **Publishable key** (`pk_test_...` or `pk_live_...`)
3. Copy your **Secret key** (`sk_test_...` or `sk_live_...`)

## 4. Set Up Webhooks

1. Go to **Developers** > **Webhooks**
2. Click **Add endpoint**
3. URL: `https://dashcaddy.net/api/webhooks/stripe`
4. Select these events:
   - `checkout.session.completed`
   - `customer.subscription.updated`
   - `customer.subscription.deleted`
   - `invoice.payment_failed`
5. Copy the **Webhook signing secret** (`whsec_...`)

## 5. Configure Environment Variables

Copy `.env.example` to `.env.local` and fill in your values:

```bash
cp .env.example .env.local
```

Edit `.env.local`:

```env
STRIPE_SECRET_KEY=sk_live_your_actual_secret_key
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_your_actual_publishable_key
STRIPE_WEBHOOK_SECRET=whsec_your_actual_webhook_secret
STRIPE_PRICE_MONTHLY=price_your_monthly_price_id
STRIPE_PRICE_YEARLY=price_your_yearly_price_id
NEXT_PUBLIC_APP_URL=https://dashcaddy.net
```

## 6. Test with Stripe CLI (Optional)

For local development, use Stripe CLI to forward webhooks:

```bash
stripe listen --forward-to localhost:3000/api/webhooks/stripe
```

Use test card `4242 4242 4242 4242` with any future date and any CVC.

## 7. License Key Delivery

The webhook handler at `src/app/api/webhooks/stripe/route.ts` has TODO comments
where you need to implement:

1. **Generate license key** using the same format as DashCaddy's license-keygen
   (DC-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)
2. **Store it** in a database (Stripe metadata can also hold it)
3. **Email it** to the customer (use Stripe's receipt email or a service like
   SendGrid/Resend)
4. **Link it** to the Stripe subscription ID so you can manage renewals/cancellations

## Pricing Strategy Notes

- **Monthly ($20/mo)**: Positioned as the flexibility option
- **Yearly ($99/yr)**: ~$8.25/mo — 58% savings, this will be the primary seller
- **14-day free trial**: Enabled on both plans via `trial_period_days: 14`
- **Promotion codes**: Enabled via `allow_promotion_codes: true`
