SellVia Docs — menu

MVP Scope

Product Foundation/MVP Scope.md
sharedUpdated Aug 23, 2026

MVP Scope

Purpose

The single source of truth for what's actually being built right now — every decision below has already been made elsewhere in this documentation; this doc exists so scope doesn't have to be reconstructed by scanning 100+ pages. Updated every time a new MVP-scoping decision is made.

Checkout & Payments

  • SellVia Checkout REMOVED (reversed 2026-08-07) — external-site tracking is now the model: customer buys on the merchant's own site, SellVia tracks via redirect + universal onboarding snippet + discount-code fallback. See 02. Architecture Decision Log.
  • Processor: Paddle (reversed 2026-08-10 from Stripe Connect — see 02. Architecture Decision Log). Handles periodic merchant billing; creator payout mechanism not yet confirmed against Paddle's platform/marketplace product — flagged as an open item below, not solved.
  • Currencies: USD, EUR, GBP only (PKR dropped for now)
  • Commission: merchant-set freely, no platform range, no bargaining
  • Platform fee: 2% flat, no subscription tier
  • Payout: commission accrues to creator balance after merchant billing succeeds (not instant/live-split, per the Checkout & Payments reversal below); creator bank payout gated at $50 threshold; merchant payout NOT threshold-gated
  • Attribution window: 30 days
  • Refund clawback: RESOLVED 2026-08-07 — creator commission is never clawed back; merchant absorbs full refund cost

Stack

  • Backend: FastAPI (Python), single monolithic service (modular monolith — extractable later, not built as microservices)
  • Frontend: Next.js + shadcn/ui + Tailwind
  • Database: Supabase (Postgres + pgvector + built-in pooling) — explicit MVP choice, revisit at scale
  • Auth: Ory Kratos (Ory Network managed hosting for MVP, self-hosted later — updated 2026-08-04, was Clerk)
  • Background jobs: Celery (Redis broker)
  • Hosting: VPS (Hetzner vs. DigitalOcean — still open) + Cloudflare (DNS/CDN/WAF)
  • Git: Monorepo, short-lived service-prefixed feature branches, no long-lived per-service branches

AI Features (initial level, no training/ML infra)

  • Creator ↔ Offer matching (embeddings + pgvector)
  • Application screening summaries (LLM, cached per application)
  • Campaign copy assist (LLM draft)
  • Disclosure nudge: templated, NOT LLM-generated (legal text)
  • Fraud detection stays rules-based, not AI, for MVP

Security & Resilience

  • WAF (Cloudflare), IP anomaly detection with throttle→ban escalation, documented DDoS response plan
  • Tenant isolation enforced across cache, DB, background jobs, file storage, and logs — fail-closed principle
  • Cross-tenant automated test suite (built after MVP functionally complete, required before Private Beta)
  • Feature flags mandatory for any change touching Sales/Commissions/Payouts/Refunds

Accessibility & Machine-Readability (binding gates, not aspirational)

  • Full keyboard navigation, screen reader/ARIA compliance, WCAG AA contrast (verification pending)
  • Structured data (schema.org), semantic HTML, OpenAPI spec, llms.txt, deliberate robots.txt

Cost & Financial Tracking

  • AI/token usage tracking per feature
  • Unit economics (revenue vs. cost per user, asymmetric by role)
  • Automated monthly P&L (Paddle reconciliation + hosting costs + AI costs)

Roles & Access

  • Merchant, Creator, Admin (single flat role, no tiering)
  • Dual-role accounts (Merchant + Creator) allowed
  • No follower-count floor for creator eligibility

Explicitly Deferred to Post-MVP

See Full Product Vision (Post-MVP) for the complete list — notably: external-site checkout tracking, PKR support, subscription pricing, AI-based fraud detection, microservices extraction, mobile apps.

Still-Open Items Blocking MVP Completion (not deferred — need a real decision)

  • Commission-rate lock timing: "at approval" (State Machines) vs. "at time of sale" (Business Rules) — genuine conflict, unresolved
  • Partial refund commission handling
  • Chargeback dispute fee allocation — RESOLVED 2026-08-07: SellVia absorbs first 5 lost disputes per merchant, merchant pays from 6th onward
  • Sales tax / VAT (founder has deferred this explicitly to end of build)
  • Self-dealing block (dual-role account applying to own campaign) — RESOLVED 2026-08-07: blocked outright
  • Merchant Paddle-restriction handling
  • Beachhead niche/vertical for go-to-market
  • Private Beta cohort size/cap
  • Supabase Storage vs. separate S3-compatible provider
  • VPS provider: Hetzner vs. DigitalOcean
  • India IT Rules relevance (founder has deferred this explicitly to end of build)
  • Paddle creator-payout evaluation (added 2026-08-10) — does Paddle for Platforms actually support per-creator payout (KYC, bank transfer, $50 threshold) the way Stripe Connect did — needs real evaluation before build, see Architecture Decision Log

Status & Incident Communication (added 2026-08-04, upgraded from earlier "deferred")

  • Public status page on a separate domain, separate infrastructure from the main SellVia stack — managed status page tool (Instatus/Better Uptime-style), not self-hosted
  • Scheduled maintenance announcements with subscriber notifications
  • Formal incident communication workflow (Investigating → Identified → Monitoring → Resolved), tied to checkout-pause incidents specifically

Update (2026-08-07): RESOLVED

Commission-rate lock timing is resolved — locked at approval, confirmed by founder. No longer an open item. See 01. Business Rules and 01. Commission Engine for the correction.

Update (2026-08-07): MAJOR REVISION — Checkout & Payments Model Reversed

This section's original "SellVia Checkout only" bullets are superseded. Current model:

  • External-site tracking — customer buys on the merchant's own site; SellVia redirect logs the click, a universal onboarding tracking snippet on the merchant's confirmation page reports the sale
  • Paddle used for periodic merchant billing and creator payouts, not a live per-sale split
  • Money collection: billed periodically (merchant's card on file, recurring cycle)
  • Creator payout: bill-first-then-pay (working default) — SellVia doesn't front commission before billing succeeds
  • Refund clawback: creator commission is NEVER clawed back (RESOLVED) — merchant absorbs full cost via billing-cycle credit adjustment
  • Commission rate: locked at creator approval (RESOLVED), never changes after
  • Self-dealing: blocked outright (RESOLVED) — dual-role account cannot apply to own campaign
  • Chargeback dispute fee: SellVia absorbs first 5 lost disputes per merchant, merchant pays from 6th onward (RESOLVED)
  • Merchant Paddle restriction: auto-pauses all live campaigns immediately (RESOLVED)
  • Currencies, platform fee (2% flat), attribution window (30 days) unchanged

Full detail: 01. Money Flow, 01. Commission Engine, 01. State Machines, 05. Payment Flow, 02. Architecture Decision Log (all updated 2026-08-07).

Update (2026-08-10): Payments Processor Reversed — Paddle Replaces Stripe

Founder decision: Paddle instead of Stripe, across the board (merchant billing, tax, and creator payouts). See 02. Architecture Decision Log for full reasoning. Every doc referencing Stripe/Stripe Connect/Stripe Tax has been updated to Paddle. One real open item this creates, not yet resolved: Paddle's per-creator payout capability (KYC collection, bank transfer, threshold-gated payout) hasn't been evaluated the way Stripe Connect's was — added to Still-Open Items above.

Superseded by the 2026-08-23 update below — Paddle itself is now removed for MVP.

Update (2026-08-23): MAJOR REVISION — Pakistan-Only, No Processor, Shopify-Only, Offer Absorbs Campaign

Four founder decisions. Full reasoning in 02. Architecture Decision Log; this section is the scope-level summary.

Market: Pakistan only for MVP. Every merchant is a Pakistani business. This is the resolved "beachhead" — geography, not a product niche.

Currency: PKR only. USD/EUR/GBP support is not needed for MVP (it moves to the deferred list — see Full Product Vision (Post-MVP)).

Payments processor: Swich (swichnow.io) — confirmed 2026-08-23, replacing the earlier "no processor, manual bank transfer" working default. A Pakistani payments infrastructure company, PCI-DSS v4.0.1 certified, covering both legs: recurring billing/invoice-links for merchant collection, and payout/disbursement API (bank, JazzCash, EasyPaisa, Raast) for creator payouts. Not a Merchant of Record like Paddle was — Swich moves money, it doesn't absorb tax/compliance obligations, so SellVia itself remains responsible for its own tax posture (see Payments/Tax Considerations). Pricing, onboarding requirements, and exact API shapes are unconfirmed pending an actual signup/integration conversation.

Merchant integration: Shopify only. The universal onboarding snippet (any platform) is retired for MVP in favor of Shopify's native webhook — more reliable (server-side, not cookie-dependent), at the cost of not supporting other platforms yet. "For now we are just going with Shopify only" — other platforms (WooCommerce, custom sites, the universal snippet) are explicitly deferred, not abandoned.

Domain model: Offer absorbs Campaign. There is no separate Campaign entity. "Offer is offer, it is not turning into any campaign at all." An Offer carries commission rate + lifecycle status (draft/live/paused/ended) directly; Applications/AffiliateLinks/Sales attach to an Offer. Every doc and this doc's own earlier language that treats Offer and Campaign as two entities is superseded — see 01. Domain Model (updated same date).

What this changes in the sections above

  • Checkout & Payments: currencies row → PKR only, not USD/EUR/GBP. Processor row → Swich (confirmed 2026-08-23), not Paddle, not a manual bank-transfer default. Attribution/refund/commission-lock rules (30-day window, locked-at-approval, no clawback) are unchanged in substance — only re-worded from "Campaign" to "Offer."
  • Stack: remove Paddle as a dependency, add Swich SDK/API in its place — a real integration (recurring billing + payout API + webhooks), not the manual admin workflow the interim bank-transfer default implied.
  • AI Features: unchanged — "Creator ↔ Offer matching" replaces "Creator ↔ Campaign matching," same mechanism.
  • Roles & Access: unchanged.

Still-Open Items — updated

  • Paddle creator-payout evaluationmoot, Paddle removed.
  • Merchant Paddle-restriction handlingmoot.
  • Exact local settlement railresolved 2026-08-23: Swich, covering both billing and payout. Not yet done: the actual signup/integration work.
  • New (2026-08-23): Swich onboarding requirements for a 10–25-merchant Private Beta volume — pricing, KYC, minimums — not yet confirmed, needs a real vendor conversation before build starts.
  • New (2026-08-23): exact Swich webhook/reconciliation shape — replaces the earlier "who reconciles bank transfers" open item now that there's an actual processor with its own transaction records to reconcile against, but the specific fields/events aren't yet mapped.
  • Shopify app review/approval requirements (Shopify's own app-store or private-app process) for the webhook integration — not yet scoped.
  • Sales tax / VAT: narrows to Pakistani tax law (FBR) only, not multi-jurisdiction USD/EUR/GBP — still deferred per founder's existing compliance-review deferral. Unaffected by the Swich decision — Swich is a payment processor, not a Merchant of Record, so it doesn't absorb this the way Paddle would have.
  • Beachhead niche/vertical: resolved as geography (Pakistan) rather than a product category — whether a category focus is still needed within Pakistan is open.
  • Private Beta cohort size/cap: unchanged, still 10–25.