A fun way for parents to manage children's chores and rewards. Track completed chores, award tokens, and automatically generate personalised audio for Yoto players to celebrate achievements.
🌐 https://choresandrewards.kids
Why did I create this?
This idea all started with a hand-drawn system on our fridge we developed for our son - ten little boxes and a big “Surprise!” at the end. Every time our son completed a chore, he’d proudly stick a sticker in one of the boxes. It actually worked and he loved the feeling of accomplishment and independence, and we loved seeing him so motivated! I've heard other parents also use this system successfully.
So when the Yoto developer challenge was announced, I thought, why not make a digital version that connects with the Yoto Player? I almost gave up on a handful of occasions, but persistence paid off and finally got something up and running that we've been using at home and enjoying.
As a simple overview, Chores and Rewards encourages independence and helps families turn everyday routines into fun, rewarding experiences. Kids complete chores, earn tokens, and unlock surprises through their Yoto Player, making good habits feel exciting and consistent for both kids and parents.
User information
Initial Setup
• Create your parent account at choresandrewards.kids
• Connect your Yoto account when prompted during onboarding/setup
• Add your children’s profiles (names and ages and generate a chores & rewards card)
Setting Up Chores
• Create age-appropriate chores for each child
• Assign specific token values to each chore
• Set up recurring chores (daily, weekly, or one-time)
Tracking Progress
• Parents can mark chores as complete
• Watch tokens accumulate in real-time
• Set reward milestones for extra motivation
Setting Up Rewards
• Can create a reward e.g. “Cinema Trip” for each child
• Can set a token threshold for each award
• Upon reaching a token threshold, the reward can be manually unlocked by the parent
• A congratulations message announcing the reward will be prepended to the next announcement/card update for the child
Technical information
Chores & Rewards is built as a modern web application using Elixir/Phoenix LiveView, providing real-time updates and a responsive user experience across all devices. The application integrates seamlessly with Yoto's API ecosystem using OAuth 2.0 for secure authentication and authorization.
Data storage
Data Accessed from Yoto
Via OAuth API:
• User Profile: Yoto account email and username (read-only)
• Library Content: List of existing cards and playlists (read-only)
• Device Information: Device names and IDs for card linking (read-only)
• Generated Cards: References to cards created by our app (read/write)
OAuth Tokens:
• Access Token: Short-lived token for API access
• Refresh Token: Long-lived token for obtaining new access tokens
Data Collected by Our App
Parent Account Data:
• Email address
• Password (hashed using bcrypt)
• Name (optional)
• Account preferences and settings
Child Profile Data:
• First name only
• Age (optional)
• Assigned chores and completion history
• Points earned and reward milestones
• Generated reward card references
Application Data:
• Chore definitions and schedules
• Reward thresholds and rules
• Card generation history and messages
• Activity logs and timestamps
Storage Locations
Server-Side PostgreSQL Database (Fly.io):
• All user account information
• Child profiles and chore data
• Encrypted OAuth tokens (AES-256-GCM encryption)
• Card generation history and references
• Application configuration and settings
Session Storage (Encrypted Cookies):
• User authentication session
• Temporary OAuth state during authorization flow (30-minute expiration)
• Current organization context
No Browser Local Storage:
• No persistent data stored in browser localStorage
• No sensitive data in sessionStorage
• All state managed server-side via Phoenix LiveView WebSockets
Third-Party Storage:
• Yoto Servers: Generated audio content and card data (via their API)
• No Analytics Services: No Google Analytics, Facebook Pixel, or similar tracking
Data Retention
• Active Accounts: Data retained while account is active
• OAuth Tokens: Refreshed as needed, encrypted at rest
• Deleted Accounts: All data purged within 30 days of deletion
• Audit Logs: Security events retained for 90 days
• Generated Yoto Cards: Remain in user’s Yoto account (user-controlled)
Data Security
• Encryption at Rest: All sensitive data encrypted in database
• Encryption in Transit: TLS 1.2+ for all connections
• No Client-Side Storage: Prevents data leakage via browser
• Token Encryption: OAuth tokens encrypted with AES-256-GCM
• Environment-Based Keys: Encryption keys stored as environment variables, never in code