From a22cc53e72b65c5aa8fd592b857f348fed82cbf8 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 22 Dec 2025 19:50:44 +0000 Subject: [PATCH] Revert to version a5f160a --- config/__pycache__/urls.cpython-311.pyc | Bin 3567 -> 1557 bytes config/urls.py | 11 - core/__pycache__/forms.cpython-311.pyc | Bin 3381 -> 1330 bytes core/__pycache__/mail.cpython-311.pyc | Bin 1128 -> 0 bytes core/__pycache__/models.cpython-311.pyc | Bin 3897 -> 3162 bytes core/__pycache__/urls.cpython-311.pyc | Bin 1204 -> 561 bytes core/__pycache__/views.cpython-311.pyc | Bin 7435 -> 3318 bytes core/forms.py | 22 +- core/mail.py | 25 -- core/migrations/0002_note.py | 27 -- .../__pycache__/0002_note.cpython-311.pyc | Bin 1606 -> 0 bytes core/models.py | 12 +- core/templates/base.html | 117 ++------- core/templates/core/about.html | 58 ----- core/templates/core/contact.html | 61 ----- core/templates/core/dashboard.html | 128 +++------- core/templates/core/index.html | 127 ++++------ core/templates/core/mood_entry_form.html | 99 ++++---- core/templates/core/mood_modal.html | 21 -- core/templates/core/privacy_policy.html | 50 ---- core/templates/registration/login.html | 42 ---- .../registration/password_change.html | 48 ---- .../registration/password_change_done.html | 21 -- .../registration/password_reset.html | 53 ---- .../registration/password_reset_complete.html | 21 -- .../registration/password_reset_confirm.html | 58 ----- .../registration/password_reset_done.html | 22 -- core/templates/registration/signup.html | 50 ---- core/urls.py | 7 +- core/views.py | 81 +----- static/css/custom.css | 232 +----------------- staticfiles/css/custom.css | 231 +---------------- 32 files changed, 165 insertions(+), 1459 deletions(-) delete mode 100644 core/__pycache__/mail.cpython-311.pyc delete mode 100644 core/mail.py delete mode 100644 core/migrations/0002_note.py delete mode 100644 core/migrations/__pycache__/0002_note.cpython-311.pyc delete mode 100644 core/templates/core/about.html delete mode 100644 core/templates/core/contact.html delete mode 100644 core/templates/core/mood_modal.html delete mode 100644 core/templates/core/privacy_policy.html delete mode 100644 core/templates/registration/login.html delete mode 100644 core/templates/registration/password_change.html delete mode 100644 core/templates/registration/password_change_done.html delete mode 100644 core/templates/registration/password_reset.html delete mode 100644 core/templates/registration/password_reset_complete.html delete mode 100644 core/templates/registration/password_reset_confirm.html delete mode 100644 core/templates/registration/password_reset_done.html delete mode 100644 core/templates/registration/signup.html diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index bff1ac9c216373c39908444cc5da926690f5a075..28817aa35512298e6df4bc5c0b678c917f71e36c 100644 GIT binary patch delta 310 zcmaDaJ(WjeIWI340}#kssATG}Ffcp@abSQQ%J|I1I8nn!goz=QHH9seDGRIvB$vfK zae_22J5Yipg<}~b1H)>@i4(-?)0v`pQrWY3VdfN>r1AjOaHenqMfqT&DO^?D3=C_y zmoWkL0Wkzr0d)a&gVh67^TWh}YylV>yPg!DU)g!T~9S*~W-JVZ)yhJ!KJk25=1n^%TrqImP;N;=qaT&5=fT<#ePkYYbSU`>+zbSV#M^#({NY zAJ(y5tYlwS3Rq+Nu-@9mI^LJX11qr)E4_=A>B~9+tfTv|CU&t-?qt=X<#8Nr9P>%q zc{~pN7M4zdHtB1nNi&Mj^K5S~n?ndeH1!AXlsM#?QC^3I(Wzk)3kxwUkI zud2#wz1G%5qpm9as;YS!zNM)RTs88M$jvp(-)n2lmS`AQQ}la$v#uMwrnU{N^8nF# zL*+lO<1h3)e-#L_s$ssa08DnVttJ+A%T@45Ot_34)|n^}N&&m73~LS5;*J zE5f_^cLYOi)vLNdoCTO(7a~{gi!!kEsmRr~Ql%NwX({wnULkwo$|V?Uki!1_Pg5dXZWR|q7V+mTUGsW#hEU8zA4=zL^p~1aa;y{d{2Y#y9xNdp8wM;!2YEm@pp&Y^pOz1V$a1}=+-iLUg)j#wL~xK9 zu0rq8Nz9-Q4(*lz!Bl`4jyynf0P?6Sf;pz)8Z@%o`T|wv*9^G{jzb29MiUKOArVf1 z8qFYlK+^-!70iPzXn`+OO{!Gapoy_yrhAw>%#`ko?9iH{I~1@j6hNKY3soULE-$_# zoSMuxvuGF!DVThJ9JRWj;nyIlG~a+-gqzmMJvd!i#d=|GQc!V{%cXW*TDfq3TDWAW zpJHWNFtd9>=@F&LZjwiKa6O|L?anc`H;$YkhF86@T|C!nh6H%F*wEo=y8>woII!9> zR*Z_Ks>TPo<4&*wE2~y2&ak&{ARj}kuW00NgcI%BOd1CoEzqqdxoZPNGxjEWm3D95 zZFnt6tg$y%!p@6rV@(SYON5B@FwmU{ZGE~uH2A}Y98Rwr*x|@dc7ooS;e>CH<|n(x ziGT?0Oy$ELdYxRLjZAe%dUbQqaa4cE*DsN$NmZjgs@I;09(95I)MzpdIJ(2)7M+@+ zT?erfn7cB2>zWgqomsw8nJX^Aw!b-ZvskFW$>u~od1+zc=1=G)tQoz^3*>kf+AD3v zXbbp0uC@(T6JV2ms<*@{7HGrN=nqQ1_2sM3C0Ui)O+2lggK+ZqQU4Qu8@CTI471IS zFx)mG1CN-rh4}7!3!Sw3-CMnG5VD0%TfO%dI%oCXTL}0)_x1n^gdfg5O02*8?bNsL zceoQacVdeRf$H$1+mCLqf7}^L+e7INm$A8wYdC7fPp!|}@l&06){bX?yl-(AJKRN^ zyXe{z>r-}Yax*4u!~|>lwiOdPu{(C`j#XK;xLSv+*<8&d5ln6~es&{%wi7>R$IrdU zT3n&S6>P3RU99l2$7MS;wV9gTNX=S{hLxJ_q}q0>y^YXU%m*xd1Qyu8==e7sy*U2K zX**Nc%#=1VC2;zfDX>Sa5_9v?W%ggcV9yA%?&T>k-Bu&)dn1o5{-?$;;Nl zXIAoZC#l&<4dP5@p2n4ET#3e&{J7&!#_jaXX1chME?RdUSm`3nnwcR^FhcZo_7fU? zmqy>E(Rcmm%#(S0;@alK!p6h`_*R%AYfUTw;p9AVgb}ohY@HGsl+d7rhD&&qdK|G6 zmo^h~8;Ln<`D-gN*GW9E6AvKl8hek1i8M^4VNigv!4dXhbUTT-!EdIw5z8zyTinR{ zh4l-MPyc+~K7Zx6Q0M%IR&22oTeM;179W;;hpavR_KQ3Ady7_VsS{hWVdRz`mdI;6 MKu9i6I}1(!4;HTYoB#j- diff --git a/config/urls.py b/config/urls.py index 7fe8561..bcfc074 100644 --- a/config/urls.py +++ b/config/urls.py @@ -18,21 +18,10 @@ from django.contrib import admin from django.urls import include, path from django.conf import settings from django.conf.urls.static import static -from django.contrib.auth import views as auth_views -from core.views import SignUpView urlpatterns = [ path("admin/", admin.site.urls), path("", include("core.urls")), - path('signup/', SignUpView.as_view(), name='signup'), - path('login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'), - path('logout/', auth_views.LogoutView.as_view(), name='logout'), - path('password_change/', auth_views.PasswordChangeView.as_view(template_name='registration/password_change.html'), name='password_change'), - path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(template_name='registration/password_change_done.html'), name='password_change_done'), - path('password_reset/', auth_views.PasswordResetView.as_view(template_name='registration/password_reset.html'), name='password_reset'), - path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='registration/password_reset_done.html'), name='password_reset_done'), - path('reset///', auth_views.PasswordResetConfirmView.as_view(template_name='registration/password_reset_confirm.html'), name='password_reset_confirm'), - path('reset/done/', auth_views.PasswordResetCompleteView.as_view(template_name='registration/password_reset_complete.html'), name='password_reset_complete'), ] if settings.DEBUG: diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc index 1988f9e1a726c988f4285e94bd02eb657f371a6d..4dda47543360f4ac835b103b91d007ed66c4055e 100644 GIT binary patch delta 540 zcmY+AzfT)66vu6!?YsPJP!0h>6q2+-m#R`#DOHCGiJ_!W5eb+`mqxW4U6e~&Ul8ry z0f`PouG9|9B@zs%Quj`s7=pxr?mx(unTcl*1GeACe$UTe+wX7gPdt5;O2rYhwS!eZ zLHg(n{W(AM zyn%BEs((3O-`{MQSk1E|E?SLFv#TudBOY{xY=_GHUvU$Ot((XSRQy)uzVemx3Qp{_ k<&r8xwyA0;k7fK6yEjz_%|_zKp~|xv~hwP5tj&xL=hDV;ZKc`fJBv5a5kQayU*;`jvdoecW2+uyf=Su z-uK>{U%R>@0zBXUctwAq2*TgkXgtv7&*mHWJramOL_;WvSy9A#zzCG2tisq-$FY1O(8LI2a1en_~Jdfjf z6ZA9<&|0<^=BTIS4b8Hi!*OZ0&9I{0*GYlenN-LN<#J`ML~}VWlFOA$QZcX|%jND? zG{cuLw6hn+WiRT~Ab#~qd9Gr65zE$?ox|0=5G@m4doFC^L2MsS7tIn)SEegvyOO5! zG+(hzmcDPYJJy_*r|G=OXqww_cy56qj5$%EV$A?qeEZfCearhFe)uf@Oj(V;zUO>3 zn4yL3&svFjk&SI&m`ycloQjcG0lx> zi(~6@Kp9*Yc9RX{ZFLa%o5f{XPP-8hHh%y~^R!!?o+`5lYyPY>f=z?L|4)Iwc*}u6 z6KXVwxEg2+mthVu2_Po7K`cTPu&(NLy^VN?vWqFn3*D_ywqQ}4?S+}W5UWG3MVZDX zH_OncsSHA=01@wJfDb69&c0OvV<6^?C(^3g8uxg=rV;@XBq4~FZM{hNNgx|05!iHe zdvD98eN;+-cnID(3!{Z6mrV#Y5zUX`I<**P6o%VgL*u6;)(t;TD(Ph)+B}P+2%Y(P zz!%BPyl{H;e6F@SlNIUdUJvM-35D7$JxlYpoWDU0;5J6F5$M{{5rCz92~pqm)1#e3ZNP%Uv_Jt*&0Hv}MCNEWZI$5aLM+f6o*x79)5p8#&5 z1=kI{ZvF|9CaznZl!(0DaA>$85lI(2p0k}&vD#EXu?9RPfUCl~@VaOC^0g8l&L??WyI0*0nqL!H@aAemIG zBW}W@MUB<-KVsi^0~wPAOToB$pyq5pP@h3=umovKE710ceID0C(g&Zl3}gpTqPEx^yy)(Vi$)oYg%}*6DM(W1KC?m nS$CHRUcQ?^)VsEU{H><&h$L#TmCkfI`4F~(vaNUY;AZ_7nKu-4 diff --git a/core/__pycache__/mail.cpython-311.pyc b/core/__pycache__/mail.cpython-311.pyc deleted file mode 100644 index 8b4651f49e9d225e51f6a9e82fa4bfad64d09cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmZWn&rj1(9RI$x-MVfQGPX!aj4z0gC4_n5LJY}7h$aGw%mW-;y7n=KYfIW!24omx zJWS)AgW-xA{R=#paP`E2!_tJr#CY&lgC>NN-#5k({r2_K&*$6M@2}Ulsgwq2uXgTN zD-ysrA_)aFGa{HNH3*{Ih#)Gvv2B@??$^+e8Ztkx z5Z$X?e#zU-SRrQgV{A_W_<;ABVeRSy+yJhgdjN*O9oSZQ;=sXYpFlsn9*9}gW9oHJ$8kp+H8I*LE zd7fTjXPdVkFFHP5(bpMunZc^-%%nQCS)E#cZ`*Wym)2R?tMY$>YuY{LGOFV(5}S-; zA>M?h&FL1Kpj)aoElNX{(6mnK3GI|OPYBN-l>3xyD?R>>AEd`|HDh5!?!Wbw4uuLn zLl6*!!I3c5l`7mE4dY!YwltH!lMqk0l6|dY|4}k?m>fAuWe-!s2g#Av!1XW@jcY#v z;g^804OgHy)8r>diA)HRlD&ZMYO1NfR9~x2wbhep`sddPS{TEv`1G<^{_}}R_^cHM zrG2%ha8263rXZioDM7Efs@oN3Ow40U%%gpBL89xnm)pnKp2mAP##rE{5l+?HmSg%g lHtF`G6hFIn2O*RQAuSj_xV&0G4=%4z&Jt|pe{ip2m_I16DsTV* diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 06a521cfcc0ca527474679ac63d155e922353de5..6055c0d30bc058af9ba452a76ba09b8252ed4c9f 100644 GIT binary patch delta 196 zcmdlfcT0kAIWI340}$Np^UQq3GLcV$al%CPezp|OUd~mWG-_FT*`M6n&M1gz&AZRoY delta 676 zcmZvZ&ubG=5XX0u{hjQli?&8XVi0Q^QezHjj8%)+VzJU(3?6z}!oC%@q*-}+#bYD% zP*AAh-TVX8Vg)526g-RIrGY(^#s9#I5-;AIu|E#B1M^{KzO%FM&5P2zIqQvS8Uonl ztNVUg=~-#st0X{crA~4jcq=w6%*HCJiUpS=`-!NSe%78GUuDn;jeo4e6L059n{Mx z7^^`*oQ@k%kCym%-B+ejo8}LUFoU5Ber(cVH2lKfOBtS5gLP>~ek}^ZJMaTrHe-Sp zUr8S2MA}jQ>#&HrAuOke2KUq>sU9$oR-vD!5$6F7S_2luNNcXKz-b3h-QypCfN>mr zIKs2>Gki;yWm<%s=k&4lB+e^2PKQy)xdv5w6)_5^7e=UwiG@fZa16bRz{}A&1g?x; zMob|}fJk+NHuKty&SPe{)Ps!@r^zB??Fl)I=_NQr#jsOL_#I*ryz`tlj0yfs8NFfU zHXnypZeZm@E8kt%x5rt*tO8Ebr+9{Z`qz*8Q7K3u5=gqH|3&=1M3By tUrEdzJkt_iNo0*jP{xgPe(+vmcP6cg7k&ySu~~g_>lfC4pCbNS&tJ50n{WUC diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index f020e6a7d2f43cfb0ecb2474c8214171acc5857d..648bd0958569f2bcbe5e5240ffa0e622a2aa74df 100644 GIT binary patch delta 331 zcmdnOxsgRnmYbtXJ z+r$r|%p9pK6BkGtvZipaVPD3~z_1#KAt0SOiamuVm_d{GB}hP%@fJ%#VoAnJpd}2N z%#(L9s#>um=NF~kVz|YcnU|7U0aB5dn44O~nVX-VqMw&qu3y9kR9wZCl31LPl%H6X zqF)4ZlAk8Ww93ku>vS|&>|`#K2&r9g%kw*rX|%#4hTHyC6tprQv1rWbId z$;X)$O{6b~sbA1@yujjgk;Ul>i_;Ajjs}+wnF*B(sxPn@Ut}@9!eab^orRyNfg1#i I1c9~z0B@*NeE;O+O}i^gFB zfL|iGX?@quWmf{=Ge7`IO<+rgBmtB_$!5Y%8c7=((3TC^P8lg%F%(-hR9iDNJ8h)- zJZNMR082>5NtF7b93=rb;UjJlqH?Qk-RuR9ICOF|0U)g>CygP>^hEk_8fAMT{a8i= zJ&}7{LF!Hgxt^Rs&Qb2<n1aS_9Sl=b|1}i9ye7ZJzVX09BR2 zP1nXOXAx|+aNTxYRL4$>beM)re{TzPZ+Rrj* z%XBu}sWxf)L_9AhZ}UU@MCN`ZCEAUsBGiNtubyOt5xSUadR|?ei7BRE7hIO%i}8B5 zFme3v;F8Y*SC4g3biKXac3N#6?_#Una*4j?r4rxqz(3gA)*m*Q;c;1ivkr*I*F3n5&%Np`+| zpl~{X(;=LWa}Q{K{NPEL9}n{7Fke1?OJOa5wGh@~e1sM&2k*jSB`8jW#fhK86wU>3 tE`)OtPPGwQs?pM9SgHl3nXoiN=a(s53E)ZyS1xkeKw>W=J~GOS_y>?}NV5O{ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 465fe3bf657fe2aa75b4530a217d8cda6da2b99e..b7c676a50fd73af4905d7d31aaa1a5ec8e154d9b 100644 GIT binary patch delta 1354 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 diff --git a/core/models.py b/core/models.py index 26c79ca..16f0a31 100644 --- a/core/models.py +++ b/core/models.py @@ -35,14 +35,4 @@ class MoodEntry(models.Model): mission = models.ForeignKey(Mission, on_delete=models.SET_NULL, null=True, blank=True) def __str__(self): - return f'{self.user.username} - {self.date_time.strftime("%Y-%m-%d")}' - -class Note(models.Model): - user = models.ForeignKey(User, on_delete=models.CASCADE) - title = models.CharField(max_length=255) - content = models.TextField() - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) - - def __str__(self): - return self.title \ No newline at end of file + return f'{self.user.username} - {self.date_time.strftime("%Y-%m-%d")}' \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 6fe0115..9b2be9d 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,9 +1,9 @@ - + - {% block title %}PixelMinds{% endblock %} + {% block title %}Knowledge Base{% endblock %} {% if project_description %} @@ -13,109 +13,28 @@ {% endif %} - {% load static %} - - {% block head %}{% endblock %} - -
- -
- -
- {% block content %}{% endblock %} -
- - - - + + {% block content %}{% endblock %} - \ No newline at end of file + diff --git a/core/templates/core/about.html b/core/templates/core/about.html deleted file mode 100644 index f725703..0000000 --- a/core/templates/core/about.html +++ /dev/null @@ -1,58 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block title %}About Us - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-

