Trey t c1c824f288 fix: completed care tasks reappearing as overdue after reopening
When a user marked a care task as complete, the task would disappear
from the upcoming tasks section. However, upon navigating away and
returning to the plant detail, the task would reappear as incomplete
and overdue.

The root cause was that PlantDetailView only used .task to load
schedule data, which runs once on first appearance. When the view was
recreated (e.g., after navigating back from the collection list), the
Core Data fetch could return stale data due to context isolation in
NSPersistentCloudKitContainer.

Added .onAppear to reload the care schedule from Core Data every time
the view appears, matching the pattern already used in TodayView.
Also exposed a refreshSchedule() method on the ViewModel for this
purpose.

Fixes #2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 10:13:08 -05:00
wip
2026-01-29 10:40:23 -06:00
2026-01-23 11:12:00 -06:00
2026-01-23 16:43:05 -06:00
wip
2026-01-29 10:40:23 -06:00

PlantTime

A plant identification and care management iOS app built with SwiftUI.

Features

  • Plant Identification - Identify plants using on-device ML (Core ML) with PlantNet API fallback
  • Plant Collection - Save and organize your identified plants
  • Room Organization - Group plants by room (Kitchen, Living Room, Bedroom, etc.)
  • Care Scheduling - Track watering, fertilizing, repotting, pruning, and pest control
  • Today View - Dashboard showing overdue and today's care tasks
  • Progress Photos - Capture growth photos with time-lapse playback
  • Photo Reminders - Scheduled reminders for progress photos (weekly, bi-weekly, monthly)
  • CloudKit Sync - Sync plants and care data across devices via iCloud
  • Dark Mode - Full dark mode support with semantic color tokens

Screenshots

Coming soon

Requirements

  • iOS 17.0+
  • Xcode 15.0+
  • Swift 5.9+

Architecture

Clean Architecture + MVVM with three layers:

Presentation (SwiftUI Views + ViewModels)
    ↓
Domain (Use Cases + Entities + Repository Protocols)
    ↓
Data (Repository Implementations + Data Sources)

Key patterns:

  • Dependency Injection via DIContainer
  • Actor-based concurrency for thread safety
  • Core Data + CloudKit for persistence and sync

Setup

  1. Clone the repository
  2. Open PlantGuide.xcodeproj in Xcode
  3. Configure your API keys in App/Configuration/APIKeys.swift:
  4. Set up CloudKit:
    • Enable iCloud capability in Signing & Capabilities
    • Create CloudKit container: iCloud.com.yourteam.PlantGuide
  5. Build and run

ML Model

Uses PlantNet-300K ResNet50 for on-device plant classification:

  • Input: 224x224 RGB image
  • Output: 1,081 plant species probabilities

License

MIT

Description
No description provided
Readme 823 KiB
Languages
Swift 84.4%
Cython 15.6%