From cc56417940ae00c19d840783211a0217ec700a45 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 10 Nov 2025 06:29:01 +0000 Subject: [PATCH] v1 --- core/__pycache__/models.cpython-311.pyc | Bin 209 -> 2217 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 348 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 830 bytes core/models.py | 28 +++- core/templates/base.html | 5 +- core/templates/core/index.html | 203 +++++++----------------- core/urls.py | 4 +- core/views.py | 31 ++-- static/css/custom.css | 48 ++++++ 9 files changed, 149 insertions(+), 170 deletions(-) create mode 100644 static/css/custom.css diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9aa598b9d5171b2bb0d207f045e07f9fbbb95a64..e1c62a04d70663cd93f9f6d6ba20a96175d0ef72 100644 GIT binary patch literal 2217 zcma)7&2JM&6rZ)%>#wXo5*)sXk(z@QHEG(k;!siL0|HbvNO6PWR;)IjNwVqMYi8{L zQ4f|%r5reL0|`~CdPsxtAqNip2^?){57u0JiqwNqIB{v;+x0rdp;gDbZ|BYY-kX^> z@BRF{s>TR3^XIg2QYPdNRQwj|bq?=9=Lw;NN+u~wMM)w7vPfv)A)!GgZ3cXU-5?<^ z;PqND=%Qpmh5iF2Q)P+d!Ut%SlY~;XC^PL+&x!l-T^??O`h+l2lqe|%0)z!OVbflt zQZukC!3N;=W|KK%KClH zWR>;WMgi0zy^>!tplzz+L(qQex3C*()6316?l8d4sDAXoG<0|&Cr z%rzSgvhOCRHmow6s;|~7wfYph&q}ZupSox9AMC1LVpAoHvnelnlhp?ztZ8VjTl1*6Q|F%c_q1_M;nYa&*!(q5kr1NJ%LBkHh(`a{ ziJ#s1!ik^#)o#Tn+VKe|KG9g{q{knRI_dHKnO6EzJAKJXUuxX&2lr~N^h`TFyY)oNtnw_-t;kqDWHXYTN-Ev2Xa5+;-h_p zOhZj&7b@jNzgmhh7ZdMe!Zgy14q%1`{KQz0#+yR}tEmGhwV4=5BqK#b5d6v_!Y3`sm9!q+QXmQi9kITsMoDz{3^wiy-CTYeYD z!&Rszqp~i-x4aIF$yME;LcRqO5!M#tw9Z8MX0H=5JjXWrwJI8r1*0;*=@u?E){UAi5|ovUvTkZs6UxXwH~|ozMO@Hx5H4-t zQEU;WY)!A5HG=@_aJ+twH_Y)0-z#yL_DcK{=m2v{|19!nz?`7>DdC7epOIf=h+Z(i z9qENHyRBr`xK+;Pf+Ep7xmKx{R~Z+|mdizM0dl-qk0`vt!b;mt_PqF|e-1%e5Lo() zPd{?beB4Sd!n0p^`JMCm6;EkJ7Tprb=Q7-lMFuSRCS-Ml`3Wy#}$ z*i|4NW4-b{gGFNR%Wi9nR7C8jeJMVqD6LZ z?$zCvI@?xf9d#Da>UkVKzc;*p=k-cUz1>!CJL+wiNM#=@PAa>%&`M3WQ`1grx^cae z9NXD)l4I@UMJIW&am{D1|3_)pB;>RYNiPt1{CqAXqI6TQtXq?G)w`w8H~7Em5w07j z_ha`i@}&SrZc24q%h_%#2BN<>Y=G)Yb5iY! ZIDle|KwK<4S&l=B`vQXu5EZcjMF9LZAJ_l@ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 1f807fae1897c89361c99c5e868a26d00799b73f..0abc2fb00b0dd79e08580bb5af807e691100b55f 100644 GIT binary patch delta 86 zcmcc3bccy|IWI340}vFq3TEa`D@U^qeRL8 zI|EV~7??^?{}DzPb+9ZpCbmdbmrnf7Efp0%pTGOQv+wu)?(ubO>Ka?%xT9RNfO>PC8!xj$3$j5Af#Zb*Cv^M`>A9jn9MM=} z4kvbJ_+EMb!Tqv5f7e@ttX%Do_Y+vrNb{0O$FGYfB&u&nl8zq@cwviqE*0q%VQv)A zP>Oog^qE5_Nhh7wa{c&^ddu-6+R3|&(~<|<*0vim@QZqyBh>W*$4_&Qj|f-A7tJ)s z=~_gEWb0MEmGl|w86^wEKZ&dq*gUsiW#%6l{A{_|w|Lcf|+o_>Gvqf(74)ld0t zd-wdK7~1PMu`xZc(B<37#aqejwd9ID7&i0P00H!$9E_sTsSh{fOLN=HyCVyGBMY&y zun#V%Xr&Wm#R-?0EgFnVC{$z%PDhW2BkB2qtE1=Y_GVRnLwrKI!@|TuH%hUh$T{~CE!96oTjQ1oHkCdQ%ZHHPf-Q6#oP5Eq{V!1Q7#*Ku^61OfEk4%~~s}guETzy!YnKoA>c! z|CpMZL_mL+PRlpL2>m0JfI>sz+l$SscSs^=|k4VB6wxYJ2mwh>6 zP1s6a0Xh0B%Et_88>QrbMYzqB#N#E*3Oks3CUHQODRvA@K~k7$;|6iCE(zZu#bJlk z(8(RJK1WUTVt6pV9fEo^GQIeJgpqaJXHRNMhV;}glZK3tBN^en5Q~o7QAND#(>piA zMx+^HvEUS;@pC3}9#TaPq;a2SxGAxj;0&RP639l>kPjiNqhJ8&1AY_l`WecBvKL`< zK_mp-GGfihA=Gg+ss)BI*;w21yRNY^)~upqm`+Labc(T~)l62_EK-D_XmFxoXUC+( zv9ZH61GA!Od6`C{=(;tt(Wqy1VsquT>;5P-9=l@|nMF#b-iU4DnzqgA7Upvgw;tSE z&pj%9yS|;<+IaYA=m{Nfc9(G8LP76tKq2MQk+Efgahls~zxB^Y15iq2p ze1hU%s@P+67IZo#*hj*3LMINxyUY_2H9@DJWy{3I+3Mq}!>U=li}flaG+QI|spl4T zob~hDF>%eyxOE;8-gFVJ3n+TO18bo->ila}J65%hy4+QlU#ly}>PkmVchz)jqo<`_ z{(P+6Xlpn2)BEXH3$5?^ljojY`z`Y<)5;BG^zo;?`Q?6crISo|lj(kPxtsi=lf2$d zUhiF8=v}zfU%GryZ>QE?g*r>Q?ozJ5xODJS`|4MJebZUI)m^+bn2pWI0|cyf_w9L< zIJbYby>RVisS{uA##h^s)e}e(07x&wM(2TX`E06G0Q9V<>X{|ul?i3g0?%(HPYlgf z1`zb;;Me{qqL;+gPk@~&H*I26ExbmrfGYk1-V - {% block title %}Knowledge Base{% endblock %} + {% block title %}Analytics Dashboard{% endblock %} + + + {% block head %}{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 0a3f404..c50b79e 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,154 +1,63 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} +{% block title %}Analytics Dashboard{% endblock %} {% block head %} -{% if project_description %} - - - -{% endif %} -{% if project_image_url %} - - -{% endif %} - - - - + + + {% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… -
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
-{% endblock %} \ No newline at end of file +
+
+

Analytics Overview

+
+ +
+
+ +
+
+
+
Total Spend (YTD)
+

${{ total_spend_ytd|floatformat:2 }}

+
+
+
+ + +
+
+
+
Total Invoices Processed
+

{{ total_invoices }}

+
+
+
+ + +
+
+
+
Documents Uploaded
+

{{ documents_uploaded }}

+
+
+
+ + +
+
+
+
Average Invoice Value
+

${{ avg_invoice_value|floatformat:2 }}

+
+
+
+
+ +
+
+{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..8e0d0ae 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,7 @@ from django.urls import path -from .views import home +from .views import index urlpatterns = [ - path("", home, name="home"), + path("", index, name="index"), ] diff --git a/core/views.py b/core/views.py index c9aed12..ca07637 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,18 @@ -import os -import platform - -from django import get_version as django_version from django.shortcuts import render from django.utils import timezone +import decimal - -def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() +def index(request): + """Render the main analytics dashboard.""" + # Dummy data for the dashboard cards + total_spend_ytd = decimal.Decimal('125432.50') + total_invoices = 1342 + avg_invoice_value = total_spend_ytd / total_invoices if total_invoices > 0 else 0 context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), + 'total_spend_ytd': total_spend_ytd, + 'total_invoices': total_invoices, + 'documents_uploaded': 1500, + 'avg_invoice_value': avg_invoice_value, } - return render(request, "core/index.html", context) + return render(request, 'core/index.html', context) diff --git a/static/css/custom.css b/static/css/custom.css new file mode 100644 index 0000000..1d5d4ec --- /dev/null +++ b/static/css/custom.css @@ -0,0 +1,48 @@ +/* Your custom CSS goes here */ + +body { + background-color: #F6F9FC; + font-family: 'Source Sans Pro', sans-serif; + color: #32325D; +} + +.dashboard-container { + padding: 2rem; +} + +.dashboard-title { + font-family: 'Poppins', sans-serif; + font-weight: 600; + color: #0A2540; +} + +.metric-card { + border: none; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + background: #FFFFFF; + transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; +} + +.metric-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); +} + +.metric-card .card-body { + padding: 1.5rem; +} + +.metric-card .card-title { + font-family: 'Poppins', sans-serif; + font-size: 1rem; + font-weight: 600; + color: #525f7f; + margin-bottom: 0.5rem; +} + +.metric-card .card-text { + font-size: 2rem; + font-weight: 600; + color: #0A2540; +}