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 flowShipped11 screens, fan and creator branches
ProfilesShippedAvatar, banner, bio, links
FollowingShipped
BlockingShipped
Session managementShippedActive sessions, login history, logout-everywhere
Identity verificationPartialDocuments captured; no review workflow
BadgesShippedPlayPal automatic, others manual
Password resetPlannedRoutes exist, service functions are empty — needs an email provider
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, idempotent
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 webhooksMissingEmpty handler — Connect onboarding completion and transfer failures are invisible
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 reportingShippedBugsnag
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 (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
  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