Mobile Game — Tetris-Style Puzzle

Block Drop Play

Tetris-style game with professional engine: full SRS with wall kicks, T-Spin detection, Perfect Clear, official scoring, 5 game modes, async duels, per-game missions, and arcade/neon design. Part of the shared multi-game ecosystem.

Published on App Storev1.0.0 — iOS + Android

7

Tetrominoes (SRS)

10×20

Board

5

Game modes

8

Visual themes

22

Sound types

v1.0.0

Version

Features

Key Features

Core Gameplay

Professional Tetris Engine

Real-time gravity, hidden spawn zone, lock delay, ghost piece, T-Spin detection (3-corner rule), Perfect Clear, combo system.

SRS Rotation with Wall Kicks

Complete Super Rotation System with differentiated tables for I piece (4×4) and JLSTZ (3×3). 4 kick tests per rotation.

7-Bag System

Each of the 7 tetrominoes appears exactly once every 7 pieces. Eliminates unfair droughts.

Optimized Touch Controls

Tap zones for movement and rotation, swipe for drops, hold button. Configurable DAS in 3 speeds.

Game Modes

Classic

Incremental speed by levels. Every 10 lines levels up. No time limit.

Timed (60s/90s/120s)

3 time variants. Highest score before the clock runs out.

Zen (Premium)

No game over, fixed low speed. Auto-clears random row if no lines cleared in X turns.

Daily Challenge + Duels

Deterministic seed: everyone plays the same sequence. Async duels vs friends with bets.

Scoring & Progression

Official Scoring

Single (100×lvl), Double (300×lvl), Triple (500×lvl), Tetris (800×lvl). T-Spin bonus, Back-to-Back ×1.5, Perfect Clear (3000×lvl).

Per-Game Missions

3 random missions from a pool of ~10 types. +50 coins and +30 XP for completing all 3. Free reroll with ad.

Power-ups

Bomb (clears 3×3), Undo (reverts last piece), Freeze (pauses gravity 10s). Rechargeable with ads or coins.

Economy

Coins (score/10), XP by mode, daily streaks with streak shields, unlockable achievements.

Social

Friends System

8-character friend code, name search, requests, online status.

Rankings & Duels

Weekly leaderboard among friends. Duels with same seed, score comparison, coin stakes.

Monetization

AdMob

Banner on Home (never in gameplay), interstitial every 3 games, rewarded for power-ups, coins, and continue.

Premium

$0.99/mo or $9.99/yr: no ads, ×2 coins, Zen mode, 50% discount on power-ups, exclusive themes.

Technologies

Tech Stack

Frontend / Mobile

React Native 0.81.5

New Architecture (JSI/Fabric)

Expo SDK 54

Build, deploy, OTA updates

TypeScript 5.9 + React 19

Strict typing

Zustand 5

7 stores: game, auth, user, theme, premium, friend, duel

Reanimated 4.1

Native thread animations, FadeInDown, pulse

Backend

Supabase (shared)

Auth, DB, Edge Functions, Realtime

PostgreSQL

Schema blockdrop, 11 tables, 18 RPC functions

Public views (bd_*)

Secure abstraction layer

3 Edge Functions

Complete game, daily challenge, offline sync

Services

Google AdMob

Banner, interstitial, rewarded

Firebase Crashlytics

Crash reporting

Google OAuth + Apple Sign-In

Auth cross-platform

EAS Build + Update + Submit

Complete CI/CD

Local

AsyncStorage + Zustand Persist

Cache, stats, preferences

expo-secure-store

Encrypted tokens

expo-av

22 sound effect types

Main Libraries

react-native-gesture-handlerreact-native-reanimatedreact-native-google-mobile-adsreact-native-iap@react-native-firebase/crashlytics@supabase/supabase-jsi18nextreact-i18nextexpo-linear-gradientexpo-apple-authenticationexpo-auth-sessionexpo-secure-storeexpo-avexpo-cryptoexpo-updates
Design

Architecture Decisions

Dedicated Multi-Game Schema

Isolated blockdrop schema in PostgreSQL. Shared tables in global. Client accesses only via bd_* views and wrapper functions bd_*(). Total isolation between games.

Real-Time Game Loop with Zustand

Gravity tick, lock delay, and DAS in Zustand store with controlled intervals. 17 selectors for granular 60 FPS re-renders.

Deterministic PRNG