About PixelMinds

-

We are a team of passionate developers, designers, and healthcare professionals dedicated to helping you live a healthier, happier life.

-
-
-
-
- -
-
-
-
-

Our Mission

-

Our mission is to make mental and physical health tracking simple, accessible, and insightful for everyone. We believe that technology can empower individuals to take control of their well-being by providing them with the right tools and data-driven guidance.

-

We leverage cutting-edge AI to provide you with personalized insights and recommendations based on your mood and activity data. By understanding your patterns, you can make informed decisions to improve your well-being.

-
-
- Health Innovation -
-
-
-
- -
-
-
-

Meet the Team

-

A small group with a big vision.

-
-
-
- Team Member -
Alex Vance
-

Lead Developer

-
-
- Team Member -
Brenda Shaw
-

UX Designer

-
-
- Team Member -
Dr. Carlin Day
-

Health Advisor

-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/core/contact.html b/core/templates/core/contact.html deleted file mode 100644 index ae56f1f..0000000 --- a/core/templates/core/contact.html +++ /dev/null @@ -1,61 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block title %}Contact Us - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-

Get in Touch

-

We'd love to hear from you. Whether you have a question, feedback, or just want to say hello, please don't hesitate to reach out.

-
-
-
-
- -
-
-
-
- - {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} - -
-
-
- {% csrf_token %} -
- {{ form.name.label_tag }} - {{ form.name }} - {% if form.name.errors %}
{{ form.name.errors|striptags }}
{% endif %} -
-
- {{ form.email.label_tag }} - {{ form.email }} - {% if form.email.errors %}
{{ form.email.errors|striptags }}
{% endif %} -
-
- {{ form.message.label_tag }} - {{ form.message }} - {% if form.message.errors %}
{{ form.message.errors|striptags }}
{% endif %} -
-
- -
-
-
-
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/core/dashboard.html b/core/templates/core/dashboard.html index 5f64843..0accf32 100644 --- a/core/templates/core/dashboard.html +++ b/core/templates/core/dashboard.html @@ -1,113 +1,49 @@ {% extends 'base.html' %} -{% load static %} - -{% block title %}Dashboard - PixelMinds{% endblock %} {% block head %} - {% endblock %} {% block content %} -
-
-
-
-

