Skip to content

gikwegbu/shiftUp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ShiftUp

ShiftUp Logo

UK Hospitality Shift Management & Scheduling App

A comprehensive mobile application for the UK hospitality industry that empowers managers to build rosters and staff to manage their working lives β€” all from a single, beautifully designed app.


Table of Contents


Overview

ShiftUp is a Flutter mobile application built specifically for the UK hospitality sector. It provides two distinct role-based experiences:

Role Description
Manager Create and publish rosters, manage staff, approve shift swaps, track clock in/out, view reports
Staff View upcoming shifts, clock in/out with geofencing, set availability, request swaps, view pay summaries

The app is built on a real-time Firebase backend with full offline support via Hive local storage.


Features

Manager

  • πŸ“… Roster Management β€” Calendar-based shift creation, editing and deletion
  • πŸ‘₯ Team Overview β€” Staff directory with roles, contact info and status
  • πŸ”„ Shift Swap Approval β€” Review and approve/decline staff swap requests
  • πŸ“Š Reports β€” Earnings summaries, hours worked, and coverage analytics
  • πŸ“² Push Notifications β€” Real-time alerts for clock-ins, swap requests, and absence

Staff

  • 🏠 Dashboard β€” Active shift card, upcoming shifts, quick actions
  • πŸ“‹ My Shifts β€” Tabbed upcoming / past shift view with estimated pay
  • πŸ‘† Clock In / Out β€” One-tap fingerprint-style clock button with geofence verification
  • πŸ—“οΈ Availability β€” Tap-to-set calendar indicating available and unavailable days
  • πŸ’° Pay Summary β€” Monthly earnings chart, weekly breakdown, downloadable payslips
  • πŸ”” Notifications β€” Colour-coded alerts (reminders, swaps, clock confirmations)

Architecture

ShiftUp follows the MVVM + Repository Pattern with a feature-first folder structure:

Presentation (Screens / Widgets)
      β”‚
      β–Ό
  ViewModels  ←──  Riverpod StateNotifier Providers
      β”‚
      β–Ό
  Repository  ←──  Abstracts data sources
      β”‚
  β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β”
  β”‚        β”‚
Firebase  Hive
(remote) (local/cache)
  • State Management: Riverpod v2 (StateNotifierProvider)
  • Navigation: GoRouter with StatefulShellRoute for role-based tab navigation
  • Data: Firestore (real-time streams) + Hive (offline cache)

Tech Stack

Category Package Version
UI Framework Flutter 3.x
State Management flutter_riverpod ^2.5
Navigation go_router ^13
Backend Firebase Auth + Firestore + Storage Latest
Crash Reporting firebase_crashlytics ^4.0
Push Notifications firebase_messaging ^15
Local Storage hive_flutter ^1.1
Charts fl_chart ^0.68
Calendar table_calendar ^3.1
Animations flutter_animate ^4.5
Typography google_fonts ^6
QR qr_flutter + mobile_scanner Latest
Location geolocator ^12
Code Generation build_runner, riverpod_generator -

Project Structure

shift_up/
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”œβ”€β”€ constants/       # AppColors, AppSizes
β”‚   β”‚   β”œβ”€β”€ router/          # GoRouter configuration
β”‚   β”‚   β”œβ”€β”€ services/        # HiveService
β”‚   β”‚   β”œβ”€β”€ theme/           # AppTheme (Material 3 dark)
β”‚   β”‚   └── widgets/         # AppButton, AppTextField
β”‚   β”œβ”€β”€ features/
β”‚   β”‚   β”œβ”€β”€ auth/            # Login, Register, Splash + AuthViewModel
β”‚   β”‚   β”œβ”€β”€ manager/         # Dashboard, Roster, Shell
β”‚   β”‚   β”œβ”€β”€ staff/           # Dashboard, Shifts, Clock, Availability, Pay
β”‚   β”‚   └── shared/          # ShiftModel, NotificationModel, repositories
β”‚   └── main.dart
β”œβ”€β”€ test/
β”‚   β”œβ”€β”€ unit/                # Model + ViewModel unit tests
β”‚   └── widget/              # Screen widget tests
└── pubspec.yaml

Prerequisites

Ensure the following are installed before cloning:

Tool Minimum Version Install
Flutter SDK 3.19.0+ flutter.dev/install
Dart SDK 3.3.0+ Bundled with Flutter
Xcode (iOS/macOS) 15+ Mac App Store
Android Studio 2023+ developer.android.com
Firebase CLI Latest npm install -g firebase-tools
FlutterFire CLI Latest dart pub global activate flutterfire_cli

