Skip to content

MinjaeKim09/LingoLog

Repository files navigation

LingoLog

A Personal Language Learning Companion for the Immersion-Based Learner

License Language Platform Framework Database

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).


Demo

Dashboard View Add Word View Quiz View

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

Key Features

Intelligent Spaced Repetition (SRS)

  • 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.

Context-Aware Learning

  • 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.

Native User Experience

  • 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.

Technical Architecture

LingoLog is built with a focus on clean code and modern iOS best practices:

  • SwiftUI: Utilizes a declarative UI approach with custom ViewModifiers for 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.

Challenges & Learnings

1. Complex State in SwiftUI

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.

2. Spaced Repetition Logic in Core Data

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.


Getting Started

Prerequisites

  • 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

Setup

  1. Clone the repository:

    git clone https://github.com/MinjaeKim09/LingoLog.git
    cd LingoLog
  2. Configure Firebase services:

    • Deploy the Firebase Functions after setting GOOGLE_TRANSLATE_API_KEY as a Firebase secret and configuring IOS_APP_ID. See functions/README.md for the exact endpoint contract and App Check setup.
    • Set TranslationFunctionURL and DailyStoriesFunctionURL in LingoLog/AppConfig.plist to the deployed HTTPS endpoints. The app contains no provider API key and does not load a local secrets plist.
  3. 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.
  4. Open and run:

    • Open LingoLog.xcodeproj in Xcode.
    • Select your target device or simulator.
    • Build and Run (⌘R).

License

This project is licensed under the MIT License - see the LICENSE file for details.


Contact

Minjae Kim - LinkedIn - Email

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages