Make it feel fair.
The shield you see should be the shield the game actually uses.
A closer look at your workspace setup screen—and a more considered, single-file rebuild.
THE BRIEF Preserve the contract. Fix the edges. Make the first interaction feel considered.
Create a workspace for your team, then choose how to activate it.
This screen does a lot: creates a workspace, handles payment, runs ads and hosts a game. The details behind each of those moments matter just as much as the interface.
Download the full analysis ↗The shield you see should be the shield the game actually uses.
One checkout at a time, with a safer route back from failed confirmation.
Pause, resume and exit without losing control of the screen.
The existing imports, endpoints and public screen contract stay in place.
Not a list of cosmetic tweaks. Each note traces a behavior back to the original source and explains what changed—or what still needs work elsewhere.
Imports & plans — Public type, static prices, native ad guard and existing dependencies establish the integration boundary.
Motion & haptics — Animation and loading feedback had duplicate Android vibration and retained completed timer handles.
Theme tokens — String ordering was used as luminance and alpha was appended to arbitrary colors.
Game definitions — Entity types, pool and fixed screen geometry determine what can spawn and where.
Arena rendering — The scaled paddle pivot did not match its logical collision bounds.
Simulation & ads — Launch, pooled spawns, animation, collisions and timers contained the major game lifecycle risks.
Game interface — HUD and result overlays had no pause/exit path during play and lacked a Chrono timer.
Stepper & cards — Reusable controls included a null-only error component and limited selection semantics.
Screen & transactions — Store hydration, registration, rewards, checkout, linking and the main UI meet here.
Styles — Theme-derived colors, legibility, shadows and layout complete the screen.
Aegis scales the paddle from its center. The original hitbox grew from the left edge instead. At full width, the two are off by 12.88 pixels on each side.
Move the control to see the mismatch—and the corrected alignment. The diagrams use the original 92 px base width.
Three examples from the rebuild. These are abbreviated excerpts; the complete implementation is in the source below.
Four rounds of refinement, with the hard problems addressed before the polish.
10 is the target, not a claim.
Ambitious scope, but several game and checkout edge cases.
ORIGINALPreserve the contract; remove unsafe colors and dead UI.
FOUNDATIONUnify movement, collision, pause, bounds and pool behavior.
SIMULATIONLock actions and make in-session confirmation retryable.
CHECKOUTStrict mock type-check, math checks and behavioral tests.
CURRENT PASSThe replacement is designed for the existing screen boundary. It retains what the rest of the app expects, while keeping the limitations visible.
Default TenantSetupScreen export and PlanItem shape preserved.
Same relative imports, auth/offline selectors, theme, ads and tab-bar hooks.
Existing registration, plans, reward, order and verify endpoints and payload keys.
No additional package or change to another application file is required by the replacement.
Strict TypeScript against mock declarations; math and component behavior exercised with mocks.
Everything in the replacement is here. Search the file, jump to a section, copy it or download it directly.
Put the file in place, then verify the parts this workspace cannot see.
Get the integration checklist ↗Back up the original and replace src/screens/auth/TenantSetupScreen.tsx.
Test checkout, ads, interruption, orientation, accessibility and performance on actual devices.
Confirm payment signatures, idempotency, durable reconciliation and authoritative reward eligibility.