Sequenced paths, not a pile of clips.
Each course is an ordered path to an outcome — install, identity, revenue, analytics, errors, tooling, migration. Watch a lesson, mark it complete, and the next one is queued. Your progress is kept on this device.
Get started
Zero to a gated feature: install the SDK, identify your users, define an entitlement, map it to a product, and gate your features.
Onboard a web app
Walk the real onboarding — project, platform, register, install — to a live heartbeat.
Get set up
Install the SDK and send your first signal — two lines to a live dashboard.
Identify your users
Tie every device and purchase to your own user ID.
Create an entitlement
Define what "Pro" means — the access a purchase grants.
Map products to entitlements
Wire each rail product to the access it unlocks.
Gate your features
Check entitlements and unlock exactly the right features.
Verify your setup
Prove paid unlocks and free stays locked — the Heartbeat surface.
Connect your revenue
Each payment rail is code and dashboard work — Stripe, Apple, Google — then read the money.
Connect Stripe
One-click OAuth, then attribute checkouts to the right user.
Connect Apple App Store
The keys, server notifications, and matching purchases to the right user.
Connect Google Play
Service-account access and the Pub/Sub RTDN topic.
Read your revenue
What MRR counts, how intervals normalize, and what at-risk means.
Cross-platform identity
FlagshipEntitlements that follow a person, not a device. Understand the model and wire your auth provider.
Make subscriptions follow your users across platforms
Pro on the web is Pro in the app — automatically, with one rule.
How identity works
The anchor model and the three tiers — anon, Stripe, app UID.
Wire your auth provider
Firebase, Supabase, Auth0, Clerk, NextAuth → one identify call.
Analytics
Events in, journeys out. Track what users do, then read it through People, Pages, funnels and cohorts.
Track events
The dozen domain events that make the dashboard come alive.
Super properties & groups
Attach context once; pivot every event by plan or account.
Read the journey
The People roster, and one person's whole story on a timeline.
Funnels & cohorts
Where users drop off, and which cohorts come back.
Filter internal traffic
Keep your own team's traffic out of the numbers — reversibly.
Errors
Every error on the same timeline as the customer it hit — capture it, enrich it, make it readable, triage it, route it.
Capture errors
What's automatic, and the one call for what you catch yourself.
Breadcrumbs, tags & context
Make every error reproducible — the state and trail that led there.
Source maps
Readable stack traces from minified code — upload via the CLI.
Triage in Issues
Fingerprint grouping, statuses, and priority — what to fix first.
Error alerts
One email per new issue — capped, signal-only, never a wall of noise.
Prove it
MoatDon't just trust us — verify. Run our contracts against your own integration, read the raw rail ledger straight from Apple, Stripe and Google, and stay in control of every customer merge.
Run the contracts against your integration
Every guarantee is a claim, code, and a test — don't take our word, verify it.
Read the raw rail ledger
The Workbench queries Apple and Stripe live — their answer, beside what we stored.
Trace any identity
Round-trip an email, user ID or rail ID through the exact resolver every event uses.
Resolve a conflict — your call, not ours
Safe merges happen automatically; when signals could be two people, we refuse and ask you.
Server & frameworks
Run Crossdeck server-side, and wire it cleanly into whatever you build with.
Migrate an existing product
Move a live user base in without downtime — the handover model, seeding subscribers, and verifying before you cut over.
Migrate to Crossdeck
The handover model and the four moves — staged, reversible, no big-bang.
Seed existing subscribers
One batched import that links your users — and the rail-owned gate that prevents double-grants.
Verify the migration
Spot-check, clear conflicts, understand unlinked — then cut over for real.