Getting Started

1. Clone the repository

git clone https://github.com/georgeikwegbu/shift_up.git
cd shift_up

2. Install dependencies

flutter pub get

3. Configure Firebase (see Firebase Configuration)

4. Create required asset directories

mkdir -p assets/images assets/icons assets/animations assets/fonts

Note: Font files (PlusJakartaSans) are loaded via google_fonts at runtime, so no manual font installation is required.

5. Run the app

# Development (debug)
flutter run

# Target a specific device
flutter run -d <device-id>

# List available devices
flutter devices

6. Build for production

# Android APK
flutter build apk --release

# Android App Bundle (Play Store)
flutter build appbundle --release

# iOS (requires macOS + Xcode)
flutter build ios --release

Firebase Configuration

ShiftUp requires a Firebase project with the following services enabled:

  • Authentication β€” Email/Password sign-in
  • Cloud Firestore β€” Primary database
  • Firebase Storage β€” Profile avatars
  • Firebase Cloud Messaging β€” Push notifications

Steps

# 1. Log in to Firebase
firebase login

# 2. From the project root, run FlutterFire configure
flutterfire configure

# This will generate:
# - android/app/google-services.json
# - ios/Runner/GoogleService-Info.plist
# - lib/firebase_options.dart  (optional, for multi-platform)

⚠️ Never commit google-services.json, GoogleService-Info.plist or firebase_options.dart to version control. They are listed in .gitignore.

Required Firestore Collections

Collection Description
users User profiles (role, venue, hourly rate)
shifts Shift records (staff assignments, clock in/out)
notifications User notification records
venues Venue/location records

Recommended Firestore Security Rules (starter)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
    match /shifts/{shiftId} {
      allow read: if request.auth != null;
      allow write: if request.auth != null;
    }
  }
}

Running Tests

# Run all tests
flutter test

# Run only unit tests
flutter test test/unit/

# Run only widget tests
flutter test test/widget/

# Run with coverage
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html

# Run a specific test file
flutter test test/unit/models_test.dart

Test Coverage

Test File What It Tests
test/unit/models_test.dart UserModel & ShiftModel β€” fromMap, toMap, computed properties, copyWith
test/unit/auth_view_model_test.dart AuthState + AuthViewModel β€” all state transitions, error parsing
test/widget/auth_screens_test.dart LoginScreen & RegisterScreen β€” rendering, validation, loading states

Licenses & Third-Party Packages

This project makes use of the following open-source packages, each governed by their respective licenses:

Package License
flutter BSD 3-Clause
flutter_riverpod MIT
go_router BSD 3-Clause
firebase_core, firebase_auth, cloud_firestore, firebase_storage, firebase_messaging Apache 2.0
hive_flutter Apache 2.0
google_fonts Apache 2.0
fl_chart MIT
table_calendar Apache 2.0
flutter_animate MIT
intl BSD 3-Clause
geolocator MIT
mobile_scanner MIT
qr_flutter BSD 3-Clause
flutter_local_notifications BSD 3-Clause
uuid MIT
logger MIT
permission_handler MIT
cached_network_image MIT
shimmer BSD 3-Clause
lottie Apache 2.0

Full license texts for all dependencies are available by running:

flutter pub deps --style=list

Disclaimer

USE AT YOUR OWN RISK.

This software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement.

The author shall not be held liable for any claim, damages, or other liability β€” whether in an action of contract, tort, or otherwise β€” arising from, out of, or in connection with the software or the use or other dealings in the software.

By cloning, forking, or otherwise using this codebase, you agree that you are doing so entirely on your own terms and at your own risk. The author accepts no legal, financial, or operational responsibility for any outcomes resulting from the use of this software in any environment, including production.

This project is not affiliated with, endorsed by, or sponsored by Flutter, Google, Firebase, or any other third-party service mentioned herein.


Author

George Ikwegbu
Senior Flutter / Mobile Engineer
🌐 gikwegbu.netlify.app/ Β· πŸ’Ό LinkedIn Β· πŸ™ GitHub


Copyright Β© 2026 George Ikwegbu. All rights reserved.

Unauthorised copying, modification, or distribution of this software, in whole or in part, is strictly prohibited without the express written permission of the author.

About

A UK Hospitality Shift Management & Scheduling App

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages