diff --git a/assets/pasted-20251220-213302-d711d038.png b/assets/pasted-20251220-213302-d711d038.png new file mode 100644 index 0000000..0c2e36d Binary files /dev/null and b/assets/pasted-20251220-213302-d711d038.png differ diff --git a/assets/pasted-20251220-213627-9936cf00.png b/assets/pasted-20251220-213627-9936cf00.png new file mode 100644 index 0000000..bfb6616 Binary files /dev/null and b/assets/pasted-20251220-213627-9936cf00.png differ diff --git a/assets/vm-shot-2025-12-20T21-32-26-942Z.jpg b/assets/vm-shot-2025-12-20T21-32-26-942Z.jpg new file mode 100644 index 0000000..77a5c55 Binary files /dev/null and b/assets/vm-shot-2025-12-20T21-32-26-942Z.jpg differ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index dd03437..95294f3 100644 Binary files a/core/__pycache__/urls.cpython-311.pyc and b/core/__pycache__/urls.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 8c6495b..1e837a2 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/templates/core/dashboard.html b/core/templates/core/dashboard.html new file mode 100644 index 0000000..44928a4 --- /dev/null +++ b/core/templates/core/dashboard.html @@ -0,0 +1,268 @@ +{% extends "base.html" %} +{% load static %} + +{% block content %} +
+
+ + + + +
+
+

Dashboard

+
+
+ + search icon +
+ +
+
+
+
Owner
+
Your Account
+
+
+
+
+ +
+
+
Ongoing Projects
+
+
08
+
+3.0%
+
+
From last month
+
+
+
Complete Projects
+
+
30
+
-5.0%
+
+
From last month
+
+
+
On Hold Projects
+
+
03
+
+8.0%
+
+
From last month
+
+
+
+

Alert Overview

+ Live +
+
+
+
+
-
+
+
Fraud / anomaly alert
+

Project Manager — Eng. Rahim

+

Habiganj 9746tr — Ongoing

+

Material usage exceeded expected threshold.

+
+
5 hours ago
+ +
+
+
+
+
+
+
!
+
+
COI expiring soon
+

Subcontractor — R. Builders LLC

+

Certificate of Insurance

+

Expires in 7 days — request renewal.

+
+
Today
+ +
+
+
+
+
+
+
+ + +
+ +
+

Projects Map Overview

+
Mock map
+
+
📍 Kukatata wt46tr
+
📍 Habiganj 9746tr
+
📍 Newmarket 746t
+
+
+ + +
+
+
+
+

Habiganj 9746tr — Ongoing

+

Location Dhaka, Bangladesh

+
+ +
+
+
+
Planned
+
$2.5M
+
+
+
Actual
+
$2.0M (-12%)
+
+
+
Progress
+
45%
+
+
+
+
+

Compliance Status

+
+
+
Daily Logs
+
On-time: 92%
+
+
+
Docs
+
Valid: 128 • Expiring: 7
+
+
+
Equipment
+
Maintenance due: 3
+
+
+
+
+
+ + +
+
+

Daily Activity Log

+
+ + +
+
+
+
+
+
+

Floor Slab Project Manager — Eng. Rahim

+

Habiganj 9746tr — Ongoing

+
    +
  • Concrete pouring completed for 2nd floor slab — Ensure rebar spacing matches BOQ specification.
  • +
  • Check curing process for foundation concrete.
  • +
  • Verify column alignment before pouring.
  • +
+
Sep 17, 2025 — 06:45 PM
+
+
+ photo icon 2 photos +
+
+
+
+
safety icon
+
+

Safety Meeting Supervisor — T. Coleman

+

Kukatata wt46tr — Ongoing

+
    +
  • Toolbox talk completed (PPE + ladder safety)
  • +
  • Attendance captured with GPS check-in.
  • +
  • PPE checklist verified (helmets, vests).
  • +
  • Hazards documented with photo proof.
  • +
