Payouts-first pivot: marketing rebuild + API/dashboard fixes + on-chain payout#166
Merged
Conversation
Strip the marketing site from ~28 routes to a minimalist Home + Pricing
(plus terms/privacy utility), and rewrite all copy to the new payouts-first,
Stellar-settled positioning.
- Home: 7-section flow — Hero, ProblemStrip, HowItWorks, Features
("what you get"), Developers (single TS payout snippet), Trust, FinalCTA
- Replace hero visual with a self-contained NGN payout-status board
- Nav reduced to How it works / Pricing / Docs / Become a design partner
- Pricing: published rate card + mid-market promise + FAQ
- Stage-honest throughout (design-partner CTAs, delivery-time targets)
- Remove old product/blog/use-cases/etc. routes, orphaned components,
and dead libs; update metadata, StructuredData, and sitemap
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Restore Recipient model + Payout.recipientId to schema.prisma (dropped in a prior merge; the migration, code, and Merchant/Payout relations still referenced it), unblocking prisma generate and the API typecheck. - Add StellarService.sendPayment() and branch processStellarPayout to use a direct payment for same-asset transfers (e.g. XLM->XLM); Horizon rejects a strict-send path query when source and destination asset are identical. Verified end-to-end on testnet (real settled payout tx). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rename usePayouts.test.ts -> .tsx (file contains JSX). Note: this surfaces pre-existing type errors in dashboard payout components that were previously masked by the parse error halting tsc — those are not addressed here. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Root cause: the shared @useroutr/types Payout type was stale — missing destinationType, failureReason, createdAt, batchId, stellarTxHash and using loose optionals. Aligned Payout with the API/Prisma model (matching what the component code and test fixtures already expected), and added PaymentLink.qrCodeUrl. Also fixed unrelated call-site issues surfaced once tsc could proceed: - recipients dialogs: onClose -> open/onOpenChange; wire CreateRecipientDialog open state on the settings/recipients page - Badge: replace unsupported secondary/outline variants with supported ones - toast: use ToastInput's `message` field instead of `description`/`variant` - PayoutFilterBar: adapt DateRangePicker to its startDate/endDate API - settings: import missing Radio icon Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
www pinned next@16.1.6 while the rest of the monorepo (root) resolves next@16.2.1, producing a nested apps/www/node_modules/next and two incompatible NextConfig types (tsc error in next.config.ts). Align www's next and eslint-config-next to 16.2.1 so a single copy hoists. Full monorepo typecheck now clean: api, dashboard, checkout, www all 0 errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Replaces the mocked recipients UI with a working feature backed by the existing API: - Implement Edit and Delete dialogs (were "TODO: implement" stubs) - Extract a shared RecipientDetailsFields component (all 4 destination types, correctly bound incl. the discriminated inner `type` the API needs) - Wire Create/Edit/Delete and the list through the real `api` client (was a raw fetch to a non-existent /api proxy); render real recipient details in the table instead of hardcoded placeholders Also fixes two real bugs found while wiring it up: - api: recipients controller was @controller('v1/recipients') under the global 'v1' prefix → routes served at /v1/v1/recipients. Corrected to match every other resource (/v1/recipients). - dashboard: NotificationsProvider was never mounted though SiteHeader's NotificationBell consumes useNotifications — every authenticated dashboard route threw at runtime. Mounted it in the (dashboard) layout. Verified end-to-end in the browser: recipients list renders real data, Edit opens a pre-filled form, and POST/PATCH/DELETE round-trip against the API on Stellar testnet config. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Repositions the product around payouts-first, Stellar-settled and gets the repo to a fully green typecheck with a real on-chain payout proven on testnet.
What's in here
1. Marketing site rebuild (
apps/www)2. API fixes (
apps/api) — includes a real on-chain payoutRecipientmodel +Payout.recipientIdto the Prisma schema (dropped in a prior merge while the migration, code, and relations still referenced it). This unblockedprisma generateand the API typecheck.StellarService.sendPayment()and branchedprocessStellarPayoutto use a direct payment when source == destination asset (Horizon rejects a strict-send path query for identical assets). Verified end-to-end on testnet — a real settled payout transaction.3. Dashboard type cleanup (
apps/dashboard) — 61 → 0@useroutr/typesPayouttype was stale (missingdestinationType,failureReason,createdAt,batchId,stellarTxHash). Aligned it with the API/Prisma model; addedPaymentLink.qrCodeUrl.onClose→open/onOpenChange), Badge variants, toastmessagefield,DateRangePickerprops, a missing icon import, and renamed a JSX-containing.tstest to.tsx.4. Monorepo dedupe (
apps/www)next/eslint-config-nextto16.2.1(matching root) to remove a nestednextinstall and its conflictingNextConfigtypes.Verification
Full typecheck sweep — api, dashboard, checkout, www all 0 errors. API booted locally against Stellar testnet + Circle; merchant → recipient → payout round-trip works, and a Stellar-wallet payout settled on-chain (confirmed on Horizon).
Notes
docs/dir and are intentionally not included in this PR..env.example(template only) is included; real.envstays gitignored.🤖 Generated with Claude Code