Tahtaya Kalk — Drawing Party Game

A Turkish party game for iPhone and iPad: one player draws a word on a real board while their team guesses, and the app deals the words, runs the timer and keeps score.

Role
Solo — idea, design, code
Platform
iPhone & iPad · 2026
Status
Preparing for TestFlight
Stack
Swift · SwiftUI · Observation · AVFoundation

The idea

A drawing game for a room full of people, where the phone stays out of the way.

One player draws on a whiteboard or on paper while their team guesses. Two to four teams play; before the game you pick the turn length, the number of rounds and the free passes per turn. A guessed word is a point; a pass is free until the turn’s free passes run out, then it costs a point. Teams with the same top score share the win, and a rematch starts with the same settings. It is my own project, from the idea to the code, built with AI coding assistants.

Design

Loud, chunky and readable on every team’s color.

A cartoonish 3D style borrowed from mobile party games: thick dark ink outlines, hard drop shadows and SF Rounded in its Black weight. The whole background takes the color of the team that is playing, so badges and rows sit on white with a colored dot, or on lime when the team itself is yellow, and stay readable on all four colors. The copy is playful Turkish, like “Süre bitti, kalemler yere!”, time’s up, pens down.

Engineering

One state machine, and a timer that cannot drift.

Swift and SwiftUI with the Observation framework. One state machine drives every screen, from setup to the final scores. The timer is worked out from an end date checked every 200 ms rather than from counted ticks, so pausing is exact, and the game pauses itself when the app goes to the background. Sound plays on an ambient audio session, so it respects the silent switch and mixes with music already playing, and sound and haptics have their own switches.

Nothing leaves the phone: no account, no ads, no analytics. Settings and the history of seen words live in UserDefaults, and the App Store privacy answer is “Data Not Collected”. There are no unit tests yet; a UI test target takes the App Store screenshots, and I play-tested the game on an iPhone SE, an iPhone 17 Pro Max and an iPad Pro in the Simulator.

The words

The hardest part was never dealing the same word twice.

A word must not come back within a game, words nobody has seen in earlier games should come first, each level borrows a fixed slice of the level below, and undoing a turn or fixing the summary must not put a seen word back in the deck. Each game keeps a set of used words and each level a history of seen ones, and every new deck is drawn from words that are in neither. When a whole level has been seen, its history starts again from this game’s words.

Keeping the word secret came close. The drawer holds the phone while the team faces the board, so the word stays hidden until the card is pressed and held, and each new word opens for a moment and closes again.

What I learned

Curating beats volume.

A quality pass flagged 127 words that were hard to draw or wrong for their level, and the lists went from 2,700 words to 2,607; keeping abstract words for the hardest level made the levels feel distinct. Real-time timers should come from end dates, not counted ticks. Party games need big targets, sound and haptic feedback, and corrections that forgive a wrong tap. And AI agents do mechanical work best when it comes as written tasks, with a separate build and review step afterwards.

Screens

Technology

App
Swift, SwiftUI, Observation
Data
UserDefaults, bundled word lists
Sound
AVAudioPlayer, UIFeedbackGenerator, CC0 sounds from Kenney.nl
Tooling
XcodeGen, Xcode UI tests, Claude Code, Google Antigravity

Privacy policy

Support

Next project: Tunes