Vibecode WooCommerce Subscriptions
track this build5 steps, step by step0%The actual hard part of recurring billing lives at the payment processor, not in this plugin: Stripe Billing already does tokenization, renewal attempts, SCA, proration and dunning. So an agent can absolutely wire a small self-hosted checkout plus webhook listener plus entitlement table in a weekend, and for one product with two or three plans that is genuinely enough. What you cannot one-shot is the part that makes this extension worth a license: living inside WooCommerce so that orders, coupons, taxes, shipping, emails, reports and forty other plugins all understand a subscription. If you already run a real Woo store, replacing this means rebuilding the glue, not the billing. If you just want money to arrive monthly for something you built, you never needed WordPress in the first place.
You are building a lean indie version of WooCommerce Subscriptions. Create the following project files first, then implement the application by following them. Keep the files updated as decisions change. Do not collapse this into a single README or prompt. ===== README.md ===== # WooCommerce Subscriptions indie build ## Goal Build the smallest trustworthy replacement for the core WooCommerce Subscriptions workflow for one developer or a tiny team. ## Scope Sells a handful of hardcoded plans through Stripe Checkout, listens to billing webhooks, and keeps a local table of who currently has access. ## Quick start 1. Install the documented dependencies. 2. Copy `.env.example` to `.env`. 3. Run the development command chosen during implementation. 4. Complete the acceptance checks in `BUILD_PLAN.md`. ## Honest limits This build deliberately does not replace: - Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand - Gateway breadth: you are married to one processor instead of the dozen Woo supports - Customer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is - Admin reporting, renewal calendars and bulk actions over thousands of subscribers - Years of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations If those capabilities are essential, use WooCommerce Subscriptions instead of pretending the gap is solved. ===== AGENTS.md ===== # Agent instructions - Optimize for a working, understandable weekend build. - Prefer the fewest moving parts that satisfy the brief. - Do not invent cryptography, security guarantees, APIs, or compliance claims. - Keep secrets out of source control and logs. - Add focused tests for destructive, security-sensitive, and data-loss paths. - Run the project checks before declaring the build complete. - Record any deliberate shortcut in the README under "Tradeoffs". ===== BUILD_PLAN.md ===== # Build plan ## Original build brief Build a minimal self-hosted recurring billing service for a single product. No WordPress, no WooCommerce. Stack, non negotiable: Node 20, TypeScript, Express, SQLite via better-sqlite3, Stripe Node SDK, plain server-rendered EJS templates. No React, no ORM, no Docker. Scope, in: - A plans.ts file defining three hardcoded plans (monthly, annual, lifetime) each with a Stripe Price ID pulled from env. - GET /pricing renders the plans and a Subscribe button per plan. - POST /checkout/:plan creates a Stripe Checkout Session in subscription mode (or payment mode for lifetime) and redirects to it. - POST /webhook with raw body parsing and signature verification. Handle checkout.session.completed, customer.subscription.updated, customer.subscription.deleted, invoice.payment_failed. Upsert into a subscriptions table: stripe_customer_id, email, plan, status, current_period_end, cancel_at_period_end. - GET /portal creates a Stripe Billing Portal session for the logged in customer so plan changes, cancellation and card updates are Stripe's problem, not yours. - Magic link auth only: POST /login emails a signed token, no passwords. Log the link to stdout in dev instead of sending mail. - GET /api/entitlement returns JSON with active true or false plus plan and period end, so another app can gate features on it. - GET /admin, protected by a single ADMIN_TOKEN from env, listing subscribers with status and next renewal, filterable by status. - Idempotent webhook handling: store processed event IDs and ignore repeats. Scope, out: multi gateway support, tax calculation beyond Stripe Tax, proration math of your own, coupons, shipping, invoices you render yourself, any telemetry. Secrets in .env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_MONTHLY, STRIPE_PRICE_ANNUAL, STRIPE_PRICE_LIFETIME, ADMIN_TOKEN, APP_URL. Commit a .env.example, never a filled .env. Deliver a README with exact steps: create products in the Stripe dashboard, run stripe listen to forward webhooks locally, seed a test subscription, and how to flip to live keys. Include a script that replays a saved webhook fixture so the handler is testable without Stripe. ## Required capabilities - Stripe account in live mode - A publicly reachable HTTPS host for webhook delivery - Node 20 and SQLite - Stripe API keys and webhook secret in .env ## Delivery order 1. Scaffold the smallest runnable application and document its commands. 2. Implement the primary data model and core workflow. 3. Add validation, safe failure states, and persistence. 4. Cover the critical path with automated tests. 5. Exercise a clean install from the README and fix every missing step. ## Done when - A new user can go from clone to first successful workflow using only the README. - The core workflow works without paid infrastructure unless the brief requires it. - Tests cover the highest-risk behavior. - Known limitations are explicit rather than hidden. ===== .env.example ===== # Copy to .env and document every variable when it is introduced. # Never put real credentials in this file. APP_ENV=development # Add only values required by the selected implementation.
You are building a lean indie version of WooCommerce Subscriptions. Create the following project files first, then implement the application by following them. Keep the files updated as decisions change. Do not collapse this into a single README or prompt. ===== README.md ===== # WooCommerce Subscriptions indie build ## Goal Build the smallest trustworthy replacement for the core WooCommerce Subscriptions workflow for one developer or a tiny team. ## Scope Sells a handful of hardcoded plans through Stripe Checkout, listens to billing webhooks, and keeps a local table of who currently has access. ## Quick start 1. Install the documented dependencies. 2. Copy `.env.example` to `.env`. 3. Run the development command chosen during implementation. 4. Complete the acceptance checks in `BUILD_PLAN.md`. ## Honest limits This build deliberately does not replace: - Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand - Gateway breadth: you are married to one processor instead of the dozen Woo supports - Customer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is - Admin reporting, renewal calendars and bulk actions over thousands of subscribers - Years of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations If those capabilities are essential, use WooCommerce Subscriptions instead of pretending the gap is solved. ===== AGENTS.md ===== # Agent instructions - Optimize for a working, understandable weekend build. - Prefer the fewest moving parts that satisfy the brief. - Do not invent cryptography, security guarantees, APIs, or compliance claims. - Keep secrets out of source control and logs. - Add focused tests for destructive, security-sensitive, and data-loss paths. - Run the project checks before declaring the build complete. - Record any deliberate shortcut in the README under "Tradeoffs". ===== BUILD_PLAN.md ===== # Build plan ## Original build brief Build a minimal self-hosted recurring billing service for a single product. No WordPress, no WooCommerce. Stack, non negotiable: Node 20, TypeScript, Express, SQLite via better-sqlite3, Stripe Node SDK, plain server-rendered EJS templates. No React, no ORM, no Docker. Scope, in: - A plans.ts file defining three hardcoded plans (monthly, annual, lifetime) each with a Stripe Price ID pulled from env. - GET /pricing renders the plans and a Subscribe button per plan. - POST /checkout/:plan creates a Stripe Checkout Session in subscription mode (or payment mode for lifetime) and redirects to it. - POST /webhook with raw body parsing and signature verification. Handle checkout.session.completed, customer.subscription.updated, customer.subscription.deleted, invoice.payment_failed. Upsert into a subscriptions table: stripe_customer_id, email, plan, status, current_period_end, cancel_at_period_end. - GET /portal creates a Stripe Billing Portal session for the logged in customer so plan changes, cancellation and card updates are Stripe's problem, not yours. - Magic link auth only: POST /login emails a signed token, no passwords. Log the link to stdout in dev instead of sending mail. - GET /api/entitlement returns JSON with active true or false plus plan and period end, so another app can gate features on it. - GET /admin, protected by a single ADMIN_TOKEN from env, listing subscribers with status and next renewal, filterable by status. - Idempotent webhook handling: store processed event IDs and ignore repeats. Scope, out: multi gateway support, tax calculation beyond Stripe Tax, proration math of your own, coupons, shipping, invoices you render yourself, any telemetry. Secrets in .env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_MONTHLY, STRIPE_PRICE_ANNUAL, STRIPE_PRICE_LIFETIME, ADMIN_TOKEN, APP_URL. Commit a .env.example, never a filled .env. Deliver a README with exact steps: create products in the Stripe dashboard, run stripe listen to forward webhooks locally, seed a test subscription, and how to flip to live keys. Include a script that replays a saved webhook fixture so the handler is testable without Stripe. ## Required capabilities - Stripe account in live mode - A publicly reachable HTTPS host for webhook delivery - Node 20 and SQLite - Stripe API keys and webhook secret in .env ## Delivery order 1. Scaffold the smallest runnable application and document its commands. 2. Implement the primary data model and core workflow. 3. Add validation, safe failure states, and persistence. 4. Cover the critical path with automated tests. 5. Exercise a clean install from the README and fix every missing step. ## Done when - A new user can go from clone to first successful workflow using only the README. - The core workflow works without paid infrastructure unless the brief requires it. - Tests cover the highest-risk behavior. - Known limitations are explicit rather than hidden. ===== .env.example ===== # Copy to .env and document every variable when it is introduced. # Never put real credentials in this file. APP_ENV=development # Add only values required by the selected implementation.
You are building a production product version of WooCommerce Subscriptions. Create the following project files first, then implement the application by following them. Keep the files updated as decisions change. Do not collapse this into a single README or prompt. ===== PRODUCT.md ===== # WooCommerce Subscriptions product brief ## Problem The actual hard part of recurring billing lives at the payment processor, not in this plugin: Stripe Billing already does tokenization, renewal attempts, SCA, proration and dunning. So an agent can absolutely wire a small self-hosted checkout plus webhook listener plus entitlement table in a weekend, and for one product with two or three plans that is genuinely enough. What you cannot one-shot is the part that makes this extension worth a license: living inside WooCommerce so that orders, coupons, taxes, shipping, emails, reports and forty other plugins all understand a subscription. If you already run a real Woo store, replacing this means rebuilding the glue, not the billing. If you just want money to arrive monthly for something you built, you never needed WordPress in the first place. ## Product outcome Sells a handful of hardcoded plans through Stripe Checkout, listens to billing webhooks, and keeps a local table of who currently has access. ## Target user A serious builder who needs a maintainable product foundation rather than a one-off demo. ## Required capabilities - Stripe account in live mode - A publicly reachable HTTPS host for webhook delivery - Node 20 and SQLite - Stripe API keys and webhook secret in .env ## Explicit non-goals for v1 - Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand - Gateway breadth: you are married to one processor instead of the dozen Woo supports - Customer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is - Admin reporting, renewal calendars and bulk actions over thousands of subscribers - Years of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations ## Success criteria - The primary workflow is measurable end to end. - Setup is reproducible in a clean environment. - Failure, recovery, and support paths are documented. - Product claims match what the implementation actually guarantees. ===== ARCHITECTURE.md ===== # Architecture ## Starting brief Build a minimal self-hosted recurring billing service for a single product. No WordPress, no WooCommerce. Stack, non negotiable: Node 20, TypeScript, Express, SQLite via better-sqlite3, Stripe Node SDK, plain server-rendered EJS templates. No React, no ORM, no Docker. Scope, in: - A plans.ts file defining three hardcoded plans (monthly, annual, lifetime) each with a Stripe Price ID pulled from env. - GET /pricing renders the plans and a Subscribe button per plan. - POST /checkout/:plan creates a Stripe Checkout Session in subscription mode (or payment mode for lifetime) and redirects to it. - POST /webhook with raw body parsing and signature verification. Handle checkout.session.completed, customer.subscription.updated, customer.subscription.deleted, invoice.payment_failed. Upsert into a subscriptions table: stripe_customer_id, email, plan, status, current_period_end, cancel_at_period_end. - GET /portal creates a Stripe Billing Portal session for the logged in customer so plan changes, cancellation and card updates are Stripe's problem, not yours. - Magic link auth only: POST /login emails a signed token, no passwords. Log the link to stdout in dev instead of sending mail. - GET /api/entitlement returns JSON with active true or false plus plan and period end, so another app can gate features on it. - GET /admin, protected by a single ADMIN_TOKEN from env, listing subscribers with status and next renewal, filterable by status. - Idempotent webhook handling: store processed event IDs and ignore repeats. Scope, out: multi gateway support, tax calculation beyond Stripe Tax, proration math of your own, coupons, shipping, invoices you render yourself, any telemetry. Secrets in .env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_MONTHLY, STRIPE_PRICE_ANNUAL, STRIPE_PRICE_LIFETIME, ADMIN_TOKEN, APP_URL. Commit a .env.example, never a filled .env. Deliver a README with exact steps: create products in the Stripe dashboard, run stripe listen to forward webhooks locally, seed a test subscription, and how to flip to live keys. Include a script that replays a saved webhook fixture so the handler is testable without Stripe. ## Boundaries Separate the product into replaceable modules for interface, application logic, persistence, external integrations, and operational concerns. Keep domain logic independent from delivery frameworks and vendors. ## Production baseline - Configuration: validated at startup with safe local defaults where possible. - Security: least privilege, input validation, secret redaction, rate limits on abuse-prone paths, and no invented security primitives. - Data: explicit schema and migrations, transactional writes where integrity matters, backup and restore instructions. - Integrations: adapters around third-party providers, idempotent webhook or job processing, bounded retries, and timeouts. - Observability: structured logs with request or operation IDs, an error-tracking hook, and health/readiness checks where a server exists. - Quality: unit tests for domain rules, integration tests at module boundaries, and one end-to-end critical-path test. ## Decision records For each major dependency, document why it was chosen, its failure mode, and how it can be replaced. Do not introduce infrastructure until a requirement justifies it. ===== AGENTS.md ===== # Agent instructions - Read `PRODUCT.md` and `ARCHITECTURE.md` before changing code. - Implement milestone by milestone; keep each change reviewable and leave the application runnable. - Treat authentication, payments, encryption, imports, webhooks, and destructive actions as high-risk boundaries when present. - Never invent cryptography or silently weaken a requirement to make a test pass. - Use provider interfaces for external services and deterministic fakes in tests. - Add migrations and rollback or recovery notes for persistent data changes. - Log useful operational context without credentials, tokens, passwords, or personal data. - Update documentation and run all checks before completing a milestone. ===== MILESTONES.md ===== # Delivery milestones ## M0 — Decisions and scaffold - Confirm the runtime, persistence model, threat boundaries, and deployment target. - Create a reproducible local environment and continuous checks. ## M1 — Core workflow - Implement the smallest end-to-end product path with validation and tests. - Keep integrations behind interfaces. ## M2 — Trust layer - Add secure failure behavior, recovery paths, audit-relevant events, and data safeguards. - Test abuse cases and destructive operations. ## M3 — Operability - Add structured logs, error reporting hooks, health signals, backup/restore documentation, and deployment configuration. ## M4 — Release gate - Run a clean-install test, critical-path end-to-end test, dependency review, and documented rollback exercise. - Compare the shipped behavior with `PRODUCT.md` and publish remaining limitations. ===== OPERATIONS.md ===== # Operations ## Before release - Validate configuration and secrets at startup. - Define backup, restore, and rollback procedures and test them. - Document logs, error tracking, health signals, and alert ownership. - Set dependency update and vulnerability review expectations. ## Incident checklist 1. Contain the issue without destroying evidence or user data. 2. Record the timeline and affected scope. 3. Rotate exposed secrets and revoke compromised sessions or credentials. 4. Restore from a verified source when needed. 5. Document the root cause, remediation, and regression test. ## Launch constraint Do not market omitted WooCommerce Subscriptions capabilities as implemented. The v1 non-goals in `PRODUCT.md` remain user-visible limitations until they are deliberately delivered.
# WooCommerce Subscriptions indie build ## Goal Build the smallest trustworthy replacement for the core WooCommerce Subscriptions workflow for one developer or a tiny team. ## Scope Sells a handful of hardcoded plans through Stripe Checkout, listens to billing webhooks, and keeps a local table of who currently has access. ## Quick start 1. Install the documented dependencies. 2. Copy `.env.example` to `.env`. 3. Run the development command chosen during implementation. 4. Complete the acceptance checks in `BUILD_PLAN.md`. ## Honest limits This build deliberately does not replace: - Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand - Gateway breadth: you are married to one processor instead of the dozen Woo supports - Customer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is - Admin reporting, renewal calendars and bulk actions over thousands of subscribers - Years of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations If those capabilities are essential, use WooCommerce Subscriptions instead of pretending the gap is solved.
# Agent instructions - Optimize for a working, understandable weekend build. - Prefer the fewest moving parts that satisfy the brief. - Do not invent cryptography, security guarantees, APIs, or compliance claims. - Keep secrets out of source control and logs. - Add focused tests for destructive, security-sensitive, and data-loss paths. - Run the project checks before declaring the build complete. - Record any deliberate shortcut in the README under "Tradeoffs".
# Build plan ## Original build brief Build a minimal self-hosted recurring billing service for a single product. No WordPress, no WooCommerce. Stack, non negotiable: Node 20, TypeScript, Express, SQLite via better-sqlite3, Stripe Node SDK, plain server-rendered EJS templates. No React, no ORM, no Docker. Scope, in: - A plans.ts file defining three hardcoded plans (monthly, annual, lifetime) each with a Stripe Price ID pulled from env. - GET /pricing renders the plans and a Subscribe button per plan. - POST /checkout/:plan creates a Stripe Checkout Session in subscription mode (or payment mode for lifetime) and redirects to it. - POST /webhook with raw body parsing and signature verification. Handle checkout.session.completed, customer.subscription.updated, customer.subscription.deleted, invoice.payment_failed. Upsert into a subscriptions table: stripe_customer_id, email, plan, status, current_period_end, cancel_at_period_end. - GET /portal creates a Stripe Billing Portal session for the logged in customer so plan changes, cancellation and card updates are Stripe's problem, not yours. - Magic link auth only: POST /login emails a signed token, no passwords. Log the link to stdout in dev instead of sending mail. - GET /api/entitlement returns JSON with active true or false plus plan and period end, so another app can gate features on it. - GET /admin, protected by a single ADMIN_TOKEN from env, listing subscribers with status and next renewal, filterable by status. - Idempotent webhook handling: store processed event IDs and ignore repeats. Scope, out: multi gateway support, tax calculation beyond Stripe Tax, proration math of your own, coupons, shipping, invoices you render yourself, any telemetry. Secrets in .env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_MONTHLY, STRIPE_PRICE_ANNUAL, STRIPE_PRICE_LIFETIME, ADMIN_TOKEN, APP_URL. Commit a .env.example, never a filled .env. Deliver a README with exact steps: create products in the Stripe dashboard, run stripe listen to forward webhooks locally, seed a test subscription, and how to flip to live keys. Include a script that replays a saved webhook fixture so the handler is testable without Stripe. ## Required capabilities - Stripe account in live mode - A publicly reachable HTTPS host for webhook delivery - Node 20 and SQLite - Stripe API keys and webhook secret in .env ## Delivery order 1. Scaffold the smallest runnable application and document its commands. 2. Implement the primary data model and core workflow. 3. Add validation, safe failure states, and persistence. 4. Cover the critical path with automated tests. 5. Exercise a clean install from the README and fix every missing step. ## Done when - A new user can go from clone to first successful workflow using only the README. - The core workflow works without paid infrastructure unless the brief requires it. - Tests cover the highest-risk behavior. - Known limitations are explicit rather than hidden.
# Copy to .env and document every variable when it is introduced. # Never put real credentials in this file. APP_ENV=development # Add only values required by the selected implementation.
# WooCommerce Subscriptions product brief ## Problem The actual hard part of recurring billing lives at the payment processor, not in this plugin: Stripe Billing already does tokenization, renewal attempts, SCA, proration and dunning. So an agent can absolutely wire a small self-hosted checkout plus webhook listener plus entitlement table in a weekend, and for one product with two or three plans that is genuinely enough. What you cannot one-shot is the part that makes this extension worth a license: living inside WooCommerce so that orders, coupons, taxes, shipping, emails, reports and forty other plugins all understand a subscription. If you already run a real Woo store, replacing this means rebuilding the glue, not the billing. If you just want money to arrive monthly for something you built, you never needed WordPress in the first place. ## Product outcome Sells a handful of hardcoded plans through Stripe Checkout, listens to billing webhooks, and keeps a local table of who currently has access. ## Target user A serious builder who needs a maintainable product foundation rather than a one-off demo. ## Required capabilities - Stripe account in live mode - A publicly reachable HTTPS host for webhook delivery - Node 20 and SQLite - Stripe API keys and webhook secret in .env ## Explicit non-goals for v1 - Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand - Gateway breadth: you are married to one processor instead of the dozen Woo supports - Customer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is - Admin reporting, renewal calendars and bulk actions over thousands of subscribers - Years of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations ## Success criteria - The primary workflow is measurable end to end. - Setup is reproducible in a clean environment. - Failure, recovery, and support paths are documented. - Product claims match what the implementation actually guarantees.
# Architecture ## Starting brief Build a minimal self-hosted recurring billing service for a single product. No WordPress, no WooCommerce. Stack, non negotiable: Node 20, TypeScript, Express, SQLite via better-sqlite3, Stripe Node SDK, plain server-rendered EJS templates. No React, no ORM, no Docker. Scope, in: - A plans.ts file defining three hardcoded plans (monthly, annual, lifetime) each with a Stripe Price ID pulled from env. - GET /pricing renders the plans and a Subscribe button per plan. - POST /checkout/:plan creates a Stripe Checkout Session in subscription mode (or payment mode for lifetime) and redirects to it. - POST /webhook with raw body parsing and signature verification. Handle checkout.session.completed, customer.subscription.updated, customer.subscription.deleted, invoice.payment_failed. Upsert into a subscriptions table: stripe_customer_id, email, plan, status, current_period_end, cancel_at_period_end. - GET /portal creates a Stripe Billing Portal session for the logged in customer so plan changes, cancellation and card updates are Stripe's problem, not yours. - Magic link auth only: POST /login emails a signed token, no passwords. Log the link to stdout in dev instead of sending mail. - GET /api/entitlement returns JSON with active true or false plus plan and period end, so another app can gate features on it. - GET /admin, protected by a single ADMIN_TOKEN from env, listing subscribers with status and next renewal, filterable by status. - Idempotent webhook handling: store processed event IDs and ignore repeats. Scope, out: multi gateway support, tax calculation beyond Stripe Tax, proration math of your own, coupons, shipping, invoices you render yourself, any telemetry. Secrets in .env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_MONTHLY, STRIPE_PRICE_ANNUAL, STRIPE_PRICE_LIFETIME, ADMIN_TOKEN, APP_URL. Commit a .env.example, never a filled .env. Deliver a README with exact steps: create products in the Stripe dashboard, run stripe listen to forward webhooks locally, seed a test subscription, and how to flip to live keys. Include a script that replays a saved webhook fixture so the handler is testable without Stripe. ## Boundaries Separate the product into replaceable modules for interface, application logic, persistence, external integrations, and operational concerns. Keep domain logic independent from delivery frameworks and vendors. ## Production baseline - Configuration: validated at startup with safe local defaults where possible. - Security: least privilege, input validation, secret redaction, rate limits on abuse-prone paths, and no invented security primitives. - Data: explicit schema and migrations, transactional writes where integrity matters, backup and restore instructions. - Integrations: adapters around third-party providers, idempotent webhook or job processing, bounded retries, and timeouts. - Observability: structured logs with request or operation IDs, an error-tracking hook, and health/readiness checks where a server exists. - Quality: unit tests for domain rules, integration tests at module boundaries, and one end-to-end critical-path test. ## Decision records For each major dependency, document why it was chosen, its failure mode, and how it can be replaced. Do not introduce infrastructure until a requirement justifies it.
# Agent instructions - Read `PRODUCT.md` and `ARCHITECTURE.md` before changing code. - Implement milestone by milestone; keep each change reviewable and leave the application runnable. - Treat authentication, payments, encryption, imports, webhooks, and destructive actions as high-risk boundaries when present. - Never invent cryptography or silently weaken a requirement to make a test pass. - Use provider interfaces for external services and deterministic fakes in tests. - Add migrations and rollback or recovery notes for persistent data changes. - Log useful operational context without credentials, tokens, passwords, or personal data. - Update documentation and run all checks before completing a milestone.
# Delivery milestones ## M0 — Decisions and scaffold - Confirm the runtime, persistence model, threat boundaries, and deployment target. - Create a reproducible local environment and continuous checks. ## M1 — Core workflow - Implement the smallest end-to-end product path with validation and tests. - Keep integrations behind interfaces. ## M2 — Trust layer - Add secure failure behavior, recovery paths, audit-relevant events, and data safeguards. - Test abuse cases and destructive operations. ## M3 — Operability - Add structured logs, error reporting hooks, health signals, backup/restore documentation, and deployment configuration. ## M4 — Release gate - Run a clean-install test, critical-path end-to-end test, dependency review, and documented rollback exercise. - Compare the shipped behavior with `PRODUCT.md` and publish remaining limitations.
# Operations ## Before release - Validate configuration and secrets at startup. - Define backup, restore, and rollback procedures and test them. - Document logs, error tracking, health signals, and alert ownership. - Set dependency update and vulnerability review expectations. ## Incident checklist 1. Contain the issue without destroying evidence or user data. 2. Record the timeline and affected scope. 3. Rotate exposed secrets and revoke compromised sessions or credentials. 4. Restore from a verified source when needed. 5. Document the root cause, remediation, and regression test. ## Launch constraint Do not market omitted WooCommerce Subscriptions capabilities as implemented. The v1 non-goals in `PRODUCT.md` remain user-visible limitations until they are deliberately delivered.
$ choose a build depth, inspect the files, then open the complete pack in your agent · this prompt is generated from the build plan · improve it via PR
Because their store is already WooCommerce, and in that world this extension is the thing every other plugin, theme and gateway expects to be present. Paying once a year to have renewals, dunning emails, subscriber lists and coupon rules behave like normal Woo orders is cheaper than maintaining a parallel billing system that has to be kept in sync with the store forever. People building something new from scratch have a much easier time: point Stripe or Paddle at it and skip all of this.
xIntegration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand
xGateway breadth: you are married to one processor instead of the dozen Woo supports
xCustomer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is
xAdmin reporting, renewal calendars and bulk actions over thousands of subscribers
xYears of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations
Nothing worth pointing at. That's why the prompt exists.
Vibecode WooCommerce Subscriptions
Kinda. The core of WooCommerce Subscriptions is buildable in a weekend with the prompt on this page, but there are real gaps: Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand, Gateway breadth: you are married to one processor instead of the dozen Woo supports. Read the honest list above before committing.
How much does WooCommerce Subscriptions cost?
WooCommerce Subscriptions costs about $23.25/month (Single site licence, billed annually, checked 2026-08-18), which is $279 per year.
What do I lose by replacing WooCommerce Subscriptions?
Honestly: Integration with the WooCommerce order, coupon, tax and shipping machinery, so subscriptions are no longer just orders your other plugins understand; Gateway breadth: you are married to one processor instead of the dozen Woo supports; Customer-facing plan switching, pausing, resubscribing and prorated upgrades in your own UI, unless you accept the hosted portal as-is; Admin reporting, renewal calendars and bulk actions over thousands of subscribers; Years of edge case handling for partial renewals, mixed carts, manual renewals and payment method migrations. If any of those are load-bearing for you, keep paying.
Is there an open-source alternative to WooCommerce Subscriptions?
No mature open-source alternative worth pointing at, which is exactly why the one-shot prompt on this page exists.