Date-based seeds for Daily Challenge, shared for Duels. Guarantees same piece sequence between players.

Wrapper Functions + Views

Real tables not exposed to API. Views filter data, functions execute server-side logic. Security-by-obscurity complements RLS.

Hardcoded Arcade Palette

Fixed UI colors (bg #0A0A1A, cyan accent, magenta secondary). Only piece colors are themed. Consistent visual identity.

Server-Side Anti-Cheat

Max score validation per mode, minimum times, pieces/minute. Shadow bans. Scoring and rewards executed on server.

Local-First with Optional Login

Full game without an account. On login, local data syncs. Maximizes retention by eliminating friction.

Engineering

Technical Challenges

Tetris Engine with Full SRS

Problem: Implement SRS from scratch with differentiated wall kicks for I vs JLSTZ, T-Spin detection, hidden spawn zone.

Solution: tetrisEngine.ts with official wall kick tables, 4 tests per rotation, 3-corner rule for T-Spin.

→ 100% functional engine that passes all rotation edge cases.

Precise Touch Controls

Problem: Map movement, rotation, drops, and hold to touch screen without conflicts. DAS critical for experienced players.

Solution: Separated tap zones, swipe down, configurable DAS in 3 speeds with gesture-handler.

→ Responsive controls without action interference.

OAuth Cross-Platform

Problem: Google OAuth different on Android vs iOS. Supabase rejected iOS tokens with "Unacceptable audience".

Solution: Authorized Client IDs configured for web + iOS in Supabase Auth. Separate flows per platform.

→ Functional login on both platforms with persistent sessions.

Multi-Game Supabase Architecture

Problem: Share one instance between 5+ games without mixing data, with unified users and friends.

Solution: Schemas per game, prefixed views, wrapper functions, granular RLS. Global schema for shared data.

→ Complete isolation, zero user duplication.

Deterministic Seeds

Problem: Guarantee same piece sequence between players in Daily and Duels.

Solution: Seedable PRNG that feeds the 7-bag. Seed = hash(date + "blockdrop") for Daily.

→ 100% reproducible and verifiable sequences.

Legacy Naming Migration

Problem: Reused code contained storage keys and IAP SKUs from other games.

Solution: Audit of 7 files, systematic renaming to blockdrop_* prefixes.

→ Eliminated storage conflicts between apps.

Status

Project Status

Completed

  • Tetris engine: SRS, wall kicks, T-Spin, gravity, 7-bag
  • Real-time game loop with 17 Zustand selectors
  • 12 screens + 14 arcade/neon components
  • Backend: 11 tables, 18 RPC functions, 3 Edge Functions
  • Auth Google + Apple, AdMob, Crashlytics
  • Per-game missions (10 types)
  • i18n ES/EN (~180 keys), 22 sounds
  • Published on iOS App Store

Pending

  • Daily Challenge and Duels end-to-end testing
  • Synced leaderboards and achievements
  • Final Google Play publication
  • Interactive tutorial/onboarding
  • Line clearing animations (polish)
Results

Key Achievements

Professional Tetris engine from scratch: SRS, wall kicks, T-Spin, Perfect Clear, official scoring

Scalable multi-game architecture: 1 Supabase backend for 5+ games with isolated schemas

~70% code reuse: auth, friends, ads, IAP, base stores, shared design system

Real cross-platform: one TypeScript codebase generates native iOS + Android builds

12 screens + 14 game components with consistent arcade/neon design

Server-side anti-cheat: score, time, and suspicious activity validation in PostgreSQL

Deterministic seeds for fairness in Daily Challenges and Duels

Full compliance: privacy policy, terms, account deletion. Submitted to both stores

Details

Additional Information

Languages

Spanish + English

Modes

Classic, Timed, Zen, Daily, Duel

Ecosystem

5+ shared games

Reuse

~70% base code

7 Tetrominoes — Super Rotation System

I

O

T

S

Z

L

J

8 Piece Themes

Default — FreeDark — FreeNeon (500 coins)Pastel (500 coins)Ocean (750 coins)Sunset (750 coins)Forest (1000 coins)Galaxy (1500 coins)

Multi-Game Ecosystem

Part of a game portfolio sharing Supabase backend, user system and authentication, friends system, arcade/neon design system, AdMob account, and IAP infrastructure. Other games: Block Puzzle Play, Sudoku Play, Color Sudoku Play, Killer Sudoku Play.