๐Ÿ“ฑ

chalk-it-up

Cross-platform 9-Ball scorekeeper

A Flutter/Dart casual match scorekeeper for 9-Ball with innings tracking, break tracking, undo support, and an AI trash talk generator powered by the Claude API.

View on GitHub
12 scenariosยทFlutter Widget Tests

The Problem

Keeping score during a casual billiards match means someone has to remember the count, or use a phone app that wasn't designed for pool. Most score apps are generic.

The Solution

A minimal, tap-to-score interface designed for billiards โ€” split screen for two players, tap to score, long press to undo, track innings and who broke. The AI trash talk generator adds personality at match end.

Screenshots

Setup screen

Enter player names and race length before the match โ€” defaults to Race to 7

Match in progress

Tap to score, hold to undo, track innings and break โ€” Allen leading 6-3

Winner banner with trash talk

AI-generated billiards trash talk from Claude at match completion

Tech Stack

Flutter

Cross-platform โ€” one codebase for iOS, Android, and Windows

Dart

Flutter's language โ€” familiar from company Shell App work

Claude API

AI trash talk generator at match completion

flutter_dotenv

API key management via .env file

Key Engineering Decisions

โ–ธ

Intentionally minimal โ€” no accounts, no cloud, no history. Just score the match.

โ–ธ

Soft lock after match complete โ€” tapping after winner declared does nothing

โ–ธ

Long press to undo โ€” prevents accidental score increments

โ–ธ

Race length as number input (1-20) not dropdown โ€” handicapped races vary

โ–ธ

AI trash talk prompt instructs Claude to be billiards-specific and keep it light