iOS flight deal alert app with iOS 26 @Observable patterns + FastAPI backend
FareLens is a modern iOS application that helps travelers discover and track flight deals in real-time. Built with SwiftUI and iOS 26's new @Observable macro, it demonstrates cutting-edge iOS development patterns and best practices.
- Real-time Flight Deal Alerts - Get notified when prices drop on your favorite routes
- Smart Queue System - Intelligent background processing for deal updates
- Beautiful UI - Modern design system with liquid glass aesthetics
- iOS 26 Patterns - Built with
@Observable,@Bindable, and@Environment - Type-Safe Architecture - Leverages Swift's type system for robust code
- Comprehensive Testing - Unit tests with high coverage
Coming soon
- iOS 17.0+
- Xcode 15.0+
- Swift 5.9+
- macOS 14.0+ (for development)
-
Clone the repository
git clone https://github.com/astrion-studio/FareLens.git cd FareLens -
Open in Xcode
open ios-app/FareLens.xcodeproj
-
Build and Run
- Select your target device or simulator
- Press
Cmd + Rto build and run
cd ios-app
xcodebuild test -scheme FareLens -destination 'platform=iOS Simulator,name=iPhone 15 Pro'Or use Xcode's Test Navigator (Cmd + 6) and click the play button.
FareLens follows a clean, modular architecture:
ios-app/FareLens/
├── App/ # App entry point and configuration
├── Core/ # Core utilities, networking, storage
├── Data/ # Data layer (repositories, models)
├── DesignSystem/ # Reusable UI components and theme
├── Features/ # Feature modules (Deals, Alerts, etc.)
└── Resources/ # Assets, localization
- iOS 26 @Observable Pattern - Modern state management without
ObservableObject - Dependency Injection - Via
@Environmentfor testability - Repository Pattern - Abstracted data access layer
- Smart Queue Service - Background task processing
- Type-Safe Networking - Async/await with structured concurrency
For detailed architecture documentation, see ARCHITECTURE.md.
This project uses iOS 26's new observation framework:
@Observable
final class DealsViewModel {
var deals: [Deal] = []
var isLoading = false
func fetchDeals() async {
isLoading = true
// Automatic UI updates, no @Published needed!
deals = await repository.fetchDeals()
isLoading = false
}
}Key Differences from ObservableObject:
- ✅ Use
@Observableinstead ofObservableObject - ✅ Use
@Bindablefor two-way bindings - ✅ Use
@Statefor local state - ❌ No
@Publishedproperties - ❌ No
@StateObjector@ObservedObject
See iOS_26_PATTERNS.md for comprehensive examples.
We maintain high code quality standards:
- SwiftLint - Enforces Swift style guidelines
- SwiftFormat - Automatic code formatting
- CI/CD - Automated checks on every PR
- No force unwraps (
!) in production code - No print statements (use OSLog)
- No SwiftUI previews with hardcoded data
- No force unwraps (
- Code Review - Automated review via Codex
- Security Scanning - Dependabot, secret scanning, CodeQL
# Format code
swiftformat ios-app/FareLens/
# Lint code
swiftlint lint --path ios-app/FareLens/
# Run tests
xcodebuild test -scheme FareLens -destination 'platform=iOS Simulator,name=iPhone 15 Pro'We welcome contributions! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Follow code style - Use SwiftFormat and SwiftLint
- Write tests - Maintain or improve code coverage
- Follow iOS 26 patterns - See iOS_26_PATTERNS.md
- Commit with conventional commits - See Conventional Commits
- Open a Pull Request - Fill out the PR template completely
We use Conventional Commits for clear commit history:
feat: Add price alert notifications
fix: Resolve deal refresh crash
docs: Update architecture documentation
test: Add tests for SmartQueueService
refactor: Simplify DealsRepository
chore: Update dependencies
See CONTRIBUTING.md for detailed guidelines.
- ARCHITECTURE.md - Detailed architecture overview
- iOS_26_PATTERNS.md - iOS 26 @Observable patterns
- WORKFLOW.md - Development workflow guide
- API.md - Backend API documentation
- TOOLING_SETUP.md - Development tools setup
- GOLDEN_STANDARD_TODO.md - GitHub best practices checklist
- Language: Swift 5.9+
- UI Framework: SwiftUI
- State Management: @Observable (iOS 26)
- Networking: URLSession + async/await
- Testing: XCTest
- Code Quality: SwiftLint, SwiftFormat
- Framework: FastAPI (Python)
- Database: PostgreSQL
- Cache: Redis
- APIs: Flight search APIs
- iOS app core architecture
- Deal listing and detail views
- Smart queue background processing
- Unit tests
- CI/CD pipeline
- Backend API integration
- Push notifications
- Price tracking and alerts
- User authentication
- Favorites and saved searches
- App Store release
Copyright (c) 2024-2025 Astrion Studio. All Rights Reserved.
This is proprietary software. See the LICENSE file for details.
Note: This repository is temporarily public to utilize free GitHub security features during development. This does NOT grant any rights to use, modify, or distribute the code.
- Built with iOS 26 @Observable patterns
- Inspired by modern flight deal tracking services
- Designed with Apple's Human Interface Guidelines
- GitHub: @astrion-studio
- Issues: GitHub Issues
Made with ❤️ by Astrion Studio