From 3e74a9de32b81b9ee3d1c91c91b5901f6be618d0 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 4 Feb 2026 15:19:35 +0000 Subject: [PATCH] Mock 1 --- core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 1582 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 3176 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 2833 bytes core/admin.py | 16 +- core/migrations/0001_initial.py | 54 +++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3173 bytes core/models.py | 38 +- core/templates/base.html | 137 +++++++- core/templates/core/index.html | 327 ++++++++++-------- core/views.py | 55 ++- static/css/custom.css | 61 +++- 11 files changed, 507 insertions(+), 181 deletions(-) create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392d6714413db63120e4233d2e96cbadb5de..3b8901b42035160ddef36010e09842800d153e52 100644 GIT binary patch literal 1582 zcma)6%Wl&^6rJ%SltOu^w6L%c&8kQggbG4pK^u?&A$en5&y*VcVr&E1MWP?j z9ehC%>R0duv{Dw;tSYhUE>XK;#l21wl_W@vJts4B@0_{!%#FW|jTH&BAFn^VKNUiL z;iT7cCxfHQl#nlk5k@`YQ^lfhs;p#T*+JW9}3VBSJ zwn>-{UT1o%+bZ}#@3w9D+38J)nIB-(Mlj}p@yvfS76usg5sZ0YEc`cPkrkg4qjZQ- z8&v8x^WESOvo=&Yxyt=DE}pJGvxVo{J`WOEc_D1ZAGxvPg>fplEWEN4XTx*j#ObFF zgPw3l=V9`NaAHzMOodTXWs0dW6^_;9^zaD}Faj`X0URjx$QDUMmYpz&6E{hD;51}D z65$6oaJZogynazaC-AEatXw zHmr4*do2D=j(~~$zE#@@eO^n~(jZA|{1bQ5Bowuep?DWZw!>>qD0nRsY$0lh0>*%# zL60v0H2crNx#i}{es!_AijS!FTt_Q51LjeRnL5)zHCTRv_(@%d?oBpon;)xC|f*eq>ph=CFJbS3r6{vV%q@s?4Ju zMXVb+F^=0R2onfr(Y=%@yY6}k7h)2Z&mm+fPvK~~2dGti1>m$!FF>cs<>r(9>e6Yk zaMNh9@Q6XNKqOU;_v^A>QE3b@;mve2D>{Nh{>-wIx}lBAW-#_S+>3xo$C%jZ*zYt~ z@ag7?UUj1+$Jtv@JzRhSPK3KA@M9r!P?p?_g$@&epB#Z-6qy(N4b&yx-YPm|fp-fl zQ!P9GZ#jSG?{!Q3zA%6S|8?;MU|Xe>?vvTwzu$fGaQENu0j)HrHm~kZ%KX3VU>>MQ7RyrAuux3|lW-Q#U$jI7UF0OT+%zrThWOb#fvA delta 151 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 C6TWu< literal 1364 zcmZ`(&1)M+6ra_{dS%J>I&SM!uH%hUh$T{~CE!96oTjQ1oHkCdQ$lozPf-Q6#oM~=1-7}AYwoe=&3h>36z}rW~~)fO5P4{-h1=r&HMPV zzfVm~BA|nRhVUX&zZ=1NEJDd#(kRMro?7~GlVKiARAFbK7y={g8`rq_)Wa;XDEltUWCmB zkq~sth&3ZeP{;A878u54V{Oaty2i>_vx<&kIwj51DaMXgGg(=)ND+pj!HI^Q9g`Br z#tzdA%!;PvWg3a1>()Z2BR!#4DWHiJ1dw>FOuS)~xge&2p-9tZ06jh%7)=`o)~k%rY>m)oo?Fy$ z*3WOp#5FJD)_FvD(?z&0py>SutcBjF^RHFyMAbU#a#vk`t*)G?D;+i6Rnx7Fo|by~ z_(Z$b)~@ZR_tUQyT0itB&pp5LYvy^Tl^e+D)6aYJ%l+g^CzEdC%omzVp>MZ5DOS%5y(&3}_dBd;%QZ0+=9vv0uqp@2{{qIk|vd0IhV+F zF3nx?uH+WaES53f@S zV$NsVLcC5v65^u+#ol9$h(zQ@o|<8sw|__dEQ9P2hx0Zx@^3 z37c+y`cBw%^V4tJ^c~{?6X1qHa8l+BW^|nD?Rbq}>p}N363S*0&2!=!|VO&>o0G z#dgLCMSG|4p5kD;zc|#cp)oXGi+5%^@a}sH@9+H|yo+cEVwgBNCpv4#Fno+mtetx! zLr=uX*?5Oo$7_i<_QmA?%-s3c_i7goJ?MQjwI!-zE!i1s!Ie9Orr|8P!2B!ib7P$i zuHe!JCaasb6r!n0371VKsc4BwUuKeS7F4RHF6RkWOpI7>g{UQk?8@7Cm-!7$R7F$2 z#Vojk$%bxVxeN}No6Dnr0i|$W1xm^{vWCkAbBlQ@3Nd$&5cIHM9!@P&HLJLs-(|iE z(Rb8x9y32oP{4APXmG%JHZ-NY4GyasGzrf%=G|1Wh72~aP85VQs*%@pqe?LInreO< zlOw*C+(^8Ko!@ic%|k6KnuNEE^^1~zOwP%0H= z0}K(a;4?~a2_Z;C@7Yklf3u(yD zC7uz?zp$kcr|P?VC)-kHfJvtsSOW6ZLiq;dt``+y{d6Xw4d%0HhxKAT3+c6mbY_wD z@loq)sXbD!;MP6+H{k`$Ed288)RtbtsppZB&#zPVtpay}F-M z7cXACB)6EDsq7Md-`m0m6{8;rcy#>xxqtA{^`=+wPyH!i`QHE0XHEU4?n_&~bkijb zdmm++0l^>VedCSr(#G&24Djun|cbU#bboJ`AvMvQvIup$NxnT>FSMw5FZRy29A zMx$5i(JNN;3JuLS!l&uz^xk=EbowAqN9XIK^VaA*4gIPSj?;-tk4LPDONVQ8B3++I zTN7y-y4DEC=-7vQ_pGrG4~OX3)%w^~YwRiweclM4+0*wn|EwQm4oy0qsgGx@@eBn)vwfl9l+lp15o!F4NE_jqo`-IrsRUH92>fd1}(h zY<)6oO=f9mrNPOc;^a>qT>j~bHM?NVX06$En%`~;!hLaBg3sw2(sNtBv?XZ5S*aQJ zb7F#=7!WVHXpX)j=FB@0lX&{kvkZ;huE%a$vD-9srx6AYW;qA5PlsuIsUBal;!8Ai z{WZitnum#J=l_wkmUGr}-dcVeWIK_jc_K|8-23S(Yi`k+yJ^kcqqst=-$8IY;!Pg! z=qisFB&b00cyCF~UN6KO62idmXY|}vNaa)g&7sctXU`9MA1(7AS#EETq>n|N?K*=t zW}LsdGwnS~7Ql@4w)){t*>uhl|M3X>*s;$GXU~1f{o2lNK - - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}{{ project_name }}{% endblock %} + {% if project_description %}{% endif %} + + + + + + + + + {% load static %} + + + + {% block head %}{% endblock %} - - {% block content %}{% endblock %} - + - +
+ {% block content %}{% endblock %} +
+ +
+
+

© 2024 Canada MP Trade Tracker. For reconnaissance purposes only.

+
+
+ + + + \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..d88f1c5 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,190 @@ -{% extends "base.html" %} +{% extends 'base.html' %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Dashboard | {{ project_name }}{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+ +
+
+

Track Parliament's Portfolio

+

Real-time reconnaissance of investment disclosures by Canadian Members of Parliament. See what they know, when they know it.

+
+
+
+
+ Total Disclosures (30d) + +12% +
+

1,284

+
+
-

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 + +
+ +
+
+
+

Live Disclosure Feed

+ +
+ +
+ + + + + + + + + + + + + {% for trade in trades %} + + + + + + + + + {% empty %} + + + + {% endfor %} + +
MPTickerTypeAmountDate
+
+
{{ trade.mp.name|slice:":1" }}
+
+
{{ trade.mp.name }}
+
{{ trade.mp.party }}
+
+
+
+
{{ trade.ticker }}
+
{{ trade.company_name }}
+
+ {% if trade.trade_type == 'BUY' %} + BUY + {% else %} + SELL + {% endif %} + {{ trade.amount_range }}{{ trade.disclosure_date|date:"M d, Y" }} + +
No disclosures found yet.
+
+
+
+ + +
+
+

Trending Assets

+
+
+
+
S
+
+
SHOP
+
Shopify Inc.
+
+
+
+
8 Trades
+
+4.2%
+
+
+
+
+
T
+
+
TD
+
TD Bank
+
+
+
+
5 Trades
+
-1.5%
+
+
+
+ +
+ +
+

Start Your Portfolio

+

Connect your account to set alerts and follow specific MPs or tickers.

+ +
+
+
+ + + +{% endblock %} diff --git a/core/views.py b/core/views.py index c9aed12..e52b817 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,48 @@ import os import platform - -from django import get_version as django_version +from datetime import date, timedelta from django.shortcuts import render from django.utils import timezone - +from .models import MemberOfParliament, TradeDisclosure 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() + """Render the landing screen with MP trades and environment details.""" + + # Seed data if empty + if not MemberOfParliament.objects.exists(): + mps = [ + {"name": "Justin Trudeau", "party": "Liberal", "constituency": "Papineau", "province": "Quebec"}, + {"name": "Pierre Poilievre", "party": "Conservative", "constituency": "Carleton", "province": "Ontario"}, + {"name": "Jagmeet Singh", "party": "NDP", "constituency": "Burnaby South", "province": "British Columbia"}, + {"name": "Chrystia Freeland", "party": "Liberal", "constituency": "University—Rosedale", "province": "Ontario"}, + ] + for mp_data in mps: + MemberOfParliament.objects.get_or_create(**mp_data) + + mp_jt = MemberOfParliament.objects.get(name="Justin Trudeau") + mp_pp = MemberOfParliament.objects.get(name="Pierre Poilievre") + + TradeDisclosure.objects.get_or_create( + mp=mp_jt, ticker="AAPL", company_name="Apple Inc.", + trade_type="BUY", amount_range="$15,001 - $50,000", + disclosure_date=date.today() - timedelta(days=2) + ) + TradeDisclosure.objects.get_or_create( + mp=mp_pp, ticker="SHOP", company_name="Shopify Inc.", + trade_type="SELL", amount_range="$50,001 - $100,000", + disclosure_date=date.today() - timedelta(days=5) + ) + TradeDisclosure.objects.get_or_create( + mp=mp_jt, ticker="TSLA", company_name="Tesla, Inc.", + trade_type="BUY", amount_range="$1,000 - $15,000", + disclosure_date=date.today() - timedelta(days=10) + ) + trades = TradeDisclosure.objects.select_related('mp').order_by('-disclosure_date')[:10] + 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", ""), + "project_name": "Canada MP Trade Tracker", + "trades": trades, + "current_time": timezone.now(), } - return render(request, "core/index.html", context) + return render(request, "core/index.html", context) \ No newline at end of file diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..30b8e4e 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,59 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +/* Dark Mode Finance Theme Overrides */ + +:root { + --bg-dark: #0a0b0d; + --card-bg: #1e2126; + --accent-green: #00ffad; + --accent-red: #ff4d4d; + --text-main: #ffffff; + --text-muted: #94a3b8; + --border-color: #2d333b; } + +/* Custom Scrollbar */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: var(--bg-dark); +} + +::-webkit-scrollbar-thumb { + background: #2d333b; + border-radius: 10px; +} + +::-webkit-scrollbar-thumb:hover { + background: #3d444d; +} + +/* Table Transitions */ +.table-hover tbody tr:hover { + color: var(--text-main); +} + +.badge { + font-weight: 600; + letter-spacing: 0.5px; + border-radius: 6px; +} + +/* Glassmorphism utility */ +.glass { + background: rgba(30, 33, 38, 0.7); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +/* Button polishing */ +.btn-outline-light { + border-color: var(--border-color); + color: var(--text-muted); +} + +.btn-outline-light:hover { + background-color: var(--border-color); + color: var(--text-main); +} \ No newline at end of file