DEV Community

Cover image for Pawford Academy โ€” A SwiftUI Puppy Training App with ElevenLabs AI Voice ๐Ÿพ๐ŸŽ“
Gamya
Gamya

Posted on

Pawford Academy โ€” A SwiftUI Puppy Training App with ElevenLabs AI Voice ๐Ÿพ๐ŸŽ“

DEV Weekend Challenge: Dog Days Edition Submission ๐Ÿ•

This is a submission for Weekend Challenge: Dog Days Edition


What I Built

Pawford Academy โ€” Where good dogs become great dogs! ๐Ÿพ

A native iOS app built with SwiftUI that helps dog owners track their puppy's training journey. The app features an AI-powered voice coach powered by ElevenLabs that cheers your dog on after every training session, a daily mood tracker, and a graduation certificate when your pup completes all their sessions.

The idea came from a personal place. I had a black Labrador named Blacky when I was growing up โ€” he was my best friend. Building Pawford Academy was a way to honor that memory and create something genuinely useful for dog lovers everywhere. Whether you have a Golden Retriever, a Husky, a Chow Chow, or a Labrador like Blacky โ€” every dog deserves to graduate from Pawford Academy! ๐ŸŽ“

Key features:

  • Dog profile setup with name, breed (16 options!), and age
  • Daily mood tracker with 6 moods (Happy, Playful, Tired, Grumpy, Anxious, Calm)
  • Training session logger for 10 classic commands (Sit, Stay, Shake, Roll Over, and more)
  • ElevenLabs AI voice encouragement after every session and mood selection
  • Session complete celebration screen with paw print progress tracker (๐Ÿพ๐Ÿพ๐Ÿพ)
  • Graduation certificate when all sessions are complete โ€” complete with dog's name, breed, and Class of 2026!

Demo

๐ŸŽฅ Watch the full demo here:

Note: The simulator recording doesn't capture audio โ€” the ElevenLabs voice encouragement plays live in the app after each action! Judges who run the app will hear Pawford speak after every mood selection and training session. ๐Ÿ”Š

๐Ÿ”— GitHub: https://github.com/gamya-hub/PawfordAcademy


Code

GitHub logo gamya-hub / PawfordAcademy

SwiftUI puppy training app with ElevenLabs AI voice โ€” built for the DEV Weekend Challenge: Dog Days Edition ๐Ÿพ

๐Ÿพ Pawford Academy

Where good dogs become great dogs!

A beautiful SwiftUI iOS app that helps dog owners track their puppy's training journey โ€” complete with AI-powered voice encouragement using ElevenLabs, mood tracking, training session logging, and a graduation certificate when your pup completes all their sessions! ๐ŸŽ“

Built for the DEV Weekend Challenge: Dog Days Edition ๐Ÿ•


โœจ Features

๐Ÿถ Dog Profile Setup

  • Set up your dog's name, breed, and age
  • Choose from 16 popular breeds including Golden Retriever, Labrador, Husky, Chow Chow and more
  • Beautiful onboarding screen with warm orange gradient design

๐Ÿ˜Š Daily Mood Tracker

  • Track how your dog is feeling each day with 6 mood options: Happy, Playful, Tired, Grumpy, Anxious, and Calm
  • ElevenLabs AI voice responds to each mood selection with a warm, encouraging message
  • Mood badge displayed on the home screen

๐Ÿ“ Training Session Logger

  • Log training sessions for 10 classic commands: Sit, Stayโ€ฆ

How I Built It

Tech Stack:

  • SwiftUI โ€” Native iOS UI with warm orange gradient design throughout
  • ElevenLabs API โ€” Text-to-speech voice encouragement using the Bella voice
  • AVFoundation โ€” Audio playback for the ElevenLabs generated speech
  • Combine โ€” Reactive state with @Published and ObservableObject
  • URLSession โ€” Async networking for ElevenLabs API calls

The ElevenLabs integration was the most exciting part. Every time a user logs a training session or selects a mood, the app sends the text to the ElevenLabs API and plays back the warm, encouraging response. The voice counts down remaining sessions to graduation and delivers a special announcement when the dog completes all sessions.

Here's how simple the API call is in Swift:

let url = URL(string: "https://api.elevenlabs.io/v1/text-to-speech/\(voiceId)")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(apiKey, forHTTPHeaderField: "xi-api-key")

let body: [String: Any] = [
    "text": text,
    "model_id": "eleven_multilingual_v2",
    "voice_settings": ["stability": 0.5, "similarity_boost": 0.75]
]
Enter fullscreen mode Exit fullscreen mode

The app was built entirely from scratch during the challenge weekend. The graduation flow was my favourite feature to build โ€” the paw print progress tracker (๐Ÿพ๐Ÿพ๐Ÿพ filling up one by one) gives users a clear, delightful sense of progress toward their dog's big day.

One thing I'm proud of: The app uses @Published and ObservableObject for the ElevenLabs service, which means the UI shows a "Pawford is speaking..." indicator while the voice is playing โ€” a small detail that makes the AI feel alive and present.


Prize Categories

Best Use of ElevenLabs โ€” ElevenLabs powers the entire voice coaching experience in Pawford Academy. Every mood selection, every training session logged, and every graduation milestone is celebrated with a warm AI voice response generated in real time using the ElevenLabs text-to-speech API.


This article was written by me; AI was used to improve grammar and readability.

Top comments (4)

Collapse
 
merbayerp profile image
Mustafa ERBAY

What I like most here is that ElevenLabs isnโ€™t being used just because โ€œAI voiceโ€ sounds cool โ€” it actually fits the experience.

Training is repetitive by nature, so giving immediate voice feedback after each session can make the app feel much more alive than a normal tracker. The little โ€œPawford is speakingโ€ฆโ€ state is also a nice touch; those tiny feedback details are usually what separate a demo from something that feels like a real product.

And building it around the memory of Blacky gives the project something no API can generate: a reason for existing. ๐Ÿพ

Really nice combination of SwiftUI, voice interaction, and a genuinely personal idea. Good luck with the challenge! ๐ŸŽ“

Collapse
 
gamya_m profile image
Gamya

"A reason for existing" is exactly the framing that makes this comment mean so much, because that's what I kept coming back to while building it. The ElevenLabs integration could have been a gimmick, but training really is repetitive, and the voice feedback after each session was the difference between an app that tracks and an app that encourages. Those are genuinely different things.

The "Pawford is speaking..." indicator was one of those small details that felt almost too minor to bother with, but you're right that it's exactly the kind of thing that makes a demo feel like a product. The user knows something is happening, the app feels alive rather than frozen, and the moment the voice comes through it lands properly instead of feeling like it came from nowhere.

And yes, Blacky is the whole reason this exists. Thank you for seeing that. ๐Ÿ–ค๐Ÿพ๐ŸŒธ

Some comments may only be visible to logged-in visitors. Sign in to view all comments.