From c5b112bb09ad32362377483e092b5c3cc0390703 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 8 Feb 2026 16:25:15 +0000 Subject: [PATCH] with Demo Admin Login and Example entries --- config/__pycache__/__init__.cpython-311.pyc | Bin 159 -> 159 bytes config/__pycache__/settings.cpython-311.pyc | Bin 5552 -> 5631 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1557 -> 993 bytes config/__pycache__/wsgi.cpython-311.pyc | Bin 679 -> 679 bytes config/settings.py | 3 + config/urls.py | 19 +- core/__pycache__/__init__.cpython-311.pyc | Bin 157 -> 157 bytes core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 1530 bytes core/__pycache__/apps.cpython-311.pyc | Bin 524 -> 524 bytes .../context_processors.cpython-311.pyc | Bin 763 -> 763 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 3167 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 545 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 2315 bytes core/admin.py | 17 +- core/migrations/0001_initial.py | 52 ++++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3008 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 168 -> 168 bytes core/models.py | 36 ++- core/templates/base.html | 158 ++++++++++-- core/templates/core/chat_detail.html | 55 ++++ core/templates/core/dashboard.html | 85 ++++++ core/templates/core/index.html | 243 ++++++++---------- core/templates/registration/login.html | 44 ++++ core/urls.py | 9 +- core/views.py | 47 ++-- 25 files changed, 569 insertions(+), 199 deletions(-) create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 core/templates/core/chat_detail.html create mode 100644 core/templates/core/dashboard.html create mode 100644 core/templates/registration/login.html diff --git a/config/__pycache__/__init__.cpython-311.pyc b/config/__pycache__/__init__.cpython-311.pyc index 423a6362b2322713e75da67a35e209e76169dbae..51833a43e0b8b259eb1bc8844e8bb5f035d32a12 100644 GIT binary patch delta 19 ZcmbQwIG>SwIWI340}%XK*D;ZM3IH$G1$h7f delta 19 ZcmbQwIG>SwIWI340}xbw%b&{a>4RIWI340}#B~){)sfkyn!O&PMesEW9pJ`YEna1}V(J44Q76Sf_G{+~Q10 zEY3*EPb^Bg#hRIyl3Jl@xOqB1Ka=k*As>HtPrvveR~OG9SLcxU&>){%!ayuLA4vS-u*uC&Da}c>E6M_L8G*R?)#g)zx0%Hsh$>uQ5V|2Idx1e1g237U Dbfh&5 delta 100 zcmeyby+NCIIWI340}xbw%g=O~$ScWsWuy8P7FOn922GdE9IR8hm^Ae_Z{+7^QYqpA rDk~BM5&S^n7l%!5eoARhs$EeUkjn_f#rHPz3f*SrzQ7;^L|~-=AF&vJ diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index 0b85e94ece283a83ff1af1d71f1b265c943eb37a..05e8040264e29fe72060f957004dfdcc5502a312 100644 GIT binary patch delta 437 zcmbQr^N_uMIWI340}xbi?Z|x0$iVOz#DM`0DC4spP-Z$q3PTEG4nrH8=CVbxf!QoM?719K9E=Q145=(Btf`DyoG?SP!1jT7%a|A@uIA>XURbL9AG}@#96ZS%u(E_Y*{=o{Y56J+(1c=6fU4BFHAIryNa8EVGR$^ zOor7!3;|U@d7y5vdZ21Pm^hHl4`XB3lfoO!0K%GllXo!Ns#b9(CMV~Y=9LudS4pH~ zCFZ5)>m}#sl@w(r=_QtyWayO^J|X>roW(^k%PV4*7g?;Xuvpz-;b?H_5b6l;2%ivrkyr5wui`}(r7J8- WAJ|#=nHso1@J!yy8p9$EGz$P^1z24G literal 1557 zcmb7Ezi-<{6h2a`&9y)mR5TN}FQWWXXv428G3D6*L?bJ<0fDW1Zjz3VjNPzapJ3Kyq?|a{ScjS+a zhJj#=|DxWehS2Zwp%|6icw;CCeUDt!MXutiz7nWiRgredF9ljx3-qp@K5KqCsB|l- zt^3uW)~zW>MMQVYL>;A>B`1#ou`388`7g zU*<*qmTaNZY_LhC)QVZCNgLxap4Ua6pT64h<|4TG!2MmY|X6a7%(M zNY5=}_qiPa7jGN);?PMIr)g8tPfWb+y4Vh}7ethaHpYEM101~Q*-?}`Gnpy=T8@_$ z$O4usgit7UxY2BG=5-BeKsIq`2jo^$+Rc`6*S9&pdIW{JORVoxLB)_TDa1?_7jo_c z*Z)x?@utmtl4PUxFGYKy&UD1oMtq34|o|rLr0PMiA4N-Li?SEIsG{iSDQA%}g4T|C&VOo*;=Po0rs=4pgG= z?B03wSyH{TeX!fx+3O_6!QuAd-rXMTP*TtB&cla?KcP23gx;E#JZ4sW6o(?V$aCVv zf->tFWnc5ic8HaIxao&sMlar0ZwAzjeR7*!gmC%W;eW!iC@G4vP*)Xgf#iabvOYn0 z`JSVXC-1uFXJHUBM^`3i??oBuwd0+W3#Zp#wqJfa)h^Gp%X6&?u8&S0pFBSOYT8(z zHP)xvrI~hVp_f+G?C;%I?i&uYrGP|`uS?f&KIx|?c&hZ0zEp*A0@v#d~_1}Ku$8i7v diff --git a/config/__pycache__/wsgi.cpython-311.pyc b/config/__pycache__/wsgi.cpython-311.pyc index 9c49e09df194d2dbcad4868349c9177db4b15571..c3453a14c8427b2277d03070222591a79a141c8b 100644 GIT binary patch delta 20 acmZ3^x}24JIWI340}%XK*Rhd%4if-3p#{4D delta 20 acmZ3^x}24JIWI340}xbw%iqX7hY0{RMg?d9 diff --git a/config/settings.py b/config/settings.py index 291d043..815028a 100644 --- a/config/settings.py +++ b/config/settings.py @@ -180,3 +180,6 @@ if EMAIL_USE_SSL: # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +LOGIN_REDIRECT_URL = 'dashboard' +LOGOUT_REDIRECT_URL = 'index' \ No newline at end of file diff --git a/config/urls.py b/config/urls.py index bcfc074..2001e5f 100644 --- a/config/urls.py +++ b/config/urls.py @@ -1,19 +1,3 @@ -""" -URL configuration for config project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/5.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin from django.urls import include, path from django.conf import settings @@ -21,9 +5,10 @@ from django.conf.urls.static import static urlpatterns = [ path("admin/", admin.site.urls), + path("accounts/", include("django.contrib.auth.urls")), path("", include("core.urls")), ] if settings.DEBUG: urlpatterns += static("/assets/", document_root=settings.BASE_DIR / "assets") - urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ No newline at end of file diff --git a/core/__pycache__/__init__.cpython-311.pyc b/core/__pycache__/__init__.cpython-311.pyc index 74b111269bd81aac528770a53e2f849291524d56..1e85592cb948452b899c70b02403962ab93f9a9f 100644 GIT binary patch delta 19 ZcmbQsIG2%oIWI340}%XK*D;ZM5&$oZ1#>mG1t0(b diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392d6714413db63120e4233d2e96cbadb5de..cba48c1dcaa50813a0dba9e241dd2b1b76acd8dd 100644 GIT binary patch literal 1530 zcmbVMOG_L<5bmDGzIQb~f(Ek*1Q#X{7a|D+LO?tu!6-s*a~a0zR>#a^(=$u5w>@|W zIe9a`zz{s-uPE$c>64I?w-r5kO4aNG-Q9qsXZo9d)O=m_Rn7b?7IOsJtKZ+;?+PJ* zaMEw7-r#b95^_iwVbmi&H7O-bVXCM2s;T;#srkC8Q=$+~_xkS;t{%Z#$I!b?A#VxO z_6gI$D&1c_Qo#m#w;jRbxIZCgW{6Q6!ALyYSzLL)x@*Vp+$au3!x_X1gT7Li_hE8KI589D(4$xdbM1{j9nh`n+1- zst0ks%D-}_4$)Mgff7D%jh#k4daLKkcGs=2?Hpac*97IQ$e7A;vT|~1Pi!^fU-qM zcr%-uC_%Nk)}DEOGo@(1VdQ0r?b*RjxP*rbcT3=xFH=y8+>3+`6M_E^fxict5qt+~ z5ptMYM}tIyZZRckNF2HC+;!%4x2)fYMWDbhDw+W7sFcz+d3xn-59~8UnH*-RAj>ceSSrX;xye%L3|NY% gwA`ZQj-t}#4jF|Xv#ojK0ynM@kmb>+eNvl$0aB$@v;Y7A delta 168 zcmeyxeT6Y)IWI340}xFAk)LS~q#uJgFu(+5d=>&SrZc24q%h_%0#ks&dbZi00e*5b!_BjWC8#(MFi*o delta 20 acmeBS>0#ks&dbZi00dRv@;7obG64WD>I9Vl diff --git a/core/__pycache__/context_processors.cpython-311.pyc b/core/__pycache__/context_processors.cpython-311.pyc index 75bf2234fb21a6b62efc5cec11af9512dd0c9616..af2ab825df30c87cbd60464a9a354fb4982ce2c7 100644 GIT binary patch delta 20 acmey(`kR$|IWI340}%XK*RhfN0}}v5!3MVg delta 20 acmey(`kR$|IWI340}xbw%iqZTfe8RYW(H&c diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640edbdcec3e5c1744466c916e7acdd2763b..6f02a63ac0437833fd4a1daa6b0b45dc296453ba 100644 GIT binary patch literal 3167 zcma)8&rcgi6yCMhzm2hRou(lzqzO?hiY?lN(1rw|5E9aaMuJwV+i1IZ2D5a%CbR1X zP!B%jz##_?k#cA%aiT;)Du+n@H`dY~tnH;zPuz&eiA($5tZi&VqmI3A=gqvCdGqFb z-|TN)U10&r)!*0E7d}Dw8-NgD<4?--(ltFRspaIzQZa&LbF0TyoXb#MaN$(5vmzblfE`6 z%h#9WuZ9B$YoIOFFmh&!Gw5!{8xE$A*-_!~O$?noUL0d5g&vG8?R zgoyu%kPDLlI2&{VH%rB3MPJ?f2Zp>9op4cEku|Cp%*8p}L|IoKl__*Ym9klq_0nTm zAtc{)2}WTZH*^pO@m%;>Sc11(UG!517L54XbDH~0zIBzCD@L4X3f)o=}=6kCBC{7M3>NKaKKGG4mZ{f z#m2Q0d$0waUKK!z30@kwB2*T>K=ptwzLzqFMaMRD1&1h2{Y*!dk^ec z3dJcD=%ds1l}_hMAY8!XZh;6UW^YbR-g5m6PeJmj1^r99>H_%_9Q-~SO01+&4tI7I z8;=nG5vnMn@EEHgS`puei0|8!cKxqoR%E;y8Mhr~QTc16&3PmfTS0lO|(JPaf2-h(YI)&>M`jUsIS(=IPF`VN6 zO9als5Ve*|qazhgVBt^)3;T}ow3{ABJncVb5#e)SD0$fe`Kn$QAYFJbQWY;9z1{7- zJn3M^EjLM=UulqdB;1kc2@-*H>>*LWZ|St~O|bF;)Z ztrNQ91XO&%Ufa>`NVqZ^fz5mfkC6q@0{4%Gtzhq8(bMZwPw#D>-Hch$Y&Dv-quG70 zHyK_J;Lio=7z{j_e2}l;`vyq{YHmSl0Ud(V(Cb8VD1Nu*dDsuM7gJQ3Zys)ORj2GK zSe{HUsrFFT@6!ulZ{VKrKE1Ya*-l=xy05{1`@&Avty#fqb%IHD#FK}PVK7|Y$Y8BW z9&8*`C){vQCEPhDG)GrV_eza&&+{c6E?twIL30;#nqrtT0nTT=I3-5yL=wWgfT2L* zGyVk8aw;8M^Me&rsxifmDZn+UfsJqM)WB}iN?oa@uGpz7m6=-N9Nxa?wr8!xa5XV( zCx$C`Pi{<}-x#rz=c~y9J2_CfS4*XFx^y))Xr~5orW5aRpD(;G92ak}?d?%VO!SQ* z&2e;(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xLi8T)Z diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a69659f6c6e0ae848e54157af197c543a09315f..f364545d986d88dcc96e1af4e249558636633c27 100644 GIT binary patch literal 545 zcmZutJ5K^Z5Z=Ap1CA3kS{dmH3E?UWjFOO8+ZY=t%)xHp;9l9g6Qq%n!Wat^`2{|r ziT;!$xq@74g%t@MmAfD$7-x59XTJGncV?bbsU%?Hd<^t&c7JhaCGlTlcE^lIfB}XE zFkuBkfCVfXf+P>9`SyB;CTK%fpstl3o&PZnI`<6swWEwtMM%Q}fhg z-SUo{c1evC?q6c!X}WQiOGFB8X;#B7_|$MI?}hTxDDQ#t;ZT_?KEOy}99D@(sO7$b z8H2z)uQqLysD912JYOYUQujTZsvVoQT}P`EwQf@uW{($~>v`hXw6SlH65V0Rydk&8 z)Kr8JjzK2a++(m8Z0>0cNOJ#lusgW8tqwZ@%8pPrMAG^u4MLESq zAj594mSv`v7Z WEb>=a1KwEE7pd2rW%ZOR$YoitU7iQgl%z?bcdF(mJ!F zCN?tY;6ez2mQZjGJ*ZIJ2D?;;9C|AK6INy+V!;r|q2#8J_L5WIjHI>Yn6{7I$IQHs znfK=R-uyH$5JW(wU+)`v5uq1!(j&e*c>M(oHj#!ju82xpiYxIco}+WVD3rvM2xCDL zi&Dv#@|EP2%w$s0UkaoGF!pVrR8SW+c>`^Mr|qs=gi?y;2brn`ZlYN5C0&p4t`F;F zO~zaY}9EovmsAw)5dwQ+{u_o`D__no@$>~Y9%U6be*GjCcx)R$DN5Iwxzm))1 zLoGS9QFY{K8*$R)UU=-W(hNtPaMbok_mshJ&)Fx=H@~9)0yj?g_ zfAZ>HdZ<;8H12S6);U6B>{5YxV|27VT#u){BlKUxI!_p4JN5@W(Nn%fRleX|+Kzb0 zlThXGwW?4*(vl4BJF9X#QorpXsjpwU27C6e)C2q8_D7oBueC0ePr`Zrmo8MF|7-r3 z=WJc5LOciK)dJrO>mnKPQ~>r`uqtjr_P4zo0N5&vE_cU8PdKcCE`?yuEUje9t1ukN zL4Bo(L5g}hZRE@{$rxn|1Y=A<7XZcwL~G$VlN2)+No#=am-M<~f-BKw%as7!comPr z;@U97u2(UgDp6cve(shlEb9dOLCclRYyrA}#ZHImb-F&Na-w7A1=Do7eiK8_NM~0& zWhCJctl|^Qex=hD@NqU{N4`faTI#1M;V@NIdW;UN7r<)hxjOvt({Gj@EIpp74>i@O zqeg3Ud!dns=CjbmZfK%@_s6OonrMbDJE6<9`91ZRqfR_ir*_q;#@N$SwmQ{RuR7}0 z+T3$lZ6ir~uN4{DR3E8(>Og(YR;Qclw4+Y{a^sJR9bah17aZW~!YhFv4E}|H{TUp3 zFl7%%o54vZIN6p^Aaq}9`_bU&X6RAKK6RlPx#&bLHqJCIHO@GZcR}bwLu0MM(bn+s z?>=tJV%XP4z-se<2a!5NEB!*_TvNH?C|7Lp3Z@{>c`XbkUakKQlTAc`_h`RS)(=|r z#I&h;sM2_b49umlNsLdIN0Eml+kivfa?H_Mi&!1$cj?Y1Z9)JEZVL-EV;^o z4e(hIouWF|fz{Bzz(;wATRi%n(5 zQD$s$hF#!dY`~3Zg-m(bOjvmn6L=ylRtM~1amTwdihOKj6ZGv#XgZ`K15b&CX{KFY z$<*|s)d`o?UC*VKO>||n(%93|sTLa96U2_dYUqvsLr|;~^^fp*5YeZ>`T@ z;`UKr3%zgme=Rg^AN94+xZVG?MS)ASk;j6FkF@zg?t?Z0_DX>1#&~Dptia83RP`v% GLih(Q!|m7r 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}_S?|tv> z?)}i)8x^1xe*Q*15fOyn8RNA;xAW*j=zJ$20g0MW65%arQr%bbiA?6x{PjR7P!E=Z zq96$~0`h+?pa2fkLY|=wpCH_W$8Dt$66b|%aEGy1vmy;!*tS)@YGoxFt*cd2u~kF2 zXs~V|tXbvmJpStMGLL=%d*2C|`%{vTSn^2%_SZb01svS7z6k5Xf4ZDeR$jkbNscx{66v=e#Z~^ok0Cn2^~cPtz-N11O5+k-6P(rI9^M5{Tila9w31KRJId`1cv{bHZ*LY`FYd>pBK<2q$DaeA)B$`>9Fo`J13HK0 zK7BxEy!8JA8qLri^++(O0RYq9T`oJs{A=#r4b98s-mfDn8t2lbJ4J{tSfa){fzGX0iMBe60IvMvWE4ly+k86 z))n2BRRjaUrmo&>VjArlmlYeN?s~ehEGr0QC6iS>4OUdFA&Z7SG>wX?!3w6KVK|=x z3aYC*4dmGicz+XoS_>C+bmltr%;PY7=QZYtkA})ihFZp81>uU))NGUOA`o|j4%Kme z5u4UptZbNgyeo!@5kr^Z(9CgP2a#6RHRzXQQ@iYgmP|TA(p5C>uK9WYa#*X^Lgb2o~+~OWeAOt+hn{ z^2iie7;zT_5glf(%ZlpSajna5Am#OP89-kFZ&|%?Pywx@d$T4tw5F+OG^FYXuV5?d z<7#{Y4H*r730%#-K*KVRUY2Q8mf=olY8d)4S-#m+G?sbbz=&!?ZJ6w+rUTZp(r74) zponk-gMGccYO))M9?4%{xFlbnFMKS|U7Ie<(%7yBi>GIb7v3DZc}#Yh(AfKGH4i0O zWEDXp5Wm^&&TGx8+wGkOxE9npcG+kVKvApu6{y)DswsNapb}c7VV+dD+o16C^Hcfh z0`0w~;{^jq*X9CVvE6RqGJ}OijRx*sh(8IBz#-wu#oUrn$GPTWQ@5KrfUXSgnYm@d z{M>3NWt?L<$^CVa=FXlydrs~GG~QS>*~QFB7&_K{D1XBwTCQc z$RcrjJ26C(+4VsuncbWx$qVh|1t)od#NXOZq{#62dc_$Y-$Z11vOPTM3{R5y+uMl~ zBt5Zy%Slh%A0X*sJ6&|rMG~LsL;?eSoj^DeeJB8V%t)vIKRQDu3S{O}^4e#lqLI}v zNb+_&dD}_eCh;#JERs62UUX7twt~M#ob#8Q^B+0qKOsvuJA$w*79@C`C`u1GeatCH z5;GDH_6!U5z|0#J=f*9PTy7_qo#Zl!ul!pqBhLWrD9KFReZ$F2Y*{2T)y_;gnJE&V z=J@3pez~m)lD^nZUv$zJN&LNk7)X=Rb9V=w(R1z531@VI#9!Y|fcZC>`8V5{3r@yO z+23U5?-5%8V7?M(Ibw4hu{nt$Hpe81t5PQsft(HsW0TvdvGwBjvzw{SK2pFWRcWUx zPO3tVS33dUvA&MLNHWfn59Bc;ol__KgLgh)KeOnSbT&+r?v@)zi{tJW - - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}AI Chat Archive{% endblock %} + + + + + + + + + + + + + {% load static %} + + + + {% block head %}{% endblock %} - - {% block content %}{% endblock %} - + +
+
+ {% if messages %} + {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} + {% endif %} +
+ {% block content %}{% endblock %} +
+ +
+
+ © 2026 AI Chat Archive. Powered by Flatlogic. +
+
+ + + + + {% block scripts %}{% endblock %} + diff --git a/core/templates/core/chat_detail.html b/core/templates/core/chat_detail.html new file mode 100644 index 0000000..8cea243 --- /dev/null +++ b/core/templates/core/chat_detail.html @@ -0,0 +1,55 @@ +{% extends "base.html" %} + +{% block title %}{{ chat.chat_title }} - AI Chat Archive{% endblock %} + +{% block content %} +
+ + +
+
+
+ {{ chat.ai_chat_engine }} +

{{ chat.chat_title }}

+

Last updated: {{ chat.chat_last_date|date:"F j, Y, g:i a" }}

+
+
+ +
+
+ +
+
+ {{ chat.chat_content }} +
+
+ +
+ + +
+
+
+{% endblock %} + +{% block scripts %} + +{% endblock %} diff --git a/core/templates/core/dashboard.html b/core/templates/core/dashboard.html new file mode 100644 index 0000000..ef56e2f --- /dev/null +++ b/core/templates/core/dashboard.html @@ -0,0 +1,85 @@ +{% extends "base.html" %} + +{% block title %}Dashboard - AI Chat Archive{% endblock %} + +{% block content %} +
+
+
+ {{ company.name }} +

Chat Archive

+
+
+ Logged in as {{ user.username }} +
+
+ + +
+
+
+
+ + + + +
+
+
+ +
+
+
+ + +
+
+ {% if query %} +
Search results for "{{ query }}"
+ {% else %} +
Recent Conversations
+ {% endif %} + + {% if chats %} +
+ {% for chat in chats %} +
+
+
+
+
+ {% if chat.ai_chat_engine == 'ChatGPT' %} + + {% elif chat.ai_chat_engine == 'Bing' %} + + {% else %} + + {% endif %} +
+
+
{{ chat.chat_title }}
+ {{ chat.ai_chat_engine }} • {{ chat.chat_last_date|date:"M d, Y" }} +
+
+ + + +
+
+ {{ chat.chat_content|truncatewords:50|linebreaks }} +
+
+
+ {% endfor %} +
+ {% else %} +
+ +