Your Dashboard

-

An overview of your mood entries.

-
- -
- -
-
-
Filter by Date
-
-
- - {{ form.start_date }} -
-
- - {{ form.end_date }} -
-
- -
-
-
-
- -
-
-
Mood Over Time
- {% if chart_data != '[]' %} - - {% else %} -
-

No mood entries found for the selected period.

-

Try adjusting the filter or add a new entry.

-
- {% endif %} -
-
-
-
+
+

Mood Dashboard

+ +
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index ecbc122..5a49aca 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,84 +1,55 @@ {% extends 'base.html' %} -{% load static %} -{% block title %}PixelMinds - Your Personal Health Companion{% endblock %} +{% block title %}{{ project_name }}{% endblock %} {% block content %} -
-
+
+
+
+

Welcome to {{ project_name }}

+

Your personal space to reflect and grow.

+
+
+ {% if user.is_authenticated %} + + Log New Mood + {% else %} + Log In + {% endif %} +
+
+ + {% if user.is_authenticated %} +

Your Recent Moods

+ {% if mood_entries %} +
+ {% for entry in mood_entries %} +
+
+
Mood Score: {{ entry.mood_score }}/5
+ {{ entry.date_time|date:"Y-m-d H:i" }} +
+

{{ entry.note|truncatewords:30 }}

