Picture + Calendar = Picord
An iOS native app that transforms your photo library into a visual diary. Picord automatically organizes photos by date into a beautiful calendar interface, making it effortless to browse and reflect on daily memories.
Users take hundreds of photos that get lost in cluttered camera rolls. There's no simple, passive, aesthetically pleasing way to browse photos chronologically. Picord solves this by creating a low-effort, high-reward photo journaling experience.
- Monthly calendar interface with infinite scroll
- Visual indicators for dates with photos
- Curated dates show thumbnail previews
- Quick navigation to today
- Year/month picker for fast date selection
- Story Mode: Full-screen Instagram-style photo viewing
- Grid Mode: 3-column grid layout for curated photos
- Add journal entries to any date
- Edit and curate your favorite photos
- Smooth transitions between viewing modes
- See your photos on an interactive map
- Location-based photo clustering
- Tap markers to view photos from that location
- Explore your memories geographically
- Organize photos with custom tags
- Emoji support for visual categorization
- Filter photos by multiple tags
- Quick tag creation with MCEmojiPicker integration
- View all photos for a specific tag
- Chronological feed of all curated photos
- Reversed scroll (newest first)
- Date overlays on first photo of each day
- Seamless integration with story mode
- Platform: iOS 17.0+
- Language: Swift 5.9
- UI Framework: SwiftUI (100% native)
- Data Persistence: SwiftData
- Photos: PhotoKit (PHAsset, PHImageManager)
- Design Pattern: MVVM (Model-View-ViewModel)
Picord/
├── Models/ # Data models (DayEntry, Tag, etc.)
├── Views/ # SwiftUI views
│ ├── CalendarView.swift
│ ├── FeedView.swift
│ ├── DailyPhotoView.swift
│ ├── MapAnnotationView.swift
│ └── TagSelectorSheet.swift
├── ViewModels/ # Business logic
│ ├── CalendarViewModel.swift
│ ├── FeedViewModel.swift
│ └── MapViewModel.swift
├── Services/ # Core services
│ ├── PersistenceManager.swift
│ ├── PhotoLibraryManager.swift
│ └── LocationManager.swift
├── Utilities/ # Helpers and extensions
│ ├── DesignSystem.swift
│ ├── ImageLoader.swift
│ └── Extensions/
└── Resources/ # Assets and resources
PersistenceManager: Manages SwiftData operations for day entries, photo selections, tags, and locations.
PhotoLibraryManager: Handles PhotoKit integration, permission requests, and photo asset fetching.
ImageLoader: Async image loading with caching for optimal performance.
DesignSystem: Centralized design tokens (colors, typography, spacing, corner radius).
MapViewModel: Clustering logic for map annotations and location-based photo organization.
- MCEmojiPicker - macOS-style emoji picker for SwiftUI
Picord requires the following permissions:
- Photo Library Access: To display and organize your photos
- Location Services: To show photos on the map (optional)
Privacy Promise:
- Your photos never leave your device
- No cloud sync, no servers, no tracking
- All data stored locally using SwiftData
- No ads, no analytics, no data collection
- First Launch: Grant photo library access → App indexes your photos by date
- Browse Calendar: Swipe between months, tap dates to view photos
- Curate Memories: Select favorite photos, add journal entries
- Organize with Tags: Create custom tags with emojis, filter by category
- Explore Map: View photos on an interactive map by location
- Reflect Daily: Use the feed to scroll through your visual diary
- ✅ Calendar view with photo aggregation
- ✅ Daily photo display (Story & Grid modes)
- ✅ Feed view with chronological scrolling
- ✅ Map view with clustering
- ✅ Tag system with emoji support
- ✅ Journal entries for dates
- ✅ Native swipe gestures
- Week view alternative layout
- Month summary statistics
- Quick capture from calendar
- Favorites / starred dates
- Search & filter functionality
- First-time user experience (FTUE)
- Export and sharing features
- iCloud sync (optional)
For questions, feedback, or bug reports, please open an issue on GitHub.
Built with ❤️ using SwiftUI