Chalko — 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
- Internal TestFlight builds
- 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
A chalkboard: green board, cream paper and a pastel for every team.
The first version was a loud blue, yellow and lime cartoon. A little over a week in, I redrew it as a chalkboard, first in a design canvas and then in SwiftUI: cream paper, a deep green board, warm ink, chunky outlines with hard drop shadows and Baloo 2 for all text. The mark is a green board in a chalk-colored frame with a tray and two pieces of chalk. The whole background takes the active team’s pastel, with a stronger dot as its marker, so every screen tells you whose turn it is. Each difficulty level has its own tint and icon. 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. In the last ten seconds the timer turns red and pulses while a tick and a tock alternate and get louder, and the answer buttons ignore taps for 0.8 seconds so a double tap cannot skip a word. 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”. The sounds are 24 original marimba-style tones, generated by a Python script, each with a natural decay instead of a hard cut. The home screen has a faint rain of the game’s own words with a hand-drawn green ring circling one of them, drawn with Canvas and a single still frame under Reduce Motion. There are no unit tests yet; five UI tests cover the whole flow, a rematch, the game over screen, the answer cooldown and 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, plus a short lock against double taps. A sound needs a natural decay: a cut-off tail reads as cheap, even when the sample itself is good. And AI agents do mechanical work best when it comes as written tasks, with a separate build and review step afterwards.
Screens
- Play: The home screen: the chalkboard mark, Play, a quick start with its settings underneath, and buttons for sound, haptics, help and settings.
- Choose how hard: The four levels with their word counts, each with its own tint and icon, and the game’s settings under them.
- Whose turn is it?: After the opening draw: the starting team, a reminder to hide the phone and the scoreboard.
- Draw it, don’t say it: The secret word, the countdown, the turn score, undo, and Pas and Bildi.
- Pens down: Time is up, and the team says whether the last word was guessed in time.
- Fix a mis-tap: Every word of the turn; a tap flips Bildi and Pas and the score follows.
- And the winner is: The final scores with a rematch button.
- The rules in one card: How to play, shown on first launch.
Technology
- App
- Swift, SwiftUI, Observation
- Data
- UserDefaults, bundled word lists
- Sound
- AVAudioPlayer, UIFeedbackGenerator, 24 original sounds made with a Python script
- Design
- design canvas, Baloo 2
- Tooling
- XcodeGen, Xcode UI tests, Google Antigravity