SellVia Docs — menu

Build checklist

The implementation plan for actually building SellVia, split into frontend (64 tasks) and backend (85 tasks). Every task is derived from the docs and links back to the ones it's grounded in. Edit the list in content/build-tasks.ts; check marks are kept in this browser's localStorage.

Loading your checklist…

64 from the docs · 0 custom · 8 sections

App Router project, TypeScript, Tailwind, shadcn/ui — a separate deployable from the FastAPI backend.

Black background, lime #BFFF13 accent used sparingly, Gray 02 corrected to #787882, Outfit + Figtree, 10-12px radii, thin borders over shadows.

Buttons, inputs, tables, status badges, cards, dialogs, toasts — with the restrained-animation rules baked in.

Web-responsive only for MVP; no native app. Breakpoints are undocumented — decide and record them.

One client over the FastAPI service, decoding the standard `{ error: { code, message, status } }` shape into actionable UI copy.

Kratos SDK drives login/register/recovery/verification; session is server-validated per request, never a cached JWT.

Separate Merchant (Offers/Applications/Sales/Payouts), Creator (Discover/My Links/Earnings) and Admin (/admin/*) navs — never merged into one menu.

One account can hold both roles with separate profiles and data; active-context indicator, plus an empty state when the other role isn't set up.

Calm empty states echoing the zeroed-metrics device, skeleton/fade loading, specific actionable errors — never a raw stack trace or 'something went wrong'.

Shared across Merchant/Creator/Admin shells; quiet treatment, no badges or confetti.

Pakistan-only, PKR-only for MVP — no multi-currency display path anywhere in the UI.

Keyboard operability on every custom control, visible lime focus rings, real form labels, aria-describedby/aria-invalid, aria-live on async status.

Copy-assist draft action, application fit-summary panel, and the fixed (non-LLM) disclosure-nudge template shown at the Get Link moment.

schema.org Product/Offer on public offer pages with accurate PKR price and availability; semantic landmarks throughout. Public pages only.

Deliberate crawler policy: known AI crawlers allowed on public pages, authenticated dashboards excluded.

Frontend deploys via Vercel, independently of the backend's own path.

Hero, One Arrow Two Wins walkthrough, zeroed live-metrics device, roadmap-stage indicator, FAQ, waitlist form.

Per-audience explainer pages with a CTA to waitlist or discovery.

Filter by category, commission range and niche; sort by newest / highest commission / most applications. Public read, Apply is Creator-gated.

Name, PKR price, commission rate, merchant, Product/Offer JSON-LD, Creator-gated Apply CTA. Ended offers show honestly rather than 404.

Kratos-driven login form, forgot-password link, MFA challenge step, redirect away if already authenticated.

Signup form, Merchant/Creator/both role selector, and the plain-language data-disclosure notice at the point of collection.

Email entry and reset-token form; surface that a password change logs the user out everywhere else.

Pending / verified / expired-link states with a resend action.

Optional for Creators, recommended for Merchants, possibly mandatory for Admins.

Confirm or adjust role after signup and branch into the correct onboarding path.

Billing-connect flow plus gate-status indicator. Widget-vs-redirect mechanism is still unconfirmed — keep the integration point swappable.

OAuth redirect into Shopify admin, webhook-active confirmation, discount-code guidance, and troubleshooting copy on failure.

Payee registration with payout-method choice (bank, JazzCash, EasyPaisa) and an explicit 'finish this to activate your link' blocking state.

Stat cards (clicks, conversion, sales, spend), recent activity, pending-applications count, onboarding-gate banner when incomplete.

Table with name, price, category, status badge, commission rate, application and sale counts; filter by status, inline pause/resume/end/archive.

Name, PKR price, category (hides shipping fields when digital), image upload, commission rate, AI copy-assist, and the two-gate publish checklist.

Status and commission rate, performance stats, application/sale summaries, pause/resume/end/edit actions, auto-paused banner where applicable.

Creator name, niche, audience size, engagement rate, AI fit-summary snippet and status; filter by status and offer.

Audience data plus AI fit summary with Approve/Reject. Approval is a trust moment — it must feel immediate, not queued.

Date, offer, creator, amount, acceptance_status; filter/sort plus an export action that runs as an async job, not a spinner.

Symmetric receipt — identical to what the creator sees. Amount, commission split, platform fee, billing-cycle link, Request Refund Credit with cap state.

Cycle period, status (open / pending_charge / charged / failed), total owed and retry count, with a payment-method-update CTA on failure.

Post-onboarding entry point into the same Swich billing-connect flow as C2.

Active sessions list with 'log out all other devices', MFA setup, password change.

Clicks, sales, earnings trend toward the payout threshold, recent activity, application-status summary.

Same filter and sort surface as public discovery, plus already-applied indicators. AI-matched ranking layers on later.

Application form with audience snippet and disclosure note; distinct errors for duplicate (409), self-dealing block and rate-limited.

Offer, status (pending/approved/rejected) and date. Rejection-reason display is still an open question.

Offer, slug/URL, discount code and click/sale summary with copy actions. The Get Link moment carries the disclosure nudge and should feel like a payoff.

Click → cart-add → purchase attribution timeline for one link, plus commission earned from it.

Balance of billed-and-charged commissions only, progress toward the PKR payout threshold, payout history. Never cached — always live.

Niche, audience size, engagement rate. Whether engagement_rate is editable depends on the unresolved self-reported-vs-calculated question.

Post-onboarding entry point into the same Swich payee flow as C4.

Read/unread feed with type-based icons and click-through to the relevant screen, scoped to the recipient.

Confirmation naming exactly what happens, 14-day cancellable countdown, and a cancel action during the grace period.

Contact form or link; copy must make normal Swich settlement windows read as expected, not as failures.

Active merchants/creators, liquidity ratio, time-to-payout trend and both funnel views — the key view during Validation and Private Beta.

Flag list with trigger rule, entity and date; detail view with clear/act actions and unreviewed/cleared/actioned states.

Approve/reject high-commission or high-risk offers before they go live. Trigger thresholds are undefined.

Search/list plus user detail with activity, roles, suspend action, and an aggregated support-context view.

Refund-credit request list with a per-merchant cap counter, plus a chargeback evidence-submission form.

Investigate Swich-vs-internal mismatches and resolve them.

Curate and invite the 10-25 Private Beta cohort manually, then monitor automatic invitations after.

Accounts that passed the 48-hour churn threshold without completing their activation action.

Chat input and response stream with explicit confirmation prompts on every write and a clarification prompt on ambiguity — fail closed, never guess.

Monthly P&L with a finalized-vs-draft distinction, per-user unit economics, and AI/token cost views.

Saved in this browser only (localStorage) — no backend, no sync across devices.