Trey t f59d81fc5a Widget word-of-day picks from master verb list filtered by user level
Previously the widget was picking from course VocabCards, which could
land on any course week and was showing unrelated phrases instead of the
verbs the user is actually studying.

Now the widget uses a new VerbStore.fetchVerbOfDay helper that:
- Expands the user's selectedLevel via VerbLevelGroup.dataLevels
- Runs a FetchDescriptor<Verb> filtered by those levels, sorted by rank
- Uses fetchCount + fetchOffset for a deterministic daily pick

The main app mirrors UserProgress.selectedLevel into the shared app
group UserDefaults (key "selectedVerbLevel") on every WidgetDataService
update, so the widget process can read it without touching the cloud
store.

WordOfDay.weekNumber was replaced with a more flexible subtitle: String
so widgets can display "Level: Basic" instead of course week numbers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:04:45 -05:00

Conjuga

A Spanish verb conjugation learning app for iOS. Practice all 20 tenses with spaced repetition, handwriting recognition, and vocabulary courses.

Features

  • Conjugation Practice — Flashcards, typing, multiple choice, handwriting, sentence building, and full table modes
  • Spaced Repetition — SM-2 algorithm tracks what you know and surfaces what you don't
  • 1,750 Verbs — From basic to expert, with irregular form highlighting
  • 20 Tenses — Every indicative, subjunctive, conditional, and imperative tense
  • Grammar Guide — 20 tense guides with conjugation tables + 20 grammar topic notes (Ser vs Estar, Por vs Para, etc.)
  • Vocabulary Courses — Weekly decks with example sentences
  • Progress Tracking — Streaks, daily goals, accuracy stats, and achievement badges
  • CloudKit Sync — Review progress syncs across devices
  • Widgets — Daily progress, word of the day, and weekly stats
  • Text-to-Speech — Hear any verb pronounced in Spanish

Architecture

  • SwiftUI + SwiftData with a dual-store configuration:
    • Local store — Reference data (verbs, forms, guides) seeded from JSON on first launch
    • Cloud store — User data (review cards, progress, streaks) synced via CloudKit
  • SharedModels package shared between the app and widget extension

Requirements

  • iOS 18+
  • Xcode 16+

Building

Open Conjuga/Conjuga.xcodeproj in Xcode and run on a simulator or device. Data seeds automatically on first launch.

Description
No description provided
Readme 13 MiB
Languages
Swift 91%
Python 6.1%
HTML 2.9%