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.