+ {% if entry.activities.all %} + Activities: + {% for activity in entry.activities.all %} + {{ activity.name }} + {% endfor %} + + {% endif %} +
+ {% endfor %} +
+ {% else %} +

You haven't logged any moods yet. Get started!

+ {% endif %} + {% else %} +
+
+

Track Your Mental Wellness

+

Gain insights into your moods and activities to better understand your mental health. Log in to begin your journey.

+ Log In & Get Started +
+
+ {% endif %}
- -{% include 'core/mood_modal.html' %} -{% endblock %} - -{% block extra_js %} - {% endblock %} diff --git a/core/templates/core/mood_entry_form.html b/core/templates/core/mood_entry_form.html index d4d6fdb..8893d25 100644 --- a/core/templates/core/mood_entry_form.html +++ b/core/templates/core/mood_entry_form.html @@ -1,64 +1,57 @@ {% extends 'base.html' %} -{% load static %} - -{% block title %}New Mood Entry - PixelMinds{% endblock %} {% block content %} -
-
-
-
-
-
-

How are you feeling?

-
- {% csrf_token %} - -
- - {{ form.mood_score }} - {% if form.mood_score.errors %} -
- {{ form.mood_score.errors|striptags }} -
- {% endif %} -
- -
- - {{ form.note }} - {% if form.note.errors %} -
- {{ form.note.errors|striptags }} -
- {% endif %} -
- -
- -
- {% for checkbox in form.activities %} -
- {{ checkbox.tag }} - -
- {% endfor %} +
+
+
+
+

Track Your Mood

+
+ + {% csrf_token %} + +
+ + {{ form.mood_score }} + {% if form.mood_score.errors %} +
+ {{ form.mood_score.errors|striptags }}
- {% if form.activities.errors %} -
- {{ form.activities.errors|striptags }} -
- {% endif %} -
+ {% endif %} +
-
- +
+ + {{ form.note }} + {% if form.note.errors %} +
+ {{ form.note.errors|striptags }} +
+ {% endif %} +
+ +
+ +
+ {% for checkbox in form.activities %} +
+ {{ checkbox.tag }} + +
+ {% endfor %}
- -
+ {% if form.activities.errors %} +
+ {{ form.activities.errors|striptags }} +
+ {% endif %} +
+ + +
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/core/templates/core/mood_modal.html b/core/templates/core/mood_modal.html deleted file mode 100644 index 387edb4..0000000 --- a/core/templates/core/mood_modal.html +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/core/templates/core/privacy_policy.html b/core/templates/core/privacy_policy.html deleted file mode 100644 index 8a04fd0..0000000 --- a/core/templates/core/privacy_policy.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block title %}Privacy Policy - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-

Privacy Policy

-

Your privacy is important to us. Last updated: December 22, 2025

-
- -

It is PixelMinds's policy to respect your privacy regarding any information we may collect from you across our website. This Privacy Policy applies to all of our services.

- -

1. Information We Collect

-

We only collect information about you if we have a reason to do so – for example, to provide our services, to communicate with you, or to make our services better. We collect this information from three sources: if and when you provide information to us, automatically through operating our services, and from outside sources.

- -

Information You Provide to Us

-
    -
  • Account Information: We collect information from you when you create an account, such as your name, email address, and password.
  • -
  • Health Data: We collect the mood scores, notes, and activities you log through our service.
  • -
- -

2. How We Use Information

-

We use the information we collect in various ways, including to:

-
    -
  • Provide, operate, and maintain our website and services.
  • -
  • Improve, personalize, and expand our services.
  • -
  • Understand and analyze how you use our services.
  • -
  • Develop new products, services, features, and functionality.
  • -
  • Communicate with you for customer service, updates, and marketing purposes.
  • -
- -

3. Security

-

We take reasonable precautions and follow industry best practices to protect your personal information and ensure that it is not inappropriately lost, misused, accessed, disclosed, altered, or destroyed.

- -

4. Changes to This Policy

-

We may update this Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page. You are advised to review this Privacy Policy periodically for any changes.

- -
-

This is a generic, placeholder privacy policy. It is not legal advice. You must consult with a legal professional to create a policy that is compliant with all applicable laws and regulations for your business.

- -
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/registration/login.html b/core/templates/registration/login.html deleted file mode 100644 index 5e69616..0000000 --- a/core/templates/registration/login.html +++ /dev/null @@ -1,42 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Login - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-
-

Welcome Back

- - {% if form.errors %} - - {% endif %} - -
- {% csrf_token %} -
- - -
-
- - -
-
- -
-

Forgot password?

-
-
-
-

