Our Spring Days is a Flutter travel memory map for couples who travel with a dog. It brings routes, pet-friendly places, photos, partner markers, and mission records into one app flow.
Most map apps are good at place search, and most album apps are good at storing photos. This project focuses on the missing middle: helping a couple revisit where they walked, where they stopped, what they did, and which memories belong to that trip.
- Flutter developers looking for a route, photo, mission, and map app example
- Builders connecting Google Maps, Places, Firebase, Cloudinary, and local device APIs
- Product-minded developers designing location-based memories for couples, families, or travel groups
- Mission creation with time limits and photo verification
- Pet-friendly restaurant and cafe search with Naver Map deep links
- Partner-specific heart markers with create, edit, and delete flows
- Current location sharing between partners
- GPS route recording with distance, duration, and candidate stop detection
- Multi-photo album upload and mission photo organization
- Korean and Japanese UI support
- Flutter
- Dart
- Riverpod
- GoRouter
- Firebase Core
- Cloud Firestore
- Cloudinary unsigned upload preset
- Google Maps SDK
- Google Places API
- Naver Map URL Scheme
- Geolocator
- Image Picker
- Local Notifications
- Gallery Save
lib/
├─ core/
│ ├─ constants/
│ ├─ providers/
│ ├─ router/
│ ├─ services/
│ ├─ theme/
│ └─ utils/
├─ features/
│ ├─ album/
│ ├─ map/
│ ├─ mission/
│ ├─ record/
│ └─ route/
└─ shared/
flutter pub get
flutter test
flutter run \
--dart-define=GOOGLE_MAPS_API_KEY=YOUR_KEY \
--dart-define=CLOUDINARY_CLOUD_NAME=YOUR_CLOUD_NAME \
--dart-define=CLOUDINARY_UPLOAD_PRESET=YOUR_UPLOAD_PRESET \
--dart-define=PARTNER_A_ID=PARTNER_A \
--dart-define=PARTNER_B_ID=PARTNER_B \
--dart-define=COUPLE_ID=DEMO_COUPLE \
--dart-define=APP_PACKAGE_NAME=com.bibiandus.ourspringdaysFor Android, add the Google Maps key to android/local.properties.
GOOGLE_MAPS_API_KEY=YOUR_KEYandroid/local.properties is local configuration and should not be committed.
Firebase Android config should be stored locally at android/app/google-services.json. Do not commit that file to a public repository.
Do not commit:
- Firebase project IDs, app IDs, or API keys
- Google Maps / Places API keys
- Cloudinary cloud names or upload presets
- Real user identifiers, private location history, or personal photos
- Release APK or AAB files
Example build configuration is documented in dart_defines.example.json.
- Project overview
- Requirements
- User scenarios
- Feature specification
- Architecture
- Database design
- API / integration spec
- UI / UX design
- Development plan
- Test plan
- Deployment guide
- Troubleshooting
- Retrospective
flutter analyze
flutter test
flutter build apk --releaseCurrent tests focus on provider behavior and app-load smoke coverage.
See TODO.md for planned improvements.
- Report bugs or setup problems in Issues.
- Share product direction, UX feedback, or feature ideas in Discussions.
- Small documentation fixes and focused example improvements are welcome as pull requests.
No explicit license is currently provided. If this project is intended for open reuse, adding MIT or Apache-2.0 is recommended.