+
Sep 17, 2025 — 08:10 AM
+
+
+ completed icon Completed +
+
+
+
+ +
+
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 3da5fd8..eebfa60 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -67,7 +67,7 @@
Get Started - View Portal Preview + View Portal Preview
diff --git a/core/urls.py b/core/urls.py index 8e0d0ae..34e43fe 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,8 @@ from django.urls import path -from .views import index +from .views import index, dashboard urlpatterns = [ path("", index, name="index"), + path("dashboard/", dashboard, name="dashboard"), ] diff --git a/core/views.py b/core/views.py index e523447..73112b4 100644 --- a/core/views.py +++ b/core/views.py @@ -6,3 +6,10 @@ def index(request): "project_name": "ComplianceShield", } return render(request, "core/index.html", context) + + +def dashboard(request): + context = { + "project_name": "ComplianceShield", + } + return render(request, "core/dashboard.html", context) diff --git a/static/css/custom.css b/static/css/custom.css index 10f05e3..7f74644 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,54 +1,63 @@ :root{ - --ink:#0b0b0c; - --paper:#fbfaf7; - --line: rgba(11,11,12,.08); - --shadow: 0 18px 48px rgba(11,11,12,.10); - --shadow2: 0 10px 26px rgba(11,11,12,.10); - --radius: 22px; - - /* premium blue theme (like the dashboard reference) */ - --blue:#2563eb; - --blue2:#60a5fa; - --ice:#eaf2ff; - --ice2:#f6fbff; - } - - html, body { height: 100%; } - body { font-family: 'Inter', sans-serif; color: var(--ink); } - - .bg-premium{ - background: - radial-gradient(1400px 560px at 18% 8%, rgba(96,165,250,.30), rgba(255,255,255,0) 60%), - radial-gradient(1200px 520px at 92% 12%, rgba(37,99,235,.22), rgba(255,255,255,0) 55%), - radial-gradient(1100px 620px at 55% 100%, rgba(234,242,255,.95), rgba(255,255,255,0) 60%), - linear-gradient(180deg, #f6fbff 0%, #ffffff 55%, #f7fbff 100%); - } - - .shell { - border-radius: 26px; - background: rgba(255,255,255,.78); - border: 1px solid rgba(11,11,12,.08); - box-shadow: var(--shadow); - backdrop-filter: blur(10px); - } - - .panel { - border-radius: var(--radius); - background: rgba(255,255,255,.92); - border: 1px solid rgba(11,11,12,.06); - box-shadow: var(--shadow2); - } - - .chip { - border-radius: 999px; - background: rgba(255,255,255,.8); - border: 1px solid rgba(11,11,12,.08); - } - - .btn { - border-radius: 16px; - transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease; - } - .btn:hover { transform: translateY(-1px); box-shadow: 0 18px 48px rgba(11,11,12,.10); } - - .drawer.hidden { display:none; } \ No newline at end of file + --ink:#0b0b0c; + --line: rgba(11,11,12,.08); + --shadow: 0 18px 48px rgba(11,11,12,.10); + --shadow2: 0 10px 26px rgba(11,11,12,.10); + /* premium blue theme */ + --blue:#2563eb; + --blue2:#60a5fa; + --ice:#eef6ff; +} +html, body { height: 100%; } +body{ + font-family: 'Inter', sans-serif; + color: var(--ink); + background: radial-gradient(1400px 760px at 20% 10%, rgba(96,165,250,.28), rgba(255,255,255,0) 60%), radial-gradient(1200px 640px at 90% 20%, rgba(37,99,235,.20), rgba(255,255,255,0) 55%), linear-gradient(180deg, #f6fbff 0%, #ffffff 55%, #f7fbff 100%); +} +.appShell{ + border-radius: 30px; + background: rgba(255,255,255,.80); + border: 1px solid rgba(11,11,12,.08); + box-shadow: var(--shadow); + backdrop-filter: blur(10px); + overflow: hidden; +} +.card{ + background: rgba(255,255,255,.92); + border: 1px solid rgba(11,11,12,.06); + border-radius: 18px; + box-shadow: var(--shadow2); +} +.chip{ + border-radius: 999px; + background: rgba(255,255,255,.85); + border: 1px solid rgba(11,11,12,.08); +} +.btn{ + border-radius: 14px; + transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease; +} +.btn:hover{ + transform: translateY(-1px); + box-shadow: var(--shadow2); +} +.softInput{ + background: rgba(255,255,255,.92); + border: 1px solid rgba(11,11,12,.10); + border-radius: 18px; + padding: 10px 40px; + font-size: 14px; + outline: none; + width: 100%; +} +.softInput:focus{ + border-color: rgba(37,99,235,.35); + box-shadow: 0 0 0 4px rgba(37,99,235,.10); +} +.divider{ + border-color: rgba(11,11,12,.10); +} +/* Mobile sidebar behavior */ +.sidebarHidden { + display: none; +} \ No newline at end of file diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 10f05e3..7f74644 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,54 +1,63 @@ :root{ - --ink:#0b0b0c; - --paper:#fbfaf7; - --line: rgba(11,11,12,.08); - --shadow: 0 18px 48px rgba(11,11,12,.10); - --shadow2: 0 10px 26px rgba(11,11,12,.10); - --radius: 22px; - - /* premium blue theme (like the dashboard reference) */ - --blue:#2563eb; - --blue2:#60a5fa; - --ice:#eaf2ff; - --ice2:#f6fbff; - } - - html, body { height: 100%; } - body { font-family: 'Inter', sans-serif; color: var(--ink); } - - .bg-premium{ - background: - radial-gradient(1400px 560px at 18% 8%, rgba(96,165,250,.30), rgba(255,255,255,0) 60%), - radial-gradient(1200px 520px at 92% 12%, rgba(37,99,235,.22), rgba(255,255,255,0) 55%), - radial-gradient(1100px 620px at 55% 100%, rgba(234,242,255,.95), rgba(255,255,255,0) 60%), - linear-gradient(180deg, #f6fbff 0%, #ffffff 55%, #f7fbff 100%); - } - - .shell { - border-radius: 26px; - background: rgba(255,255,255,.78); - border: 1px solid rgba(11,11,12,.08); - box-shadow: var(--shadow); - backdrop-filter: blur(10px); - } - - .panel { - border-radius: var(--radius); - background: rgba(255,255,255,.92); - border: 1px solid rgba(11,11,12,.06); - box-shadow: var(--shadow2); - } - - .chip { - border-radius: 999px; - background: rgba(255,255,255,.8); - border: 1px solid rgba(11,11,12,.08); - } - - .btn { - border-radius: 16px; - transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease; - } - .btn:hover { transform: translateY(-1px); box-shadow: 0 18px 48px rgba(11,11,12,.10); } - - .drawer.hidden { display:none; } \ No newline at end of file + --ink:#0b0b0c; + --line: rgba(11,11,12,.08); + --shadow: 0 18px 48px rgba(11,11,12,.10); + --shadow2: 0 10px 26px rgba(11,11,12,.10); + /* premium blue theme */ + --blue:#2563eb; + --blue2:#60a5fa; + --ice:#eef6ff; +} +html, body { height: 100%; } +body{ + font-family: 'Inter', sans-serif; + color: var(--ink); + background: radial-gradient(1400px 760px at 20% 10%, rgba(96,165,250,.28), rgba(255,255,255,0) 60%), radial-gradient(1200px 640px at 90% 20%, rgba(37,99,235,.20), rgba(255,255,255,0) 55%), linear-gradient(180deg, #f6fbff 0%, #ffffff 55%, #f7fbff 100%); +} +.appShell{ + border-radius: 30px; + background: rgba(255,255,255,.80); + border: 1px solid rgba(11,11,12,.08); + box-shadow: var(--shadow); + backdrop-filter: blur(10px); + overflow: hidden; +} +.card{ + background: rgba(255,255,255,.92); + border: 1px solid rgba(11,11,12,.06); + border-radius: 18px; + box-shadow: var(--shadow2); +} +.chip{ + border-radius: 999px; + background: rgba(255,255,255,.85); + border: 1px solid rgba(11,11,12,.08); +} +.btn{ + border-radius: 14px; + transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease; +} +.btn:hover{ + transform: translateY(-1px); + box-shadow: var(--shadow2); +} +.softInput{ + background: rgba(255,255,255,.92); + border: 1px solid rgba(11,11,12,.10); + border-radius: 18px; + padding: 10px 40px; + font-size: 14px; + outline: none; + width: 100%; +} +.softInput:focus{ + border-color: rgba(37,99,235,.35); + box-shadow: 0 0 0 4px rgba(37,99,235,.10); +} +.divider{ + border-color: rgba(11,11,12,.10); +} +/* Mobile sidebar behavior */ +.sidebarHidden { + display: none; +} \ No newline at end of file diff --git a/staticfiles/pasted-20251220-213302-d711d038.png b/staticfiles/pasted-20251220-213302-d711d038.png new file mode 100644 index 0000000..0c2e36d Binary files /dev/null and b/staticfiles/pasted-20251220-213302-d711d038.png differ diff --git a/staticfiles/pasted-20251220-213627-9936cf00.png b/staticfiles/pasted-20251220-213627-9936cf00.png new file mode 100644 index 0000000..bfb6616 Binary files /dev/null and b/staticfiles/pasted-20251220-213627-9936cf00.png differ diff --git a/staticfiles/vm-shot-2025-12-20T21-32-26-942Z.jpg b/staticfiles/vm-shot-2025-12-20T21-32-26-942Z.jpg new file mode 100644 index 0000000..77a5c55 Binary files /dev/null and b/staticfiles/vm-shot-2025-12-20T21-32-26-942Z.jpg differ