diff --git a/.firebaserc b/.firebaserc
new file mode 100644
index 00000000..7626514d
--- /dev/null
+++ b/.firebaserc
@@ -0,0 +1,5 @@
+{
+  "projects": {
+    "default": "fitness-app-e668a"
+  }
+}
diff --git a/database.rules.json b/database.rules.json
new file mode 100644
index 00000000..f36a9ddd
--- /dev/null
+++ b/database.rules.json
@@ -0,0 +1,31 @@
+{
+  "rules": {
+    "users": {
+      "$uid": {
+        ".read": "$uid === auth.uid",
+        ".write": "$uid === auth.uid"
+      }
+    },
+    "schedule": {
+      "$uid": {
+        ".read": "$uid === auth.uid",
+        ".write": "$uid === auth.uid",
+        ".indexOn": [
+          "timestamp"
+        ]
+      }
+    },
+    "meals": {
+      "$uid": {
+        ".read": "$uid === auth.uid",
+        ".write": "$uid === auth.uid"
+      }
+    },
+    "workouts": {
+      "$uid": {
+        ".read": "$uid === auth.uid",
+        ".write": "$uid === auth.uid"
+      }
+    }
+  }
+}
diff --git a/firebase.json b/firebase.json
new file mode 100644
index 00000000..6ae74fbe
--- /dev/null
+++ b/firebase.json
@@ -0,0 +1,30 @@
+{
+  "database": {
+    "rules": "database.rules.json"
+  },
+  "hosting": {
+    "public": "",
+    "ignore": [
+      "firebase.json",
+      ".firebaserc",
+      ".vscode",
+      ".git",
+      ".gitignore",
+      ".editorconfig",
+      "src/**/.*",
+      "database.rules.json",
+      "package.json",
+      "README.md",
+      "tsconfig.json",
+      "webpack.config.js",
+      "yarn.lock",
+      "**/node_modules/**"
+    ],
+    "rewrites": [
+      {
+        "source": "**",
+        "destination": "/index.html"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 84f8a6c9..7f105682 100755
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -5,22 +5,32 @@ import { Routes, RouterModule } from '@angular/router';
 import { Store } from 'store';
 
 // feature modules
+import { AuthModule } from '../auth/auth.module';
+import { HealthModule } from '../health/health.module';
 
 // containers
 import { AppComponent } from './containers/app/app.component';
 
 // components
+import { AppHeaderComponent } from './components/app-header/app-header.component';
+import { AppNavComponent } from './components/app-nav/app-nav.component';
 
 // routes
-export const ROUTES: Routes = [];
+export const ROUTES: Routes = [
+  { path: '', pathMatch: 'full', redirectTo: 'schedule' }
+];
 
 @NgModule({
   imports: [
     BrowserModule,
-    RouterModule.forRoot(ROUTES)
+    RouterModule.forRoot(ROUTES),
+    AuthModule,
+    HealthModule
   ],
   declarations: [
-    AppComponent
+    AppComponent,
+    AppHeaderComponent,
+    AppNavComponent
   ],
   providers: [
     Store
@@ -29,4 +39,4 @@ export const ROUTES: Routes = [];
     AppComponent
   ]
 })
-export class AppModule {}
+export class AppModule {}
\ No newline at end of file
diff --git a/src/app/components/app-header/app-header.component.scss b/src/app/components/app-header/app-header.component.scss
new file mode 100644
index 00000000..568c7adb
--- /dev/null
+++ b/src/app/components/app-header/app-header.component.scss
@@ -0,0 +1,33 @@
+.app-header {
+  background: #fff;
+  border-bottom: 1px solid #c1cedb;
+  padding: 15px 0;
+  text-align: center;
+  img {
+    display: inline-block;
+  }
+  &__user-info {
+    position: absolute;
+    top: 16px;
+    right: 0;
+    cursor: pointer;
+  }
+  span {
+    background: url(/img/logout.svg) no-repeat;
+    background-size: contain;
+    width: 24px;
+    height: 24px;
+    display: block;
+    opacity: 0.4;
+    &:hover {
+      opacity: 0.9;
+    }
+  }
+}
+
+.wrapper {
+  max-width: 800px;
+  width: 96%;
+  margin: 0 auto;
+  position: relative;
+}
diff --git a/src/app/components/app-header/app-header.component.ts b/src/app/components/app-header/app-header.component.ts
new file mode 100644
index 00000000..276ab13d
--- /dev/null
+++ b/src/app/components/app-header/app-header.component.ts
@@ -0,0 +1,34 @@
+import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
+
+import { User } from '../../../auth/shared/services/auth/auth.service';
+
+@Component({
+  selector: 'app-header',
+  changeDetection: ChangeDetectionStrategy.OnPush,
+  styleUrls: ['app-header.component.scss'],
+  template: `
+    
+  `
+})
+export class AppHeaderComponent {
+
+  @Input()
+  user: User;
+
+  @Output()
+  logout = new EventEmitter();
+  
+  logoutUser() {
+    this.logout.emit();
+  }
+
+}
\ No newline at end of file
diff --git a/src/app/components/app-nav/app-nav.component.scss b/src/app/components/app-nav/app-nav.component.scss
new file mode 100644
index 00000000..e5f52424
--- /dev/null
+++ b/src/app/components/app-nav/app-nav.component.scss
@@ -0,0 +1,28 @@
+:host {
+  margin: -1px 0 0;
+  display: block;
+}
+.app-nav {
+  background: #8022b0;
+  text-align: center;
+  a {
+    color: rgba(255,255,255,.6);
+    padding: 15px 0;
+    display: inline-block;
+    min-width: 150px;
+    font-weight: 500;
+    font-size: 16px;
+    text-transform: uppercase;
+    border-bottom: 3px solid transparent;
+    &:hover,
+    &.active {
+      color: #fff;
+      border-bottom-color: #fff;
+    }
+  }
+}
+.wrapper {
+  max-width: 800px;
+  width: 96%;
+  margin: 0 auto;
+}
\ No newline at end of file
diff --git a/src/app/components/app-nav/app-nav.component.ts b/src/app/components/app-nav/app-nav.component.ts
new file mode 100644
index 00000000..f0a494d5
--- /dev/null
+++ b/src/app/components/app-nav/app-nav.component.ts
@@ -0,0 +1,19 @@
+import { Component, ChangeDetectionStrategy } from '@angular/core';
+
+@Component({
+  selector: 'app-nav',
+  changeDetection: ChangeDetectionStrategy.OnPush,
+  styleUrls: ['app-nav.component.scss'],
+  template: `
+    
+  `
+})
+export class AppNavComponent {
+  constructor() {}
+}
\ No newline at end of file
diff --git a/src/app/containers/app/app.component.ts b/src/app/containers/app/app.component.ts
index 74a8cb58..60e27796 100755
--- a/src/app/containers/app/app.component.ts
+++ b/src/app/containers/app/app.component.ts
@@ -1,14 +1,54 @@
-import { Component } from '@angular/core';
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { Router } from '@angular/router';
+
+import { Observable } from 'rxjs/Observable';
+import { Subscription } from 'rxjs/Subscription';
+
+import { Store } from 'store';
+
+import { AuthService, User } from '../../../auth/shared/services/auth/auth.service';
 
 @Component({
   selector: 'app-root',
   styleUrls: ['app.component.scss'],
   template: `
     
-      Hello Ultimate Angular!
+      
+      
+      
+      
+      
+        
+      
     
+      
+        
+           +          
+            {{ meal.name ? 'Edit' : 'Create' }} meal
+          
+          
+            Loading...
+          
+
+          
+            {{ meal.name ? 'Edit' : 'Create' }} meal
+          
+          
+            Loading...
+          
+        
+      
+      
+        
+        
+      
+      
+        
+          

+          Fetching meal...
+        
+    
+      
+      
+        
+          

+          No meals, add a new meal to start
+        
+        
+        
+      
+      
+        
+          

+          Fetching meals...
+        
+    
+      Schedule
+    
+  `
+})
+export class ScheduleComponent {
+  constructor() {}
+}
\ No newline at end of file
diff --git a/src/health/schedule/schedule.module.ts b/src/health/schedule/schedule.module.ts
new file mode 100644
index 00000000..6c7e307b
--- /dev/null
+++ b/src/health/schedule/schedule.module.ts
@@ -0,0 +1,23 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterModule, Routes } from '@angular/router';
+
+// containers
+import { ScheduleComponent } from './containers/schedule/schedule.component';
+
+export const ROUTES: Routes = [
+  { path: '', component: ScheduleComponent }
+];
+
+@NgModule({
+  imports: [
+    CommonModule,
+    ReactiveFormsModule,
+    RouterModule.forChild(ROUTES)
+  ],
+  declarations: [
+    ScheduleComponent
+  ]
+})
+export class ScheduleModule {}
\ No newline at end of file
diff --git a/src/health/shared/components/list-item/list-item.component.scss b/src/health/shared/components/list-item/list-item.component.scss
new file mode 100644
index 00000000..e060d834
--- /dev/null
+++ b/src/health/shared/components/list-item/list-item.component.scss
@@ -0,0 +1,72 @@
+.list-item {
+  display: flex;
+  border-bottom: 1px solid #c1cedb;
+  transition: all .2s ease-in-out;
+  &:hover {
+    background-color: #f9f9f9;
+  }
+  p {
+    margin: 0;
+  }
+  &__name {
+    flex-grow: 1;
+  }
+  &__ingredients {
+    font-size: 12px;
+    color: #8ea6bd;
+    font-style: italic;
+  }
+  &__delete {
+    display: flex;
+    align-items: center;
+    margin: 0 10px 0 0;
+    p {
+      margin: 0 10px 0 0;
+      font-size: 14px;
+    }
+  }
+  a {
+    display: flex;
+    flex-grow: 1;
+    flex-direction: column;
+    height: 100%;
+    padding: 12px 20px;
+    font-weight: 400;
+    color: #545e6f;
+    font-size: 16px;
+  }
+}
+%button {
+  outline: 0;
+  cursor: pointer;
+  border: 0;
+}
+.confirm,
+.cancel {
+  @extend %button;
+  padding: 5px 10px;
+  margin: 0 0 0 5px;
+  font-size: 14px;
+}
+.confirm {
+  color: #fff;
+  background: #d73a49;
+  border-radius: 3px;
+  transition: all .2s ease-in-out;
+  &:hover {
+    background: darken(#d73a49, 3%);
+  }
+}
+.cancel {
+  background: transparent;
+}
+.trash {
+  @extend %button;
+  border-left: 1px solid #c1cedb;
+  padding: 10px 15px;
+  background: #f6fafd;
+  transition: all .2s ease-in-out;
+  &:hover {
+    background-color: darken(#f6fafd, 2%);
+  }
+}
\ No newline at end of file
diff --git a/src/health/shared/components/list-item/list-item.component.ts b/src/health/shared/components/list-item/list-item.component.ts
new file mode 100644
index 00000000..cad622ae
--- /dev/null
+++ b/src/health/shared/components/list-item/list-item.component.ts
@@ -0,0 +1,71 @@
+import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
+
+@Component({
+  selector: 'list-item',
+  changeDetection: ChangeDetectionStrategy.OnPush,
+  styleUrls: ['list-item.component.scss'],
+  template: `
+    
+  `
+})
+export class ListItemComponent {
+
+  toggled = false;
+
+  @Input()
+  item: any;
+
+  @Output()
+  remove = new EventEmitter();
+
+  constructor() {}
+
+  toggle() {
+    this.toggled = !this.toggled;
+  }
+
+  removeItem() {
+    this.remove.emit(this.item);
+  }
+
+  getRoute(item: any) {
+    return [`../meals`, item.$key];
+  }
+}
\ No newline at end of file
diff --git a/src/health/shared/services/meals/meals.service.ts b/src/health/shared/services/meals/meals.service.ts
new file mode 100644
index 00000000..f9209fdf
--- /dev/null
+++ b/src/health/shared/services/meals/meals.service.ts
@@ -0,0 +1,57 @@
+import { Injectable } from '@angular/core';
+import { AngularFireDatabase } from 'angularfire2/database';
+
+import { Store } from 'store';
+
+import { Observable } from 'rxjs/Observable';
+import 'rxjs/add/operator/do';
+import 'rxjs/add/operator/filter';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/observable/of';
+
+import { AuthService } from '../../../../auth/shared/services/auth/auth.service';
+
+export interface Meal {
+  name: string,
+  ingredients: string[],
+  timestamp: number,
+  $key: string,
+  $exists: () => boolean
+}
+
+@Injectable()
+export class MealsService {
+
+  meals$: Observable = this.db.list(`meals/${this.uid}`)
+    .do(next => this.store.set('meals', next));
+
+  constructor(
+    private store: Store,
+    private db: AngularFireDatabase,
+    private authService: AuthService
+  ) {}
+
+  get uid() {
+    return this.authService.user.uid;
+  }
+
+  getMeal(key: string) {
+    if (!key) return Observable.of({});
+    return this.store.select('meals')
+      .filter(Boolean)
+      .map(meals => meals.find((meal: Meal) => meal.$key === key));
+  }
+
+  addMeal(meal: Meal) {
+    return this.db.list(`meals/${this.uid}`).push(meal);
+  }
+
+  updateMeal(key: string, meal: Meal) {
+    return this.db.object(`meals/${this.uid}/${key}`).update(meal);
+  }
+
+  removeMeal(key: string) {
+    return this.db.list(`meals/${this.uid}`).remove(key);
+  }
+
+}
\ No newline at end of file
diff --git a/src/health/shared/shared.module.ts b/src/health/shared/shared.module.ts
new file mode 100644
index 00000000..315342b6
--- /dev/null
+++ b/src/health/shared/shared.module.ts
@@ -0,0 +1,36 @@
+import { NgModule, ModuleWithProviders } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { RouterModule } from '@angular/router';
+
+// third-party modules
+import { AngularFireDatabaseModule } from 'angularfire2/database';
+
+// components
+import { ListItemComponent } from './components/list-item/list-item.component';
+
+// services
+import { MealsService } from './services/meals/meals.service';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    RouterModule,
+    AngularFireDatabaseModule
+  ],
+  declarations: [
+    ListItemComponent
+  ],
+  exports: [
+    ListItemComponent
+  ]
+})
+export class SharedModule {
+  static forRoot(): ModuleWithProviders {
+    return {
+      ngModule: SharedModule,
+      providers: [
+        MealsService
+      ]
+    };
+  }
+}
\ No newline at end of file
diff --git a/src/health/workouts/containers/workouts/workouts.component.scss b/src/health/workouts/containers/workouts/workouts.component.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/health/workouts/containers/workouts/workouts.component.ts b/src/health/workouts/containers/workouts/workouts.component.ts
new file mode 100644
index 00000000..beb52145
--- /dev/null
+++ b/src/health/workouts/containers/workouts/workouts.component.ts
@@ -0,0 +1,14 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'workouts',
+  styleUrls: ['workouts.component.scss'],
+  template: `
+    
+      Workouts
+    
+  `
+})
+export class WorkoutsComponent {
+  constructor() {}
+}
\ No newline at end of file
diff --git a/src/health/workouts/workouts.module.ts b/src/health/workouts/workouts.module.ts
new file mode 100644
index 00000000..6ca6121a
--- /dev/null
+++ b/src/health/workouts/workouts.module.ts
@@ -0,0 +1,23 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterModule, Routes } from '@angular/router';
+
+// containers
+import { WorkoutsComponent } from './containers/workouts/workouts.component';
+
+export const ROUTES: Routes = [
+  { path: '', component: WorkoutsComponent }
+];
+
+@NgModule({
+  imports: [
+    CommonModule,
+    ReactiveFormsModule,
+    RouterModule.forChild(ROUTES)
+  ],
+  declarations: [
+    WorkoutsComponent
+  ]
+})
+export class WorkoutsModule {}
\ No newline at end of file
diff --git a/src/store.ts b/src/store.ts
index 7147daf3..cb6a2162 100644
--- a/src/store.ts
+++ b/src/store.ts
@@ -4,11 +4,19 @@ import { BehaviorSubject } from 'rxjs/BehaviorSubject';
 import 'rxjs/add/operator/pluck';
 import 'rxjs/add/operator/distinctUntilChanged';
 
+import { User } from './auth/shared/services/auth/auth.service';
+import { Meal } from './health/shared/services/meals/meals.service';
+
 export interface State {
+  user: User,
+  meals: Meal[],
   [key: string]: any
 }
 
-const state: State = {};
+const state: State = {
+  user: undefined,
+  meals: undefined,
+};
 
 export class Store {