Skip to content

Latest commit

ย 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽต Encore

Your personal concert history, all in one place.

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.

Swift SwiftUI SwiftData Platform

Encore is designed to turn a collection of concert memories into a personal, searchable history of live music experiences.


๐Ÿ“– About

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.

๐ŸŽฏ Project Goals

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

โœจ Features

๐ŸŽค Concert Management

  • 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 & Filtering

  • 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.

โญ Ratings & Notes

  • Rate attended concerts using a reusable 5-star rating component.
  • Add optional notes to individual concerts.
  • Update ratings directly from the concert details screen.

๐ŸŽต Setlist Management

  • Add songs to a concert's setlist.
  • Delete songs from a setlist.
  • Reorder songs using drag-and-drop.
  • Display setlist entries with numbered positions.

๐Ÿ“… Upcoming Shows

  • 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.

๐Ÿ”” Notifications

  • Request notification permission during onboarding.
  • View and manage notification status from Settings.
  • Sync the UI with the current iOS notification authorization status.

๐Ÿ“Š Concert Statistics

The Settings screen provides:

  • Total shows attended
  • Total upcoming shows
  • Shows attended this year
  • Most frequently seen artist

๐Ÿ“ค Data Export

  • Export attended concert history using the native iOS ShareLink.
  • Generate a clean text-based concert history sorted by date.

๐Ÿ‘‹ Onboarding

  • 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.

๐Ÿงญ Navigation

  • Three main tabs:
    • Attended
    • Upcoming
    • Settings
  • Independent NavigationStack for each tab.
  • Navigation from concert lists to detailed concert information.
  • Sheet-based workflows for adding and editing shows.

๐ŸŽจ Reusable UI Components

Encore uses reusable SwiftUI components including:

  • ShowRowView
  • StarRatingView
  • EmptyStateView
  • OnboardingPageView
  • OnboardingNotificationsPage
  • MarkAttendedSheet

๐Ÿ“ธ Screenshots

Onboarding & First Launch


Onboarding

Notifications

Attended

Concert Management


Add Show

Show Details

Upcoming

Settings & Attendance


Settings

Mark Attended

๐Ÿ› ๏ธ Tech Stack

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

๐Ÿ—๏ธ Architecture

Encore follows the MVVM (Modelโ€“Viewโ€“ViewModel) architecture.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚        Views        โ”‚
โ”‚      SwiftUI UI     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚     ViewModels      โ”‚
โ”‚ State & screen logicโ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚        Model        โ”‚
โ”‚ Show + SwiftData    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“‚ Project Structure

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

๐Ÿ’พ Data Persistence

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    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿš€ Getting Started

Requirements

  • macOS with Xcode installed
  • iOS Simulator or a physical iOS device
  • Xcode version compatible with the Swift and SwiftUI versions used by the project

Installation

  1. Clone the repository:
git clone https://github.com/Vallen328/Encore-Concert-Tracker.git
  1. Navigate to the project:
cd Encore-Concert-Tracker
  1. Open the Xcode project:
Encore.xcodeproj
  1. Select an iOS Simulator or a connected iPhone.
  2. Build and run the application using Xcode.

๐Ÿง  Key Technical Highlights

  • Modern SwiftUI state management using @State, @Binding, @Bindable, @Environment, @Query and @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 NavigationStack and navigationDestination.
  • Reusable SwiftUI components for show rows, ratings, empty states and onboarding pages.
  • Form validation for creating and editing concert records.
  • Native iOS APIs including UserNotifications and ShareLink.
  • 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.

๐Ÿ”ฎ Future Improvements

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.

๐Ÿ‘จโ€๐Ÿ’ป Author

Vallen Dsouza

Computer Engineering graduate and software developer interested in iOS development, software engineering and building practical applications.


โญ If you found Encore interesting, consider giving the repository a star!

Built with โค๏ธ using SwiftUI and SwiftData.

About

A modern iOS concert tracker built with SwiftUI, SwiftData and MVVM to manage attended and upcoming shows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages