UX / UI only: Initial commit of todos app.

Built todo list screen with edit / debug / sharing toggle / swipe
functionality, task list screen with checkbox / swipe / invite header,
stub for invite flow.

Still need to build invite flow and add polish for things like member
count (+5) after photos, possibly optimize member photo rendering by
caching views based on todo list id, possibly incorporate iconography
to be provided by design team.

Change-Id: I7ad2252d048f7812a12e295140ba2750ade3766d
diff --git a/SyncbaseTodosApp/SyncbaseTodos.xcodeproj/project.pbxproj b/SyncbaseTodosApp/SyncbaseTodos.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..b68d568
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos.xcodeproj/project.pbxproj
@@ -0,0 +1,344 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		37B018C91CFF7A9D004B0A15 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018BB1CFF7A9D004B0A15 /* AppDelegate.swift */; };
+		37B018CA1CFF7A9D004B0A15 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 37B018BC1CFF7A9D004B0A15 /* Assets.xcassets */; };
+		37B018CB1CFF7A9D004B0A15 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 37B018BD1CFF7A9D004B0A15 /* LaunchScreen.storyboard */; };
+		37B018CC1CFF7A9D004B0A15 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 37B018BF1CFF7A9D004B0A15 /* Main.storyboard */; };
+		37B018CD1CFF7A9D004B0A15 /* CircularImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C11CFF7A9D004B0A15 /* CircularImageView.swift */; };
+		37B018CF1CFF7A9D004B0A15 /* MemberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C31CFF7A9D004B0A15 /* MemberView.swift */; };
+		37B018D01CFF7A9D004B0A15 /* Person.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C41CFF7A9D004B0A15 /* Person.swift */; };
+		37B018D11CFF7A9D004B0A15 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C51CFF7A9D004B0A15 /* Task.swift */; };
+		37B018D21CFF7A9D004B0A15 /* TasksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C61CFF7A9D004B0A15 /* TasksViewController.swift */; };
+		37B018D31CFF7A9D004B0A15 /* TodoList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C71CFF7A9D004B0A15 /* TodoList.swift */; };
+		37B018D41CFF7A9D004B0A15 /* TodosViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B018C81CFF7A9D004B0A15 /* TodosViewController.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		378398671CF3ADB000C35566 /* SyncbaseTodos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SyncbaseTodos.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		37B018BB1CFF7A9D004B0A15 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		37B018BC1CFF7A9D004B0A15 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		37B018BE1CFF7A9D004B0A15 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		37B018C01CFF7A9D004B0A15 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		37B018C11CFF7A9D004B0A15 /* CircularImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularImageView.swift; sourceTree = "<group>"; };
+		37B018C21CFF7A9D004B0A15 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		37B018C31CFF7A9D004B0A15 /* MemberView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MemberView.swift; sourceTree = "<group>"; };
+		37B018C41CFF7A9D004B0A15 /* Person.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Person.swift; sourceTree = "<group>"; };
+		37B018C51CFF7A9D004B0A15 /* Task.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = "<group>"; };
+		37B018C61CFF7A9D004B0A15 /* TasksViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TasksViewController.swift; sourceTree = "<group>"; };
+		37B018C71CFF7A9D004B0A15 /* TodoList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TodoList.swift; sourceTree = "<group>"; };
+		37B018C81CFF7A9D004B0A15 /* TodosViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TodosViewController.swift; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		378398641CF3ADB000C35566 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		3783985E1CF3ADB000C35566 = {
+			isa = PBXGroup;
+			children = (
+				37B018BA1CFF7A9D004B0A15 /* SyncbaseTodos */,
+				378398681CF3ADB000C35566 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		378398681CF3ADB000C35566 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				378398671CF3ADB000C35566 /* SyncbaseTodos.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		37B018BA1CFF7A9D004B0A15 /* SyncbaseTodos */ = {
+			isa = PBXGroup;
+			children = (
+				37B018D71CFF7B5A004B0A15 /* Views */,
+				37B018D51CFF7B48004B0A15 /* Model */,
+				37B018D61CFF7B52004B0A15 /* Util */,
+				37B018BB1CFF7A9D004B0A15 /* AppDelegate.swift */,
+				37B018BC1CFF7A9D004B0A15 /* Assets.xcassets */,
+				37B018BD1CFF7A9D004B0A15 /* LaunchScreen.storyboard */,
+				37B018BF1CFF7A9D004B0A15 /* Main.storyboard */,
+				37B018C21CFF7A9D004B0A15 /* Info.plist */,
+			);
+			path = SyncbaseTodos;
+			sourceTree = "<group>";
+		};
+		37B018D51CFF7B48004B0A15 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				37B018C41CFF7A9D004B0A15 /* Person.swift */,
+				37B018C51CFF7A9D004B0A15 /* Task.swift */,
+				37B018C71CFF7A9D004B0A15 /* TodoList.swift */,
+			);
+			name = Model;
+			sourceTree = "<group>";
+		};
+		37B018D61CFF7B52004B0A15 /* Util */ = {
+			isa = PBXGroup;
+			children = (
+				37B018C11CFF7A9D004B0A15 /* CircularImageView.swift */,
+				37B018C31CFF7A9D004B0A15 /* MemberView.swift */,
+			);
+			name = Util;
+			sourceTree = "<group>";
+		};
+		37B018D71CFF7B5A004B0A15 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				37B018C61CFF7A9D004B0A15 /* TasksViewController.swift */,
+				37B018C81CFF7A9D004B0A15 /* TodosViewController.swift */,
+			);
+			name = Views;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		378398661CF3ADB000C35566 /* SyncbaseTodos */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 3783987B1CF3ADB000C35566 /* Build configuration list for PBXNativeTarget "SyncbaseTodos" */;
+			buildPhases = (
+				378398631CF3ADB000C35566 /* Sources */,
+				378398641CF3ADB000C35566 /* Frameworks */,
+				378398651CF3ADB000C35566 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = SyncbaseTodos;
+			productName = VanadiumTodos;
+			productReference = 378398671CF3ADB000C35566 /* SyncbaseTodos.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		3783985F1CF3ADB000C35566 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastSwiftUpdateCheck = 0730;
+				LastUpgradeCheck = 0730;
+				ORGANIZATIONNAME = Google;
+				TargetAttributes = {
+					378398661CF3ADB000C35566 = {
+						CreatedOnToolsVersion = 7.3.1;
+					};
+				};
+			};
+			buildConfigurationList = 378398621CF3ADB000C35566 /* Build configuration list for PBXProject "SyncbaseTodos" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 3783985E1CF3ADB000C35566;
+			productRefGroup = 378398681CF3ADB000C35566 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				378398661CF3ADB000C35566 /* SyncbaseTodos */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		378398651CF3ADB000C35566 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				37B018CC1CFF7A9D004B0A15 /* Main.storyboard in Resources */,
+				37B018CA1CFF7A9D004B0A15 /* Assets.xcassets in Resources */,
+				37B018CB1CFF7A9D004B0A15 /* LaunchScreen.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		378398631CF3ADB000C35566 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				37B018CF1CFF7A9D004B0A15 /* MemberView.swift in Sources */,
+				37B018D31CFF7A9D004B0A15 /* TodoList.swift in Sources */,
+				37B018C91CFF7A9D004B0A15 /* AppDelegate.swift in Sources */,
+				37B018D11CFF7A9D004B0A15 /* Task.swift in Sources */,
+				37B018D41CFF7A9D004B0A15 /* TodosViewController.swift in Sources */,
+				37B018D01CFF7A9D004B0A15 /* Person.swift in Sources */,
+				37B018CD1CFF7A9D004B0A15 /* CircularImageView.swift in Sources */,
+				37B018D21CFF7A9D004B0A15 /* TasksViewController.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		37B018BD1CFF7A9D004B0A15 /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				37B018BE1CFF7A9D004B0A15 /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+		37B018BF1CFF7A9D004B0A15 /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				37B018C01CFF7A9D004B0A15 /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		378398791CF3ADB000C35566 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+			};
+			name = Debug;
+		};
+		3783987A1CF3ADB000C35566 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		3783987C1CF3ADB000C35566 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				INFOPLIST_FILE = SyncbaseTodos/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = io.v.SyncbaseTodos;
+				PRODUCT_NAME = SyncbaseTodos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		3783987D1CF3ADB000C35566 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				INFOPLIST_FILE = SyncbaseTodos/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = io.v.SyncbaseTodos;
+				PRODUCT_NAME = SyncbaseTodos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		378398621CF3ADB000C35566 /* Build configuration list for PBXProject "SyncbaseTodos" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				378398791CF3ADB000C35566 /* Debug */,
+				3783987A1CF3ADB000C35566 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		3783987B1CF3ADB000C35566 /* Build configuration list for PBXNativeTarget "SyncbaseTodos" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				3783987C1CF3ADB000C35566 /* Debug */,
+				3783987D1CF3ADB000C35566 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 3783985F1CF3ADB000C35566 /* Project object */;
+}
diff --git a/SyncbaseTodosApp/SyncbaseTodos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SyncbaseTodosApp/SyncbaseTodos.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..61cb7de
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:/Users/greg/vanadium/release/swift/SyncbaseTodosApp/SyncbaseTodos.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift b/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift
new file mode 100644
index 0000000..60dceda
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift
@@ -0,0 +1,39 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import UIKit
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+  var window: UIWindow?
+
+  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+    // Override point for customization after application launch.
+    return true
+  }
+
+  func applicationWillResignActive(application: UIApplication) {
+    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+  }
+
+  func applicationDidEnterBackground(application: UIApplication) {
+    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+  }
+
+  func applicationWillEnterForeground(application: UIApplication) {
+    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+  }
+
+  func applicationDidBecomeActive(application: UIApplication) {
+    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+  }
+
+  func applicationWillTerminate(application: UIApplication) {
+    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+  }
+
+}
+
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/AppIcon.appiconset/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..118c98f
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOff.imageset/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOff.imageset/Contents.json
new file mode 100644
index 0000000..4cb3ec4
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOff.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "checkmarkOff.pdf"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOff.imageset/checkmarkOff.pdf b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOff.imageset/checkmarkOff.pdf
new file mode 100644
index 0000000..51e082f
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOff.imageset/checkmarkOff.pdf
Binary files differ
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOn.imageset/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOn.imageset/Contents.json
new file mode 100644
index 0000000..900de3b
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOn.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "checkmarkOn.pdf"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOn.imageset/checkmarkOn.pdf b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOn.imageset/checkmarkOn.pdf
new file mode 100644
index 0000000..f7539b0
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/checkmarkOn.imageset/checkmarkOn.pdf
Binary files differ
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/first.imageset/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/first.imageset/Contents.json
new file mode 100644
index 0000000..33a7451
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/first.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "first.pdf"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/first.imageset/first.pdf b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/first.imageset/first.pdf
new file mode 100644
index 0000000..47d911d
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/first.imageset/first.pdf
Binary files differ
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/profilePhoto.imageset/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/profilePhoto.imageset/Contents.json
new file mode 100644
index 0000000..d7d9e61
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/profilePhoto.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "profilePhoto.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/profilePhoto.imageset/profilePhoto.png b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/profilePhoto.imageset/profilePhoto.png
new file mode 100644
index 0000000..d68d016
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/profilePhoto.imageset/profilePhoto.png
Binary files differ
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/second.imageset/Contents.json b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/second.imageset/Contents.json
new file mode 100644
index 0000000..03bd9c9
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/second.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "second.pdf"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/second.imageset/second.pdf b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/second.imageset/second.pdf
new file mode 100644
index 0000000..401614e
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Assets.xcassets/second.imageset/second.pdf
Binary files differ
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Base.lproj/LaunchScreen.storyboard b/SyncbaseTodosApp/SyncbaseTodos/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..ebf48f6
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Base.lproj/Main.storyboard b/SyncbaseTodosApp/SyncbaseTodos/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..96dfd54
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Base.lproj/Main.storyboard
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="lgM-CP-S68">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+        <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
+        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
+        <capability name="Navigation items with more than one left or right bar item" minToolsVersion="7.0"/>
+    </dependencies>
+    <scenes>
+        <!--Navigation Controller-->
+        <scene sceneID="M75-wf-cHn">
+            <objects>
+                <navigationController id="lgM-CP-S68" sceneMemberID="viewController">
+                    <navigationBar key="navigationBar" contentMode="scaleToFill" barStyle="black" id="agF-45-9ja">
+                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <color key="barTintColor" red="0.24705882352941178" green="0.31764705882352939" blue="0.70980392156862748" alpha="1" colorSpace="calibratedRGB"/>
+                        <textAttributes key="titleTextAttributes">
+                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        </textAttributes>
+                    </navigationBar>
+                    <connections>
+                        <segue destination="4Az-YS-hA9" kind="relationship" relationship="rootViewController" id="xZh-UE-xd0"/>
+                    </connections>
+                </navigationController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="eLp-6o-mdc" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="-497" y="351"/>
+        </scene>
+        <!--Todos List-->
+        <scene sceneID="yTN-IQ-Jkd">
+            <objects>
+                <viewController id="4Az-YS-hA9" userLabel="Todos List" customClass="TodosViewController" customModule="SyncbaseTodos" customModuleProvider="target" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="q0d-J2-riN"/>
+                        <viewControllerLayoutGuide type="bottom" id="qae-Cf-9sB"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Mrj-cW-Dnp">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="100" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="kmv-xQ-8U6">
+                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <prototypes>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" showsReorderControl="YES" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="todoListCellId" rowHeight="100" id="8dL-DR-u0l" customClass="TodoListCell" customModule="SyncbaseTodos" customModuleProvider="target">
+                                        <rect key="frame" x="0.0" y="92" width="600" height="100"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="8dL-DR-u0l" id="wu7-ys-FZ4">
+                                            <rect key="frame" x="0.0" y="0.0" width="600" height="99.5"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Noogler Training" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6kP-9G-mon">
+                                                    <rect key="frame" x="18" y="18" width="538" height="18"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="A8B-Z7-aK9" userLabel="Member view" customClass="MemberView" customModule="SyncbaseTodos" customModuleProvider="target">
+                                                    <rect key="frame" x="18" y="42" width="574" height="17"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="10" id="DRA-CK-dHU"/>
+                                                    </constraints>
+                                                </view>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="3/4 Completed" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DnN-q1-yUb">
+                                                    <rect key="frame" x="18" y="64.5" width="574" height="17"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="4 hr" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="moK-vs-xyD">
+                                                    <rect key="frame" x="555.5" y="18" width="26.5" height="17"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="DnN-q1-yUb" firstAttribute="leading" secondItem="wu7-ys-FZ4" secondAttribute="leadingMargin" id="3G6-Eq-ULw"/>
+                                                <constraint firstItem="DnN-q1-yUb" firstAttribute="top" secondItem="A8B-Z7-aK9" secondAttribute="bottom" constant="6" id="7GS-az-c6Z"/>
+                                                <constraint firstItem="A8B-Z7-aK9" firstAttribute="top" secondItem="6kP-9G-mon" secondAttribute="bottom" constant="6" id="8x1-XI-uWL"/>
+                                                <constraint firstItem="6kP-9G-mon" firstAttribute="leading" secondItem="wu7-ys-FZ4" secondAttribute="leadingMargin" constant="10" id="AZB-TV-Lxr"/>
+                                                <constraint firstItem="moK-vs-xyD" firstAttribute="leading" secondItem="6kP-9G-mon" secondAttribute="trailing" id="It9-Id-w83"/>
+                                                <constraint firstItem="A8B-Z7-aK9" firstAttribute="leading" secondItem="wu7-ys-FZ4" secondAttribute="leadingMargin" id="LcB-CM-XBI"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="moK-vs-xyD" secondAttribute="trailing" constant="10" id="QSm-du-2fp"/>
+                                                <constraint firstItem="moK-vs-xyD" firstAttribute="top" secondItem="wu7-ys-FZ4" secondAttribute="topMargin" id="SdS-sh-Ucv"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="A8B-Z7-aK9" secondAttribute="trailing" id="cIi-no-29c"/>
+                                                <constraint firstAttribute="bottomMargin" secondItem="DnN-q1-yUb" secondAttribute="bottom" constant="10" id="fYg-G6-Bsu"/>
+                                                <constraint firstItem="moK-vs-xyD" firstAttribute="top" secondItem="6kP-9G-mon" secondAttribute="top" id="kLR-N1-JTb"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="DnN-q1-yUb" secondAttribute="trailing" id="nIj-8t-6my"/>
+                                                <constraint firstItem="A8B-Z7-aK9" firstAttribute="leading" secondItem="6kP-9G-mon" secondAttribute="leading" id="tsP-KE-2f1"/>
+                                                <constraint firstItem="DnN-q1-yUb" firstAttribute="leading" secondItem="6kP-9G-mon" secondAttribute="leading" id="vr8-cs-Ugq"/>
+                                                <constraint firstItem="6kP-9G-mon" firstAttribute="top" secondItem="wu7-ys-FZ4" secondAttribute="topMargin" constant="10" id="xDU-VA-Yp6"/>
+                                            </constraints>
+                                            <variation key="default">
+                                                <mask key="constraints">
+                                                    <exclude reference="LcB-CM-XBI"/>
+                                                    <exclude reference="3G6-Eq-ULw"/>
+                                                    <exclude reference="SdS-sh-Ucv"/>
+                                                </mask>
+                                            </variation>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="completedLabel" destination="DnN-q1-yUb" id="1Wz-9g-qDU"/>
+                                            <outlet property="lastModifiedLabel" destination="moK-vs-xyD" id="c3U-BU-Okb"/>
+                                            <outlet property="memberView" destination="A8B-Z7-aK9" id="jnR-lg-JfF"/>
+                                            <outlet property="titleLabel" destination="6kP-9G-mon" id="neN-r8-bph"/>
+                                            <segue destination="9RW-nK-7je" kind="show" id="Pgo-YR-BRR"/>
+                                        </connections>
+                                    </tableViewCell>
+                                </prototypes>
+                                <connections>
+                                    <outlet property="dataSource" destination="4Az-YS-hA9" id="77W-sN-E0l"/>
+                                    <outlet property="delegate" destination="4Az-YS-hA9" id="J7R-bP-69J"/>
+                                </connections>
+                            </tableView>
+                            <toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pgB-6n-kxg">
+                                <rect key="frame" x="0.0" y="556" width="600" height="44"/>
+                                <items>
+                                    <barButtonItem style="plain" systemItem="flexibleSpace" id="mcV-tk-4Sq"/>
+                                    <barButtonItem title="Turn sharing off" id="rb7-ge-A8E">
+                                        <connections>
+                                            <action selector="toggleSharing" destination="4Az-YS-hA9" id="1mE-0C-WPJ"/>
+                                        </connections>
+                                    </barButtonItem>
+                                    <barButtonItem style="plain" systemItem="flexibleSpace" id="tGB-vG-wwH"/>
+                                    <barButtonItem title="Debug" id="M4k-N2-NVt">
+                                        <connections>
+                                            <action selector="debug" destination="4Az-YS-hA9" id="zFH-Wp-hcs"/>
+                                        </connections>
+                                    </barButtonItem>
+                                    <barButtonItem style="plain" systemItem="flexibleSpace" id="fCt-vQ-eNa"/>
+                                </items>
+                            </toolbar>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="qae-Cf-9sB" firstAttribute="top" secondItem="kmv-xQ-8U6" secondAttribute="bottom" id="576-pE-MoT"/>
+                            <constraint firstAttribute="trailing" secondItem="kmv-xQ-8U6" secondAttribute="trailing" id="Lq5-Md-abd"/>
+                            <constraint firstAttribute="bottomMargin" secondItem="pgB-6n-kxg" secondAttribute="bottom" id="Tte-CX-3hG"/>
+                            <constraint firstAttribute="trailing" secondItem="pgB-6n-kxg" secondAttribute="trailing" id="d6V-Gx-v2L"/>
+                            <constraint firstItem="pgB-6n-kxg" firstAttribute="leading" secondItem="Mrj-cW-Dnp" secondAttribute="leading" id="dmW-R1-jes"/>
+                            <constraint firstItem="kmv-xQ-8U6" firstAttribute="top" secondItem="q0d-J2-riN" secondAttribute="bottom" id="fnB-rv-qV8"/>
+                            <constraint firstItem="kmv-xQ-8U6" firstAttribute="leading" secondItem="Mrj-cW-Dnp" secondAttribute="leading" id="gIV-Nh-9kO"/>
+                            <constraint firstItem="kmv-xQ-8U6" firstAttribute="top" secondItem="Mrj-cW-Dnp" secondAttribute="top" id="v3N-nY-hfv"/>
+                        </constraints>
+                        <variation key="default">
+                            <mask key="constraints">
+                                <exclude reference="fnB-rv-qV8"/>
+                            </mask>
+                        </variation>
+                    </view>
+                    <navigationItem key="navigationItem" title="Todos" id="nTo-I7-khB">
+                        <barButtonItem key="leftBarButtonItem" title="Edit" id="UQI-hu-noU">
+                            <color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                            <connections>
+                                <action selector="toggleEdit" destination="4Az-YS-hA9" id="q9G-Kf-duz"/>
+                            </connections>
+                        </barButtonItem>
+                        <barButtonItem key="rightBarButtonItem" systemItem="add" id="mjQ-zJ-bqJ">
+                            <color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                        </barButtonItem>
+                    </navigationItem>
+                    <connections>
+                        <outlet property="addButton" destination="mjQ-zJ-bqJ" id="u0I-g6-i6c"/>
+                        <outlet property="menuToolbar" destination="pgB-6n-kxg" id="t4H-IG-sSd"/>
+                        <outlet property="menuToolbarTopConstraint" destination="Tte-CX-3hG" id="TUD-bG-KpB"/>
+                        <outlet property="tableView" destination="kmv-xQ-8U6" id="88K-fx-Dzp"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="jFT-NN-2Df" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="238" y="351"/>
+        </scene>
+        <!--Tasks List-->
+        <scene sceneID="Ocz-4V-V7Q">
+            <objects>
+                <viewController id="9RW-nK-7je" userLabel="Tasks List" customClass="TasksViewController" customModule="SyncbaseTodos" customModuleProvider="target" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="8GI-IJ-A9Q"/>
+                        <viewControllerLayoutGuide type="bottom" id="dBT-lk-hHr"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="GVW-Fz-eZw">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="zm5-DN-A3G">
+                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <prototypes>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" showsReorderControl="YES" indentationWidth="10" reuseIdentifier="inviteCellId" rowHeight="90" id="sP1-qZ-70O" customClass="InviteCell" customModule="SyncbaseTodos" customModuleProvider="target">
+                                        <rect key="frame" x="0.0" y="92" width="600" height="90"/>
+                                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="sP1-qZ-70O" id="rFC-eu-QuV">
+                                            <rect key="frame" x="0.0" y="0.0" width="600" height="89.5"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Members" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OkN-Ra-ErJ">
+                                                    <rect key="frame" x="18" y="18" width="483" height="14.5"/>
+                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
+                                                    <color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IE6-bL-LAv" customClass="MemberView" customModule="SyncbaseTodos" customModuleProvider="target">
+                                                    <rect key="frame" x="18" y="37.5" width="483" height="34"/>
+                                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                                </view>
+                                                <button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DPM-My-QB0">
+                                                    <rect key="frame" x="501" y="26" width="81" height="38"/>
+                                                    <color key="backgroundColor" red="0.23529411764705882" green="0.27450980392156865" blue="0.6705882352941176" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                                    <color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <inset key="contentEdgeInsets" minX="20" minY="10" maxX="20" maxY="10"/>
+                                                    <state key="normal" title="Invite"/>
+                                                    <connections>
+                                                        <segue destination="TEb-eN-UhB" kind="show" id="qrj-jG-MGo"/>
+                                                    </connections>
+                                                </button>
+                                            </subviews>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                            <constraints>
+                                                <constraint firstItem="DPM-My-QB0" firstAttribute="leading" secondItem="IE6-bL-LAv" secondAttribute="trailing" id="BGg-4N-qt0"/>
+                                                <constraint firstItem="DPM-My-QB0" firstAttribute="top" secondItem="rFC-eu-QuV" secondAttribute="topMargin" id="CUs-rY-8kw"/>
+                                                <constraint firstAttribute="bottomMargin" secondItem="DPM-My-QB0" secondAttribute="bottom" id="D1W-EC-IOT"/>
+                                                <constraint firstItem="DPM-My-QB0" firstAttribute="leading" secondItem="OkN-Ra-ErJ" secondAttribute="trailing" id="DWx-Fy-b5y"/>
+                                                <constraint firstItem="OkN-Ra-ErJ" firstAttribute="top" secondItem="rFC-eu-QuV" secondAttribute="topMargin" constant="10" id="UFg-83-zMb"/>
+                                                <constraint firstAttribute="bottomMargin" secondItem="IE6-bL-LAv" secondAttribute="bottom" constant="10" id="VuH-rK-4LG"/>
+                                                <constraint firstItem="IE6-bL-LAv" firstAttribute="leading" secondItem="OkN-Ra-ErJ" secondAttribute="leading" id="XLK-67-hSZ"/>
+                                                <constraint firstItem="IE6-bL-LAv" firstAttribute="top" secondItem="OkN-Ra-ErJ" secondAttribute="bottom" constant="5" id="bfl-kg-s9c"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="DPM-My-QB0" secondAttribute="trailing" constant="10" id="o6W-el-h3i"/>
+                                                <constraint firstItem="IE6-bL-LAv" firstAttribute="top" secondItem="rFC-eu-QuV" secondAttribute="topMargin" id="peQ-6j-9EB"/>
+                                                <constraint firstItem="IE6-bL-LAv" firstAttribute="leading" secondItem="rFC-eu-QuV" secondAttribute="leadingMargin" id="qZ3-W0-sIH"/>
+                                                <constraint firstItem="DPM-My-QB0" firstAttribute="centerY" secondItem="rFC-eu-QuV" secondAttribute="centerY" id="s6D-ub-hDn"/>
+                                                <constraint firstItem="OkN-Ra-ErJ" firstAttribute="leading" secondItem="rFC-eu-QuV" secondAttribute="leadingMargin" constant="10" id="yII-iS-tVN"/>
+                                            </constraints>
+                                            <variation key="default">
+                                                <mask key="constraints">
+                                                    <exclude reference="peQ-6j-9EB"/>
+                                                    <exclude reference="qZ3-W0-sIH"/>
+                                                    <exclude reference="CUs-rY-8kw"/>
+                                                    <exclude reference="D1W-EC-IOT"/>
+                                                </mask>
+                                            </variation>
+                                        </tableViewCellContentView>
+                                        <color key="backgroundColor" red="0.90980392156862744" green="0.91764705882352937" blue="0.96470588235294119" alpha="1" colorSpace="calibratedRGB"/>
+                                        <connections>
+                                            <outlet property="memberView" destination="IE6-bL-LAv" id="xAr-8c-t1e"/>
+                                        </connections>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" showsReorderControl="YES" indentationWidth="10" reuseIdentifier="taskCellId" rowHeight="50" id="3XL-e6-zxp" customClass="TaskCell" customModule="SyncbaseTodos" customModuleProvider="target">
+                                        <rect key="frame" x="0.0" y="182" width="600" height="50"/>
+                                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="3XL-e6-zxp" id="Wf9-qw-m7r">
+                                            <rect key="frame" x="0.0" y="0.0" width="600" height="49.5"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <button opaque="NO" contentMode="center" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vAH-iE-I9L">
+                                                    <rect key="frame" x="8" y="8" width="33.5" height="33.5"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" secondItem="vAH-iE-I9L" secondAttribute="height" multiplier="1:1" id="WyE-Vk-eJK"/>
+                                                    </constraints>
+                                                    <state key="normal" image="checkmarkOff"/>
+                                                    <connections>
+                                                        <action selector="toggleComplete" destination="3XL-e6-zxp" eventType="touchUpInside" id="ShA-fQ-Ywv"/>
+                                                    </connections>
+                                                </button>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Retrieve noogler hat" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IFI-3u-8gC">
+                                                    <rect key="frame" x="41" y="8" width="525.5" height="33.5"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="251" text="Now" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c6S-My-HeD">
+                                                    <rect key="frame" x="566" y="8" width="25.5" height="33.5"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="c6S-My-HeD" firstAttribute="top" secondItem="Wf9-qw-m7r" secondAttribute="topMargin" id="1Jl-f7-1iW"/>
+                                                <constraint firstAttribute="bottomMargin" secondItem="IFI-3u-8gC" secondAttribute="bottom" id="9zr-v2-RlD"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="c6S-My-HeD" secondAttribute="trailing" id="HOc-ir-M1j"/>
+                                                <constraint firstAttribute="bottomMargin" secondItem="vAH-iE-I9L" secondAttribute="bottom" id="Lvh-Dd-IxI"/>
+                                                <constraint firstItem="c6S-My-HeD" firstAttribute="leading" secondItem="vAH-iE-I9L" secondAttribute="trailing" constant="20" id="ddO-Ua-Ecs"/>
+                                                <constraint firstItem="vAH-iE-I9L" firstAttribute="leading" secondItem="Wf9-qw-m7r" secondAttribute="leadingMargin" id="dpr-x4-9aG"/>
+                                                <constraint firstItem="c6S-My-HeD" firstAttribute="leading" secondItem="IFI-3u-8gC" secondAttribute="trailing" id="gcN-1V-TLj"/>
+                                                <constraint firstItem="vAH-iE-I9L" firstAttribute="top" secondItem="Wf9-qw-m7r" secondAttribute="topMargin" id="hdr-5d-smp"/>
+                                                <constraint firstItem="IFI-3u-8gC" firstAttribute="top" secondItem="Wf9-qw-m7r" secondAttribute="topMargin" id="ivP-3Q-y4N"/>
+                                                <constraint firstItem="IFI-3u-8gC" firstAttribute="leading" secondItem="vAH-iE-I9L" secondAttribute="trailing" id="lWK-6c-RWe"/>
+                                                <constraint firstAttribute="bottomMargin" secondItem="c6S-My-HeD" secondAttribute="bottom" id="lu0-xD-nkb"/>
+                                            </constraints>
+                                            <variation key="default">
+                                                <mask key="constraints">
+                                                    <exclude reference="ddO-Ua-Ecs"/>
+                                                </mask>
+                                            </variation>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="addedAtLabel" destination="c6S-My-HeD" id="ec8-GM-il0"/>
+                                            <outlet property="completeButton" destination="vAH-iE-I9L" id="s7s-hz-Sha"/>
+                                            <outlet property="taskNameLabel" destination="IFI-3u-8gC" id="tEr-tU-ClC"/>
+                                        </connections>
+                                    </tableViewCell>
+                                </prototypes>
+                                <connections>
+                                    <outlet property="dataSource" destination="9RW-nK-7je" id="za8-yM-r7v"/>
+                                    <outlet property="delegate" destination="9RW-nK-7je" id="THV-w6-OdV"/>
+                                </connections>
+                            </tableView>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="zm5-DN-A3G" firstAttribute="leading" secondItem="GVW-Fz-eZw" secondAttribute="leading" id="QtB-Qm-oAW"/>
+                            <constraint firstAttribute="trailingMargin" secondItem="zm5-DN-A3G" secondAttribute="trailing" id="Uwo-pw-Oco"/>
+                            <constraint firstItem="zm5-DN-A3G" firstAttribute="leading" secondItem="GVW-Fz-eZw" secondAttribute="leadingMargin" id="eUE-XP-Cj7"/>
+                            <constraint firstItem="zm5-DN-A3G" firstAttribute="top" secondItem="8GI-IJ-A9Q" secondAttribute="bottom" id="gQY-U6-Rx4"/>
+                            <constraint firstItem="zm5-DN-A3G" firstAttribute="top" secondItem="8GI-IJ-A9Q" secondAttribute="bottom" id="hdH-oT-gOP"/>
+                            <constraint firstAttribute="trailing" secondItem="zm5-DN-A3G" secondAttribute="trailing" id="iCq-Qg-Pw0"/>
+                            <constraint firstItem="dBT-lk-hHr" firstAttribute="top" secondItem="zm5-DN-A3G" secondAttribute="bottom" id="nZk-eg-Wzc"/>
+                            <constraint firstItem="zm5-DN-A3G" firstAttribute="top" secondItem="GVW-Fz-eZw" secondAttribute="topMargin" id="p0q-0l-rBv"/>
+                            <constraint firstItem="dBT-lk-hHr" firstAttribute="top" secondItem="zm5-DN-A3G" secondAttribute="bottom" id="udE-Hf-IFh"/>
+                        </constraints>
+                        <variation key="default">
+                            <mask key="constraints">
+                                <exclude reference="Uwo-pw-Oco"/>
+                                <exclude reference="eUE-XP-Cj7"/>
+                                <exclude reference="gQY-U6-Rx4"/>
+                                <exclude reference="hdH-oT-gOP"/>
+                                <exclude reference="nZk-eg-Wzc"/>
+                            </mask>
+                        </variation>
+                    </view>
+                    <navigationItem key="navigationItem" title="Todo list name" id="hx1-tC-Sx2">
+                        <rightBarButtonItems>
+                            <barButtonItem title="Edit" id="FCP-7w-M8t">
+                                <color key="tintColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                <connections>
+                                    <action selector="toggleEdit" destination="9RW-nK-7je" id="kKH-FC-IkC"/>
+                                </connections>
+                            </barButtonItem>
+                            <barButtonItem systemItem="add" id="8Nh-mJ-31a">
+                                <connections>
+                                    <action selector="showAddTask" destination="9RW-nK-7je" id="bhX-7S-tGj"/>
+                                </connections>
+                            </barButtonItem>
+                        </rightBarButtonItems>
+                    </navigationItem>
+                    <connections>
+                        <outlet property="addButton" destination="8Nh-mJ-31a" id="4am-GF-QhO"/>
+                        <outlet property="tableView" destination="zm5-DN-A3G" id="8B7-bm-AmP"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="R5Y-Rx-VO1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="944" y="351"/>
+        </scene>
+        <!--Invite-->
+        <scene sceneID="KB2-7v-cHC">
+            <objects>
+                <tableViewController id="TEb-eN-UhB" sceneMemberID="viewController">
+                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="59" sectionHeaderHeight="28" sectionFooterHeight="28" id="p4P-W4-gFc">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <searchBar key="tableHeaderView" contentMode="redraw" placeholder="Type a name or email" id="Rtg-Zz-0OI">
+                            <rect key="frame" x="0.0" y="64" width="600" height="44"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <textInputTraits key="textInputTraits"/>
+                            <connections>
+                                <outlet property="delegate" destination="TEb-eN-UhB" id="I6F-p8-ewS"/>
+                            </connections>
+                        </searchBar>
+                        <prototypes>
+                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="InviteCell" rowHeight="59" id="SrI-gO-iqH">
+                                <rect key="frame" x="0.0" y="136" width="600" height="59"/>
+                                <autoresizingMask key="autoresizingMask"/>
+                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="SrI-gO-iqH" id="07a-cu-tgk">
+                                    <rect key="frame" x="0.0" y="0.0" width="600" height="58.5"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                    <subviews>
+                                        <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="profilePhoto" translatesAutoresizingMaskIntoConstraints="NO" id="ZNe-Xc-Gii" customClass="CircularImageView" customModule="SyncbaseTodos" customModuleProvider="target">
+                                            <rect key="frame" x="18" y="8" width="42.5" height="42.5"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" secondItem="ZNe-Xc-Gii" secondAttribute="height" multiplier="1:1" id="X6H-qC-G5F"/>
+                                            </constraints>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A person" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xw3-gj-ST1">
+                                            <rect key="frame" x="70.5" y="8" width="521.5" height="42.5"/>
+                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="Xw3-gj-ST1" firstAttribute="leading" secondItem="ZNe-Xc-Gii" secondAttribute="trailing" constant="10" id="5sy-T3-58g"/>
+                                        <constraint firstItem="ZNe-Xc-Gii" firstAttribute="top" secondItem="07a-cu-tgk" secondAttribute="topMargin" id="60n-Wl-qqy"/>
+                                        <constraint firstItem="Xw3-gj-ST1" firstAttribute="top" secondItem="07a-cu-tgk" secondAttribute="topMargin" id="Gn4-CV-9rE"/>
+                                        <constraint firstAttribute="bottomMargin" secondItem="ZNe-Xc-Gii" secondAttribute="bottom" id="TT7-Ae-akW"/>
+                                        <constraint firstAttribute="bottomMargin" secondItem="Xw3-gj-ST1" secondAttribute="bottom" id="X3K-9W-Xr0"/>
+                                        <constraint firstAttribute="trailingMargin" secondItem="Xw3-gj-ST1" secondAttribute="trailing" id="bQu-ls-rnE"/>
+                                        <constraint firstItem="ZNe-Xc-Gii" firstAttribute="leading" secondItem="07a-cu-tgk" secondAttribute="leadingMargin" constant="10" id="z5g-zm-qTP"/>
+                                    </constraints>
+                                </tableViewCellContentView>
+                            </tableViewCell>
+                        </prototypes>
+                        <connections>
+                            <outlet property="dataSource" destination="TEb-eN-UhB" id="dr8-iN-qdD"/>
+                            <outlet property="delegate" destination="TEb-eN-UhB" id="e4k-7Z-bu0"/>
+                        </connections>
+                    </tableView>
+                    <navigationItem key="navigationItem" title="Invite" id="NZy-bp-bmE"/>
+                    <connections>
+                        <outlet property="searchDisplayController" destination="ebz-LZ-GvJ" id="0pO-1l-HSg"/>
+                    </connections>
+                </tableViewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="zpc-eh-b9l" userLabel="First Responder" sceneMemberID="firstResponder"/>
+                <searchDisplayController id="ebz-LZ-GvJ">
+                    <connections>
+                        <outlet property="delegate" destination="TEb-eN-UhB" id="xqO-82-EL1"/>
+                        <outlet property="searchBar" destination="Rtg-Zz-0OI" id="7RO-9h-ful"/>
+                        <outlet property="searchContentsController" destination="TEb-eN-UhB" id="7jw-J1-3At"/>
+                        <outlet property="searchResultsDataSource" destination="TEb-eN-UhB" id="zcQ-HT-i4f"/>
+                        <outlet property="searchResultsDelegate" destination="TEb-eN-UhB" id="Aex-vt-QTN"/>
+                    </connections>
+                </searchDisplayController>
+            </objects>
+            <point key="canvasLocation" x="1646" y="356"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="checkmarkOff" width="24" height="24"/>
+        <image name="profilePhoto" width="88" height="88"/>
+    </resources>
+</document>
diff --git a/SyncbaseTodosApp/SyncbaseTodos/CircularImageView.swift b/SyncbaseTodosApp/SyncbaseTodos/CircularImageView.swift
new file mode 100644
index 0000000..8ac97b3
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/CircularImageView.swift
@@ -0,0 +1,27 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import Foundation
+import UIKit
+
+@IBDesignable class CircularImageView: UIImageView {
+  var borderColor: UIColor = UIColor.darkGrayColor()
+
+  override func prepareForInterfaceBuilder() {
+    setup()
+  }
+
+  override func layoutSubviews() {
+    super.layoutSubviews()
+    // First point where autolayout frames have finished computation
+    setup()
+  }
+
+  func setup() {
+    layer.cornerRadius = frame.size.width * 0.5
+    layer.borderWidth = 1
+    layer.borderColor = borderColor.CGColor
+  }
+
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Info.plist b/SyncbaseTodosApp/SyncbaseTodos/Info.plist
new file mode 100644
index 0000000..9184723
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Info.plist
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UIStatusBarStyle</key>
+	<string>UIStatusBarStyleDefault</string>
+	<key>UIStatusBarTintParameters</key>
+	<dict>
+		<key>UINavigationBar</key>
+		<dict>
+			<key>Style</key>
+			<string>UIBarStyleDefault</string>
+			<key>Translucent</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>
diff --git a/SyncbaseTodosApp/SyncbaseTodos/MemberView.swift b/SyncbaseTodosApp/SyncbaseTodos/MemberView.swift
new file mode 100644
index 0000000..8142b86
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/MemberView.swift
@@ -0,0 +1,44 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import Foundation
+import UIKit
+
+class MemberView: UIView {
+  var todoList: TodoList?
+
+  func updateView() {
+    // Remove all previous photos
+    for view in subviews {
+      view.removeFromSuperview()
+    }
+    if let list = todoList {
+      var x: CGFloat = 0
+      // Create and add a photo circle for all members
+      for member in list.members {
+        let profilePhoto = imageFactory(member.imageName, offset: x)
+        insertSubview(profilePhoto, atIndex: 0)
+        x += profilePhoto.frame.size.width - profilePhoto.frame.size.width * 0.25
+      }
+    }
+  }
+
+  func imageFactory(imageName: String, offset: CGFloat) -> UIImageView {
+    let imageView = CircularImageView(image: UIImage(named: imageName))
+    var frame = imageView.frame
+    frame.size = CGSizeMake(self.frame.size.height, self.frame.size.height)
+    frame.origin.x = offset
+    imageView.frame = frame
+    return imageView
+  }
+
+  override func layoutSubviews() {
+    // Layout subviews is called often and possibly after creation (and auto layout adjustments),
+    // so we need to adjust our view sizes to match
+    let height = frame.size.height
+    for view in subviews {
+      view.frame.size = CGSizeMake(height, height)
+    }
+  }
+}
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Person.swift b/SyncbaseTodosApp/SyncbaseTodos/Person.swift
new file mode 100644
index 0000000..cc2dc98
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Person.swift
@@ -0,0 +1,17 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import Foundation
+
+// All of this is trash to be replaced by syncbase model
+class Person {
+  var name: String = ""
+  var imageName: String = ""
+
+  convenience init(name: String, imageName: String) {
+    self.init()
+    self.name = name
+    self.imageName = imageName
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/Task.swift b/SyncbaseTodosApp/SyncbaseTodos/Task.swift
new file mode 100644
index 0000000..fc5f1c5
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/Task.swift
@@ -0,0 +1,23 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import Foundation
+
+// All of this is trash to be replaced by syncbase model
+class Task {
+  var text: String = ""
+  var addedAt: NSDate = NSDate()
+  var done: Bool = false
+
+  convenience init(text: String) {
+    self.init()
+    self.text = text
+  }
+
+  convenience init(text: String, done: Bool) {
+    self.init()
+    self.text = text
+    self.done = done
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/TasksViewController.swift b/SyncbaseTodosApp/SyncbaseTodos/TasksViewController.swift
new file mode 100644
index 0000000..c9eb779
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/TasksViewController.swift
@@ -0,0 +1,174 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import UIKit
+
+enum Section: Int {
+  case Invite
+  case Tasks
+}
+
+class TasksViewController: UIViewController {
+  let inviteCellId = "inviteCellId"
+  let taskCellId = "taskCellId"
+  @IBOutlet weak var tableView: UITableView!
+  @IBOutlet weak var addButton: UIBarButtonItem!
+  var todoList = TodoList() // Set by segue from TodosViewController
+  static let dateFormatter: NSDateFormatter = {
+    let dateFormatter = NSDateFormatter()
+    dateFormatter.dateFormat = "MMM d"
+    return dateFormatter
+  }()
+
+  override func viewDidLoad() {
+    super.viewDidLoad()
+    title = todoList.name
+    tableView.reloadData()
+  }
+}
+
+/*
+ * Handles tableview functionality, including rendering and swipe actions. Tap actions are
+ * handled directly in Main.storyboard using segues
+ */
+extension TasksViewController: UITableViewDataSource, UITableViewDelegate {
+  func numberOfSectionsInTableView(tableView: UITableView) -> Int {
+    return 2
+  }
+
+  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+    if section == Section.Invite.rawValue {
+      return 1
+    } else {
+      return todoList.tasks.count
+    }
+  }
+
+  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
+    // These cells are prototypes inside the Main.storyboard. Cannot fail.
+    if indexPath.section == Section.Invite.rawValue {
+      let cell = tableView.dequeueReusableCellWithIdentifier(inviteCellId, forIndexPath: indexPath) as! InviteCell
+      cell.todoList = todoList
+      cell.updateView()
+      return cell
+    } else {
+      let cell = tableView.dequeueReusableCellWithIdentifier(taskCellId, forIndexPath: indexPath) as! TaskCell
+      cell.task = todoList.tasks[indexPath.row]
+      cell.updateView()
+      return cell
+    }
+  }
+
+  func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
+    if editingStyle == .Delete {
+      self.deleteTask(indexPath)
+    }
+  }
+
+  func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
+    if indexPath.section == Section.Invite.rawValue {
+      return 90
+    } else {
+      return 60
+    }
+  }
+}
+
+/*
+ * IBActions and data modification functions
+ */
+extension TasksViewController {
+  @IBAction func toggleEdit() {
+    // Do this manually because we're a UIViewController not a UITableViewController, so we don't
+    // get editing behavior for free
+    if tableView.editing {
+      tableView.setEditing(false, animated: true)
+      navigationItem.rightBarButtonItem?.title = "Edit"
+      addButton.enabled = true
+    } else {
+      tableView.setEditing(true, animated: true)
+      navigationItem.rightBarButtonItem?.title = "Done"
+      addButton.enabled = false
+    }
+
+    UIView.animateWithDuration(0.35) { self.view.layoutIfNeeded() }
+  }
+
+  @IBAction func showAddTask() {
+    let alert = UIAlertController(title: "Add task", message: nil, preferredStyle: .Alert)
+    alert.addTextFieldWithConfigurationHandler { (textField) in }
+    alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
+    alert.addAction(UIAlertAction(title: "Add", style: .Default, handler: { [weak self] action in
+      if let field = alert.textFields?.first, text = field.text {
+        self?.addTask(text)
+      }
+      }))
+    presentViewController(alert, animated: true, completion: nil)
+  }
+
+  func addTask(text: String) {
+    // TODO(azinman): Make real
+    let task = Task(text: text)
+    todoList.tasks.insert(task, atIndex: 0)
+    tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: Section.Tasks.rawValue)], withRowAnimation: .Automatic)
+  }
+
+  func deleteTask(indexPath: NSIndexPath) {
+    todoList.tasks.removeAtIndex(indexPath.row)
+    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
+  }
+}
+
+// Displays the memebers of the todo list as photos and an invite button to launch the invite flow
+class InviteCell: UITableViewCell {
+  @IBOutlet weak var memberView: MemberView!
+  var todoList: TodoList?
+
+  // Member view has its own render method that draws the member photos
+  func updateView() {
+    selectionStyle = .None
+    memberView.todoList = todoList
+    memberView.updateView()
+  }
+}
+
+/// TaskCell displays a single task with a checkbox for completing it, the text of the task, and
+/// the time it was added.
+class TaskCell: UITableViewCell {
+  @IBOutlet weak var completeButton: UIButton!
+  @IBOutlet weak var taskNameLabel: UILabel!
+  @IBOutlet weak var addedAtLabel: UILabel!
+  var task = Task(text: "default")
+
+  func updateView() {
+    selectionStyle = .None
+
+    if task.done {
+      let str = NSAttributedString(string: task.text, attributes: [
+        NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue,
+        NSForegroundColorAttributeName: UIColor.lightGrayColor()
+      ])
+      taskNameLabel.attributedText = str
+    } else {
+      taskNameLabel.text = task.text
+    }
+
+    addedAtLabel.text = TasksViewController.dateFormatter.stringFromDate(task.addedAt)
+    updateCompleteButton()
+    setNeedsLayout()
+  }
+
+  func updateCompleteButton() {
+    if task.done {
+      completeButton.setImage(UIImage(named: "checkmarkOn"), forState: .Normal)
+    } else {
+      completeButton.setImage(UIImage(named: "checkmarkOff"), forState: .Normal)
+    }
+  }
+
+  @IBAction func toggleComplete() {
+    task.done = !task.done
+    updateView()
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/TodoList.swift b/SyncbaseTodosApp/SyncbaseTodos/TodoList.swift
new file mode 100644
index 0000000..d3f2275
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/TodoList.swift
@@ -0,0 +1,30 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import Foundation
+
+// All of this is trash to be replaced by syncbase model
+class TodoList {
+  var name: String = ""
+  var updatedAt: NSDate = NSDate()
+  var members: [Person] = []
+  var tasks: [Task] = []
+
+  convenience init (name: String) {
+    self.init()
+    self.name = name
+  }
+
+  func isComplete() -> Bool {
+    return tasks.filter { task in
+      return !task.done
+    }.count == 0
+  }
+
+  func numberTasksComplete() -> Int {
+    return tasks.filter { task in
+      return task.done
+    }.count
+  }
+}
\ No newline at end of file
diff --git a/SyncbaseTodosApp/SyncbaseTodos/TodosViewController.swift b/SyncbaseTodosApp/SyncbaseTodos/TodosViewController.swift
new file mode 100644
index 0000000..e83bcda
--- /dev/null
+++ b/SyncbaseTodosApp/SyncbaseTodos/TodosViewController.swift
@@ -0,0 +1,181 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import UIKit
+
+class TodosViewController: UIViewController {
+  @IBOutlet weak var tableView: UITableView!
+  @IBOutlet weak var addButton: UIBarButtonItem!
+  // The menu toolbar is shown when the "edit" navigation bar is pressed
+  @IBOutlet weak var menuToolbar: UIToolbar!
+  @IBOutlet weak var menuToolbarTopConstraint: NSLayoutConstraint!
+  var data: [TodoList] = []
+  static let dateFormatter: NSDateFormatter = {
+    let dateFormatter = NSDateFormatter()
+    dateFormatter.dateFormat = "MMM d"
+    return dateFormatter
+  }()
+
+  override func viewDidLoad() {
+    super.viewDidLoad()
+    // Hide the bottom menu by default
+    menuToolbarTopConstraint.constant = -menuToolbar.frame.size.height
+    createFakeData()
+    tableView.reloadData()
+  }
+
+  override func viewWillAppear(animated: Bool) {
+    super.viewWillAppear(animated)
+    tableView.reloadData()
+  }
+
+  func createFakeData() {
+    // TODO(azinman): Remove
+    data = [TodoList(name: "Nooglers Training"), TodoList(name: "Sunday BBQ Shopping")]
+    let person = Person(name: "John", imageName: "profilePhoto")
+    data[0].members = [person, person, person]
+    data[0].tasks = [
+      Task(text: "Retrieve Noogler Hat"),
+      Task(text: "Eat lunch at a cafe", done: true),
+      Task(text: "Pick up badge", done: true),
+      Task(text: "Parkin building 45", done: true),
+    ]
+
+    data[1].members = [person, person]
+    data[1].tasks = [
+      Task(text: "Apples"),
+      Task(text: "Frosted Mini Wheats", done: true),
+      Task(text: "Whole wheat bagels"),
+      Task(text: "Kale"),
+      Task(text: "Eggs", done: true),
+    ]
+  }
+
+  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
+    // When we tap on a todo list and segue into the tasks list
+    if let tvc = segue.destinationViewController as? TasksViewController,
+      cell = sender as? TodoListCell,
+      indexPath = tableView.indexPathForCell(cell) {
+        tvc.todoList = data[indexPath.row]
+    }
+  }
+}
+
+//Handles tableview functionality, including rendering and swipe actions. Tap actions are
+// handled directly in Main.storyboard using segues
+extension TodosViewController: UITableViewDelegate, UITableViewDataSource {
+  func numberOfSectionsInTableView(tableView: UITableView) -> Int {
+    return 1
+  }
+
+  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+    return data.count
+  }
+
+  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
+    // TodoListCell is the prototype inside the Main.storyboard. Cannot fail.
+    let cell = tableView.dequeueReusableCellWithIdentifier(TodoListCell.todoListCellId, forIndexPath: indexPath) as! TodoListCell
+    cell.todoList = data[indexPath.row]
+    cell.updateView()
+    return cell
+  }
+
+  func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
+    switch editingStyle {
+    case .Delete:
+      data.removeAtIndex(indexPath.row)
+      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
+    default: break
+    }
+  }
+
+  func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
+    let actions = [
+      UITableViewRowAction(style: .Normal, title: "Check All", handler: { [weak self](action, indexPath) in
+        self?.completeAllTasks(indexPath)
+      }),
+      UITableViewRowAction(style: .Default, title: "Delete", handler: { [weak self](action, indexPath) in
+        self?.deleteList(indexPath)
+      })
+    ]
+    return actions
+  }
+}
+
+// IBActions and data modification functions
+extension TodosViewController {
+  @IBAction func toggleEdit() {
+    // Do this manually because we're a UIViewController not a UITableViewController, so we don't
+    // get editing behavior for free
+    if tableView.editing {
+      tableView.setEditing(false, animated: true)
+      navigationItem.leftBarButtonItem?.title = "Edit"
+      menuToolbarTopConstraint.constant = -menuToolbar.frame.size.height
+      addButton.enabled = true
+    } else {
+      tableView.setEditing(true, animated: true)
+      navigationItem.leftBarButtonItem?.title = "Done"
+      menuToolbarTopConstraint.constant = 0
+      addButton.enabled = false
+    }
+
+    UIView.animateWithDuration(0.35) { self.view.layoutIfNeeded() }
+  }
+
+  @IBAction func debug() {
+    // TODO(azinman): Make real
+  }
+
+  @IBAction func toggleSharing() {
+    // TODO(azinman): Make real
+  }
+
+  func completeAllTasks(indexPath: NSIndexPath) {
+    // TODO(azinman): Make real
+    assert(data.indices.contains(indexPath.row), "data does not contain that index path")
+    let todoList = data[indexPath.row]
+    for task in todoList.tasks {
+      task.done = true
+    }
+    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
+  }
+
+  func deleteList(indexPath: NSIndexPath) {
+    // TODO(azinman): Make real
+    data.removeAtIndex(indexPath.row)
+    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
+  }
+}
+
+/// Shows a todo list's name, number of items completed, photos of members, and last modified date.
+class TodoListCell: UITableViewCell {
+  @IBOutlet weak var titleLabel: UILabel!
+  @IBOutlet weak var completedLabel: UILabel!
+  @IBOutlet weak var memberView: MemberView!
+  @IBOutlet weak var lastModifiedLabel: UILabel!
+  static let todoListCellId = "todoListCellId"
+  var todoList = TodoList()
+
+  // Fills in the iboutlets with data from todoList local property.
+  // memberView has it's only render method that draws out the photos of the members in this todo
+  // list.
+  func updateView() {
+    if todoList.isComplete() {
+      // Draw a strikethrough
+      let str = NSAttributedString(string: todoList.name, attributes: [
+        NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue,
+        NSForegroundColorAttributeName: UIColor.lightGrayColor()
+      ])
+      titleLabel.attributedText = str
+    } else {
+      titleLabel.text = todoList.name
+    }
+    completedLabel.text = "\(todoList.numberTasksComplete())/\(todoList.tasks.count) completed"
+    lastModifiedLabel.text = TodosViewController.dateFormatter.stringFromDate(todoList.updatedAt)
+    // Draw the photos of list members
+    memberView.todoList = todoList
+    memberView.updateView()
+  }
+
+}
\ No newline at end of file