Redesign dashboard UI removing purple and applying polish.
PlanDiscuss compliance tiers and offloading regulatory burdens.
PlanExplore card issuing options: Lithic, Privacy.com, Marqeta.
PlanDefine user story for agent-managed funding and payments.
PlanMap payment flows including closed-loop prepaid and USDC wallets.
Planhttps://jakub.kr/writing/details-that-make-interfaces-feel-better
based on this redesign http://localhost:3000/dashboard/cards/new
NEVER use purple
use https://coss.com/ui when applicable
Starting now. I'll standardize the dashboard layout into the layout component, kill all purple/violet usage, and apply the article's polish (concentric radii, tabular nums, subtle shadows, text-balance) to the mint flow.
Now strip the per-page wrappers so each page renders just its content fragments:
Acknowledged — I'll redesign /dashboard/agents along with the rest. Continuing.
Now agents (will redesign later), card detail, and instance pages:
Replace the violet accent token with slate (cool neutral) and remove fuchsia mixes.
Only mint-form remains — and that's the redesign target, so I'll fix it as part of step 3.
Now the mint form rebuild. I'll redesign it around section eyebrows, concentric radii, soft shadows for selected state, full tabular-nums on numbers, optical alignment, subtle interruptible transitions on swatches, and a tight sticky preview rail. And kill the violet swatch.
Got it — the bento grid with duplicated header chrome and giant cards is the wrong pattern. Replacing it with a dense, scannable list (same idiom as Cards / Receipts) plus a dedicated Live instances section so the page reads as a tool, not a brochure.
Both pages render cleanly. The mint flow now has:
The agents page now matches the rest of the dashboard idiom: stats strip + dense SectionCard table with column header, card chips, status dot, and a separate Live instances section beneath.
All dashboard pages share one container (max-w-[1240px]) via app/dashboard/layout.tsx, so widths and gaps are consistent across Overview / Cards / Cards/New / Cards/[id] / Agents / Receipts / Org / Settings.
Purple/violet/fuchsia is gone everywhere — the violet accent token is now slate, sidebar/org logos use a foreground chip, MPP rail pill is teal, agent avatars use neutral foreground tints.
I wonder--can you implement all this?? what do we need to implement the actual functionality?
Honest answer: the UI is the easy 20%. The mint form, receipts log, and agent rows are about 2 weeks of polish. The system underneath is a real fintech stack — call it 4–9 months solo to MVP, depending on which rails you compromise on. Here's the actual shape:
Card issuing (Mastercard rail) — You don't issue cards, a partner does. Options: Lithic (best DX, US/CA, ~$500/mo + interchange), Stripe Issuing, Marqeta (enterprise). They handle PCI, BIN sponsorship, KYC/KYB. You sign a program agreement (4–8 weeks), build webhooks for auth.created / transaction.created, and implement just-in-time auth — when a swipe hits, Lithic calls your endpoint within 2s and you approve/decline based on policy. That JIT decision engine is your product. Without a partner, this rail is 18+ months and a banking license.
USDC / x402 rail — Buildable solo. Coinbase's x402 spec is ~200 lines of middleware; you hold a Base-chain hot wallet per card, sign payment intents, settle on-chain. Real work is key management (use Privy or Turnkey, ~$0–$2k/mo), gas abstraction, and reconciling on-chain settles back to your ledger. 2–3 weeks.
MPP / Solana, Natural ACH — MPP is pay.sh's spec; integration is similar to x402. ACH agentic is mostly vapor today — skip for MVP or fake it with Stripe ACH debits.
Policy engine — The interesting part. Lives in front of every rail's auth hook: vendor allowlist (merchant MCC + domain match), budget cadence buckets in Postgres or Redis, hard cap, approval threshold gate. Approval flow needs Slack app (block-kit interactive button → webhook → unblock the pending auth before Lithic times out at ~2s — this is a hard latency budget). 3–4 weeks.
Identity + audit — Agent credentials (API keys per agent_id), instance sessions (short-lived JWT or signed nonce), receipt ledger as append-only Postgres table with rail-agnostic schema. Child-card minting = scoped sub-credentials with TTL. The "lifetime audit trail" line in the UI demands this be immutable from day one.
Funding — Bank account at a sponsor bank (via your issuer), USDC treasury wallet, Stripe ACH for top-ups. Reconciliation between fiat float and on-chain balance is its own subsystem.
Compliance — KYB on every org (Persona or Middesk, ~$5–15/check), MTL exposure if you hold customer funds (avoid by routing direct), 1099-K reporting, dispute/chargeback workflows. This is the part nobody budgets for and it eats 20% of eng time forever.
Stack I'd actually build it on: Next.js (already there) + Postgres (Neon) + Inngest for the auth webhook fan-out + Lithic + Privy for wallets + Slack SDK. Skip GraphQL, skip microservices.
Fastest path to "real": pick one rail (Lithic alone), one policy primitive (budget + hard cap), one approval channel (Slack), one funding source (Stripe ACH). Ship to 5 design partners. Add USDC second once cards work. Everything else in the current UI is roadmap, not v1.
Want me to mock the JIT decision endpoint and the receipt schema so the dashboard reads from real data instead of lib/data.ts? That's the smallest real step toward functionality.
Compliance — KYB on every org (Persona or Middesk, ~$5–15/check), MTL exposure if you hold customer funds (avoid by routing direct), 1099-K reporting, dispute/chargeback workflows. This is the part nobody budgets
for and it eats 20% of eng time forever.
this is the hardest part i think. can we avoid this???
Yes, mostly. The trick is being the platform on top of a licensed entity, not the entity itself. That's how Ramp, Brex, and Mercury moved fast — they don't hold the license, their partners do.
What you can offload (~80%):
What you actually can't avoid:
The honest tradeoff: offloading costs you ~30–80bps of interchange (the partner's cut) and locks you to their roadmap. But you trade a $300k/yr compliance officer + 6-month MTL applications in 50 states for a $15 Middesk check and a SaaS subscription. Worth it forever — until you're at Stripe scale, at which point you have the cash to bring it in-house.
Net: if you stay USDC-first and use Lithic for the Mastercard rail, you can ship without ever talking to a regulator. The only compliance code you write is await middesk.kyb(org) in your signup flow.
this is not for orgs--this is for individuals with agents. should be dead easy to create a card, the less onboarding the better
Ah, that changes the answer dramatically. Individual consumer flow can genuinely be 60 seconds.
The 60-second flow:
That's it. No SSN, no address, no KYC, no forms. Because it's their wallet, their funds, you never custody anything. You're a policy layer over a smart-wallet signature.
Why this works compliance-wise: USDC-rail-only consumer cards aren't issuing anything. The "card" is just a signed authorization that pay.sh / x402 endpoints can verify. No Mastercard, no MTL, no consumer protection regime triggered. You inherit Privy/Coinbase's KYC for the funding step — they did the work.
When the user wants Mastercard (the real upgrade): progressive disclosure modal appears: "To use your card at non-crypto merchants, we need your name + DOB + last-4 SSN." Lithic's consumer-prepaid tier accepts this for cards capped under $2.5k/yr throughput. Takes 20 seconds, no document upload, no selfie. Above that limit you'd need full KYC, but 95%+ of agent users will never hit it — agent calls are sub-cent.
What you can't skip even here:
What disappears entirely vs B2B:
The pitch becomes: "Sign in with email. We'll mint a $5 USDC card in 30 seconds. Top up later if you want the Mastercard upgrade." That's competitive with how easy Stripe Link or Apple Pay feels — and most importantly, it's more onboarding than the agent itself usually requires, which is the right benchmark.
Want me to sketch the actual onboarding screens for this flow? Should be 3 screens max: email, fund, mint.
Ideally they'd be able to add money just like openrouter. is that possible?
Yes — and this is actually the unlock. OpenRouter's trick is the closed-loop prepaid / reseller model, and it eliminates basically all the compliance surface we just discussed.
How OpenRouter does it (and how you'd do it):
User adds $25 via Stripe Checkout → it lands as a credit balance in your Postgres (user_credits.balance += 2500). When the agent calls an API, you (the platform) pay the upstream provider out of your treasury, then debit the user's balance. Funds never leave your service as money — they're consumed as a service you resell. Legally this is "closed-loop prepaid access," same regime as Starbucks gift cards, Apple Account credit, or any SaaS prepayment. No MTL, no KYC, no money transmission. Stripe handles all the card compliance.
For acard specifically, this means:
The trade-off: you have to be a reseller of every endpoint the card spends at. That works trivially for paid API marketplaces (you proxy the call, charge the user, pay the provider with your account). It does NOT work for "swipe at Starbucks" — the moment funds can leave to any merchant, you're open-loop and back in MTL territory.
But that's actually fine for the agent use case. Agents don't need to buy coffee. They need to call Apify, OpenAI, Anthropic, scrapers, data APIs, MCP servers. All of those can be proxied. You become the universal billing layer for agent-consumed APIs — exactly OpenRouter's shape, but for all APIs not just LLMs.
The real architecture is:
What you give up: universal acceptance. You can only spend at endpoints you've integrated. But that's also OpenRouter's situation, and they're at $50M+ ARR. The MCP/agent-API market is finite and addressable — you don't need every merchant on earth, you need the 200 APIs agents actually call.
My read: this is the right v1. Drop the Lithic ambition entirely for now. Be "OpenRouter for all paid agent APIs." Compliance burden goes from $300k+/yr fintech operation to a Stripe account and a TOS page. You can ship in 6 weeks.
Want me to revise the dashboard UI to reflect this — drop "rails" and "funding sources," replace with a single credit balance + top-up like OpenRouter?
Looks like there's three tiers of compliance huh
Exactly — and the punchline is that each tier is a standalone shippable product. You don't have to commit to one; you stack them as upgrade paths.
| Tier | Model | Onboarding | Compliance burden | Where money can go |
|---|---|---|---|---|
| 1. Credits | Closed-loop prepaid (OpenRouter) | Email + Stripe, ~30s | TOS + Stripe. That's it. | Only APIs you've integrated as reseller |
| 2. Wallet | Self-custody USDC + x402 | Email magic link → embedded wallet, ~60s | OFAC screen (free, automated) | Any x402-compatible endpoint |
| 3. Card | Open-loop Mastercard via Lithic | Name + DOB + SSN-last-4, ~3 min | KYC, sanctions, dispute UI, 1099-K above threshold | Anywhere Mastercard is accepted |
The progressive disclosure is the product:
A new user signs up → lands in Tier 1 immediately, has a working credit balance in 30 seconds, agent works against your reseller-proxied API catalog. Hits a wall trying to hit an endpoint you don't proxy → "Upgrade to wallet mode" pops a Privy modal, embedded wallet appears, now they can spend at any x402 endpoint. Wants to buy a domain or pay a SaaS subscription → "Upgrade to card mode" prompts the SSN modal, Lithic issues a virtual card.
Each upgrade is opt-in, lazy, and only triggers compliance when needed. Most users never leave Tier 1 because most agent traffic is API calls you'll have proxied. Power users opt into Tier 2 themselves. Tier 3 is the long-tail "I want my agent to buy a flight" use case — rare, high-value, justifies the friction.
Build order is obvious: Tier 1 first (6 weeks, profitable, no fintech), Tier 2 second (4 weeks, no new compliance), Tier 3 last (3 months + Lithic onboarding, only when Tier 1+2 demand proves out).
This is also a much better story for fundraising. "We're an API billing platform that progressively becomes a fintech as users demand it" reads way better than "we're a fintech startup" — first one looks like Stripe in 2010, second one looks like 47 dead neobanks.
can we have them upload money and have crypto for x402? let's actually map out use case and user story and see what they need. also compare natural pay and all alternatives and whether they work for that story
Good — let me actually grind on the user story, because the funding question is downstream of who this is for.
The user story (concrete):
Sarah is a solo dev building a research agent on Claude Code. Today she scatters $5 minimums across 7 paid API accounts (Apify, Tavily, FireCrawl, Exa, OpenAI, Anthropic, Browserbase), each with its own dashboard, key, billing email. Her agent breaks when Apify's $5 runs out at 2am. She wants: one balance, one top-up, agent never blocks on funding, see what got spent on what.
That's it. The user does not care about chains, rails, or wallets. They care about one number going down and the agent not stopping.
What they need from the platform:
Yes, fiat-in / crypto-out is straightforward. Treasury-swap architecture:
User pays $25 via Stripe ─┐
▼
USD lands in your Stripe acct
│
(nightly / on-demand swap via Circle or Coinbase Prime)
▼
USDC lands in your treasury wallet
│
▼
Agent calls x402 endpoint → you sign payment from treasury,
debit user's balance in your Postgres
User sees $23.40 left. Never touches a wallet. Crypto is implementation detail. You hold the float for ~24h, eat ~5–10bps in swap spread, pass the cost through.
Funding rails (money IN — what user touches):
| Rail | Speed | Fee | KYC | UX | Verdict |
|---|---|---|---|---|---|
| Stripe Checkout | 30s | 2.9% + 30¢ | None for user | Card form or Apple/Google Pay | Default. Must-have. |
| Stripe Link | 5s | Same | None | One-click, saved card | Add as soon as you have repeat users |
| Apple/Google Pay (via Stripe) | 3s | Same | None | FaceID and done | Required for mobile |
| Coinbase Onramp | 60s | ~3.99% | Coinbase handles | Fund directly with USDC | Nice-to-have for crypto-native |
| Connect existing wallet | 10s | Gas only | None | WalletConnect / Privy | Power users; enable but hide |
| MoonPay / Transak | 90s | 4–5% | Their problem | Embedded widget | Skip — Stripe + Coinbase covers it |
| Bank ACH (Plaid) | 2–3 days | $0.80 flat | None for user | Plaid Link | Add later for $500+ top-ups |
| Crypto deposit address | Instant | Gas only | None | Copy/paste | Power-user fallback |
My pick: Stripe Checkout (with Apple Pay enabled) for v1. Add Coinbase Onramp once 5%+ of users ask. ACH/Plaid later for whales.
Spending rails (money OUT — what the agent uses):
| Rail | What it is | Coverage | Latency | Per-call cost | KYC needed | Fits the story? |
|---|---|---|---|---|---|---|
| Proxied APIs (closed-loop) | You're the reseller; agent hits your endpoint with a key, you forward + bill | The 200 APIs you've integrated | <50ms overhead | Free (you take a margin) | None | Yes — covers 90% of agent calls |
| x402 (Coinbase) | HTTP 402 challenge, USDC payment per request, signed by wallet | Any x402-native endpoint (growing fast — Coinbase, Replicate, some MCPs) | <200ms | ~0.0001 USDC gas + sub-cent fee | None (smart wallet) | Yes — long tail of new APIs |
| MPP / pay.sh (Solana) | Solana-native agentic payment protocol | Solana ecosystem mostly | <500ms | Sub-cent | None | Skip unless target audience is Solana-heavy |
| Natural Pay (if you mean Natural.com — agentic ACH rail) | ACH pull from connected bank, agent-initiated | US bank-accepting merchants | 1–3 days settle | ~$0.25/txn | Plaid bank link | No — wrong shape for sub-cent agent calls. Built for B2B invoices, not API micro-spend |
| Lithic Mastercard | Real virtual card, swipes anywhere | Universal | <2s auth | Interchange (1.5–3%) | Yes (KYC modal) | Tier 3 only — for "agent books a flight" cases |
| Crypto direct (any chain) | Wallet signs txn directly to merchant | Crypto-native services | Variable | Gas | None | Subset of x402, redundant |
Mapping back to Sarah's story:
Natural Pay specifically: wrong tool for this story. It's an ACH-rail product designed for businesses paying invoices/vendors with agent assistance — think "AP automation with agents in the loop." Settle time is days, per-txn cost is fixed at ACH levels. It doesn't fit sub-cent API micro-payments at all. It would only matter if Sarah's agent needed to pay a contractor or a SaaS subscription, which is not the core loop.
The killer flow ends up being:
acard_live_xxx API key, swaps for her API keys in her agent code (60s)Total onboarding: ~90 seconds to first useful call. That beats every paid API she's currently juggling.
The architecture you actually need to build:
Two engineers, eight weeks. No fintech license, no KYB, no Lithic, no Mastercard. Just Stripe + a treasury + a proxy. Ship.
Want me to write the proxy gateway spec and the database schema next?
so where would lithic help? explain lithic vs privy vs naturalpay
These three aren't alternatives — they live in different layers and unlock different types of spending. Easy to conflate because they all touch "money" in agentic flows.
Lithic — Card issuing infrastructure.
Privy — Embedded wallet infrastructure.
Natural Pay — Agentic ACH / B2B invoice rail.
How they stack:
┌─────────── User experience layer ───────────┐
│ │
│ "$23.40 left" "Top up" "Receipt log" │
│ │
└───────────────────┬──────────────────────────┘
│
┌───────────────────▼──────────────────────────┐
│ Your policy + ledger + proxy │
│ │
│ auth → check → forward → meter → debit │
└─────┬──────────┬───────────┬─────────┬───────┘
│ │ │ │
┌─────▼──┐ ┌────▼────┐ ┌────▼────┐ ┌──▼─────────┐
│Reseller│ │ PRIVY │ │ LITHIC │ │ NATURAL │
│APIs │ │ + x402 │ │ Master │ │ PAY (ACH) │
│ │ │ USDC │ │ card │ │ │
│closed │ │ │ │ │ │ │
│loop │ │ │ │ │ │ │
└────────┘ └─────────┘ └─────────┘ └────────────┘
covers covers covers covers
~80% of long-tail universal invoices
agent calls APIs merchants & vendors
Each box is a spending rail. Privy is the wallet layer that x402 needs to function. Lithic is the issuer layer that Mastercard needs. Natural Pay is its own ACH rail.
For Sarah's story you need exactly one of these (Privy), and only optionally:
Concrete answer: Lithic helps when you need universal merchant acceptance, Privy helps when you need per-user crypto wallets, Natural Pay helps when you need ACH invoice payments. None of them help for the v1 Sarah-story — that's just Stripe and a proxy. The other three are roadmap unlocks, each justifiable when a real user demand surfaces.
so lithic is like marqeta
Exactly the same category — both are card issuer-processors. Differences are mostly about who they're built for:
Lithic
Marqeta
Stripe Issuing is the third in this category — same shape, tighter integration with Stripe's other products, slightly less flexible than Lithic on policy webhooks but easier if you're already on Stripe.
For acard: Lithic, no question. Sign up tomorrow, test cards Friday. Move to Marqeta only if you ever need international issuing or hit a custom interchange negotiation that justifies the sales cycle. That decision is years away.
Mental model: Lithic is to Marqeta what Stripe is to Adyen. Same product category, different stage of customer.
Lithic
if i do this for myself right now, i can spin up a card with api whenever? for every single vendor that i use for myself? this feels great!
Almost — but the product you actually want for personal use is Privacy.com, not Lithic itself. Same company (Lithic owns Privacy.com), but Lithic the platform is B2B-only — they want a registered entity and a program agreement. Privacy.com is the consumer arm built on the same rails.
What Privacy.com gives you right now, today:
The pricing tiers (the API is what you want):
| Tier | Price | Cards/mo | API |
|---|---|---|---|
| Personal | Free | 12 | No |
| Plus | $10/mo | Unlimited | No |
| Pro | $25/mo | Unlimited | Yes |
| Premium | $25/mo + 1% cashback | Unlimited | Yes |
For your use case (developer, many vendors, programmatic): Pro tier, $25/mo. The API lets you POST /cards and get a fresh card in <500ms, lock it to a merchant domain, set a $50 cap, and pass the PAN/CVV/expiry into your subscription form. Vendor leak? Burn the card with one API call. Renewal you forgot about? Already capped.
The actual workflow this enables:
Cancel a service later? privacy.cards.delete(card.token). The merchant can never re-bill you. No "call to cancel" loop, no "we charged your card on file forever," no support ticket.
The catches (be honest):
Why this is genuinely great for your situation:
You're literally describing the use case Privacy.com was designed for. Burner card per vendor + API + caps = no surprise charges, no shared PAN exposure, no "they auto-renewed and I forgot." You can also write a tiny script that creates a card on the fly when your agent encounters a paid signup form, hands the agent the card details, and destroys it after the trial.
This is also the exact dogfood you should be running while building acard. You'll learn what hurts, what's missing, and what you'd want different — which becomes your product roadmap.
My recommendation: sign up for Privacy.com Pro tonight. Spend a weekend wrapping their API into a CLI for yourself. The pain points you find — "I wish it had per-task cards", "I wish the agent could approve over $X via Slack", "I wish I could see all my SaaS in one spend log" — those are literally what acard becomes.
so what does privacy.com for agents look like?
This is the actual product thesis, sharpened. Let me lay out what changes when you go from "humans manage cards for vendors" to "agents manage cards for tasks."
Privacy.com's mental model (today):
You ──owns──> Card ──locked-to──> Vendor
│
└── manually created, manually destroyed,
monthly cap, you remember to check
Acard's mental model:
You ──owns──> Org
│
├── Agent (identity + lifetime audit trail)
│ │
│ ├── Instance (one running session)
│ │ │
│ │ ├── Task card (auto-expires when task done)
│ │ ├── Sub-agent card (inherited, tighter policy)
│ │ └── x402 micro-payments (sub-cent, no card)
│ │
│ └── Persistent card (long-lived, the agent's "wallet")
│
└── Funding (Stripe credit + USDC treasury)
Same primitive (a virtual card), but with hierarchy, scope, automation, and rail-routing that Privacy.com doesn't address because humans don't need them.
What Privacy.com gives you vs. what agents need:
| Capability | Privacy.com | Acard for agents |
|---|---|---|
| Create card on demand | ✅ via API | ✅ but 100× the rate — per task, per instance |
| Spending cap | ✅ monthly fixed | Hierarchical: org → agent → instance → task, each tighter |
| Merchant locking | ✅ one merchant | Category + quality + price ("only data APIs > 4★ < $0.05/call") |
| Destroy card | ✅ manual API call | Auto-expires when the task completes |
| Receipt log | ✅ merchant + amount | Normalized: agent, instance, task, prompt, model, tokens, latency, rail used |
| Approval gate | ❌ | "Charges over $0.50 → Slack → human approves before proceeding" with <2s latency budget |
| Multi-rail | ❌ Mastercard only | Same "card" abstraction routes USDC for x402 endpoints, Mastercard for the rest |
| Kill switch | ✅ pause card | Pause card AND every running instance using it AND every child card derived from it |
| Anomaly detection | ❌ | Agent suddenly hammering an unusual merchant → auto-pause + page you |
| Cost optimization | ❌ | Same API at 5 marketplaces → route to cheapest acceptable |
| Sub-agent delegation | ❌ | Agent spawns child agent → child gets its own scoped card with auto-tighter limits |
| Identity model | User → cards | Org → user → agent → instance → card, with delegated auth at each level |
The first 4 rows are Privacy.com. Rows 5–12 are the product. That's where acard exists.
What "Privacy.com for agents" actually looks like as software:
Card primitive is Privacy.com under the hood (you wrap their API for v1, become a Lithic direct customer when scale justifies). Plus a USDC wallet via Privy for x402 calls.
Identity layer — every API key the agent uses is bound to (org, user, agent, instance). Receipts auto-attribute. Kill switch at any level cascades down.
Policy as code — JSON policy attached to the card: budget, cadence, vendor allowlist, quality threshold, max per call, child cards allowed?, approval gate threshold, expires-on-task-done. Inherited and tightenable down the tree.
The proxy gateway — agent calls go through your endpoint (api.acard.dev/v1/passthrough/apify). You auth, check policy, forward, meter, debit, log. Agent code stays the same — they just swap their API base URL. Critical: this works today without Privacy.com or Lithic at all — pure closed-loop credit. The card primitive is for when an endpoint isn't on your reseller list.
The receipt log — normalized schema across rails. Mastercard swipe shows the same shape as a USDC x402 sub-cent charge as a proxied OpenAI call. Each receipt: (ts, agent_id, instance_id, task, merchant, amount, rail, latency, prompt_hash, model, response_summary, status).
The approval gate — Slack app, push notification, or webhook. Charge above threshold → block the auth → notify human → proceed/deny within 2s (Mastercard's auth window) or block-then-retry (slower rails). Default-allow below threshold.
Instance lifecycle — agent SDK opens an instance at start of run, closes at end. Cards minted inside an instance auto-expire when it closes. Receipts cluster by instance. Cost-per-task becomes a first-class metric.
The dashboard (which you've already designed) — what you're looking at right now is exactly this. The mint form is "agent-grade Privacy.com card creation." Receipts page is "Privacy.com transactions but with agent lineage." Agents page is identity Privacy.com doesn't have.
The pitch in one line:
"Privacy.com gives every vendor a different card. Acard gives every agent — and every task they run — a different card, with policy that follows the work and a receipt log that ties every charge back to the prompt that caused it."
The v1 build (8 weeks):
orgs / users / agents / instances / cards / policies / receipts / approval_requestsimport { acard } from "@acard/sdk"; acard.openInstance({ task: "research-q2" })That's it. No Lithic, no MTL, no SOC 2. You're a software company sitting on top of Privacy.com and Stripe, with a much better policy engine and an agent-aware identity model. When users outgrow Privacy.com (scale, custom rails, international) you swap in Lithic underneath — your product surface doesn't change.
What you sell: $20–$200/mo SaaS based on instance-hours or receipt count. Plus float on the credit balance. Plus per-call markup on proxied APIs (1–5%, OpenRouter-style). Three revenue streams stacked on a clean compliance story.
You should buy acard.dev if it's free and ship the credit-balance MVP this month.
right now we have discussed many products and services. what are they?
Here's the full landscape we've touched, organized by what each does:
Card issuing infrastructure (gives you a Mastercard rail)
Embedded wallet infrastructure (gives users a crypto wallet without them knowing)
Spending rails (what the agent's "card" actually routes across)
Funding rails (how users put money in)
Treasury / USDC ops (silent fiat→crypto plumbing)
Banking as a service (if you ever need to hold fiat)
Compliance / verification
Reference companies (the playbook to copy)
Agent-side products (your customers' world)
Stack you'd actually build acard on
The convergent picks:
Each tier reuses the stack underneath; only the spending rail layer grows.
do we need a privy? where would it help? can we do mpp/x402 payments for users? where do zero.xyz and monid come into play (look at http://localhost:3000/)
OK, looking at the landing page sharpens the picture massively. Zero and Monid aren't competitors — they're upstream suppliers. Acard sits on top of them the way OpenRouter sits on top of OpenAI/Anthropic. That changes the architecture answer.
1. Do you need Privy?
For v1: no. You only need one treasury wallet that you control. A single hot wallet via Turnkey or even a properly-secured private key in a vault (Doppler / 1Password / AWS KMS) is enough. That wallet signs every x402 payment on behalf of every user.
Privy becomes useful only if:
For Sarah's story (one balance, top up with Stripe, agent spends), none of these matter. Skip Privy. You're a custodial credit aggregator, not a wallet provider. Saves you a vendor and a billing line.
You'd revisit Privy if/when (a) a regulator asks pointed questions about float, or (b) a power-user segment demands self-custody. Both are months-12+ problems, not v1.
2. Can you do x402 / MPP / pay.sh payments on the user's behalf?
Yes — and this is exactly what Monid already does. Your own field test caught it:
"Workspace eats the upstream x402 spread (tested call: quoted $0.011, charged $0.01, settled $0.0216 upstream)."
Monid is custodial. The user sees a USD balance. Behind the scenes Monid holds a Base USDC treasury, signs x402 payments to the upstream provider, eats the spread, debits the user's USD balance. You'd do the same.
The pattern:
User credit balance ($23.40)
│
▼
[Acard policy + receipt layer]
│
┌────┴────┬─────────┬──────────┐
▼ ▼ ▼ ▼
[Zero] [Monid] [Pay.sh] [Direct API]
USDC USD USDC reseller
│ │ │ │
└─────────┼─────────┘ │
│ │
Your USDC ──────── Your Stripe
treasury balance
(signed by (charged at
your wallet, month-end by
per call) Circle swap)
User never sees a wallet. The only "crypto" they touch is whatever ends up on their receipt as a rail label, like Monid surfaces today.
3. Where do Zero and Monid fit?
They're the catalog. Acard's wedge from the page is "multi-rail + persistent + international + policy" — none of which is catalog. Building your own catalog of every paid API from scratch is the slow, dumb path. Riding on top of Zero + Monid + Pay.sh is the fast path.
Architectural read:
| Layer | Who owns it | Acard's role |
|---|---|---|
| Discovery (find the API) | Zero, Monid, Pay.sh | Aggregate their catalogs into one search |
| Capability registry | Zero, Monid, Pay.sh | Normalize their schemas into a single shape |
| Pricing / quoting | Zero, Monid, Pay.sh | Compare quotes, pick cheapest acceptable per user policy |
| Settlement rail | x402 (Zero), USD (Monid), MPP (Pay.sh) | Route to the right rail, sign from your treasury |
| Quality signal | Zero (built-in stars + reviews) | Inherit it; surface it in the policy ("min 4★") |
| Identity / policy / kill switch | Acard | This is your moat |
| Credit balance / billing | Acard | This is your revenue |
| Normalized receipt log | Acard | This is your audit story |
| Approval gates / Slack | Acard | This is your trust story |
| Multi-rail card abstraction | Acard | This is your card metaphor |
| International / cross-border | Acard + Zero (already intl) | Inherit Zero's intl reach for v1 |
Concretely, when Sarah's agent says "geolocate 8.8.8.8":
(ts, sarah_id, agent_id, instance_id, "geolocate-8.8.8.8", IPinfo, $0.001, x402, 47ms, success, source=Zero)She never knew x402 existed. She never made a wallet. She paid $0.0012 from her Stripe-funded credit. You ate $0.0002 of Stripe fee + a fraction of float spread.
Why this is the actual moat:
The catalogs (Zero, Monid, Pay.sh) commoditize the API marketplace. Their differentiation, per your own analysis, "fits in one sentence per tool." If they're commodity, the layer that aggregates and routes across them with policy + identity + credit + receipts is the value-capture layer. Same shape as how OpenRouter captured value above OpenAI/Anthropic/Mistral once those LLMs commoditized.
Updated build (lighter than before):
Two engineers, six weeks, not eight. And the catalogs do the long-tail work for you.
The pitch becomes even tighter:
"Bring your own agents. We give them one balance, one policy, one receipt log — across every paid-API marketplace. Stripe in, anything-out."
ok so what do we need?
The shopping list. Concrete, in build order.
Accounts to open this week (1 day of admin work)
Total fixed cost: ~$100/mo + variable Stripe + Circle swap spread. Until you have real volume there's no fixed bill that matters.
Code to write (in build order, ~6 weeks for two engineers)
Week 1 — foundations
orgs / users / agents / instances / cards / policies / receipts / approvals / topupslib/data.ts with DB queries)Week 2 — proxy gateway
api.acard.sh/v1/proxy/{provider}/{path}Week 3 — multi-rail routing
Week 4 — policy + identity
Week 5 — approval + SDK
acard.openInstance(), acard.proxy.fetch(), acard.balance(), acard.receipts()Week 6 — polish + beta
Decisions to lock in now (none should take more than an hour to settle)
| Decision | Recommendation |
|---|---|
| Custodial or self-custody? | Custodial. One treasury wallet. Skip Privy. |
| Currency shown to users | USD only. Hide USDC entirely. Surface rail on receipt only. |
| Markup model | Both: 5–10% per-call markup + optional $20/mo Pro tier (higher rate limits, child cards, Slack gates) |
| Free tier | $1 free credit on signup to remove top-up friction for the first call |
| Minimum top-up | $5 (Stripe fee math) |
| Auto-refill default | Off, user opts in during onboarding |
| Default approval threshold | $0.50 per call (sane default; user can change) |
| US-only or global? | US-first for Stripe + Zero gives you global API access automatically; international top-up support comes later |
| Free tier API rate limit | 10 req/sec per user, raise on Pro |
What you DON'T need (don't get distracted)
Legal (one $3–5k bill)
The actual first concrete next action
Pick one of these to do today:
Lock the SDK surface. Write a .d.ts for @acard/sdk — 5 functions max. Once that's nailed, every internal decision falls out of "does it support this SDK?"
Build the receipt schema. One JSONSchema. If it can represent (a) an OpenAI call, (b) an x402 USDC sub-cent charge via Zero, (c) a Monid USD call, (d) hypothetically a Lithic Mastercard swipe — all in the same shape — your data model is right.
Make the Stripe top-up flow work in isolation. Empty Next.js page → Stripe Checkout → webhook → row in topups table. 4 hours, end-to-end. Once that works the rest is just stacking.
I'd do #1 first — the SDK shape constrains everything else. Want me to write the SDK interface and the receipt JSONSchema now?
where does this come into play?
https://link.com/agents
Let me check what Link's agent product actually is before placing it.
This is huge. Stripe just shipped — at Sessions 2026 — the entire fintech infrastructure layer underneath what we were planning to build. Let me re-map the whole picture.
What Link/Stripe just put on the table:
| Product | What it does | Replaces in our plan |
|---|---|---|
| Link for Agents | Consumer wallet with iOS/Android app; agent requests a purchase, user approves on phone, agent gets a one-time card or Shared Payment Token | Your own user-facing approval flow; the "user has a wallet they trust" problem |
| Issuing for Agents | Programmatic single-use virtual cards via Stripe API (stripe.issuing.cards.create) with card-level permissions and per-transaction approval | Privacy.com, Lithic — entire Tier 3 |
| Shared Payment Tokens (SPTs) | Scoped credentials backed by user's existing payment methods; agent can spend without ever touching the PAN | Your custom credential-vending logic |
| Machine Payments Protocol (MPP) | Stripe's protocol for agent micropayments — stablecoins, cards, Klarna, Affirm | Either competes with or absorbs pay.sh's MPP. Probably absorbs given Stripe's distribution |
| Stablecoin-backed cards in 30 countries | USDC settlement, Mastercard acceptance, international from day one | Your "international story is hard" problem — gone |
| Treasury for Agents | Financial accounts agents can read balance, pay invoices, create cards, send money on, with human approval | Postgres credits table + treasury wallet glue |
| Privy (now Stripe-owned) | Embedded wallets with agent provisioning and DeFi yield | The whole "Privy or Turnkey?" debate is over — it's Stripe |
| Bridge (Stripe) | Stablecoin orchestration across Tempo, Plasma, Celo, Sui, Base | Your Circle/Coinbase Prime swap pipeline |
| Agent Guardrails | Agent identity + scope rules + approval flows as Stripe primitives | Half your policy engine |
| Card Program Templates | Self-serve issuing onboarding, supports humans AND agents | The Lithic onboarding cycle |
The honest read:
Stripe just commoditized the infrastructure layer of agent payments — cards, wallets, treasury, micropayments, international. Three of our four planned tiers are now Stripe API calls.
This is good news for acard, not bad. Here's why:
The infrastructure was never going to be the moat — Lithic/Marqeta already existed. The bet was always that the policy + identity + routing + receipt-normalization layer above the rails would be where value accrues. Stripe shipping the rails just deletes 60% of our build and lets us focus 100% on the layer that actually matters.
Same shape as: when AWS shipped Lambda, every "deploy your code easily" startup died, but Vercel built a product layer on top of Lambda and won.
Where each Stripe primitive fits in the acard stack:
┌────────────────────────────────────────┐
│ USER (Sarah, building research agent)│
└──────────────────┬─────────────────────┘
│
┌────────────────────────▼─────────────────────────┐
│ ACARD │
│ Catalog aggregation + cross-rail routing │
│ + policy + identity hierarchy + normalized │
│ receipts + cost optimization + kill switch │
│ + agent SDK │
└─────┬───────────┬───────────┬───────────┬────────┘
│ │ │ │
┌───────▼──┐ ┌─────▼────┐ ┌────▼─────┐ ┌───▼────────┐
│ STRIPE │ │ ZERO │ │ MONID │ │ PAY.SH / │
│ RAILS │ │ catalog │ │ catalog │ │ MPP catalog│
│ │ │ (USDC) │ │ (USD) │ │ (Solana) │
├──────────┤ └──────────┘ └──────────┘ └────────────┘
│ Checkout │
│ Issuing │ ← Mastercard rail
│ Treasury │ ← credit balance + financial account
│ Bridge │ ← USDC settlement
│ Privy │ ← treasury wallet
│ Link │ ← funding source + approval UI
│ MPP │ ← machine micropayments
│ Guardrails│← scope + approval primitives
└──────────┘
Stripe is now one of acard's rails. A really powerful one. But still a rail.
What changes in our build plan:
Drop entirely:
credits ledger → maybe replace with Stripe Treasury account per user (TBD; Postgres still simpler for v1, Treasury when scale demands)Keep, sharpened:
Add:
The updated v1 (now ~4 weeks instead of 6–8):
Two engineers, four weeks, beta-ready.
The repositioning that matters for the pitch:
Before Sessions 2026: "Acard is a multi-rail card primitive for AI agents."
After Sessions 2026: "Stripe gives you the rails. Acard gives your agent one balance, one policy, one receipt log, across every paid-API marketplace AND every Stripe primitive."
Or even sharper:
"We're the OpenRouter of the paid agent web — Stripe rails + Zero + Monid + Pay.sh + direct APIs, behind one balance and one kill switch. Bring your agent. We bring everything else."
The risk to monitor:
Stripe could keep climbing. If they ship a "Stripe Agent Marketplace Router" in 2027 that aggregates the catalogs themselves, acard's moat shrinks. Three reasons that's unlikely soon:
Your one-year window: become the de facto routing/policy layer above all of these (Stripe rails included) before Stripe or Zero realizes they could go up the stack. If you have 1k paying users in 12 months, you're entrenched. If you have 50, you're acquired or absorbed.
Net: Sessions 2026 made acard easier to build and sharpened what acard actually is. Most of what we were going to build, Stripe will rent you. Spend the saved time on the catalog router and the agent SDK — that's the product.
Want me to redraft the dashboard's funding section to show "Top up via Link" alongside "Top up via Stripe Checkout"?
upload to traces.com our trace
Let me figure out how traces.com publishing actually works before trying to upload anything.