Skip to main content

Command Palette

Search for a command to run...

MealVeda Day 1: Foundation - Flutter Architecture Decisions

Published
2 min read
MealVeda Day 1: Foundation - Flutter Architecture Decisions

Setting up MealVeda's technical foundation required careful architectural planning. As a Flutter app focused on meal planning and nutrition tracking, the initial setup decisions would impact every future feature.

Project Structure and Dependencies

Started with a standard Flutter project using the latest stable version. Key architectural decisions:

// Main app structure
lib/
  ├── models/          // Data models for meals, nutrition
  ├── screens/         // UI screens for each meal category  
  ├── services/        // API calls and data processing
  ├── widgets/         // Reusable UI components
  └── utils/           // Helper functions and constants

Navigation Architecture

Implemented a bottom tab navigation with four main sections: Breakfast, Lunch, Dinner, and Snacks. Used Flutter's TabBarView for smooth transitions:

TabBarView(
  controller: _tabController,
  children: [
    BreakfastScreen(),
    LunchScreen(), 
    DinnerScreen(),
    SnacksScreen(),
  ],
)

Health Preferences Data Model

The core data structure handles user metrics and auto-calculates nutrition targets:

class HealthPreferences {
  final double currentWeight;    // 175 lbs
  final double height;          // 175 cm
  final ActivityLevel activity; // moderate
  final HealthGoal goal;        // maintain weight

  NutritionTargets calculateTargets() {
    // Harris-Benedict equation for BMR
    // Activity multiplier for TDEE
    // Macro distribution based on goals
  }
}

State Management Strategy

Chose a simple state management approach for Day 1, focusing on getting the foundation right before adding complexity. Each screen manages its local state, with shared preferences handled through a basic provider pattern.

Auto-Calculation Logic

The nutrition target calculation became the first complex feature. Based on user input (175 lbs, 175 cm, moderate activity, maintain weight), the app generates:

  • 2701 calories daily

  • 280g protein (41% of calories)

  • 321g carbs (47% of calories)

  • 83g fat (28% of calories)

  • 25g fiber minimum

UI Design Principles

Prioritized clean, minimal design with clear visual hierarchy. Color-coded nutrition categories (orange for calories, blue for protein, green for carbs, red for fat, purple for fiber) provide instant visual feedback.

Performance Considerations

Kept the initial build lightweight—no heavy dependencies or complex calculations on the main thread. The nutrition calculation runs once during setup and caches results.

Day 1 Technical Decisions:

  • Flutter's widget composition over inheritance

  • Minimal external dependencies for faster build times

  • Color-coded UI for immediate visual feedback

  • Auto-calculation to reduce user cognitive load

Tomorrow: implementing the meal collection system with dynamic nutrition tracking.