Assign Family — Launch Readiness

2026-07-08 · 4 apps assessed end-to-end + AssignX Console status · gap analysis · launch blockers identified
Readiness ranking
Gift Cards
Near-launch · sell/reload/check-balance work; tier gating stubbed
88%
Waivers
Building · native signing production-ready; web console + public endpoints absent
60%
Employees
Launch-blocking · strong backend; Bugsnag + secrets + Clover IDs missing
75%
Customers
Building · native stable; worker auth 401 + 59 web endpoints TODO
55%
What stands between here and launch

Jay-side actions (all unblock multiple apps)

  1. Fresh Clover token: Worker auth returns 401 on stale sandbox token (Customers blocked, native others affected). Unblock: provide fresh token for R3BMEGRVGGTZ1.
  2. Create 4 Clover subscription product IDs per tier scheme: Essential, Plus, Premium, Pro. Apps inject these into build.gradle + wrangler.toml to unlock tier gating. Gating code 100% complete across all native apps.
  3. Bugsnag API key: Waivers + Employees Android need real key in manifest + init code. Currently PLACEHOLDER. Register project in Bugsnag dashboard, paste into BUGSNAG_API_KEY_PLACEHOLDER.
  4. Release keystores + signing config: Generate assignwaivers.keystore + assignemployees.keystore for signed APK builds. Store securely; inject into CI/CD for app-store submission.
  5. RAID gateway ID (Gift Cards): Verify in Clover dashboard; wire to Gift Cards build.gradle.
  6. Merge branch review: assign-brand / assign-waivers / assign-employees branches await main merge gate (per handover SOP).
Per-app detail

Assign Gift Cards Near-launch

Native Kotlin (Clover SDK, targetSdk-25) · Redeemables Worker API · consumes design-system
Works
  • Sell / Reload / Check Balance flows end-to-end on-device
  • MERCHANT_TENDER + MODIFY_ORDER redemption paths verified (commit 7885adb)
  • Clover manifest valid + compliant; Bugsnag wired; targetSdk pinned + guarded
  • Integer-cents money math; PIN handling secure (never displayed/logged)
  • Design-system integration complete; tier enum order ratified (Essential < Plus < Premium < Pro)
  • Network security config HTTPS-only; no hardcoded colors
Blockers
  • Tier entitlement registry stubbed — TierManager returns ESSENTIAL only
  • RAID gateway ID missing → live card charges fail
  • Tier gating UI not visible (locked tiles design shown but not implemented)
  • Dashboard stat aggregates are placeholders
  • Web balance page blocked on backend contract
Stubbed
  • Tier registry integration + tier-gating UI visibility
  • Dashboard stat calculation + activity feed (v1.1)
Next
  • Wire Clover subscription IDs (4 tiers) → tier gating unlocks · verify RAID · device test MODIFY_ORDER redemption

Assign Waivers Building

Native Kotlin signing app (Views, targetSdk-25) + Cloudflare Worker (D1/R2/KV) · consumes design-system
Works
  • On-device signing flow complete (intake → age-gate → signature → consent → PDF)
  • DL barcode prefill (name/DOB autofill); customer linking to Clover profile
  • Tier gating production-ready (4-tier ESSENTIAL/PLUS/PREMIUM/PRO, isAtLeast() enforced)
  • Minors/guardian flow; in-app PDF viewer; waiver records list + CSV export
  • Self-update engine (/version + /apk endpoints); offline queue (Room + WorkManager)
  • PII encryption + tamper-evident hash (SHA-256, merchant-console-only)
  • Design system adopted (DsActionCard, DsListRow, DsNavRail, DsPill, DsStatCard)
  • cfWorker /v1 endpoints deployed + tested (POST /signings/links, GET /signings/{token}, POST /signings/{token}/submit, GET /checkout/status)
  • Native merchant endpoints deployed (/waivers CRUD + /status)
Blockers
  • Clover subscription product IDs: 4 placeholders must be replaced with real dashboard IDs
  • Bugsnag API key: BUGSNAG_API_KEY_PLACEHOLDER in manifest
  • Release keystore ~/Desktop/assignwaivers.keystore not present (needed for signed APK)
  • Web console (assign-waivers-web): not yet built — merchants cannot create templates or manage tiers
  • Employees entitlement registry wiring: tier lookup from app_installs not yet integrated (TODO in STATUS.md)
  • CFP customer-facing screen: Clover SDK integration pending (idle-state screen, not during tender)
Stubbed
  • Remote signing links UI ('coming soon' toast); web merchant dashboard
  • ID/DL capture Premium gate (camera integration pending)
  • Compliance dashboard (Premium-only, P3/P4, not Wave 1)
Fixed Now
  • PIN display removed from CardDetailActivity (security: PINs never shown per policy)
  • PlanTier.kt comment corrected to match ratified tier scheme
Next
  • Jay: create 4 Clover subscription IDs + Bugsnag key + release keystore. Dev: start parallel web console session (cfWorker public /v1 endpoints ready).

Assign Employees Building

