diff --git a/erpnext/templates/includes/projects/project_tasks.html b/erpnext/templates/includes/projects/project_tasks.html
index 2b07a5f..4069d3d 100644
--- a/erpnext/templates/includes/projects/project_tasks.html
+++ b/erpnext/templates/includes/projects/project_tasks.html
@@ -1,5 +1,57 @@
+{% macro task_row(task, indent) %}
+<div class="row mt-5 {% if task.children %} font-weight-bold {% endif %}">
+  <div class="col-sm-4">
+    <a class="nav-link " style="color: inherit; {% if task.parent_task %} margin-left: {{ indent }}px {% endif %}"
+      href="/tasks/{{ task.name | urlencode }}">
+      {% if task.parent_task %}
+        <span class="">
+          <i class="fa fa-level-up fa-rotate-90"></i>
+        </span>
+      {% endif %}
+      {{ task.subject }}</a>
+  </div>
+  <div class="col-sm-2">{{ task.status }}</div>
+  <div class="col-sm-2 small text-muted">
+    {% if task.exp_end_date %}
+      {{ task.exp_end_date }}
+    {% else %}
+      --
+    {% endif %}
+  </div>
+  <div class="col-sm-2">
+    {% if task["_assign"] %}
+      {% set assigned_users = json.loads(task["_assign"])%}
+      {% for user in assigned_users %}
+        {% set user_details = frappe.db.get_value("User", user,
+		["full_name", "user_image"],
+		as_dict = True)%}
+        {% if user_details.user_image %}
+          <span class="avatar avatar-small" style="width:32px; height:32px;" title="{{ user_details.full_name }}">
+            <img src="{{ user_details.user_image }}">
+          </span>
+        {% else %}
+          <span class="avatar avatar-small" style="width:32px; height:32px;" title="{{ user_details.full_name }}">
+            <div class='standard-image' style='background-color: #F5F4F4; color: #000;'>
+              {{ frappe.utils.get_abbr(user_details.full_name) }}
+            </div>
+          </span>
+        {% endif %}
+      {% endfor %}
+    {% endif %}
+  </div>
+  <div class="col-xs-2 text-right small text-muted">
+    {{ frappe.utils.pretty_date(task.modified) }}
+  </div>
+</div>
+{% if task.children %}
+  {% for child in task.children %}
+    {{ task_row(child, indent + 30) }}
+  {% endfor %}
+{% endif %}
+{% endmacro %}
+
 {% for task in doc.tasks %}
   <div class="web-list-item transaction-list-item">
-    {{ task_row(task, 0) }}
+      {{ task_row(task, 0) }}
   </div>
-{% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/erpnext/templates/pages/projects.html b/erpnext/templates/pages/projects.html
index 6d366c5..cfe1cc8 100644
--- a/erpnext/templates/pages/projects.html
+++ b/erpnext/templates/pages/projects.html
@@ -9,7 +9,7 @@
 {% endblock %}
 
 {% block header %}
-  <h1>{{ doc.project_name }}</h1>
+  <h3 class="my-account-header">{{ doc.project_name }}</h3>
 {% endblock %}
 
 {% block style %}
@@ -21,57 +21,58 @@
 {% endblock %}
 
 {% block page_content %}
-
-  {{ progress_bar(doc.percent_complete) }}
-
-  <div class="d-flex mt-5 mb-5 justify-content-between">
-    <h4>Status:</h4>
-    <h4>Progress:
-      <span>{{ doc.percent_complete }}
-        %</span>
-    </h4>
-    <h4>Hours Spent:
-      <span>{{ doc.actual_time }}</span>
-    </h4>
+  <div class="web-list-item transaction-list-item">
+    <div class="row align-items-center">
+      <div class="col-sm-4 "><b>Status: {{ doc.status }}</b></div>
+      <div class="col-sm-4 "><b>Progress: {{ doc.percent_complete }}%</b></div>
+      <div class="col-sm-4 "><b>Hours Spent: {{ doc.actual_time | round }}</b></div>
+    </div>
   </div>
 
   {{ progress_bar(doc.percent_complete) }}
 
+  <hr>
+
   {% if doc.tasks %}
-    <div class="website-list">
-      <div class="result">
-        <div class="web-list-item transaction-list-item">
-          <div class="row">
-            <h3 class="col-xs-4">Tasks</h3>
-            <h3 class="col-xs-2">Status</h3>
-            <h3 class="col-xs-2">End Date</h3>
-            <h3 class="col-xs-2">Assigned To</h3>
-            <div class="col-xs-2 text-right">
-              <a class="btn btn-secondary btn-light btn-sm" href='/tasks?new=1&project={{ doc.project_name }}'>{{ _("New task") }}</a>
-            </div>
-          </div>
-        </div>
-        {% include "erpnext/templates/includes/projects/project_tasks.html" %}
-      </div>
+  <div class="row align-items-center">
+    <div class="col-sm-6 my-account-header"> <h4>Tasks</h4></div>
+    <div class="col-sm-6 text-right">
+      <a class="btn btn-secondary btn-light btn-sm" href='/tasks/new?project={{ doc.project_name }}'>{{ _("New task") }}</a>
     </div>
+  </div>
+  <div class="website-list">
+    <div class="result">
+      <div class="web-list-item transaction-list-item">
+        <div class="row align-items-center">
+          <div class="col-sm-4"><b>Tasks</b></div>
+          <div class="col-sm-2"><b>Status</b></div>
+          <div class="col-sm-2"><b>End Date</b></div>
+          <div class="col-sm-2"><b>Assignment</b></div>
+          <div class="col-sm-2"><b>Modified On</b></div>
+        </div>
+      </div>
+      {% include "erpnext/templates/includes/projects/project_tasks.html" %}
+    </div>
+  </div>
   {% else %}
     <p class="font-weight-bold">{{ _("No Tasks") }}</p>
   {% endif %}
 
   {% if doc.timesheets %}
+  <h4 class="my-account-header">Timesheets</h4>
     <div class="website-list">
       <div class="result">
         <div class="web-list-item transaction-list-item">
-          <div class="row">
-            <h3 class="col-xs-2">Timesheets</h3>
-            <h3 class="col-xs-2">Status</h3>
-            <h3 class="col-xs-2">From</h3>
-            <h3 class="col-xs-2">To</h3>
-            <h3 class="col-xs-2">Modified By</h3>
-            <h3 class="col-xs-2 text-right">Modified On</h3>
+          <div class="row align-items-center">
+            <div class="col-xs-2"><b>Timesheet</b></div>
+            <div class="col-xs-2"><b>Status</b></div>
+            <div class="col-xs-2"><b>From</b></div>
+            <div class="col-xs-2"><b>To</b></div>
+            <div class="col-xs-2"><b>Modified By</b></div>
+            <div class="col-xs-2"><b>Modified On</b></div>
           </div>
         </div>
-        {% include "erpnext/templates/includes/projects/project_timesheets.html" %}
+      {% include "erpnext/templates/includes/projects/project_timesheets.html" %}
       </div>
     </div>
   {% else %}
@@ -104,70 +105,23 @@
 </div>
 
 <script>
-  { % include "frappe/public/js/frappe/provide.js" %
-  } { % include "frappe/public/js/frappe/form/formatters.js" %
-  }
-</script>
+  { % include "frappe/public/js/frappe/provide.js" % }
+  { % include "frappe/public/js/frappe/form/formatters.js" % }
+ </script>
 
 {% endblock %}
 
 {% macro progress_bar(percent_complete) %}
 {% if percent_complete %}
-  <div class="progress progress-hg" style="height: 5px;">
-    <div class="progress-bar progress-bar-{{ 'warning' if percent_complete|round < 100 else 'success' }} active" role="progressbar" aria-valuenow="{{ percent_complete|round|int }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ percent_complete|round|int }}%;"></div>
+  <span class="small py-2">Project Progress:</span>
+  <div class="progress progress-hg" style="height: 15px;">
+    <div
+      class="progress-bar progress-bar-{{ 'warning' if percent_complete|round < 100 else 'success' }} active"\
+      role="progressbar" aria-valuenow="{{ percent_complete|round|int }}" aria-valuemin="0"\
+      aria-valuemax="100" style="width:{{ percent_complete|round|int }}%;">
+    </div>
   </div>
 {% else %}
   <hr>
 {% endif %}
 {% endmacro %}
-
-{% macro task_row(task, indent) %}
-<div class="row mt-5 {% if task.children %} font-weight-bold {% endif %}">
-  <div class="col-xs-4">
-    <a class="nav-link " style="color: inherit; {% if task.parent_task %} margin-left: {{ indent }}px {% endif %}" href="/tasks?name={{ task.name | urlencode }}">
-      {% if task.parent_task %}
-        <span class="">
-          <i class="fa fa-level-up fa-rotate-90"></i>
-        </span>
-      {% endif %}
-      {{ task.subject }}</a>
-  </div>
-  <div class="col-xs-2">{{ task.status }}</div>
-  <div class="col-xs-2">
-    {% if task.exp_end_date %}
-      {{ task.exp_end_date }}
-    {% else %}
-      --
-    {% endif %}
-  </div>
-  <div class="col-xs-2">
-    {% if task["_assign"] %}
-      {% set assigned_users = json.loads(task["_assign"])%}
-      {% for user in assigned_users %}
-        {% set user_details = frappe.db.get_value("User", user,
-		["full_name", "user_image"],
-		as_dict = True)%}
-        {% if user_details.user_image %}
-          <span class="avatar avatar-small" style="width:32px; height:32px;" title="{{ user_details.full_name }}">
-            <img src="{{ user_details.user_image }}">
-          </span>
-        {% else %}
-          <span class="avatar avatar-small" style="width:32px; height:32px;" title="{{ user_details.full_name }}">
-            <div class='standard-image' style='background-color: #F5F4F4; color: #000;'>
-              {{ frappe.utils.get_abbr(user_details.full_name) }}
-            </div>
-          </span>
-        {% endif %}
-      {% endfor %}
-    {% endif %}
-  </div>
-  <div class="col-xs-2 text-right">
-    {{ frappe.utils.pretty_date(task.modified) }}
-  </div>
-</div>
-{% if task.children %}
-  {% for child in task.children %}
-    {{ task_row(child, indent + 30) }}
-  {% endfor %}
-{% endif %}
-{% endmacro %}
