P
Playdraft Financial Stack
Founder operating brief for payments, KYC, and tax control.
Direct web checkout live
NanoCorp webhook ready
Platform billing stays separate

Fintech Architecture

Sell globally without mixing your payment rails.

Playdraft now has a practical finance operating model: one hosted Stripe checkout for direct web sales, explicit separation for Apple and Roblox billing, a webhook ledger in Postgres, and a launch-ready checklist for KYC and tax compliance.

Primary launch railDirect browser sales through hosted Stripe checkout
Compliance controlSeparate web finance from Apple and Roblox platform billing
Data retentionWebhook events written to Postgres for monthly reconciliation

Payment Flow

Five-step revenue flow

This is the operating sequence Playdraft should use until direct web sales, reporting, and support are stable enough to justify more product complexity.

Step 1One checkout rail

Start with a single Stripe-hosted web SKU so finance, support, and tax reporting stay simple.

Step 2Platform-specific billing

Treat Apple App Store, Apple Arcade, and Roblox as separate channel rails with their own payment rules.

Step 3Webhook ledger

Capture every completed NanoCorp checkout server-side and store it in Postgres for reconciliation.

Step 4Tax evidence

Save customer country signals and map them to tax registrations as direct web sales expand.

Step 5Monthly close

Reconcile Stripe/NanoCorp, platform payouts, and tax liabilities as three separate closing streams.

Channel Map

Which billing rail belongs to which channel

The key control is not technical, it is architectural discipline: do not mix platform-native billing channels with your web merchant-of-record flow.

Recommended first rail

Direct Web Sales

Use NanoCorp's Stripe-hosted checkout for Playdraft's own website. This is the cleanest path for selling browser access, bundles, founder packs, or desktop-download licenses globally.

Apple billing rail

Apple App / App Store

If the customer unlocks digital content inside the iOS app, ship that purchase through Apple's in-app billing stack. Keep Stripe for web checkout, enterprise sales, and any permitted out-of-app purchase journey.

Subscription deal rail

Apple Arcade

Do not model Apple Arcade as a Stripe checkout flow. Arcade distribution is a platform deal with Apple, not a direct-consumer payment flow, so product finance should track Apple receivables separately.

In-experience rail

Roblox

Monetize inside Roblox with Roblox-native products, passes, or subscriptions. Use Stripe only for off-platform web products that do not try to bypass Roblox's in-experience purchase path.

KYC Readiness

Step-by-step onboarding checklist

Treat KYC like a release process. If the evidence packet, website, and payout rails are not aligned, reviews stall and re-verification cycles multiply.

1

Lock entity details

Keep one canonical legal name, registration number, tax ID, formation date, business address, and support contact across Stripe, Apple, Roblox, and the bank.

2

Assemble ownership packet

Prepare founder and ultimate-beneficial-owner names, dates of birth, home addresses, ownership percentages, government IDs, and proof of address.

3

Prepare the operating story

Write a plain-English description of what Playdraft sells, who pays, how customers access the software, refund rules, and which countries you plan to sell into first.

4

Match the public footprint

Make sure the website shows product description, pricing, terms, privacy policy, contact email, and a refund/support path before onboarding reviews begin.

5

Open payout rails

Use a dedicated business bank account, collect a recent bank statement or voided check, and confirm settlement currency and payout ownership.

6

Segment sales channels

Document which SKUs sell on web via Stripe versus Apple or Roblox so reviewers can see you are not routing prohibited in-app purchases through web checkout.

7

Create the evidence room

Store articles, EIN/tax letters, IDs, proof of address, bank proof, contracts, and brand assets in one shared folder so KYC refreshes do not stall launches.

8

Run a dry-close

Before launch, test a full cycle: checkout, webhook capture, success page, refund path, and the accounting entry that follows the payout.

Tax Strategy

Global software tax plan

The safest launch strategy is to minimize channels first, preserve location evidence, and expand registrations in waves as direct consumer revenue justifies it.

Phase 1: Web first, one merchant record

Launch direct browser sales through the hosted Stripe checkout first. Keep one web SKU live until reports, refunds, and support motions are stable.

Phase 2: Separate direct and platform revenue

Record Stripe web sales, Apple proceeds, Apple Arcade receivables, and Roblox payouts in different revenue buckets so tax and margin analysis stay accurate.

Phase 3: Capture customer location evidence

For direct B2C digital sales, retain country evidence from billing details and network signals, then archive it with the order record for VAT/GST support.

Phase 4: Register in waves

Open non-US VAT/GST registrations in the first countries or blocs where direct web sales create obligations, instead of filing everywhere on day one.

Phase 5: Treat B2B separately

For enterprise or school deals, capture billing entity name, tax ID, invoice address, and exemption/reverse-charge data independently from the consumer flow.

Phase 6: Close monthly

Reconcile payouts, taxes collected, chargebacks, refunds, and deferred revenue each month. Finance operations break down fast when these are left until year-end.

What Was Set Up

Operational controls now in place

The repo now ships the commercial surface area needed to test the first direct web checkout flow without custom Stripe frontend code.

Pilot SKU

Web Pilot SKU (Replace Before Launch)

A single hosted Stripe product is live so Playdraft can test checkout, redirects, and webhook capture without a custom card form.

Price: $4.99 Channel: Direct web only Action: replace with the final SKU before launch
Success route

Checkout confirmation

Customers land on a dedicated success screen after payment instead of dropping back to the homepage without confirmation.

Route: /checkout/success Purpose: receipt handoff + support instructions
Webhook route

Payment event capture

NanoCorp checkout events post into a server route that validates the payload shape and writes completed sessions into Postgres.

Route: /api/webhooks/nanocorp Table: payment_events Write mode: idempotent by stripe_session_id
Operating memo

Finance blueprint in repo

The detailed KYC checklist and tax strategy now live in a dedicated markdown document so the next agent does not have to reconstruct the architecture.

Doc: docs/playdraft-financials-blueprint.md Scope: payments, KYC, tax, channel rules