Don't have an account? Sign up

-
-
-
-
-{% endblock %} diff --git a/core/templates/registration/password_change.html b/core/templates/registration/password_change.html deleted file mode 100644 index 6460f72..0000000 --- a/core/templates/registration/password_change.html +++ /dev/null @@ -1,48 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Change Password - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-

Change Password

-
-
- {% csrf_token %} - {% if form.non_field_errors %} - - {% endif %} - - {% for field in form %} -
- - {{ field }} - {% if field.help_text %} - {{ field.help_text|safe }} - {% endif %} - {% for error in field.errors %} -
- {{ error }} -
- {% endfor %} -
- {% endfor %} - -
- -
-
-
-
-
-
-
-
-{% endblock %} diff --git a/core/templates/registration/password_change_done.html b/core/templates/registration/password_change_done.html deleted file mode 100644 index 6d00fc8..0000000 --- a/core/templates/registration/password_change_done.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Password Change Complete - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-

Password Change Complete

-
-

Your password has been successfully changed.

- Return to Home -
-
-
-
-
-
-{% endblock %} diff --git a/core/templates/registration/password_reset.html b/core/templates/registration/password_reset.html deleted file mode 100644 index 4c54855..0000000 --- a/core/templates/registration/password_reset.html +++ /dev/null @@ -1,53 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Forgot Your Password? - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-

Password Recovery

-
-
Enter your email address and we will send you a link to reset your password.
-
- {% csrf_token %} - {% if form.non_field_errors %} - - {% endif %} - - {% for field in form %} -
- - {{ field }} - {% if field.help_text %} - {{ field.help_text }} - {% endif %} - {% for error in field.errors %} -
- {{ error }} -
- {% endfor %} -
- {% endfor %} - -
- Return to login - -
-
-
- -
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/registration/password_reset_complete.html b/core/templates/registration/password_reset_complete.html deleted file mode 100644 index 4690178..0000000 --- a/core/templates/registration/password_reset_complete.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Password Reset Complete - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-

Password Reset Complete

-
-

Your password has been set. You may go ahead and log in now.

- Return to Login -
-
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/registration/password_reset_confirm.html b/core/templates/registration/password_reset_confirm.html deleted file mode 100644 index 492c3f4..0000000 --- a/core/templates/registration/password_reset_confirm.html +++ /dev/null @@ -1,58 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Enter New Password - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
- {% if validlink %} -

Reset Password

-
-

Please enter your new password twice so we can verify you typed it in correctly.

-
- {% csrf_token %} - {% if form.non_field_errors %} - - {% endif %} - - {% for field in form %} -
- - {{ field }} - {% if field.help_text %} - {{ field.help_text|safe }} - {% endif %} - {% for error in field.errors %} -
- {{ error }} -
- {% endfor %} -
- {% endfor %} - -
- -
-
-
- {% else %} -

Password Reset Failed

-
-

The password reset link was invalid, possibly because it has already been used.

-

Please request a new password reset.

- Request a New Password Reset -
- {% endif %} -
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/registration/password_reset_done.html b/core/templates/registration/password_reset_done.html deleted file mode 100644 index 83ff84b..0000000 --- a/core/templates/registration/password_reset_done.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}Password Reset Sent - PixelMinds{% endblock %} - -{% block content %} -
-
-
-
-
-

Password Reset Sent

-
-

We've emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly.

-

If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder.

- Return to Login -
-
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/templates/registration/signup.html b/core/templates/registration/signup.html deleted file mode 100644 index ae29338..0000000 --- a/core/templates/registration/signup.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block content %} -
-
-
-
-
-

Create Account

-
-
- {% csrf_token %} - {% if form.non_field_errors %} - - {% endif %} - - {% for field in form %} -
- - {{ field }} - {% if field.help_text %} - {{ field.help_text }} - {% endif %} - {% for error in field.errors %} -
- {{ error }} -
- {% endfor %} -
- {% endfor %} - -
- -
-
-
- -
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index 605eb4f..8b96229 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,16 +1,11 @@ from django.urls import path -from .views import home, create_mood_entry, dashboard, AboutView, ContactView, PrivacyPolicyView, SignUpView, save_mood_entry +from .views import home, create_mood_entry, dashboard app_name = 'core' urlpatterns = [ path("", home, name="index"), - path('signup/', SignUpView.as_view(), name='signup'), path('mood/new/', create_mood_entry, name='create_mood_entry'), - path('mood/save/', save_mood_entry, name='save_mood_entry'), path('dashboard/', dashboard, name='dashboard'), - path('about/', AboutView.as_view(), name='about'), - path('contact/', ContactView.as_view(), name='contact'), - path('privacy-policy/', PrivacyPolicyView.as_view(), name='privacy_policy'), ] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c7eb742..4108665 100644 --- a/core/views.py +++ b/core/views.py @@ -1,55 +1,14 @@ import os import platform -import json from django import get_version as django_version from django.shortcuts import render, redirect -from django.urls import reverse_lazy from django.utils import timezone from django.contrib.auth.decorators import login_required from django.http import JsonResponse -from django.views.generic import TemplateView, FormView, CreateView +from .forms import MoodEntryForm +from .models import MoodEntry from django_pandas.io import read_frame -from django.contrib import messages - -from .forms import MoodEntryForm, ContactForm, SignUpForm, DateRangeFilterForm -from .models import MoodEntry, Activity -from .mail import send_contact_message - - -class SignUpView(CreateView): - form_class = SignUpForm - success_url = reverse_lazy('login') - template_name = 'registration/signup.html' - - -class AboutView(TemplateView): - template_name = "core/about.html" - - -class ContactView(FormView): - template_name = "core/contact.html" - form_class = ContactForm - success_url = reverse_lazy('core:contact') - - def form_valid(self, form): - name = form.cleaned_data['name'] - email = form.cleaned_data['email'] - message = form.cleaned_data['message'] - - # Send email - email_sent = send_contact_message(name, email, message) - - if email_sent: - messages.success(self.request, 'Thank you for your message! We will get back to you shortly.') - else: - messages.error(self.request, 'Sorry, there was an error sending your message. Please try again later.') - - return super().form_valid(form) - - -class PrivacyPolicyView(TemplateView): - template_name = "core/privacy_policy.html" def home(request): @@ -60,8 +19,6 @@ def home(request): if request.user.is_authenticated: mood_entries = MoodEntry.objects.filter(user=request.user).order_by('-date_time')[:7] context['mood_entries'] = mood_entries - activities = Activity.objects.all() - context['activities'] = activities return render(request, "core/index.html", context) @@ -69,20 +26,10 @@ def home(request): @login_required def dashboard(request): mood_entries = MoodEntry.objects.filter(user=request.user).order_by('date_time') - form = DateRangeFilterForm(request.GET) - if form.is_valid(): - start_date = form.cleaned_data.get('start_date') - end_date = form.cleaned_data.get('end_date') - if start_date: - mood_entries = mood_entries.filter(date_time__gte=start_date) - if end_date: - mood_entries = mood_entries.filter(date_time__lte=end_date) - df = read_frame(mood_entries, fieldnames=['date_time', 'mood_score']) - if not df.empty: - df['date_time'] = df['date_time'].dt.strftime('%Y-%m-%d') + df['date_time'] = df['date_time'].dt.strftime('%Y-%m-%d') chart_data = df.to_json(orient='records') - return render(request, 'core/dashboard.html', {'chart_data': chart_data, 'form': form}) + return render(request, 'core/dashboard.html', {'chart_data': chart_data}) @login_required @@ -113,23 +60,3 @@ def create_mood_entry(request): form = MoodEntryForm() return render(request, 'core/mood_entry_form.html', {'form': form}) - -@login_required -def save_mood_entry(request): - if request.method == 'POST': - data = json.loads(request.body) - mood_score = data.get('mood_score') - activity_ids = data.get('activity_ids') - - mood_entry = MoodEntry.objects.create( - user=request.user, - mood_score=mood_score - ) - - if activity_ids: - activities = Activity.objects.filter(id__in=activity_ids) - mood_entry.activities.set(activities) - - return JsonResponse({'status': 'success'}) - return JsonResponse({'status': 'error'}, status=400) - diff --git a/static/css/custom.css b/static/css/custom.css index 0ad6952..925f6ed 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,232 +1,4 @@ - -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&family=Lexend+Deca:wght@600;700&display=swap'); - -:root { - --primary-color: #8a2be2; /* Deep purple */ - --secondary-color: #4b0082; /* Indigo */ - --light-gray: #f8f9fa; - --dark-gray: #1f2937; - --text-color: #e0e0e0; /* Lighter text for dark background */ -} - +/* Custom styles for the application */ body { - font-family: 'Inter', sans-serif; - color: var(--text-color); - background: linear-gradient(45deg, var(--primary-color), var(--secondary-color)); - background-size: 400% 400%; - animation: gradient 15s ease infinite; - height: 100vh; - overflow: hidden; /* Prevent scrollbars */ + font-family: system-ui, -apple-system, sans-serif; } - -@keyframes gradient { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } -} - -.breathing-canvas { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - position: relative; -} - -.pulsing-circle { - width: 80px; - height: 80px; - background-color: rgba(255, 255, 255, 0.8); - border-radius: 50%; - cursor: pointer; - animation: pulse 2s infinite; - box-shadow: 0 0 20px rgba(255, 255, 255, 0.5); - position: absolute; - bottom: 50px; -} - -@keyframes pulse { - 0% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7); - } - 70% { - transform: scale(1); - box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); - } - 100% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); - } -} - -.fw-medium { - font-weight: 500; -} - -.fw-semibold { - font-weight: 600; -} - -.fw-bold { - font-weight: 700; -} - -.navbar { - background-color: transparent !important; - position: absolute; - width: 100%; - top: 0; - z-index: 10; -} - -.navbar-brand { - font-family: 'Lexend Deca', sans-serif; - font-weight: 700; - color: var(--text-color) !important; -} - -.nav-link { - color: var(--text-color) !important; -} - -.btn-primary { - background-color: transparent; - border-color: var(--text-color); - padding: 0.75rem 1.5rem; - font-weight: 500; - transition: all 0.2s ease-in-out; - color: var(--text-color); -} - -.btn-primary:hover { - background-color: rgba(255, 255, 255, 0.1); - border-color: var(--text-color); -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - background-color: transparent; -} - -/* Modal styles */ -.modal { - display: none; - position: fixed; - z-index: 100; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - background-color: rgba(0, 0, 0, 0.4); -} - -.modal-content { - background-color: #1f2937; - margin: 15% auto; - padding: 20px; - border: 1px solid #888; - width: 80%; - max-width: 500px; - border-radius: 20px; - animation: bloom 0.5s ease-out; -} - -@keyframes bloom { - from { - transform: scale(0); - } - to { - transform: scale(1); - } -} - -.close-button { - color: #aaa; - float: right; - font-size: 28px; - font-weight: bold; -} - -.close-button:hover, -.close-button:focus { - color: white; - text-decoration: none; - cursor: pointer; -} - -/* Mood slider */ -.mood-slider-container { - margin: 20px 0; -} - -.mood-slider { - -webkit-appearance: none; - width: 100%; - height: 15px; - border-radius: 5px; - background: #ddd; - outline: none; - opacity: 0.7; - -webkit-transition: .2s; - transition: opacity .2s; -} - -.mood-slider:hover { - opacity: 1; -} - -.mood-slider::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 25px; - height: 25px; - border-radius: 50%; - background: var(--primary-color); - cursor: pointer; -} - -.mood-slider::-moz-range-thumb { - width: 25px; - height: 25px; - border-radius: 50%; - background: var(--primary-color); - cursor: pointer; -} - -.mood-labels { - display: flex; - justify-content: space-between; - margin-top: 10px; -} - -/* Activity bubbles */ -.activity-bubbles { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 15px; - margin: 20px 0; -} - -.activity-bubble { - padding: 10px 20px; - border-radius: 20px; - background-color: #4b5563; - cursor: pointer; - transition: background-color 0.3s; -} - -.activity-bubble.selected { - background-color: var(--primary-color); -} - diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 0ad6952..108056f 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,232 +1,21 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&family=Lexend+Deca:wght@600;700&display=swap'); - :root { - --primary-color: #8a2be2; /* Deep purple */ - --secondary-color: #4b0082; /* Indigo */ - --light-gray: #f8f9fa; - --dark-gray: #1f2937; - --text-color: #e0e0e0; /* Lighter text for dark background */ + --bg-color-start: #6a11cb; + --bg-color-end: #2575fc; + --text-color: #ffffff; + --card-bg-color: rgba(255, 255, 255, 0.01); + --card-border-color: rgba(255, 255, 255, 0.1); } - body { + margin: 0; font-family: 'Inter', sans-serif; + background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end)); color: var(--text-color); - background: linear-gradient(45deg, var(--primary-color), var(--secondary-color)); - background-size: 400% 400%; - animation: gradient 15s ease infinite; - height: 100vh; - overflow: hidden; /* Prevent scrollbars */ -} - -@keyframes gradient { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } -} - -.breathing-canvas { display: flex; justify-content: center; align-items: center; - height: 100%; + min-height: 100vh; + text-align: center; + overflow: hidden; position: relative; } - -.pulsing-circle { - width: 80px; - height: 80px; - background-color: rgba(255, 255, 255, 0.8); - border-radius: 50%; - cursor: pointer; - animation: pulse 2s infinite; - box-shadow: 0 0 20px rgba(255, 255, 255, 0.5); - position: absolute; - bottom: 50px; -} - -@keyframes pulse { - 0% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7); - } - 70% { - transform: scale(1); - box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); - } - 100% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); - } -} - -.fw-medium { - font-weight: 500; -} - -.fw-semibold { - font-weight: 600; -} - -.fw-bold { - font-weight: 700; -} - -.navbar { - background-color: transparent !important; - position: absolute; - width: 100%; - top: 0; - z-index: 10; -} - -.navbar-brand { - font-family: 'Lexend Deca', sans-serif; - font-weight: 700; - color: var(--text-color) !important; -} - -.nav-link { - color: var(--text-color) !important; -} - -.btn-primary { - background-color: transparent; - border-color: var(--text-color); - padding: 0.75rem 1.5rem; - font-weight: 500; - transition: all 0.2s ease-in-out; - color: var(--text-color); -} - -.btn-primary:hover { - background-color: rgba(255, 255, 255, 0.1); - border-color: var(--text-color); -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - background-color: transparent; -} - -/* Modal styles */ -.modal { - display: none; - position: fixed; - z-index: 100; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - background-color: rgba(0, 0, 0, 0.4); -} - -.modal-content { - background-color: #1f2937; - margin: 15% auto; - padding: 20px; - border: 1px solid #888; - width: 80%; - max-width: 500px; - border-radius: 20px; - animation: bloom 0.5s ease-out; -} - -@keyframes bloom { - from { - transform: scale(0); - } - to { - transform: scale(1); - } -} - -.close-button { - color: #aaa; - float: right; - font-size: 28px; - font-weight: bold; -} - -.close-button:hover, -.close-button:focus { - color: white; - text-decoration: none; - cursor: pointer; -} - -/* Mood slider */ -.mood-slider-container { - margin: 20px 0; -} - -.mood-slider { - -webkit-appearance: none; - width: 100%; - height: 15px; - border-radius: 5px; - background: #ddd; - outline: none; - opacity: 0.7; - -webkit-transition: .2s; - transition: opacity .2s; -} - -.mood-slider:hover { - opacity: 1; -} - -.mood-slider::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 25px; - height: 25px; - border-radius: 50%; - background: var(--primary-color); - cursor: pointer; -} - -.mood-slider::-moz-range-thumb { - width: 25px; - height: 25px; - border-radius: 50%; - background: var(--primary-color); - cursor: pointer; -} - -.mood-labels { - display: flex; - justify-content: space-between; - margin-top: 10px; -} - -/* Activity bubbles */ -.activity-bubbles { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 15px; - margin: 20px 0; -} - -.activity-bubble { - padding: 10px 20px; - border-radius: 20px; - background-color: #4b5563; - cursor: pointer; - transition: background-color 0.3s; -} - -.activity-bubble.selected { - background-color: var(--primary-color); -} -