Encore is a modern iOS concert tracker built with SwiftUI, SwiftData and MVVM. It lets you keep track of the concerts you've attended, save upcoming shows, capture ratings, notes and setlists and revisit your live music history anytime.
Encore is designed to turn a collection of concert memories into a personal, searchable history of live music experiences.
Encore is a personal concert tracking app designed for people who want to keep a record of their live music experiences.
The app separates concerts into two main categories:
- ๐ค Attended โ Keep track of shows you've already experienced.
- ๐ Upcoming โ Save concerts you plan to attend.
Each concert can contain details such as the artist, venue, city, date, status, rating, notes and setlist.
Encore also provides a guided onboarding experience, notification permission handling, searchable concert history, editable show details, setlist management, concert statistics and the ability to export your attended concert history through the native iOS share sheet.
The project was built with a focus on clean architecture, reusable SwiftUI components, reactive data flow and native iOS frameworks.
Encore was built to explore and demonstrate:
- Building a complete iOS application with SwiftUI
- Implementing MVVM architecture
- Persisting structured data with SwiftData
- Managing state using modern SwiftUI property wrappers
- Building reusable and composable UI components
- Implementing navigation and sheet-based workflows
- Working with system APIs such as UserNotifications
- Creating a polished, state-driven user experience
- Add new concerts with artist, venue, city, date and status.
- Edit existing concert information.
- Delete concerts with confirmation.
- Automatically separate shows into Attended and Upcoming.
- Mark upcoming concerts as attended.
- Sort attended shows by date.
- Sort upcoming shows chronologically.
- Search attended concerts by:
- Artist
- Venue
- City
- Case-insensitive search for a smoother user experience.
- Context-aware empty states for both empty history and unsuccessful searches.
- Rate attended concerts using a reusable 5-star rating component.
- Add optional notes to individual concerts.
- Update ratings directly from the concert details screen.
- Add songs to a concert's setlist.
- Delete songs from a setlist.
- Reorder songs using drag-and-drop.
- Display setlist entries with numbered positions.
- Maintain a dedicated list of concerts you plan to attend.
- Quickly mark a show as attended using swipe actions.
- Optionally add a rating when marking a show as attended.
- Request notification permission during onboarding.
- View and manage notification status from Settings.
- Sync the UI with the current iOS notification authorization status.
The Settings screen provides:
- Total shows attended
- Total upcoming shows
- Shows attended this year
- Most frequently seen artist
- Export attended concert history using the native iOS
ShareLink. - Generate a clean text-based concert history sorted by date.
- Multi-page onboarding experience for first-time users.
- Introduces the core features of Encore.
- Notification permission request integrated into onboarding.
- Onboarding completion persisted using
@AppStorage.
- Three main tabs:
- Attended
- Upcoming
- Settings
- Independent
NavigationStackfor each tab. - Navigation from concert lists to detailed concert information.
- Sheet-based workflows for adding and editing shows.
Encore uses reusable SwiftUI components including:
ShowRowViewStarRatingViewEmptyStateViewOnboardingPageViewOnboardingNotificationsPageMarkAttendedSheet
|
Onboarding |
Notifications |
Attended |
|
Add Show |
Show Details |
Upcoming |
|
Settings |
Mark Attended |
| Technology | Purpose |
|---|---|
| Swift | Primary programming language |
| SwiftUI | Declarative UI framework for building the application interface |
| SwiftData | Local persistence and reactive data management |
| MVVM | Architecture for separating UI, state and business logic |
| Observation Framework | Reactive state management using @Observable |
| UserNotifications | Requesting and managing notification permissions |
| AppStorage | Persisting lightweight app preferences such as onboarding completion |
| NavigationStack | Type-safe navigation between screens |
| ShareLink | Native iOS sharing and concert-history export |
| Xcode | Development environment and project management |
Encore follows the MVVM (ModelโViewโViewModel) architecture.
โโโโโโโโโโโโโโโโโโโโโโโ
โ Views โ
โ SwiftUI UI โ
โโโโโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโ
โ ViewModels โ
โ State & screen logicโ
โโโโโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโ
โ Model โ
โ Show + SwiftData โ
โโโโโโโโโโโโโโโโโโโโโโโ
Encore/
โโโ Models/
โ โโโ Show.swift
โ
โโโ ViewModels/
โ โโโ AttendedViewModel.swift
โ โโโ UpcomingViewModel.swift
โ โโโ AddEditShowViewModel.swift
โ โโโ SettingsViewModel.swift
โ
โโโ Views/
โ โโโ AttendedView.swift
โ โโโ UpcomingView.swift
โ โโโ ShowDetailView.swift
โ โโโ AddEditShowView.swift
โ โโโ SettingsView.swift
โ โโโ MainTabView.swift
โ โโโ Reusable Components
โ
โโโ Resources/
โ โโโ Assets.xcassets
โ
โโโ Screenshots/
โ โโโ Onboarding.png
โ โโโ Notifications.png
โ โโโ Attended.png
โ โโโ Add Show.png
โ โโโ Show Details.png
โ โโโ Upcoming.png
โ โโโ Settings.png
โ โโโ Mark Attended.png
โ
โโโ EncoreApp.swift
โโโ Info.plist
โโโ Encore.xcodeproj
Encore uses SwiftData for local persistence, allowing concert information to remain available between app launches.
The Show model is marked with @Model and stores all information associated with a concert, including its artist, venue, date, status, rating, notes and setlist.
โโโโโโโโโโโโโโโโโโโ
โ SwiftData โ
โ ModelContainerโ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ModelContext โ
โ Insert / Delete โ
โ / Update โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ @Query โ
โ Fetch & Observe โ
โ Shows โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ SwiftUI View โ
โ Reactive UI โ
โโโโโโโโโโโโโโโโโโโ
- macOS with Xcode installed
- iOS Simulator or a physical iOS device
- Xcode version compatible with the Swift and SwiftUI versions used by the project
- Clone the repository:
git clone https://github.com/Vallen328/Encore-Concert-Tracker.git- Navigate to the project:
cd Encore-Concert-Tracker- Open the Xcode project:
Encore.xcodeproj- Select an iOS Simulator or a connected iPhone.
- Build and run the application using Xcode.
- Modern SwiftUI state management using
@State,@Binding,@Bindable,@Environment,@Queryand@AppStorage. - MVVM architecture with dedicated ViewModels for screen-level state and logic.
- SwiftData persistence with reactive queries and
ModelContext-based CRUD operations. - Type-safe navigation using
NavigationStackandnavigationDestination. - Reusable SwiftUI components for show rows, ratings, empty states and onboarding pages.
- Form validation for creating and editing concert records.
- Native iOS APIs including
UserNotificationsandShareLink. - Reactive UI updates where changes to persisted concert data are automatically reflected in the relevant views.
- Reusable and maintainable code structure separating models, ViewModels, views and resources.
Potential improvements for future versions of Encore include:
- โ๏ธ CloudKit synchronization โ Sync concert history across the user's Apple devices.
- ๐ Automatic show reminders โ Schedule local notifications before upcoming concerts.
- ๐ซ Ticket & poster attachments โ Store ticket information, concert posters or photos with each show.
- ๐ Venue integration โ Add maps and location information for concert venues.
- ๐ Advanced filtering โ Filter concerts by artist, city, venue, year or rating.
- ๐ Enhanced statistics โ Add charts for artists, venues, cities and yearly concert activity.
- ๐ต Setlist sharing โ Share individual concert details and setlists.
Vallen Dsouza
Computer Engineering graduate and software developer interested in iOS development, software engineering and building practical applications.
- GitHub: @Vallen328
โญ If you found Encore interesting, consider giving the repository a star!
Built with โค๏ธ using SwiftUI and SwiftData.