No chats found. Try a different search term or connect an engine.

+
+ {% endif %} +
+
+
+{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..1ed3c0e 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,110 @@ {% extends "base.html" %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Welcome to AI Chat Archive{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+ +
+
+

+ Unlock Your Collective Intelligence +

+

+ Retrieve, archive, and search through your entire AI chat history from ChatGPT, Bing, and more. + One unified search for all your past conversations. +

+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ > Retrieving histories...
+ > Found 142 chats from ChatGPT
+ > Found 89 chats from Perplexity
+ > Indexing for rapid search... +
+
+
+
-

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

Three Steps to Knowledge Mastery

+

Our platform bridges the gap between AI silos and your team's memory.

+
+
+
+
+
+ 1 +
Connect Engines
+
+

Use the "Connect AI" button in your dashboard to link your API keys securely. We support OpenAI, Anthropic, and Perplexity.

+
+
+
+
+
+ 2 +
Sync History
+
+

Click "Fetch Latest" to automatically download and index your recent conversations into your private company vault.

+
+
+
+
+
+ 3 +
Search & Find
+
+

Use the Search Bar to instantly find any past prompt or answer across all connected AI tools, including file attachments.

+
+
+
+
+ + +
+
+
+
+ +

Unified Storage

+

Centralize all your AI interactions in one secure, company-owned vault.

+
+
+
+
+ +

Instant Search

+

Powerful keyword and similarity search powered by optimized database indexes.

+
+
+
+
+ +

Multi-tenant

+

Enterprise-grade isolation ensuring your company's data stays private.

+
+
+
+
+ {% endblock %} \ No newline at end of file diff --git a/core/templates/registration/login.html b/core/templates/registration/login.html new file mode 100644 index 0000000..dab531f --- /dev/null +++ b/core/templates/registration/login.html @@ -0,0 +1,44 @@ +{% extends "base.html" %} + +{% block title %}Login - AI Chat Archive{% endblock %} + +{% block content %} +
+
+
+

Welcome Back

+

Sign in to access your AI vault

+
+ +
+ {% csrf_token %} + + {% if form.errors %} +
+ Your username and password didn't match. Please try again. +
+ {% endif %} + +
+ + +
+ +
+ + +
+ + + + +
+ +
+

Demo credentials: admin / admin123

+
+
+
+{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..3e940ef 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,8 @@ from django.urls import path - -from .views import home +from . import views urlpatterns = [ - path("", home, name="home"), -] + path('', views.index, name='index'), + path('dashboard/', views.dashboard, name='dashboard'), + path('chat//', views.chat_detail, name='chat_detail'), +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..1c3e1d1 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,34 @@ -import os -import platform +from django.shortcuts import render, redirect +from django.contrib.auth.decorators import login_required +from .models import AIChatHistory, Profile +from django.db.models import Q -from django import get_version as django_version -from django.shortcuts import render -from django.utils import timezone +def index(request): + if request.user.is_authenticated: + return redirect('dashboard') + return render(request, 'core/index.html') +@login_required +def dashboard(request): + query = request.GET.get('q', '') + profile = Profile.objects.get(user=request.user) + chats = AIChatHistory.objects.filter(company=profile.company) -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() + if query: + chats = chats.filter( + Q(chat_title__icontains=query) | Q(chat_content__icontains=query) + ).order_by('-chat_last_date') + else: + chats = chats.order_by('-chat_last_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", ""), + 'chats': chats, + 'query': query, + 'company': profile.company } - return render(request, "core/index.html", context) + return render(request, 'core/dashboard.html', context) + +def chat_detail(request, pk): + profile = Profile.objects.get(user=request.user) + chat = AIChatHistory.objects.get(pk=pk, company=profile.company) + return render(request, 'core/chat_detail.html', {'chat': chat}) \ No newline at end of file