Sudoku Play
Complete mobile Sudoku app with progression system, adventure mode with 5,900 levels, 1v1 duels, social features, and professional monetization. Offline-first architecture with event sourcing sync. One-man project published on both stores.
6,000
Unique puzzles
5,900
Adventure levels
590
Worlds
13
Screens
14
Event types
v1.0.13
Current version
Key Features
Core Gameplay
9x9 Responsive Board
Precise touch mapping respecting safe areas on all devices.
Drag Input
Hold 0.5s to activate drag mode for placing multiple numbers by sliding across cells.
Two Game Modes
Classic (instant feedback, limited lives) and Purist (no validation, no hints).
Smart Hints
Identify pivot cells with 1:30 minute cooldown.
Unlimited Undo + Autosave
Complete move history. Autosave every 10s, on pause and on exit.
Adventure Mode
5,900 Levels
590 worlds organized in 6 chapters with progressive difficulty.
Candy Crush-style Map
Winding path with interactive nodes and Boss levels.
Hearts & Stars System
Time-based regeneration, ads to recover, gates requiring accumulated stars.
Progression & Engagement
Complete Economy
XP, user levels, in-game coins with chain multipliers.
Streaks with Shields
Daily streaks with increasing bonuses and streak protection.
Daily Challenge + Quests
Daily puzzle same for all, daily and weekly quests with rewards.
Achievement System
Achievements with dedicated screen and progress tracking.
Social & Duels
Friends System
Unique 6-character codes, friend requests, leaderboard with multiple metrics.
1v1 Duels
Same puzzle for both, coin bets, winner by time + errors.
Anti-cheat in Duels
No hints, no pause, no autosave. Server-side coin escrow.
Monetization
Ads (AdMob)
Banner on Home (never during gameplay), interstitial between games, rewarded for hints and coins.
Premium Subscription
$0.99/mo or $9.99/yr: no ads, +50% coins, 5 hints per game, exclusive themes, infinite hearts.
In-App Purchases
Integrated with App Store Connect and Google Play Console via react-native-iap v14.
Tech Stack
Frontend / Mobile
React Native 0.81
Base framework for Android and iOS
Expo SDK 54
Toolchain, builds and OTA updates
TypeScript 5.9
Static typing across the project
Zustand 5
State management with persistence
React Navigation 7
Stack-based navigation
Backend
Supabase
Auth, DB, Edge Functions, RLS
PostgreSQL
Schemas global + sudoku
Deno Edge Functions
sync-events, validate-completion
Row Level Security
Row-level security
External Services
Google AdMob
Banner, interstitial, rewarded
Firebase Crashlytics
Real-time crash reporting
Firebase Cloud Messaging
Push notifications
EAS Build + Update
Cloud builds and OTA updates
Local Storage
SQLite (expo-sqlite)
6,000 pre-loaded offline puzzles
AsyncStorage
State, config, progress
expo-secure-store
Device ID and encrypted sensitive data
Main Libraries
Architecture Decisions
Event Sourcing for Offline
Each action is recorded as an immutable event. The server processes them in order and is the source of truth. Enables idempotent sync, full audit trail, and safe multi-device merge.
Real Offline-First
6,000 puzzles in local SQLite, state in memory and AsyncStorage, offline event queue. Works 100% without internet.
"Sacred Gameplay" — Zero I/O
During active gameplay, zero network or disk operations. Everything in RAM. Deferred persistence with InteractionManager.runAfterInteractions(). Guaranteed 60 FPS.
Server as Source of Truth
The client is never trusted for coins, XP, or purchases. In duels, rewards are handled exclusively by the server.
Smart Sync Conditions
Evaluates WiFi vs data, battery level, power save mode, and event count before syncing.
Silent Anti-Cheat
Gameplay pattern analysis, HMAC-SHA256 signing, shadow bans without alerting the cheater.
Technical Challenges Solved
Notes Rendering on Samsung One UI
Problem: flexWrap differs on Samsung, 3×3 notes rendered incorrectly.
Solution: Explicit 3×3 nested Views with fixed dimensions.
→ Pixel-perfect rendering on 50%+ of Android market.
Background Fetch Crashes on Android
Problem: expo-task-manager causes NullPointerException on Samsung before JS initialization.
Solution: Sync on foreground return instead of background fetch.
→ Production crash elimination.
Google Play Services Fallback
Problem: App crashed on Huawei/emulators without Play Services.
Solution: Service with availability detection and dynamic imports.
→ Works on all devices.
IAP Plugin Missing on iOS
Problem: react-native-iap not included in app.json plugins, excluding entitlement.
Solution: Plugin added + new native build.
→ Subscriptions enabled on iOS.
Multi-Device Sync
Problem: State merge generates coin conflicts between devices.
Solution: Event sourcing with UUID per event. Server recalculates state.
→ Zero data loss, full audit trail.
Duel Economy
Problem: Math.max() for merge allowed coin exploits.
Solution: Coin escrow on create/accept. Authoritative server.
→ Economy protected against exploits.
In-Game Performance
Problem: Persistence and sync caused micro-stutters.
Solution: "Sacred gameplay": state in RAM, autosave with debounce, deferred I/O.
→ Constant 60 FPS, imperceptible autosave.
AdMob Verification
Problem: AdMob required domain verification to serve ads.
Solution: app-ads.txt on GitHub Pages + URL in both consoles.
→ Active monetization on both platforms.
Project Status — 13/13 Phases
Phase 1: Setup & Infrastructure
Phase 2: Puzzle Generator
Phase 3: Game Core
Phase 4: Progression Systems
Phase 5: Auth & Sync
Phase 6: Monetization
Phase 7: Polish & Testing
Phase 8: Notifications & Onboarding
Phase 9: Security & Anti-Cheat
Phase 10: Offline Sync
Phase 11: Performance Optimization
Phase 12: Friends System
Phase 13: 1v1 Duels
In Production
- Published on Google Play and App Store
- 2 Edge Functions deployed
- AdMob verified and active
- Crashlytics reporting in real-time
- EAS Update for OTA deployments
Pending / In Progress
- IAP subscriptions on both stores
- Supabase Realtime for duels
Key Achievements
Complete individual project: design, development, publishing, and maintenance on both stores
6,000 puzzles generated with custom backtracking algorithm in Python, 6 difficulty levels
5,900 Adventure Mode levels with Boss worlds, hearts, and star system
Event Sourcing implemented from scratch with idempotency, audit trail, and anomaly detection
Anti-cheat with pattern analysis, HMAC-SHA256, and silent shadow bans
Complete social system: friends with unique codes, leaderboards, 1v1 duels with bets
Real offline-first: 6,000 local puzzles, in-memory state, offline event queue
"Sacred gameplay" with zero I/O during active gameplay, guaranteed 60 FPS
Cross-platform with single codebase: React Native + Expo with native builds via EAS
13 development phases completed in ~3 weeks, from setup to publishing
Additional Information
Languages
Spanish + English
Themes
Dark + unlockables
Puzzles
6,000 unique
Modes
5 (Classic, Purist, Daily, Duels, Adventure)
Database
Schema global
User profiles, prepared for multiple future games.
Schema sudoku
Catalog, completions, stats, friends, duels, events, adventure.
Future Vision
The architecture is prepared to evolve into a multi-game platform with shared global profile, cross-game challenges, global leaderboards, timed events, and tournaments. The global schema already supports multiple connected applications.