Skip to content

Capability Map ​

Feature-by-feature status, assessed against the code as it stands on master. Each row links to the technical detail.

Shipped implemented and working · Partial incomplete or unverified · Planned not built

Accounts and identity ​

CapabilityStatusNotes
Register and log inShippedJWT, 7-day expiry, bcrypt
Onboarding flowShipped12 screens, fan and creator branches
ProfilesShippedAvatar, banner, bio, links
FollowingShipped
BlockingShipped
Session managementShippedActive sessions, login history, logout-everywhere
Creator verificationShippedEncrypted ID capture, Stripe payout and bank setup, admin review API. Background check hidden; no admin UI yet
Face verificationPartialConsent-gated selfie enrollment and in-app consent withdrawal shipped (encrypted); Rekognition 2FA check and re-enroll from settings planned
BadgesShippedPlayPal automatic, others manual
Password resetShippedEmailed 6-digit code via Resend; see Auth → Password reset
Account deletionPartialEndpoint exists; verify what it actually removes

Content ​

CapabilityStatusNotes
Text, photo, and clip postsShipped
Home feedShippedCursor pagination, 60 s cache, refresh-without-losing-position
CommentsShipped
ReactionsShippedSix kinds, deduplicated
MentionsShipped
Impression trackingShippedView and video-watch duration
Image processingShipped3–5 variants, smart cropping, CDN
Video processingShippedMux transcoding and HLS
Share to DMShipped
Content moderationPartialReports captured, moderationStatus columns exist, no review surface

Messaging ​

CapabilityStatusNotes
Direct messagesShipped
Realtime deliveryShippedSocket.IO
Typing indicatorsShipped
Read receiptsShipped
Edit and deleteShippedSoft delete
Channels and roomsShippedFour visibility levels
Subscriber-gated roomsShippedVerified against an active subscription
Presence (online status)PartialIn-memory per pod — inconsistent across the two replicas

Live ​

CapabilityStatusNotes
LivestreamingShippedRTMP in, HLS out, via Mux
Livestream chatShippedPersisted
Voice roomsShippedLiveKit, self-hosted
Video roomsShipped
Coin giftingShippedFeeds creator earnings
Mux webhook verificationMissingEndpoint is unauthenticated — a security gap

Sessions ​

CapabilityStatusNotes
Availability scheduleShippedRecurring hours and blocked dates
BookingShipped
Private session roomsShippedOnly the two parties
CancellationPartialStatus changes; no refund flow
Timezone handlingMissingTimes stored without a timezone — will break across regions

Monetisation ​

CapabilityStatusNotes
Play Coin purchaseShippedRevenueCat, verified server-side, credited once per store transaction
Coin gifting and spendingShippedLedger-backed
Platform subscriptionsShipped
Double-entry ledgerShippedIdempotency-protected
Monthly payoutsShippedTwo-phase, distributed lock, admin API
StorePartialWorks; catalog is thin
Creator subscriptionsPartialWebhook cannot identify the target creator; depends on a client follow-up call
Stripe webhooksPartialAccount events handled (sets payoutsEnabled); transfer and payout outcomes still ignored
Earnings accuracyPartialSubscription revenue estimated from current subscriber count, not settled transactions

Discovery ​

CapabilityStatusNotes
Trending clips, creators, coaches, games, searchesShippedRedis-cached, 5 min
SearchShippedUsers, clips, games
Game catalogShippedIGDB, synced daily
SponsorsShipped
Discover feedPartialReturns every user — no ranking, filtering, or pagination

Notifications ​

CapabilityStatusNotes
In-app inboxShippedCursor-paginated
Push notificationsShippedExpo, self-healing token cleanup
Realtime badgeShipped
Per-category preferencesShippedNine push categories
Deep linksShippedTyped targets
EmailPlannedPreferences exist, no delivery mechanism
Push receiptsPartialTickets checked, receipts not — some failures invisible

Platform and operations ​

CapabilityStatusNotes
Kubernetes deploymentShippedProbes, anti-affinity, non-root
Infrastructure as codeShippedTerraform
Secrets managementShippedSealed Secrets
TLSShippedLet's Encrypt, auto-renewing
Centralised loggingShippedLoki + Grafana
Mobile crash reportingPartialPostHog for JS errors; native crashes and source maps still to add
AutoscalingPartialMedia worker and nodes only
Staging environmentPlannedChart plan written, not deployed
CI/CDMissingDeploys run from a laptop
AlertingMissing
MetricsMissing
API test coveragePartialConfigured, no tests written

Security first — small, contained, and each closes a real hole:

  1. Verify the Mux webhook signature (detail)
  2. Fail closed when REVENUECAT_WEBHOOK_SECRET is unset — done: production answers 503 (detail)
  3. Confirm JWT_SECRET and ADMIN_SECRET are set everywhere — the defaults are insecure

Correctness — each is a bug users or creators can feel:

  1. Fix the ogun /admin prefix so media-ready events fire (detail)
  2. Fix the error middleware so HttpError returns its intended status (detail)
  3. Resolve the VIP subscription target in the webhook, removing the client dependency Done: VIP passes are matched to a server-side checkout
  4. Derive subscription earnings from ledger entries rather than a live count

Operational resilience — the compounding investments:

  1. Staging environment
  2. CI on pull requests
  3. Alerting on existing logs
  4. Versioned image tags and automated deploys

Internal documentation — PlayPalz platform