Node/TS platform (D1 + KV + queues) · native Android (6 tabs) · web owner console · hosts shared tier registry
Works
  • Typechecks pass across all workspaces (contracts, platform, web-owner, web-console)
  • Platform tests: 126 passing (earnings, crypto, tips, tiers, auth, router)
  • Tier gating fully implemented: 4-tier Essential/Plus/Premium/Pro with cumulative features
  • Tier pricing ratified (2026-07-08): Essential $25+$6/seat, Plus $50+$10/seat, Premium $75+$14/seat, Pro reserved
  • Design system adopted (web-owner + web-console); currency masked throughout (formatCurrency())
  • Auth + router framework complete with per-merchant tier enforcement; OAuth Clover wired
  • Android: compileSdk 34, targetSdk 34, minSdk 24; custom confirm() modal (no browser alerts)
  • No PII in logs verified; secrets not in source
Blockers
  • REGISTRY_SERVICE_TOKEN not set — worker cannot serve registry endpoints (P1 blocker)
  • Bugsnag not wired in Android Employees app (CaptureApplication TODO at line 16, employee-android lacks init)
  • No keystore/signing config in repo (Jay must provide at deploy time)
  • Clover subscription IDs not created (4 IDs needed for tier gating to work)
  • App store signing config absent (must happen out-of-band via CI/CD)
Stubbed
  • Google Sign-In (stub_google_id_token); Apple Sign-In (stub_identity_token)
  • Bugsnag initialization; sync service trigger with badge
  • CSV export error handling (uses browser alert() fallback, not toast)
  • Employee date-range filtering (TODO in employee.routes.ts line 213)
  • Previous-period trend comparison (TODO in overview.routes.ts line 79)
  • Clover subscription info structure (cron uses placeholder)
  • Some invite delivery channels (SMS placeholder, production TBD)
Next
  • Jay: set REGISTRY_SERVICE_TOKEN via wrangler secret put, deploy platform worker, verify registry endpoints. Wire Bugsnag key into both Android apps. Provide Clover subscription IDs. Generate keystores for CI/CD.

Assign Customers Building

Native Kotlin + companion Worker · web = Nuxt 2 + Worker + D1 · consumes design-system (native only)
Works
  • Native: search / assign-to-order / barcode-DL decode / discount groups production-ready
  • Native: 320 unit tests pass (SubscriptionLevelTest fixed via assumeTrue() for unconfigured tiers)
  • Native: tier gating 4-tier ladder implemented (ESSENTIAL < PLUS < PREMIUM < PRO)
  • Web: UI pages compiled (customers/discounts/loyalty/analytics/import-export)
  • Web: Bugsnag + Clover intent wired; Manifest + Clover compliance valid
Blockers
  • P1: Worker auth 401 — Clover sandbox token stale. Blocks barcodes, discounts, profiles on device.
  • P2: PRO subscription ID missing in build.gradle
  • P2: Web tier enum outdated (basic/plus/plusPlus vs 4-tier). Migration needed in RANK/require-tier.js/usePlan.js
  • P3: ~59 backend endpoints TODO (DESIGN-DATA-HANDOVER.md lines 845–1110)
  • P3: @greyskymedia/ltng-components stub — restore package + set NPM_TOKEN
Stubbed
  • Web: Record tabs (People/Cards/Loyalty/Waivers/Orders) — UI shell present, content not wired
  • Web: Nearly all modals (add customer, new discount, etc.) — designed but not implemented
  • Web: Import/Export wizard 4-step flow — scaffolded but not built
  • Native: Home dashboard — nav rail skeleton complete, content rebuild ready
Fixed Now
  • Test suite fix: SubscriptionLevelTest now uses assumeTrue() for unconfigured tier codes
  • Tier collision fix: AssignCustomersLocal uses unique test codes per tier
  • Pushed commit 7a912e0; full test suite passes
Next
  • Jay: fresh Clover token (401 blocker) + PRO subscription ID. Dev: migrate web tier enum to 4-tier, wire ~59 backend endpoints, test on Clover device.
AssignX Console (unified gated web app)

Status: Built + Deployed Frontend

assign-brand: build/assemble.py produces HTML (module CSS auto-scoped .m-<view>). Frontend deployed via GitHub Pages. Backend orchestration spec: ASSIGNX-CONSOLE-HANDOVER.md
Ready
Blockers
Next
Launch readiness summary
What is production-ready: Native code across all apps (Employees native 95% done, Waivers signing 100%, Gift Cards flows 100%, Customers native 100%). Design system consumed. Tier gating logic complete. Security baselines met (no PII leaks, PIN handling, HTTPS network config, integer-cents math). Tests passing. Manifests valid.
What is blocked: 6 Jay-side actions: fresh Clover token, 4 subscription product IDs, Bugsnag key, release keystores, REGISTRY_SERVICE_TOKEN secret, branch merge reviews. These are all account/infrastructure work, not code.
What is incomplete but not launch-critical: Web backend (~59 Customers endpoints), web tier migration (3→4), Waivers web console (v1.1 feature, native ready), Employees Google/Apple sign-in stubs (auth framework working with OAuth/Clover), Premium-tier compliance dashboard (P3/P4). These belong in Wave 2.
Timeline estimate: Native apps (Gift Cards / Waivers / Employees / Customers) can enter device testing 24–48 hours after Jay provides Clover IDs + secrets. Full Wave 1 (all 4 apps + console) to app store ~2–3 weeks assuming parallel web work. Critical path: Clover account setup → native device validation → branch merge → signed builds → store submission.