Woggle

Same letters for everyone, 2:30 on the clock, one daily leaderboard

Status
LiveLive on Google Play and the App Store (version 3.2.1)
Platforms
Android, iOS
Role
Solo: game design, code, backend, art pipeline, release
Timeline
Sep 2023 – Nov 20261,369 commits
Version
3.2.1 (build 322) on both stores

01 The story

A daily word-search game: everyone gets the same 4x4 board each day, has 2:30 to find words, and lands on a global leaderboard. Built in Flutter on Firebase, with server-generated daily boards, social play, collectible tiles and a Premium subscription. Live on Google Play and the App Store.

Woggle is a daily word game in the spirit of Boggle and Wordle: every player gets the same letter grid, the same 2:30 clock and the same leaderboard. It started in September 2023 as a web page in a Firebase project, two days after I built a word-grid solver tool, with a shareable 'Woggle Challenge' score.

In June 2025 I tried a native Kotlin Android version, then rebuilt the game in Flutter for both platforms. The Flutter repo grew fast: about 870 commits in September and October 2025 alone, covering procedural and parallax backgrounds, a tile shop, tutorials, sound and the in-app purchase flow. Woggle 1.0 reached the App Store on November 17, 2025.

The daily board is made on the server. A scheduled Cloud Function picks each day's seed, builds the board with a JavaScript port of the app's Dart generator, and accepts it only if a trie search over the 102,000-word dictionary finds enough words of each length and enough vowels. It publishes the letters themselves to Firestore, so every phone plays the exact same grid. Because a JavaScript copy of Dart's seeded random generator can drift from the real one, another function checks the day's first leaderboard entry and corrects the stored seed if needed.

Around the daily game it grew more modes and a social layer: Practice, Discovery with no clock, Word Crush where found words clear tiles and cascade, a hard Word Ladder, premium Max boards, friends, lobbies and 'Smack Talk' taunts sent as push notifications. On Wednesdays it serves themed boards on a 13-week rotation, each certified by an exhaustive search to hold 318 to 537 findable words. Collectible tiles, gems, a mystery box, ads and a Premium subscription pay for it.

Because the leaderboard matters, the newest work is integrity: daily sessions are logged with swipe traces and timing, screenshots during a daily game can be detected or blocked remotely, and Cloud Functions write per-player daily 'stories' with replay and solver comparison for a private integrity dashboard and a daily digest. Version 3.2.1 (October 2026) added 31 animated backgrounds, Word Ladder and Wednesday bonus words. Foldable and iPhone Duo support is in progress.

02 What it does

  1. 01

    Daily Challenge: one shared board for everyone, a 2:30 timer and a global leaderboard

  2. 02

    Practice with endless timed boards, and Discovery with no clock

  3. 03

    Word Crush: found words clear their tiles and the board refills in cascading chains

  4. 04

    Word Ladder: a hard mode with a rising length floor, speed and combo scoring, and hints

  5. 05

    Play with friends: lobbies, invites, shared results and animated Smack Talk taunts

  6. 06

    Collect tile designs with coins and gems, open a mystery box, and get monthly exclusive tiles with Premium

  7. 07

    31 animated nature and seasonal backgrounds with parallax and themed particles

  8. 08

    Stats, game history and a review of every word on the board with its path

03 How it's built

AppFlutter app (iOS, Android)
AppPrivate integrity dashboard
ServiceFirebase Auth
DataFirestore + Realtime DB
Outside serviceApp Store / Google Play billing, AdMob
ServiceCloud Functions: seed, push, integrity
ServiceFCM push

A scheduled Cloud Function picks and validates each day's board and publishes its letters to Firestore, where every app reads it. Firestore triggers drive social notifications, seed correction and the leaderboard integrity reports read by a private dashboard.

All 8 connections, as text
  • Cloud Functions: seed, push, integrity → Firestore + Realtime DB: writes daily board
  • Flutter app (iOS, Android) → Firestore + Realtime DB: reads daily board, scores, lobbies
  • Flutter app (iOS, Android) → Firebase Auth: Google / Apple sign-in
  • Firestore + Realtime DB → Cloud Functions: seed, push, integrity: triggers on sessions, invites, scores
  • Cloud Functions: seed, push, integrity → FCM push: invites, smack talk, reminders
  • FCM push → Flutter app (iOS, Android): push
  • Private integrity dashboard → Firestore + Realtime DB: reads stories, alerts
  • Flutter app (iOS, Android) → App Store / Google Play billing, AdMob: subscriptions, gems, ads

04 Engineering notes

  • Server-side daily boards: a scheduled Cloud Function validates each day's seed with a JavaScript port of the Dart generator (BigInt seeded RNG), publishes the letters to Firestore, and fixes the seed from the first leaderboard entry if the two disagree

  • Board quality gates: a trie over a 102k-word dictionary rejects boards without 60+ words, 5+ vowels and a spread of 3- to 7-letter words; games that cross midnight are filed under the right day

  • Wednesday showcase boards: a browser lab and an exhaustive search find, for each theme, the board that hides its theme words with the most findable words (318 to 537)

  • Leaderboard integrity: session logging with swipe traces, remote screenshot blocking, solver-speed signals and per-player replay stories, reviewed in a private dashboard with a daily digest

  • Monetization on both stores: auto-renewing Premium, consumable gems (with iOS re-purchase fixes), Play Billing 8, ads hidden for Premium, and account deletion for App Review

  • Python generators for the tile designs and layered parallax backgrounds, with decode-then-reveal and pre-warming so scenes don't flash

05 By the numbers

1K+
Google Play downloads
November 17, 2025
On the App Store since (v1.0)
102,643 words
Dictionary size
31
Animated backgrounds

06 Stack

App

  • Flutter
  • Dart
  • Provider
  • go_router
  • flutter_animate
  • flutter_soloud
  • google_fonts

Backend

  • Firebase Auth (Google, Apple)
  • Cloud Functions (Node 22, firebase-functions 7)
  • Firebase Cloud Messaging
  • Firebase In-App Messaging
  • Crashlytics
  • Analytics

Data

  • Cloud Firestore
  • Firebase Realtime Database
  • Firebase Storage
  • 102k-word dictionary + trie

Infrastructure

  • Google Play
  • App Store
  • AdMob
  • in_app_purchase (StoreKit, Play Billing 8)
  • Firebase Hosting (private dashboard)

Tooling

  • Python art generators (tiles, backgrounds)
  • Node scripts for seeds and backfills
  • Wednesday board lab (HTML/JS)
  • flutter_launcher_icons

Lines of code (approx.)

  • Dart43,363
  • JavaScript3,484
  • HTML1,190
  • Python1,046
  • Swift/Kotlin384

≈ 49,467 lines

Repositories

  • woggle_flutterprivate
  • woggle-androidprivate
  • tempflutgemprivate
  • daily-boggleprivate
  • Ultimate-Boggle-Toolprivate

woggle_flutter has 1,260 commits (2025-06-29 to 2026-11-09). Earlier repos: Ultimate-Boggle-Tool (18 commits, 2023-09-12 to 09-14, word-grid solver pages and Python), woggle-android (83, Kotlin, 2025-06-04 to 06-28) and tempflutgem (8, Flutter, 2025-07). The 1,369 total counts those four. The first web version lives in the daily-boggle repo (212 commits, 2023-09-14 to 2025-11), which also holds other web experiments, so its commits aren't counted. Uncommitted foldable work from 2026-11-08 is saved on the SSD.