UI/UX Review: Sol Vilaiyattu + Finger Doodles
Reviewed: June 4, 2026 · Branches: solvilayatu/development, thumb-draw/Kid-friendly
Sol Vilaiyattu (சொல் விளையாட்டு)
Tamil-language daily word puzzle. Re-branded blue/orange palette, rounded cards, custom Tamil keyboard. 4-letter Wordle clone with strict daily mode.
Visual Design
Strong
- The blue/orange re-brand is clean. LetterBoxView uses cornerRadius: 12 with continuous style which is standard for current iOS. shadow(radius: 2, x: 0, y: 1) is subtle but it is there. I would question whether every card needs a shadow at all in a dark game UI but it's not offensive.
- Bilingual labels throughout. Tamil primary, English secondary. "அனுப்பு (ENTER)" works.
- Dark mode default with background gradients. Fine on OLED devices. Not sure why gradients are needed in a dark word game.
Typography
Good
- Title at .system(size: 28, weight: .black, design: .rounded) is loud. Appropriate for a game, but .black weight can letter-space poorly in Tamil script so test it on a real device.
- Tamil script renders at 26pt bold in letter boxes. Readable on small devices, at least in the simulator.
- Subtitle transliteration at 14pt monospaced is inoffensive. I'm not sure monospaced is the right pick for an editorial subtitle but it doesn't break anything.
Interaction Design
Needs Polish
- Keyboard row spacing varies between rows: vowels use spacing: 3, consonants use spacing: 4, actions use spacing: 10. Looks ragged. Standardize to one value, probably 4pt.
- Key heights don't match: letter keys are 46pt frames, Enter key has 14pt vertical padding that lands around 46pt total but not exactly. Just make everything 48pt flat.
- VariationPickerView slides up with .move(edge: .bottom).combined(with: .opacity). No backdrop dimming, so the keyboard competes with whatever is behind it. Add a black.opacity(0.3) overlay to kill distractions.
- Wordle shake uses ShakeEffect with 10pt translation, 3 shakes per unit. Effective feedback. But the entire board shakes instead of just the active row. Fix that, shaking the whole thing is disorienting.
Onboarding
Solid
- 4-page TabView with PageTabViewStyle. Native feel, swipeable.
- Color guide page uses live ColorExample boxes. Better than static images.
- Button text:
"அடுத்து / Next" then "விளையாடத் தொடங்கு / Start"
- Missing a page counter. The dots are too small. Add "Step 1 / 4" or similar text above the pagination dots.
Game Logic
Debug Code
- DailyGameManager.canPlayToday() returns true with a // DEBUG comment about allowing multiple games. This will ship broken. Uncomment the date check logic.
- Epoch is hardcoded to Dec 22, 2024. By now (June 2026) that indexes past the 530th day. The code does currentDayIndex % WordLibrary.words.count so it cycles, but if the word count is small you'll get repeats fast. Check how many words are actually in the library.
- Stats are minimal: "Played" and "Won" only. No streaks, no guess distribution bar chart, no shareable emoji grid. For a Wordle clone the emoji grid is table stakes. Add it.
Accessibility
Weak
- Zero .accessibilityLabel on keyboard keys. VoiceOver users hear "button" with zero context.
- Letter boxes have no accessibility traits. They should announce something like "letter A, correct position" or "letter A, not in word".
- Color guide explains blue/orange/gray meaning but offers nothing for colorblind players. LetterBoxView needs hatching or border shapes for .correct/.present/.absent states. Otherwise you are excluding roughly 8% of male players.
Code Quality Notes
- GameStats.guessDistribution is sized for 6 attempts but the game allows 5. Off-by-one. Harmless but sloppy.
- DailyGameManager is a singleton @ObservedObject. Works at this scale. If you add multiplayer or CloudKit later, switch to dependency injection with @StateObject.
- TamilUtils hardcodes vowel/consonant arrays. The abstraction is good but I don't see unit tests for compound characters. Add them.
3/5. Clean re-brand, solid Tamil UX, but debug shipping, minimal stats, and weak accessibility.
Finger Doodles (ThumbDraw Kid-friendly branch)
Thumb-based drawing app for kids. SPM architecture with ThumbDrawFeature package. Onboarding with 4 slides, animal/component library, canvas with thumb print shapes.
Visual Design
Warm & Friendly
- Onboarding uses peachy-pink gradient backgrounds. Looks hand-made, not corporate. A good fit for kids.
- Orange-red gradient CTA buttons with white text. High contrast, hard to miss.
- Hand icon in onboarding is a custom SVG. Consistent with the thumb mechanic.
- I couldn't capture live canvas screenshots from the simulator due to launch conflicts. You'll need to test the actual drawing UI on a device.
Architecture
SPM
- ThumbDrawPackage is a local SPM library. ThumbDrawFeature separates core logic from the app target. Reusable if you ever split the package out to another app.
- SVGImageLoader.swift and PDFImageLoader.swift as dual loaders is actually useful. SVG for sharp icons, PDF for dual-resolution assets.
Interaction Design
Needs Verification
- Onboarding has 4 pages and a "Skip" button. The skip button is critical for a kids app; forced tutorials for young users are a retention killer.
- Thumb drawing mechanic claims "Press your thumb to create unique shapes." The concept is a physical press plus haptic feedback. I cannot verify this without the full sim canvas, but palm rejection must work. If a small palm ridge registers on the canvas you will get stray marks on every session. Test with your actual thumb, not just a mouse pointer.
- Component library (ComponentLibraryView + ComponentPlacementView) implies sticker drag-and-drop. You need to verify two things: z-order on overlapping stickers, and whether a tap to place conflicts with the thumb-draw gesture. If both use pan/drag, they will collide.
Kid-Specific UX
Well Thought Out
- Dedicated "Kid-friendly" branch is correct. Kids UX should not live on master where regular feature development can break it accidentally.
- Animal data model (AnimalData.swift) suggests preset stamps shapes. Younger kids (pre-readers) would benefit from audio labels. "Dog" spoken out loud when tapped is low effort to add and high value for 3-5 year olds.
- Buttons in KidCanvasViews.swift need to be at least 44pt per HIG, but for kids under 7 I would push to 56pt. Small tap targets frustrate young users quickly.
Code Quality Notes
- CanvasFrameKey.swift uses PreferenceKey for geometry reading. Good for responsive canvas sizing.
- Models.swift is generic naming. Rename to DrawingLayer.swift or CanvasState.swift depending on what it actually holds. Generic names make large projects harder to navigate.
- Package has ThumbDrawFeatureTests target. See if it has tests or if it's just empty boilerplate. Empty test targets are worse than nothing because they give false confidence.
3/5. Good SPM architecture and kid onboarding, but I couldn't verify the core drawing canvas. Needs gesture refinement and Accessibility Inspector pass.
Side by Side
| Aspect | Sol Vilaiyattu | Finger Doodles |
| Onboarding | 4-page TabView, bilingual | 4-page slides, warm gradients |
| Color System | Blue/Orange re-brand | Peach/Orange gradients |
| Accessibility | No labels on keyboard | Unverified |
| Shareability | No emoji grid | N/A |
| Debug Code | canPlayToday() = true | Unknown |
| Architecture | Monolithic | SPM package |
What to Fix First
- Sol Vilaiyattu: Uncomment canPlayToday(). Add emoji results grid. Add .accessibilityLabel to keyboard.
- Finger Doodles: Verify canvas palm rejection. Test with actual thumb. Increase tap targets to 56pt if under-7 is your target. Add audio labels to animal stamps.
- Both: Run Accessibility Inspector. Every interactive element needs a label or hint.
Review by Agent Tina · Source code analysis + simulator screenshots