LingoLog is a high-fidelity iOS application designed for intermediate language learners who prioritize immersion. Unlike flashcard apps that rely on pre-built decks, LingoLog empowers users to capture vocabulary from their daily lives—K-dramas, podcasts, or street signs—and master them using a scientifically-backed Spaced Repetition System (SRS).
| Dashboard | Add Word | Quiz |
|---|---|---|
| At-a-glance stats on your study streak and upcoming reviews | Real-time translation powered by Google Cloud Translation | Test your vocabulary with spaced repetition quizzes |
- Mastery Calibration: A 5-level system that tracks your familiarity with each word.
- Dynamic Scheduling: Review intervals expand as mastery increases (1, 3, 7, 14, 30 days), optimizing long-term retention.
- Smart Quizzing: The app dynamically filters "Due for Review" words, ensuring you only study what you're about to forget.
- Real-time Translation: Google Cloud Translation Basic v2, protected behind a Firebase HTTPS proxy.
- Context Tagging: Users can record where they encountered a word (e.g., "In a restaurant menu in Seoul"), creating stronger mental associations.
- Glassmorphism Design: A custom design system built in SwiftUI using vibrant gradients, blurs, and micro-animations.
- Dynamic Dashboard: At-a-glance stats on your study streak, word count, and upcoming reviews.
LingoLog is built with a focus on clean code and modern iOS best practices:
- SwiftUI: Utilizes a declarative UI approach with custom
ViewModifiersfor a consistent design system. - Core Data: Local-first persistence handling complex queries for SRS scheduling and distinctive language filtering.
- MVVM Architecture: Ensures a clean separation between business logic, data management, and the view layer.
- Service-Oriented Design: Encapsulated network logic for Firebase-backed services, with provider API keys held server-side.
Handling real-time translation feedback while ensuring the UI remained responsive required deep dives into @StateObject and @Published patterns, specifically when managing the lifecycle of the TranslationService.
Implementing a performant "Next Review Date" calculation directly within Core Data predicates allowed the app to remain snappy even as the vocabulary list grows into the thousands.
- Xcode 15+ (with iOS 17+ SDK)
- A Firebase project with Cloud Functions and App Check configured
- Google Cloud Translation API enabled, with an API key stored as a Firebase Functions secret
-
Clone the repository:
git clone https://github.com/MinjaeKim09/LingoLog.git cd LingoLog -
Configure Firebase services:
- Deploy the Firebase Functions after setting
GOOGLE_TRANSLATE_API_KEYas a Firebase secret and configuringIOS_APP_ID. Seefunctions/README.mdfor the exact endpoint contract and App Check setup. - Set
TranslationFunctionURLandDailyStoriesFunctionURLinLingoLog/AppConfig.plistto the deployed HTTPS endpoints. The app contains no provider API key and does not load a local secrets plist.
- Deploy the Firebase Functions after setting
-
Retire Azure safely:
- Deploy and validate the Firebase translation proxy first, then ship the app version that uses it.
- Monitor function errors and Google usage after release.
- Revoke the Azure Translator key only after the migration window for older app versions has closed.
-
Open and run:
- Open
LingoLog.xcodeprojin Xcode. - Select your target device or simulator.
- Build and Run (⌘R).
- Open
This project is licensed under the MIT License - see the LICENSE file for details.


