From 587ca82ae66e11631c52137f50b09d4c41b72586 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Thu, 12 Feb 2026 13:11:59 +0000 Subject: [PATCH] T0 --- core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 786 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 1700 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 450 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 3441 bytes core/admin.py | 7 +- core/migrations/0001_initial.py | 31 ++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1930 bytes core/models.py | 17 +- core/templates/base.html | 89 +++++- core/templates/core/index.html | 277 +++++++++--------- core/urls.py | 8 +- core/views.py | 66 ++++- 12 files changed, 327 insertions(+), 168 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..86408811391ba9d6c1f1690e248f48476a849913 100644 GIT binary patch literal 786 zcmZWmJ8#rL5T3Ptk6gGQ1r7v)14pRl19gDiyOn9O;zV-SIrX@yz__b~`|n|N0t#WB`ARQd9H4Fw03e z1`eDFNSMzUaEsf*N^IX|U;(myr%pn9OgJa>=48Pe;LZ{721PY$>)56kdUG1n=cHD^ zZ}R2`a9bC~;xgR`c@n1=29dPxX8HxwB9p_-0+Z-Ei-fx7>>(+~fZ#I@zQvhubIW(Q z?KikX$PK-^0P@P;<{9aPXkpgTd3WV{qe@~t5FT!z9FHJXT35%5^$ zA{^?j!cazg!5~J#3A}O+Vo{*{2{VF)t2J*gOVBHK%CsmwJjAG^CcJ}8eo}cDp%+n0 zUNy({d?;I#Q!%qO^_bY``kdc+KYBO0`+BrBS$#fwYmU5E$8WnWy~6jybT?a%vb2!# zjx<};P3i=Nl4ilWEpe9`K&d-h#$3&JUbJVBD!BV3UA14#C-71}BGv3q9T1z^jIjwk zJzcyLcy_vY&)Mx!@2LN+`&SrZc24q%h_%_1@uE^GOG%V1Af#61z(>n2i_|XdA(xTKOdza3QjfC> zsD~W(u$M|vg|wAcl{i#16*+M1e^FcVA@XUZp14ub(_Y#)c9LpCrH(ys-kbNE_ujns z>|au;BnQLz{rg%e%5i@%p+90h=4J($mmKCWuW>qG=6No{ea_*?a}Gxde;DZ>I0p+C zFvC%fV&O5Dk6ke_&-){~iHSxlJ$0}MJ>ljDp1B}gna5l?65&Ynu&)ERoya-pFJOkF z919R5eHlkP!VqFKK*R@#7#``2oQ*G<0VX}TQ50@HJ`}AKVB~)>o%B$&nOg{H2r+@>=UjObXP|f!ern5jN(|ey zj<;;0U;PcHp_WNqJwh5W_U(gR5Mz6qYCO4Ot#rlGn~#JDT-&eN)E~#BQqxrp)it$3 z=*jz}uwVE{Dcx6e)36VyQZsB~5o#+{i;#T88U-7E;(%y%WRoNNWO~iibycCHu3D;1 zuu>(e-GCE$-byj27|6+ZX!hfUB?YU;6zs6_`-0KXGzfA`ZP+F<%x6f&802_gt_=DL z;H-Vwy!imgOYS@F5Y}+Kf=&c^fPTgO6oni`c21(of&zCI3{@w7l0vo!Vmx>eDAB5v zol)KtiU+1nijBR7VK<88h*TgVtN6^cp3pjErdWZ4#qcvJ)Q|m9gs5#Hbdr6m2!-A@ zD>Ho;NR#VkrcU!tx&-f;@N+ukoOtPmMZS~I`f(Hlgpi*^2s|`20{j?4-!@c@g^G~H zuI(q*4peKiMl@_q1oAEvAdr0#6I!uqb-QL7{@8k0(@-T;Oltd+HG|r!rs>cy6qx~# z`tg3T{P8d|npshq4Qn!Rpb-@#y9SwyfBn^VXfFZnvQJRM()`pqRD2iIp(a_ep!NhK z)%KH(I_~k-J7DWq&YFhBnqq|gy#m6nMYB+W=HTgyxfjcxm^-76IPZ${o;crJ?`CFO zA9|VD_N0?3xS4{NDKsB;#XAgnr#<`ImyWpVimRTu3fSEIkIP)}8c*o8Iu!8_h4e*}2v?UUu$s!pSbV*(EQ#)ZFRHcUx1Qe7F7B zkxQ;z^5jzUL03{*Bc7zR*PKrtI?}c)ZF|yobE_-Ov_?+TXZUi`k(OO)*^`!=Td(Cg zW@7Gg(UDhNdBu}gz(jAeZ9DR!D=&KTV)MbZz{l=ibGJ#DF_x^Iyx=GBp=#`#1-ut_ zL+lazXNS4G#}Yco@0<9iVH4Euqyxn delta 150 zcmZ3&dyz4HIWI340}xFAk)LS^q#uJgFu(+5d=>&SrZc24q%h_%F;NA^_^*AGiPj diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a69659f6c6e0ae848e54157af197c543a09315f..c55b7ad6d6b48c73c0f98f860752f52e19a0f6cc 100644 GIT binary patch literal 450 zcmZ8cy-UMD6n~do(xjy-I_g{~NV9biadLJMmn@Rzjy5%4ToPLap<@RH2SIni5A=UA zg$^aFQ@295PQJ5tsPEq0`}qCdz4uiF6Ea~LXNh|FylX`t=KvZH^G`7(&N3PfI{;^#`_Wuoq%7PPV8B3$4RZikmelYlX|JBu&xufqedqDM94ve+(*a( z3fhSRE==iG5XUwt7h&=ab4SxY2hG^u4MLESq zAj594mSv`v7ZpbVi%fiy^3BWPi_QBW2z90hg(KNWuML;c#LLBPZT0s<6%@EZl&XppDQo=)5!7lO9(?@zQVVTAs}g?1BnnP+pr+(Z~*K}Ut1w@?sVSuBX~ z7ImrQEBFN7C+YrDpb&6*pB^lQ3L%&G>)}#Yp$qr`4(i>dNFf4z=mS)U;xN!2EKH+p z*Hgae<*eXD-eRWlE@5TUU$%HM`CO}gpy;@&Ofsf1OEs*l=tRoYTqH$n#!ySd>6s&{RiOmWXb=y!8Y`NV zT}MwVEvyyEz{HSLALJlWVKAnWK!YOs-d z<#8(aD3z>NJWcl384 zIqr56WKF0FH6EWs4U1U112f$1%u?eicc^)jX-%w(EN(^j%&-spHNm^;G_rd3EEf5Z zxvd6Y>)~dl_HvzTl@2+>aPZ{ydiqmfsEM~ z0m!NN;hY*m)_8kOgoY7)Wi8|x)$8%;KptoUPTWg+GrlNZML4<^x*nR|eJ=@1Xj!_7 zmIUw2I0fVT4vq(SOt1cES}T=xqFf^@fF=0YtjY*h7*S~vu+dbQR;uW#MK~xPfJt>8 zz(42se)^N?_ncsfFa{b2IetpY`pW9))X|cn15^?NFn2(?vY=XuN{O;!RutVduW=-v zGwE5VBr%SkGcy`TJykOpsQNGgnAXZ1lf6BOU6^HFb&3HX5*LZR9Y=OLbhGFJ{JzfB z&=l;TVqj(U`-)Y%CR;L+(|@@B(e-+) zzY*(ip;%NEo0av;?Be6mw z#N)`#w?BQmsSMu^Zz)5y^S7t|)^oe3IWTg&zd1bG7=FDuI^GzaY>s4a|FRVg4)(PW zkZlx9rJr*G;x2h1qs;Ioc|h#p^YGNu7aD2s>cSHq$`(TT84>8nuf%PHGOGC8rJ#wc z;@4X-9{2FsJ+hVPuciM!w5fji^1YXBW#Yk*oj6lZoM|M^*pY+J*U(xLjE6VGIFh-Q zwg*qznO7f7+uf7(?#V{?r0ttzV~{JqpG;hgpnndY&%o0w|0#naNm z*96X=_5;nv9MNP>s0_FZ_*kM@o_^hUQ8ngGxJX)M_X~66T@70>sRh?T=3XV8$ga9# z0WeUGO&v=-n=6@^fZF{Q1G@sh;kb82H?zM)lov`j>Awm60BkBcIYTdkj$h2!7eK&k zL1?1zy8COQ*t+{`qV9F~*F?j%_i3Ub+xs-pfbD&n=zF&JIc(GNg@o53i`pc4R5&NJ K(Eq2dBmV=+e_h@H 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}_>8*#5VY?^3uK|C8xDA^e7(RyZ7CD@7{a& z^lLhu}22ZKJ)67XC^UM;}KUA5MPTl zxLQ=;@W^&-umK4u0xP52@v{{k@hFN$+OeZ3xB+iCHU%^qAQOWX6mKVvz{XQ}&oIdV z69j~UMvHm6wrBSAR;Ya{Y@P-4diRY|k!QS`~>Ya1;CfXN=>`k82^fte9 z{{wUB943$6eTzqz15|2o5{M?>zB1%@AwZ?ypxVVDzoj9Jd>+$CwXgnHcZ08G&^0KS zDL=6?sFXE7y=?7Z%e9@oWfz;ipra*USgtBjKc%%?Tdg}-b20MAnvQO2&Yt=Z@A(OW z9bGf@ee9=pu(M$ktXi6h{V1DH{s!+A9tu+1RSj%4+%10$VN!SWCM!=6jcgd2_0W&j zZQ`D=#1=N1s*87BM+75&d=pO80>u8Mifx*jOmI_!i-VCokSM&9 zXV46Rz+ly|>%qP9lOZ1*HDO>4sjhC~{Y>aW`Q~jIX?x@ZvAqd6MgyxY$4~@^-8~3S z%P{<8KccGULLkB*TlOPWLInus|P%Hlx+Kn4mjOhIf@#|9$zl?#4c4FayJeo|H8 zvbPKjbV^mfYiS1a54cg?(p^ZCpF+5aErhMQj)}t>h(A^d^18y>gv0K#pIX!#cOc_S z%!Z$+Y-vuPT!YYsWU3lwC*8#$|*gvork0enJ(2K(4{vWtTa12drR#fV5Yg}u+9`rj3D1bYdJW3US!4( z?)IYmMC{;RFU}>TACq3Z*v-l>vKMLY#^W6?cjGwv{5q|v)N*K!baKSY5h}XfY>wuY z!$~i%JX@vtxlVr0%g<5q({8p%<=H1OPo90|QhB~3&wKJb6+a7hOtT%+$9JAzqxqFi ze#OhLQ1N~@`yN&1ew*}^Ia;mLCZUSkQCv@Pso3gfFVn)!!*#E4lYa7m7FIijRj;s0 z#kFqsDxE4n`N*3p9}_xN=}c9;sR|XV-E4tMrNbRhDjk=pw9t_jJZXW7Uv#rqXmRFn z(<{!#hO>FQSn<49@>YSzu3>J$1W{aJH@J3tWxpIKwX)sEB`S;rKOIv z6w zYgWUaK^sAZ1w|ERt;}En_BK$b@%gY`KX*O`mi - +{% load static %} - {% block title %}Knowledge Base{% endblock %} + + {% block title %}AI Inventory Assistant{% endblock %} {% if project_description %} - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} + + + + + + + + + + + {% block head %}{% endblock %} - {% block content %}{% endblock %} + + +
+ {% block content %}{% endblock %} +
+ +
+
+

