Skip to content

Latest commit

 

History

History
143 lines (106 loc) · 4.2 KB

File metadata and controls

143 lines (106 loc) · 4.2 KB

Taco Tracker 🌮

An Android app for tracking your annual taco consumption with detailed ingredient tracking, favorites, and statistics.

Features

  • 📝 Log Meals - Track tacos by meal type (Breakfast, Lunch, Dinner, Snack)
  • 🥙 Ingredient Tracking - Multi-select ingredients for each taco
  • Favorites - Save frequently eaten meals as templates for quick entry
  • 📊 Statistics - View your taco consumption patterns
  • 📍 Location Tracking - Remember where you ate your tacos
  • 📝 Notes - Add custom notes to any meal
  • 🔍 Search History - Filter meals by location, ingredient, or meal type
  • 💾 CSV Export - Backup your data via Share to Google Drive or Save to Device
  • 🎉 Milestones - Celebrate taco achievements with fun facts
  • 📷 Photo Attachments - Attach a photo from camera or gallery to any meal
  • 📤 Stats Sharing - Generate and share a taco stats infographic
  • 🏅 Achievement/Medal System - Earn Bronze through Platinum medals across multiple tracks

Tech Stack

  • Language: Kotlin
  • UI: Jetpack Compose with Material 3
  • Architecture: MVVM (ViewModel + Repository pattern)
  • Database: Room (SQLite)
  • Navigation: Jetpack Navigation Compose
  • Async: Kotlin Coroutines + Flow
  • Dependency Injection: Manual (AppContainer pattern)
  • Image Loading: Coil
  • Preferences: DataStore

Database Schema

Tables

meal_logs

  • Stores each meal instance with timestamp, type, location, and notes
  • Foreign key parent for tacos

tacos

  • Individual taco records linked to meals
  • Bridge between meals and ingredients

ingredients

  • Master list of all ingredients (with unique names)
  • Reused across multiple tacos

taco_ingredients

  • Many-to-many junction table
  • Links tacos to their ingredients

favorite_meals

  • Stores favorite meal templates
  • JSON-serialized taco types for quick re-entry

achievement_medals

  • Tracks per-track medal tiers (Bronze–Platinum) with unlock timestamps

Relationships

meal_logs (1) ──< (N) tacos (N) ──< (N) ingredients
                              via taco_ingredients

favorite_meals (standalone templates)

Building

Requirements

  • Android Studio Meerkat or newer (AGP 9.1.0 requires a recent version)
  • Android SDK 36
  • Minimum SDK: 26 (Android 8.0+)
  • Kotlin 2.3.10

Build Steps

  1. Clone the repository

    git clone https://github.com/TomAguero/TacoTracker.git
  2. Open in Android Studio

  3. Sync Gradle files

  4. Run on device or emulator (Android 8.0+)

Build Variants

  • Debug: Development build with debugging enabled
  • Release: Optimized production build

Project Structure

app/src/main/java/com/dinorawrger/tacologger/
├── data/
│   ├── *Entity.kt          # Room database entities
│   ├── *Dao.kt             # Database access objects
│   ├── *Repository.kt      # Data layer abstractions
│   ├── Migrations.kt       # Database migrations
│   ├── SettingsDataStore.kt
│   └── StatsShareData.kt
├── di/
│   └── AppContainer.kt     # Manual dependency wiring
├── ui/
│   ├── *Screen.kt          # Composable screens
│   ├── TacoLogViewModel.kt # Main ViewModel
│   ├── SharedComposables.kt
│   ├── WhatsNewDialog.kt
│   ├── StatsInfographic.kt
│   └── theme/
├── MainActivity.kt
└── TacoTrackerApp.kt       # Application class

Database Migrations

Current version: 8

  • v1 → v2: Added notes column to meal_logs
  • v2 → v3: Split tacos into normalized structure (tacos, ingredients, taco_ingredients junction table)
  • v3 → v4: Added favorite_meals table
  • v4 → v5: Added rating column to tacos
  • v5 → v6: Added achievements table
  • v6 → v7: Replaced achievements with achievement_medals table (tiered Bronze–Platinum medal system)
  • v7 → v8: Added photoUri column to meal_logs for photo attachments

Contributing

This is a personal project, but suggestions and bug reports are welcome via GitHub issues.

License

[Add your license here - e.g., MIT, Apache 2.0, or "All Rights Reserved"]

Author

Tom Aguero


Built with ❤️ and 🌮