diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28a804d8932aba40f168fd757a74cb718a955a1a
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a866abcc67e5140ff4bddc3065f711c07eab2462
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/tugasbesar1_2018.iml" filepath="$PROJECT_DIR$/.idea/tugasbesar1_2018.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/tugasbesar1_2018.iml b/.idea/tugasbesar1_2018.iml
new file mode 100644
index 0000000000000000000000000000000000000000..c956989b29ad0767edc6cf3a202545927c3d1e76
--- /dev/null
+++ b/.idea/tugasbesar1_2018.iml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..16b346fa142e87bde9ab65c9c7e87da29c3a2b52
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="10848368-dfb8-4584-81d9-34a66ff8229c" name="Default Changelist" comment="">
+      <change beforePath="$PROJECT_DIR$/app/controller/user/AuthMiddleware.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/AuthMiddleware.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/controller/user/User.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/User.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/controller/user/UserDb.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/UserDb.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/controller/user/UserUsecase.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/UserUsecase.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/view/profile.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/view/profile.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/config/devel.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/devel.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/public/index.php" beforeDir="false" afterPath="$PROJECT_DIR$/public/index.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/public/static/css/header.css" beforeDir="false" afterPath="$PROJECT_DIR$/public/static/css/header.css" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/public/static/js/header.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/static/js/header.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/public/static/js/login.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/static/js/login.js" afterDir="false" />
+    </list>
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FUSProjectUsageTrigger">
+    <session id="585135910">
+      <usages-collector id="statistics.lifecycle.project">
+        <counts>
+          <entry key="project.open.time.1" value="1" />
+          <entry key="project.opened" value="1" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.extensions.open">
+        <counts>
+          <entry key="css" value="3" />
+          <entry key="gitignore" value="1" />
+          <entry key="html" value="3" />
+          <entry key="js" value="4" />
+          <entry key="php" value="7" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.types.open">
+        <counts>
+          <entry key="CSS" value="3" />
+          <entry key="HTML" value="3" />
+          <entry key="JavaScript" value="4" />
+          <entry key="PHP" value="7" />
+          <entry key="PLAIN_TEXT" value="1" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.extensions.edit">
+        <counts>
+          <entry key="css" value="1071" />
+          <entry key="html" value="941" />
+          <entry key="js" value="590" />
+          <entry key="php" value="115" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.types.edit">
+        <counts>
+          <entry key="CSS" value="1071" />
+          <entry key="HTML" value="941" />
+          <entry key="JavaScript" value="590" />
+          <entry key="PHP" value="115" />
+        </counts>
+      </usages-collector>
+    </session>
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/public/static/html/edit-profile.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="525">
+              <caret line="35" column="64" selection-start-line="35" selection-start-column="64" selection-end-line="35" selection-end-column="64" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/public/static/html/header.html">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/public/static/css/header.css">
+          <provider selected="true" editor-type-id="text-editor">
+            <state>
+              <caret column="5" lean-forward="true" selection-start-column="5" selection-end-column="5" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/public/static/js/header.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state>
+              <caret column="34" lean-forward="true" selection-start-column="34" selection-end-column="34" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/public/static/js/edit-profile.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="405">
+              <caret line="27" column="41" selection-start-line="27" selection-start-column="41" selection-end-line="27" selection-end-column="41" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/public/static/js/login.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="165">
+              <caret line="11" column="32" lean-forward="true" selection-start-line="11" selection-end-line="12" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/controller/user/routes.php">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/controller/user/UserUsecase.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="255">
+              <caret line="47" column="56" lean-forward="true" selection-start-line="47" selection-start-column="56" selection-end-line="47" selection-end-column="56" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/controller/user/UserDb.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="342">
+              <caret line="47" lean-forward="true" selection-start-line="47" selection-end-line="47" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/view/edit-profile.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="90">
+              <caret line="6" column="3" selection-start-line="6" selection-start-column="3" selection-end-line="6" selection-end-column="3" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="HTML File" />
+        <option value="CSS File" />
+        <option value="JavaScript File" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>updateUser</find>
+    </findStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/public/static/css/profile.css" />
+        <option value="$PROJECT_DIR$/public/static/html/profile.html" />
+        <option value="$PROJECT_DIR$/app/view/edit-profile.php" />
+        <option value="$PROJECT_DIR$/public/index.php" />
+        <option value="$PROJECT_DIR$/public/static/js/header.js" />
+        <option value="$PROJECT_DIR$/public/static/js/profile.js" />
+        <option value="$PROJECT_DIR$/config/devel.php" />
+        <option value="$PROJECT_DIR$/public/static/css/edit-profile.css" />
+        <option value="$PROJECT_DIR$/public/static/css/header.css" />
+        <option value="$PROJECT_DIR$/public/static/html/edit-profile.html" />
+        <option value="$PROJECT_DIR$/app/controller/user/UserDb.php" />
+        <option value="$PROJECT_DIR$/app/controller/user/UserUsecase.php" />
+        <option value="$PROJECT_DIR$/public/static/js/edit-profile.js" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="width" value="1920" />
+    <option name="height" value="1080" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="app" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="app" type="462c0819:PsiDirectoryNode" />
+              <item name="controller" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="app" type="462c0819:PsiDirectoryNode" />
+              <item name="controller" type="462c0819:PsiDirectoryNode" />
+              <item name="user" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="app" type="462c0819:PsiDirectoryNode" />
+              <item name="view" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="public" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="public" type="462c0819:PsiDirectoryNode" />
+              <item name="static" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="public" type="462c0819:PsiDirectoryNode" />
+              <item name="static" type="462c0819:PsiDirectoryNode" />
+              <item name="css" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="public" type="462c0819:PsiDirectoryNode" />
+              <item name="static" type="462c0819:PsiDirectoryNode" />
+              <item name="img" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" />
+              <item name="public" type="462c0819:PsiDirectoryNode" />
+              <item name="static" type="462c0819:PsiDirectoryNode" />
+              <item name="js" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="DefaultHtmlFileTemplate" value="HTML File" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="list.type.of.created.stylesheet" value="CSS" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="10848368-dfb8-4584-81d9-34a66ff8229c" name="Default Changelist" comment="" />
+      <created>1540366993461</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1540366993461</updated>
+      <workItem from="1540366994913" duration="7734000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="7734000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="0" y="0" width="1920" height="1080" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info id="Favorites" order="0" side_tool="true" />
+      <window_info active="true" content_ui="combo" id="Project" order="1" visible="true" weight="0.2497332" />
+      <window_info id="Structure" order="2" side_tool="true" weight="0.25" />
+      <window_info anchor="bottom" id="Terminal" order="0" weight="0.32979852" />
+      <window_info anchor="bottom" id="Database Changes" order="1" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Event Log" order="2" side_tool="true" />
+      <window_info anchor="bottom" id="Version Control" order="3" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Docker" order="4" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Message" order="5" />
+      <window_info anchor="bottom" id="Find" order="6" />
+      <window_info anchor="bottom" id="Run" order="7" />
+      <window_info anchor="bottom" id="Debug" order="8" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="9" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="10" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="11" />
+      <window_info anchor="right" id="Database" order="0" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="1" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="2" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="3" weight="0.2497332" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/public/static/html/profile.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="150">
+          <caret line="10" column="35" selection-start-line="10" selection-start-column="35" selection-end-line="10" selection-end-column="35" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/index.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="840">
+          <caret line="56" column="26" selection-start-line="56" selection-start-column="26" selection-end-line="56" selection-end-column="26" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/css/profile.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="801">
+          <caret line="67" lean-forward="true" selection-start-line="67" selection-end-line="67" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/js/profile.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret selection-end-line="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/view/profile.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="15">
+          <caret line="1" selection-start-line="1" selection-end-line="4" selection-end-column="49" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/devel.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="75">
+          <caret line="5" column="39" selection-start-line="5" selection-start-column="39" selection-end-line="5" selection-end-column="39" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="30">
+          <caret line="2" lean-forward="true" selection-start-line="2" selection-end-line="2" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/css/edit-profile.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="180">
+          <caret line="12" column="17" selection-start-line="12" selection-start-column="17" selection-end-line="12" selection-end-column="17" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/html/header.html">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/css/header.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="5" lean-forward="true" selection-start-column="5" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/view/edit-profile.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="90">
+          <caret line="6" column="3" selection-start-line="6" selection-start-column="3" selection-end-line="6" selection-end-column="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/html/edit-profile.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="525">
+          <caret line="35" column="64" selection-start-line="35" selection-start-column="64" selection-end-line="35" selection-end-column="64" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/js/header.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="34" lean-forward="true" selection-start-column="34" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/controller/user/UserDb.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="342">
+          <caret line="47" lean-forward="true" selection-start-line="47" selection-end-line="47" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/controller/user/UserUsecase.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="255">
+          <caret line="47" column="56" lean-forward="true" selection-start-line="47" selection-start-column="56" selection-end-line="47" selection-end-column="56" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/controller/user/routes.php">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/js/login.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="165">
+          <caret line="11" column="32" lean-forward="true" selection-start-line="11" selection-end-line="12" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/public/static/js/edit-profile.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="405">
+          <caret line="27" column="41" selection-start-line="27" selection-start-column="41" selection-end-line="27" selection-end-column="41" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/controller/user/AuthMiddleware.php b/app/controller/user/AuthMiddleware.php
index 15813d0d1f6d4cae8bb59a044b77c416eee4a2a8..2b850e1a36af086e87f4df81dc95a397fd51e11d 100644
--- a/app/controller/user/AuthMiddleware.php
+++ b/app/controller/user/AuthMiddleware.php
@@ -8,7 +8,7 @@
             if ($_COOKIE["Authorization"]){
                 $user_id = verifyJWT($_COOKIE["Authorization"]);
                 if ($user_id){
-                    setcookie("user_id", $user_id, time()+300, "/");
+                    setcookie("user_id", $user_id, time()+3000, "/");
                     $next($nextRequest);
                     exit;
                 } 
diff --git a/app/controller/user/User.php b/app/controller/user/User.php
index f66ec40be2324437668a5cbcfc4139877466ad60..878945ff2f929f0fb1e0295df25912414ad35288 100644
--- a/app/controller/user/User.php
+++ b/app/controller/user/User.php
@@ -5,14 +5,16 @@
         public $fullname;
         public $email;
         public $address;
+        public $phone;
         private $hpass;
 
-        function __construct($user_id,$username,$fullname,$email,$address,$hpass){
+        function __construct($user_id,$username,$fullname,$email,$address,$phone,$hpass){
             $this->user_id = $user_id;
             $this->username = $username;
             $this->fullname = $fullname;
             $this->email = $email;
             $this->address = $address;
+            $this->phone = $phone;
             $this->hpass = $hpass;
         }
 
diff --git a/app/controller/user/UserDb.php b/app/controller/user/UserDb.php
index 1d59300ae70129dae2006f8b71b106df2287a9c6..0c69ccecfdb1432846e755abd2d6376195b69d02 100644
--- a/app/controller/user/UserDb.php
+++ b/app/controller/user/UserDb.php
@@ -18,34 +18,35 @@
                 $username = $row["username"];
                 $email = $row["email"];
                 $address = $row["address"];
+                $phone = $row["phone"];
                 $hpass = $row["hpass"];
                 
-                $user = new User($user_id, $username, $fullname, $email, $address, $hpass);
+                $user = new User($user_id, $username, $fullname, $email, $address, $phone, $hpass);
             };      
             return $user;
         }
 
         function createUser($user){
             $userRes = null;
-            $sql = 'INSERT INTO user(username,fullname,email,address,hpass) VALUES(?,?,?,?,?)';
+            $sql = 'INSERT INTO user(username,fullname,email,address,phone,hpass) VALUES(?,?,?,?,?,?)';
             $stmt = $this->conn->prepare($sql);
 
-            if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address, $user->getPassword()])){
+            if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address,$user->phone, $user->getPassword()])){
                 $user_id = 0;
                 $last_insert_id = $this->conn->query("SELECT LAST_INSERT_ID()");
                 foreach($last_insert_id as $row){
                     $user_id = $row["LAST_INSERT_ID()"]; 
                 };
-                $userRes = new User($user_id, $user->username, $user->fullname, $user->email, $user->address, $user->getPassword());
+                $userRes = new User($user_id, $user->username, $user->fullname, $user->email, $user->address, $user->phone, $user->getPassword());
             }
             return $userRes;
         }
 
         function updateUser($user){
-            $sql = 'UPDATE user SET username=?, fullname=?, email=?, address=?, hpass=? WHERE user_id=?';
+            $sql = 'UPDATE user SET username=?, fullname=?, email=?, address=?, phone=?, hpass=? WHERE user_id=?';
             $stmt = $this->conn->prepare($sql);
 
-            if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address, $user->getPassword(), $user->user_id])){
+            if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address,  $user->phone, $user->getPassword(), $user->user_id])){
                 return $user;
             } else {
                 return null;
diff --git a/app/controller/user/UserUsecase.php b/app/controller/user/UserUsecase.php
index c773eac6e70ff9867ba387e5508547a6a6bf9555..e9bd775bba1afb5b02ed99c14a8eef6fa926bef1 100644
--- a/app/controller/user/UserUsecase.php
+++ b/app/controller/user/UserUsecase.php
@@ -26,11 +26,12 @@
             $fullname = $request->payload["fullname"];
             $email = $request->payload["email"];
             $address = $request->payload["address"];
+            $phone = $request->payload["phone"];
             $password = $request->payload["password"];
             $hpass = hash('sha256', $password);
 
             if (!$this->userDb->isEmailOrUsernameExist($email,$username)){
-                $user = new User(null,$username,$fullname,$email,$address, $hpass);
+                $user = new User(null,$username,$fullname,$email,$address,$phone,$hpass);
                 $user = $this->userDb->createUser($user);
                 if ($user){
                     writeResponse(200, "Success register user", $user);
@@ -44,14 +45,15 @@
 
         function editProfile(Request $request){
             $user_id = (int)$request->params["user_id"];
-            $user = $this->userDb->getUserById($user_id)[0];
+            $user = $this->userDb->getUserById($user_id);
 
             if ($user){
                 $user->username = array_key_exists("username",$request->payload) ? $request->payload["username"] : $user->username;
                 $user->fullname = array_key_exists("fullname",$request->payload) ? $request->payload["fullname"]: $user->fullname;
                 $user->email = array_key_exists("email",$request->payload) ? $request->payload["email"] : $user->email;
                 $user->address = array_key_exists("address",$request->payload) ? $request->payload["address"] : $user->address;
-    
+                $user->phone= array_key_exists("phone",$request->payload) ? $request->payload["phone"] : $user->phone;
+
                 $newPass = array_key_exists("password",$request->payload) ? hash('sha256', $request->payload["username"]) : $user->getPassword();
                 $user->setPassword($newPass);
                 
@@ -83,7 +85,7 @@
             if ($user_id) {
                 $payload = array(
                     "user_id"=> (int)$user_id,
-                    "exp"=> time()+300
+                    "exp"=> time()+3000
                 );
                 $jwt =  generateJWT($payload);
                 writeResponse(200, "Login Success", $jwt);
diff --git a/app/view/edit-profile.php b/app/view/edit-profile.php
new file mode 100644
index 0000000000000000000000000000000000000000..9228f27e2cba4550ed83c5389f5a36177d245a38
--- /dev/null
+++ b/app/view/edit-profile.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: adylan
+ * Date: 24/10/18
+ * Time: 15:17
+ */
+    include __STATIC__.'/html/header.html';
+    include __STATIC__.'/html/edit-profile.html';
+    include __STATIC__.'/html/footer.html';
+?>
\ No newline at end of file
diff --git a/app/view/profile.php b/app/view/profile.php
index d0e46b8a3cbcf888dd69bd7267ac722f79ba0fa9..9ef377e11dc38ef0ea389d33d6ad3607fc58f4d3 100644
--- a/app/view/profile.php
+++ b/app/view/profile.php
@@ -1,6 +1,6 @@
 <?php
         include __STATIC__.'/html/header.html';
         // Include content here;
-        echo "Implement plz";
+        include __STATIC__.'/html/profile.html';    
         include __STATIC__.'/html/footer.html';    
 ?>
\ No newline at end of file
diff --git a/config/devel.php b/config/devel.php
index 7a9949ef27af01a4190ad6b83cb445ec68148915..ad2af678967799b27b8760715bed5fd89e87b67d 100644
--- a/config/devel.php
+++ b/config/devel.php
@@ -3,7 +3,7 @@
         "db" => array(
             "host" => "localhost",
             "user" => "root",
-            "password" => "06071998",
+            "password" => "rahasiailahi",
             "db_name" => "tayo_book_store"
         ),
         "base_url" => "http://localhost:4000/",
diff --git a/public/index.php b/public/index.php
index b5ff8549ce42c8019865629763c43e9fbc23f66d..f364ff46f00bc3460a498c4fcf927f7ae88f1629 100644
--- a/public/index.php
+++ b/public/index.php
@@ -54,9 +54,10 @@
     $router->add("/register/", "GET", 'render', null, 'register.php');
     $router->add("/history/", "GET", 'render', $authMiddleware, 'history.php');
     $router->add("/profile/", "GET", 'render', $authMiddleware, 'profile.php');
+    $router->add("/profile/edit/", "GET", "render", $authMiddleware, "edit-profile.php");
     $router->add("/logout/", "GET", 'render', $authMiddleware, 'logout.php');
     $router->add("/review/", "GET", "render", $authMiddleware, "review.php");
-    // TODO: Add Order Routes
+// TODO: Add Order Routes
     
     $errorCallback = function(){
         writeResponse(404, "Page not found.");
diff --git a/public/static/css/edit-profile.css b/public/static/css/edit-profile.css
new file mode 100644
index 0000000000000000000000000000000000000000..da086a20c9fb92860f37c7560dea2c9304b405fc
--- /dev/null
+++ b/public/static/css/edit-profile.css
@@ -0,0 +1,102 @@
+.edit-profile-container {
+    width: 60%;
+    height: 100%;
+    margin: 0 auto;
+}
+
+.edit-profile-content{
+    padding: 5%;
+}
+
+input, textarea{
+    background-color: #ffffff;
+    color: black;
+}
+.edit-profile-headline {
+    color: #FF6029;
+    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+    padding: 50px;
+    font-size: 5em;
+    margin: 0;
+}
+
+.edit-profile-picture{
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 10%;
+}
+
+
+.edit-picture-img {
+    max-width: 250px;
+    max-height: 250px;
+    border: 2pt solid black;
+}
+
+.picture-input-file{
+    margin: 10px;
+}
+
+.picture-input-text{
+    flex-grow: 1;
+}
+
+.edit-picture-input {
+    display: flex;
+    margin-left: 5%;
+    flex-grow: 1;
+    margin-top: auto;
+    margin-bottom: auto;
+}
+
+.edit-profile-identity{
+    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+}
+
+.row {
+    margin: 1%;
+    font-size: 1.5em;
+}
+
+.identity-column {
+    width: 30%;
+}
+
+.input-column {
+    width: 70%;
+
+}
+
+.edit-button-container{
+    margin-top: 5%;
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+}
+.edit-button {
+    border-radius: 5px;
+    font-size: 1.5em;
+    padding: 5px 20px 5px 20px;
+    background-color: white;
+}
+
+.orange-button{
+    color: #FF6029;
+    border: 1pt solid #FF6029;
+}
+
+.orange-button:hover{
+    color: #ffffff;
+    background: #FF6029;
+}
+
+.blue-button{
+    color: #00aeef;
+    border: 1pt solid #00aeef;
+}
+
+.blue-button:hover{
+    color: #ffffff;
+    background: #00aeef;
+}
+
diff --git a/public/static/css/header.css b/public/static/css/header.css
index 8f36eb7ca426640ff38bb0fa3aa4817a4a8f4419..11a7f79b210f86e51ca3fe7835e4bc4dffda8c01 100644
--- a/public/static/css/header.css
+++ b/public/static/css/header.css
@@ -28,7 +28,7 @@ nav {
     font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
     font-style: italic;
     margin-top:10%;
-    margin-right:10px;
+    margin-right:35px;
 }
 
 #logo {
diff --git a/public/static/css/profile.css b/public/static/css/profile.css
new file mode 100644
index 0000000000000000000000000000000000000000..193e66f14fff6c51db7132c94be986ff9ec9d093
--- /dev/null
+++ b/public/static/css/profile.css
@@ -0,0 +1,67 @@
+body{
+    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+}
+
+.main-container{
+    width: 100%;
+    height: 100%;
+}
+
+.profile-picture-jumbotron {
+    background-color: #003B4C;
+     display: flex;
+    justify-content: center;
+    margin: 0;
+}
+
+.profile-picture-container{
+    margin: 0 auto;
+    width: 50%;
+    padding:1.5%;
+    text-align: center;
+}
+
+.profile-img {
+    max-height: 75%;
+    border-radius : 100%;
+    border: 10pt solid yellow;
+}
+
+.profile-name {
+    font-family: Helvetica, Verdana, sans-serif;
+    color: white;
+    text-align: center;
+    font-size: 4.5em;
+    margin: 2%;
+}
+
+.detail-container{
+    width: 70%;
+    height: 100%;
+    margin: 0 auto;
+}
+
+.profile-table{
+    width:100%;
+    padding-left: 3%;
+    padding-right: 3%;
+    font-size: 3em;
+    font-family: 'Courier New', Courier, monospace;
+}
+
+.table-headline{
+    font-size: 5em;
+    color:#FF6029;
+}
+
+.profile-icon {
+    position: relative;
+    float: right;
+    max-height: 50px;
+}
+
+.edit-icon{
+    float: right;
+    margin: 2%;
+    height: 50px;
+}
diff --git a/public/static/html/edit-profile.html b/public/static/html/edit-profile.html
new file mode 100644
index 0000000000000000000000000000000000000000..adc2c984e1c0b0d636163847ee87c69f400f0549
--- /dev/null
+++ b/public/static/html/edit-profile.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Edit Profile</title>
+    <link rel="stylesheet" href="/static/css/edit-profile.css">
+</head>
+<body>
+    <div class="edit-profile-container">
+        <h1 class="edit-profile-headline">Edit Profile</h1>
+        <div class="edit-profile-content">
+            <div class="edit-profile-picture">
+                <img src="/static/img/tayoblue.jpg" class="edit-picture-img">
+                <div class="edit-picture-input">
+                    <input type="text" class="picture-input-text" >
+                    <input type="file" name="pic" accept="image/*" class="picture-input-file" >
+                </div>
+            </div>
+            <div class="edit-profile-identity">
+                <div class="row">
+                    <span class="identity-column" >Name </span>
+                    <input type="text" class="input-column" id="edit_name">
+                </div>
+                <div class="row">
+                    <span class="identity-column">Address </span>
+                    <textarea class="input-column" rows="10" id="edit_address"></textarea>
+                </div>
+                <div class="row">
+                    <span class="identity-column">Phone Number </span>
+                    <input type="text" class="input-column" id="edit_phone">
+                </div>
+            </div>
+
+            <div class="edit-button-container">
+                <button class="edit-button orange-button" id="back_button">BACK</button>
+                <button class="edit-button blue-button" id="save_button">SAVE</button>
+            </div>
+        </div>
+
+
+    </div>
+
+</body>
+<script src="/static/js/edit-profile.js"></script>
+</html>
\ No newline at end of file
diff --git a/public/static/html/profile.html b/public/static/html/profile.html
new file mode 100644
index 0000000000000000000000000000000000000000..e4e9f5c2774a41d27191284b51d14a4326ae0312
--- /dev/null
+++ b/public/static/html/profile.html
@@ -0,0 +1,44 @@
+<link rel="stylesheet" href="/static/css/profile.css">
+<div class="main-container">
+    <div class="profile-picture-jumbotron">
+        <div class="profile-picture-container">
+        </div>
+        <div class="profile-picture-container">
+            <img src="/static/img/tayoblue.jpg" class="profile-img"></img>
+            <h1 class="profile-name" id="profile_name">Username</h1>
+        </div>
+        <div class="profile-picture-container">
+            <a href="/profile/edit/"><img src="/static/img/pencil.png" class="edit-icon"></a>
+        </div>
+
+
+    </div>
+
+    <div class="detail-container">
+        <h1 class="table-headline">My Profile</h1>
+        <table class="profile-table" cellpadding="15">
+            <tr class="table-row" height=75>
+                <td width="10%" ><img class="profile-icon" src="/static/img/profile.png"></td>
+                <td width="40%">Username</td>
+                <td id="username_column">Tayo</td>
+            </tr>
+            <tr class="table-row" height=75>
+                <td><img class="profile-icon" src="/static/img/email.png"></td>
+                <td>Email</td>
+                <td id="email_column">email</td>
+            </tr>
+            <tr class="table-row" height=75>
+                <td><img class="profile-icon" src="/static/img/house.png"></td>
+                <td>Address</td>
+                <td id="address_column">address</td>
+            </tr>
+            <tr class="table-row" height=75>
+                <td><img class="profile-icon" src="/static/img/phone.png"></td>
+                <td>Phone Number</td>
+                <td id="phone_column">phone</td>
+            </tr>
+        </table>
+    </div>
+</div>
+
+<script src="/static/js/profile.js"></script>
\ No newline at end of file
diff --git a/public/static/img/email.png b/public/static/img/email.png
new file mode 100644
index 0000000000000000000000000000000000000000..37c7f7dce74fd15b71ffbb26b1fe4a9f5a37c7bf
Binary files /dev/null and b/public/static/img/email.png differ
diff --git a/public/static/img/house.png b/public/static/img/house.png
new file mode 100644
index 0000000000000000000000000000000000000000..9cb9274490a5802975bd394042a25400a3838cba
Binary files /dev/null and b/public/static/img/house.png differ
diff --git a/public/static/img/pencil.png b/public/static/img/pencil.png
new file mode 100644
index 0000000000000000000000000000000000000000..5934ba51213de8ed981fb21c0c79aef0920879e9
Binary files /dev/null and b/public/static/img/pencil.png differ
diff --git a/public/static/img/phone.png b/public/static/img/phone.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0c3811682a7f677324241641f20f472c3acd128
Binary files /dev/null and b/public/static/img/phone.png differ
diff --git a/public/static/img/profile.jpg b/public/static/img/profile.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..14ec7e21dd6f94e2be96c0c10a6dd885faf346cd
Binary files /dev/null and b/public/static/img/profile.jpg differ
diff --git a/public/static/img/profile.png b/public/static/img/profile.png
new file mode 100644
index 0000000000000000000000000000000000000000..816e8ae1133c0459912f4a904904a8581ee6d4c7
Binary files /dev/null and b/public/static/img/profile.png differ
diff --git a/public/static/js/edit-profile.js b/public/static/js/edit-profile.js
new file mode 100644
index 0000000000000000000000000000000000000000..435b7e0d4cfded2c435af11e07b064aecc56c5ff
--- /dev/null
+++ b/public/static/js/edit-profile.js
@@ -0,0 +1,54 @@
+let nameText = document.getElementById('edit_name');
+let addressText = document.getElementById('edit_address');
+let phoneText = document.getElementById('edit_phone');
+let backButton = document.getElementById('back_button');
+let saveButton = document.getElementById('save_button');
+
+function getUserDetail(){
+    const userId = parseInt(getCookie("user_id"));
+
+    doAjax('/api/user/'+userId+'/',"GET",null,function(response){
+        const data = response.data;
+        console.log(data);
+        if (data){
+            const fullnameData = data.fullname;
+            const addressData = data.address;
+            const phoneData = data.phone;
+
+            nameText.value = fullnameData;
+            addressText.innerHTML = addressData;
+            phoneText.value = phoneData;
+
+        }
+    });
+}
+
+function updateUser(){
+    const fullnameData = nameText.value;
+    const addressData = addressText.value;
+    const phoneData = phoneText.value;
+
+    let payload = {
+        "fullname":fullnameData,
+        "address":addressData,
+        "phone":phoneData
+    }
+    const userId = parseInt(getCookie("user_id"));
+
+    doAjax('/api/user/'+userId+'/',"PUT",payload,function(result){
+        window.location.replace('http://localhost:4000/profile/');
+    });
+}
+
+window.onload = function() {
+    backButton.addEventListener('click', function(e){
+        e.preventDefault();
+        window.history.back();
+    });
+
+    saveButton.addEventListener('click', function(e){
+        e.preventDefault();
+        updateUser();
+    });
+    getUserDetail();
+};
\ No newline at end of file
diff --git a/public/static/js/header.js b/public/static/js/header.js
index 6b732a8dcdb5189798a83c539a4639c9d09b2795..881a70cbbfe2475a1d31af940b50693b5a6cd64e 100644
--- a/public/static/js/header.js
+++ b/public/static/js/header.js
@@ -13,7 +13,7 @@ const enableTabColor = function(){
     if (urlPath === "/history/" || urlPath.includes("/review")){
         historyTab.style.backgroundColor = orangeColor;
     }
-    if (urlPath === "/profile/"){
+    if (urlPath.includes("/profile/")){
         profileTab.style.backgroundColor = orangeColor;
     }
     
diff --git a/public/static/js/login.js b/public/static/js/login.js
index 296e4c0ab4b971566b50aeaa7b86926699a831ab..0aae10fe27d5aec180b44c0aeb7b722ae670de20 100644
--- a/public/static/js/login.js
+++ b/public/static/js/login.js
@@ -8,7 +8,7 @@ const doLogin = function(){
     }
 
     doAjax('/auth/login/',"POST", payload, function(response){
-            setCookie("Authorization", response.data.token, 300);
+            setCookie("Authorization", response.data.token, 3000);
             window.location.replace('http://localhost:4000/browse/');
         }, function(response){
             alert("Invalid username or password");
diff --git a/public/static/js/profile.js b/public/static/js/profile.js
new file mode 100644
index 0000000000000000000000000000000000000000..77a9074bd728cd7b114c23bed8387d1c4b53c51a
--- /dev/null
+++ b/public/static/js/profile.js
@@ -0,0 +1,34 @@
+let nameText = document.getElementById('profile_name');
+let usernameText = document.getElementById('username_column');
+let emailText = document.getElementById('email_column');
+let addressText = document.getElementById('address_column');
+let phoneText = document.getElementById('phone_column');
+
+
+function getUserDetail(){
+    const userId = parseInt(getCookie("user_id"));
+
+    doAjax('/api/user/'+userId+'/',"GET",null,function(response){
+        const data = response.data;
+        console.log(data);
+        if (data){
+            const fullnameData = data.fullname;
+            const usernameData = data.username;
+            const emailData = data.email;
+            const addressData = data.address;
+            const phoneData = data.phone;
+
+            nameText.innerHTML = fullnameData;
+            usernameText.innerHTML = "@"+usernameData;
+            emailText.innerHTML = emailData;
+            addressText.innerHTML = addressData;
+            phoneText.innerHTML = phoneData;
+
+        }
+    });
+}
+
+
+window.onload = function(){
+    getUserDetail();
+}
\ No newline at end of file