© 2026 InventoryAI Assistant. All rights reserved.

+
+
+ + + {% block scripts %}{% endblock %} - + \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..06cc0c7 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,152 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} +{% block content %} +
+
+
+

Find your perfect Inventory match.

+

Ask our AI assistant about costs, installment plans, features, and locations to find exactly what you need in seconds.

+ +
+
+
+
+
📦
+

Smart Filtering

+

No more endless scrolling. Just talk to the agent.

+
+
+
+
+ +
+
+
+
+
+
+ 🤖 +
+
+
Inventory Concierge
+ AI Assistant • Online +
+
+
+ +
+
+
+ Hello! I can help you find items from our inventory. What are you looking for today? +
Try: "Show me items under $500 with installment options" +
+
+
+ +
+
+ {% csrf_token %} + + +
+
+
+
+
+
-{% block head %} - - - {% 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 +{% block scripts %} + +{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..7e9ee5d 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,7 @@ from django.urls import path - -from .views import home +from . import views urlpatterns = [ - path("", home, name="home"), -] + path('', views.home, name='index'), + path('api/chat/', views.chat_api, name='chat_api'), +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..7d4e2e2 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,59 @@ import os import platform - -from django import get_version as django_version +import json +from django.http import JsonResponse from django.shortcuts import render from django.utils import timezone - +from django.db.models import Q +from .models import InventoryItem 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 the conversational AI shell.""" + featured_items = InventoryItem.objects.all()[:3] + 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": "AI Inventory Assistant", + "featured_items": featured_items, } return render(request, "core/index.html", context) + +def chat_api(request): + """Simple keyword-based search to simulate AI conversational agent.""" + if request.method == "POST": + try: + data = json.loads(request.body) + query = data.get("message", "").lower() + + if not query: + return JsonResponse({"reply": "I'm listening! What are you looking for?"}) + + # Simulate "AI" logic by filtering models + # In a real scenario, this would call an LLM with the context of the inventory + results = InventoryItem.objects.filter( + Q(name__icontains=query) | + Q(description__icontains=query) | + Q(features__icontains=query) | + Q(store_name__icontains=query) | + Q(store_location__icontains=query) + ).distinct() + + if results.exists(): + count = results.count() + reply = f"I found {count} options that match your request. Here are the best ones:" + items = [] + for item in results[:5]: + items.append({ + "name": item.name, + "cost": str(item.cost), + "store": item.store_name, + "location": item.store_location, + "installments": item.installments_options, + "lead_time": item.lead_time + }) + return JsonResponse({"reply": reply, "items": items}) + else: + return JsonResponse({"reply": "I couldn't find any items matching those exact details. Try asking about cost, location, or specific features!"}) + except Exception as e: + return JsonResponse({"error": str(e)}, status=400) + + return JsonResponse({"error": "Invalid request"}, status=405) \ No newline at end of file