Skip to content

About

Retro 90s-styled iOS notes app built with SwiftUI, MVVM and Core Data.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

BoringNotes

A retro-styled iOS Notes app with a nostalgic 90s/2000s aesthetic. Built with SwiftUI, MVVM architecture, and Core Data.

Requirements

  • Xcode 15+
  • iOS 17.0+
  • Swift 5.9+

Setup

Option A: Using XcodeGen (Recommended)

  1. Install XcodeGen if you don't have it:

    brew install xcodegen
  2. Generate the Xcode project:

    cd BoringNotes
    xcodegen generate
  3. Open the generated project:

    open BoringNotes.xcodeproj
  4. Select your development team in Signing & Capabilities, then build and run.

Option B: Manual Xcode Setup

  1. Open Xcode and create a new project:

    • iOS > App
    • Product Name: BoringNotes
    • Interface: SwiftUI
    • Language: Swift
    • Storage: None (we use programmatic Core Data)
    • Uncheck "Include Tests" (we add them manually)
  2. Delete the auto-generated ContentView.swift and BoringNotesApp.swift.

  3. Drag the BoringNotes/ source folder into the Xcode project navigator.

    • Make sure "Copy items if needed" is checked.
    • Add to target: BoringNotes.
  4. Add a Unit Test target:

    • File > New > Target > Unit Testing Bundle
    • Name: BoringNotesTests
    • Drag the test files from BoringNotesTests/ into this target.
  5. Configure the project:

    • Set deployment target to iOS 17.0
    • Add NSFaceIDUsageDescription to Info.plist (already included)
    • Set the asset catalog in Build Settings
  6. Build and run.

Architecture

BoringNotes/
├── App/                     # App entry point, ContentView
├── Models/                  # Core Data entities, SortOption
├── Persistence/             # PersistenceController, NoteRepository
├── ViewModels/              # MVVM view models
├── Views/
│   ├── Notes/               # Notes list, editor, formatting toolbar
│   ├── Tags/                # Tag management
│   ├── Settings/            # Settings screen
│   └── Components/          # Reusable UI components
├── Theme/                   # RetroTheme, ThemeManager
├── Services/                # Haptics, Sound, Biometric, Spotlight, Import/Export
├── Utilities/               # Debouncer
└── Resources/               # Asset catalog

Key Patterns

  • MVVM: Views observe @Observable view models.
  • Repository Pattern: NoteRepository abstracts all Core Data operations.
  • Programmatic Core Data Model: No .xcdatamodeld file needed - the model is built in code with full migration support.
  • Debounced Autosave: Notes auto-save 1.5 seconds after the user stops typing, using background context writes.
  • Theme System: Three selectable retro themes with consistent styling applied via SwiftUI Environment.

Features

Core

  • Create, read, edit, and delete notes
  • Auto-save with debounce and "Saved" indicator
  • Tags with color coding and quick filters
  • Full-text search with highlighted matches
  • Pin and favorite notes
  • Sort by date, title, or pinned status
  • Markdown-style formatting with preview mode
  • Checklist support

Retro Themes

  • CRT Green: Dark background, green phosphor text, scanline overlay
  • Classic Paper: Warm paper background, blue ink text, grain texture
  • Terminal Amber: Black background, amber text, chunky borders

Security

  • Face ID / Touch ID lock for individual notes
  • Locked notes hide preview content in the list

Safety

  • Soft delete with 30-day "Recently Deleted" recovery
  • Auto-purge of old deleted notes

Import / Export

  • Import .txt and .md files
  • Export notes as plain text or Markdown
  • Share sheet integration

Accessibility

  • Dynamic Type support
  • VoiceOver labels on all interactive elements
  • Reduce Motion toggle disables scanlines and grain effects
  • High contrast maintained across all themes

Device Support

  • iPhone: Tab bar navigation (Notes, Tags, Settings)
  • iPad: NavigationSplitView with sidebar

Testing

Unit tests cover:

  • CRUDTests: Note and tag create, read, update, delete operations
  • AutosaveTests: Debouncer timing, cancellation, background save
  • TagFilterTests: Search, tag filtering, sorting, favorites, pinned
  • LockFlowTests: Lock/unlock state, authentication logic, edge cases

Run tests with Cmd+U in Xcode or:

xcodebuild test -scheme BoringNotes -destination 'platform=iOS Simulator,name=iPhone 16'

Configuration

All settings persist via UserDefaults:

  • Theme selection
  • Default sort order
  • Sound and haptic toggles
  • Face ID lock toggle
  • iCloud sync toggle (experimental)
  • Reduce motion preference

About

Retro 90s-styled iOS notes app built with SwiftUI, MVVM and Core Data.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages