Cairn is a macOS SwiftUI app for fast, keyboard-driven assignment tracking backed by Supabase/Postgres. The project is structured as a monorepo that contains the Swift client, Supabase schema/migrations, and tooling required for local development.
- Dark-mode only UI modeled after native macOS productivity apps
- Inline editing for every assignment field with keyboard shortcuts for navigation, deletion, and quick-add
- Supabase/Postgres backend with migrations and seed data checked into the repo
- Quick-add row pinned to the top of the list for rapid entry without modal dialogs
See the inline comments in the specification or browse the directory tree for a tour of the modules:
Cairn/
├── Cairn/ # SwiftUI source
├── supabase/ # Database schema and config
├── scripts/ # Tooling for bootstrapping and formatting
├── docs/ # Architecture and user-facing documentation
└── Tests/ # Unit and UI tests
- Install Xcode 15 or newer plus the Swift toolchain.
- Install the Supabase CLI (
brew install supabase/tap/supabase). - Run
scripts/bootstrap.shfrom the repo root to install dependencies and copy config templates (Config/Environment.plistandsupabase/config/supabase.env). Populate those with your Supabase URL/anon key, or exportSUPABASE_URL/SUPABASE_ANON_KEYin your shell instead. - Open
Cairn.xcodeprojin Xcode and select the "Cairn" scheme to build and run. - Follow
docs/SUPABASE_SETUP.mdto start a local Supabase instance and run migrations.
Please read the docs in the docs/ folder for architecture details, coding conventions, and development workflows. Pull requests should include updated documentation and tests where applicable.
- GitHub Actions runs SwiftFormat in lint mode, SwiftLint (
--strict), andxcodebuild teston macOS runners with code signing disabled. - Match CI locally with:
brew install swiftformat swiftlint swiftformat --lint Cairn Tests swiftlint --strict xcodebuild -project Cairn.xcodeproj -scheme Cairn -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY="" test
MIT License. See LICENSE for details.