Build checklist
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.