Nowhere near a ‘product’ yet – just aiming for a playable game between me and my father.
Back-end
A simple server remembers the state of the game – allowing me to jump between my iPhone, iPad and browser on my Windows Laptop or Macbook.
Configuration
If someone is struggling to see the letters on the scrabble board, the last thing they want is to be stumped before they begin with a page of settings that they need to get right!
For this phase, I could simply set the default values of the settings to be those that suited my Dad. The normally sighted player – myself – would have to change these when first running the game on a new device.
Messaging
Even when concentrating on a game of Scrabble face-to-face, it can take anywhere from a few seconds to a few minutes for someone to decide on their move. When the player is retired and alone, we want to let them take as much time as they want to spend on figuring out their next move. The other player probably needs to get on with life during that period – unless planning their own move ahead of time!
So, we need to let the players know when each other have taken their turn. My Dad’s preferred method of near real-time messaging is currently WhatsApp. It’s easy to send short spoken messages – which are much easier for him than trying to type and read text or having to check that a dictated message has been transcribed adequately.
The Flutter package for WhatsApp integration lets the app prepare a message but you still have to hit ‘Send’ on WhatsApp itself – so OK for now but too clunky for long term use.

What worked for us is having the app prepare a simple text message (e.g. “Scored 25. I played WOMBAT across. Scored 14”). On my phone, I then have to tap to confirm that I want to open WhatsApp Chat, tap the Send button then ‘Done’ to get back to the game. If it’s a great move or there’s a problem and I need to reject the move, I’ll also hold the microphone button and record an explanation (e.g. “Sorry, don’t think you noticed that touches the ‘X’ below the ‘Z’ – and ‘ZX’ isn’t a word! Your go still.”)
Tile Placement
The user drags a tile from their rack onto the board. As their finger passes over the board, the square onto which it would drop is shown in red (can’t drop there) or green (OK to drop there). This helps them see where the tile will drop.
Tiles tentatively placed on the board are shown in a highlighted colour to distinguish them from committed tiles from earlier moves.
At this stage, the app just applies basic rules to stop the bulk of mistakes that a partially sighted player might make. For example:
- it ensures that the first move includes the centre square
- it only lets you drop your tiles on empty squares
- once you’ve dropped a single tile on the board, subsequent tiles can only be dropped in either the same row or same column
- once you’ve dropped two or more tiles on the board, further tiles can only be dropped in the same row or column.
Mistakes Occur
Mistakes are common – especially while the user is getting the hang of the zoom and drag/drop technique. So, we added:
- Drag and drop within the board to let you reposition tiles already placed
- ‘Take-back’ button – brings all tentatively placed tiles back into the user’s rack
Usability is further improved with:
- Drag and drop within your rack – letting you visualise potential words better by reordering the letters ahead of playing them.
Adjudicating and Scoring
For now, I’m manually deciding whether or not a move is valid and, if so, what it scored.
When the partially sighted player taps commit, the other player is notified that they need to score or reject the move. If necessary, I’ll check an official Scrabble dictionary before deciding.
I then have my go, score that and let Dad know it’s his turn again.
Scores on the Doors
To keep as much screen area as possible for the actual board, one ‘Menu’ button at top right brings up a seperate ‘score-board’ screen with the scores in enormous letters. This shows the score for the most recent move each as well as the running total scores.

By always havig your own score first (on the left), and assuming you remember who you’re playing, the names become largely redundant – so we could shrink the text size of the names – letting the scores become bigger!
This page also has the less commonly needed functions (left to right across the bottom: ‘Swap Tiles’, ‘Pass’ and ‘End Game’. Note how I’ve placed the buttons right to the edge of the screen – foregoing the normal convention of ‘padding’ and ‘margins’. If the window is using the full screen then, even if the user can see none of the detail on the button, they can still hit it reliably by touching the very corner of the screen.
The Blank Tiles
These show up as ‘?’ when in your hand – but when placed on the board you have to say which letter they are now representing. We do that with the screen below which appears as you drop a blank tile on the board. Note the use of lowercase letters to indicate “blank tile being used as”.

Scrolling down to get to later letters is not a problem – as long as each tile is legible. To that end, we could tie the size of these tiles to the maximum zoom level the user has been using.
Swapping Tiles
If the user wants to swap some tiles instead of playing a word, they need to specify which tiles they are putting back “in the bag”. As long as these are displayed at or above the size of the tiles in the user’s rack, they should be identifiable.
Results
I now play my Dad most days. Games sometimes last a couple of hours, if we’re both concentrating on them. Others last a few days – usually because I’ve been working rather than playing most of the day.
I now talk to my Dad much more frequently. He’s getting really good – beating me frequently – and loving the game. Here’s some of the feedback received in the last week or two of playing:
- “That was quite an exciting game wasn’t it! I enjoyed it enormously.”