A production-ready Flutter application connecting pet owners with trusted vets, dog walkers, and groomers — built solo, end to end, with pixel-perfect fidelity to the original design.
Pawffy is a full-featured pet services mobile app built for a US-based freelance client. It connects pet owners with vets, dog walkers, and groomers — handling everything from discovery and booking to in-app messaging and payments.
The entire app — architecture, state management, UI, and API integration — was designed and built solo, from Figma handoff to a shipped, production-ready product.
Design approach: Figma exports are used as precisely-overlaid background layers inside Flutter
Stackwidgets, giving the app 1:1 pixel fidelity to the original design files.
| Discovery | Booking | Payments | Communication |
|---|---|---|---|
| Home feed with categories | Vet appointments | Stripe checkout | Real-time chat |
| Search & filters | Dog walking sessions | Payment history | Conversation threads |
| GPS-based nearby listings | bookingType-driven flows |
Refund handling | Provider messaging |
| Service detail pages | Booking history | Secure card storage | — |
Also included: onboarding & OTP-verified auth, pet profile management, multi-address support, and a full settings/notifications section.
Full feature breakdown
Onboarding & Authentication
- Splash and multi-step onboarding flow
- Email sign up / sign in with validation
- Forgot password and OTP verification
- JWT-based session handling
Home & Discovery
- Dynamic home feed with service categories
- Search with location, rating, and service-type filters
- Real-time GPS for nearby vets and walkers
- Service and provider detail pages
Booking
- Single booking screen with
bookingType-driven logic for vet vs. dog-walking flows - Pet selection per booking
- Date and time scheduling
- Stripe-powered checkout and booking confirmation
Messaging
- Conversation list and real-time chat with providers
Profile & Pet Management
- Editable user profile
- Add/edit/delete pet profiles
- Multiple saved addresses
Settings
- Notification preferences, account, and privacy controls
| Layer | Choice |
|---|---|
| Framework | Flutter (Dart) |
| State Management | Riverpod (NotifierProvider pattern) |
| Typography | Google Fonts — Barlow |
| Location | geolocator + geocoding, shared GPS provider |
| Payments | Stripe SDK |
| Backend | REST API (Spring Boot) |
| Performance | RepaintBoundary on high-resolution assets |
lib/
├── main.dart
├── core/
│ ├── config/ # App-wide configuration & environment values
│ ├── networks/ # API service layer & network clients
│ ├── storage/ # Local storage (secure storage, caching)
│ └── utils/ # Shared helpers & extensions
└── features/
├── auth/ # Onboarding, login, register, OTP
├── booking/ # Vet & dog-walking booking flow
├── home/ # Home feed
├── message/ # Chat
├── notification/ # Notification handling & preferences
├── pets/ # Pet profile management
├── profile/ # User profile & addresses
├── search/ # Search & filters
└── vets/ # Vet discovery & detail pages
The project also ships with platform folders for iOS, macOS, and Linux, alongside a dedicated test/ directory.
Notable engineering decisions:
- A single shared GPS stream provider is consumed across every feature that needs location, avoiding redundant permission prompts and duplicate location listeners.
RepaintBoundarywraps high-res Figma-exported PNGs to keep scroll and animation performance smooth.- Booking logic branches on a single
bookingTypefield rather than duplicating screens, keeping the vet and dog-walking flows in one maintainable path. - Keyboard-aware layouts prevent content jumping when form fields gain focus.
- Dark-theme styling is explicitly isolated on dropdowns so system dark mode can't bleed into the UI unexpectedly.
- Flutter SDK
>=3.x - Dart
>=3.x - Android Studio or VS Code with the Flutter extension
- The Pawffy backend (Spring Boot) running locally or deployed
# Clone the repository
git clone https://github.com/mzaidiii/Pawffy_User.git
cd Pawffy_User
# Install dependencies
flutter pub get
# Run on a connected device or emulator
flutter runSet your environment values in lib/core/config.dart:
const String baseUrl = 'YOUR_BACKEND_BASE_URL';
const String stripeKey = 'YOUR_STRIPE_PUBLISHABLE_KEY';All core modules are implemented, tested, and ready for production deployment.
| Module | Status |
|---|---|
| Onboarding & Splash | ✅ Complete |
| Authentication (Sign Up / Sign In / OTP) | ✅ Complete |
| Home Feed & Service Discovery | ✅ Complete |
| Search & Filters | ✅ Complete |
| Booking Flow (Vet + Dog Walking) | ✅ Complete |
| Stripe Payment Integration | ✅ Complete |
| Messaging / Chat | ✅ Complete |
| User Profile & Pet Management | ✅ Complete |
| Address Management | ✅ Complete |
| Settings | ✅ Complete |
Mohammad Zaidi Flutter & Spring Boot Developer
- 🏆 SIH 2025 National Finalist — SymbioMed, validated by the Ministry of AYUSH
- 🐾 Solo-built Pawffy end to end for a US-based freelance client
- 📱 Delivers production Flutter apps and has run Flutter workshops
- 💡 Stack: Flutter · Dart · Spring Boot · Java · Firebase · MySQL · Docker · JWT