From 7f5df115933b0925a971464dc86402c8f64b56da Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 3 Feb 2026 21:45:47 +0000 Subject: [PATCH] Auto commit: 2026-02-03T21:45:47.687Z --- core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 1564 bytes core/__pycache__/forms.cpython-311.pyc | Bin 0 -> 1282 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 2564 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 1403 bytes core/admin.py | 18 +- core/forms.py | 13 + core/migrations/0001_initial.py | 41 +++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 2201 bytes core/models.py | 34 ++- core/templates/base.html | 83 ++++-- core/templates/core/index.html | 236 +++++++----------- core/views.py | 39 +-- static/css/custom.css | 113 ++++++++- 13 files changed, 392 insertions(+), 185 deletions(-) create mode 100644 core/__pycache__/forms.cpython-311.pyc create mode 100644 core/forms.py 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..50e79a4a000cb17b26ed9eca39e946a8baed4051 100644 GIT binary patch literal 1564 zcma)6&u`R56rQoYYiGk|0|6Rn082$mT#2lT;D(Ue3;mU-Dm__9mhntB4*s#s*eXFB zER+M{(%f?8l&YeCM{kuj(jHcGiqsRgjg}LqzGue~3qfK$^UXZX%zJOX`Nn^?+bsg+ zo8I&ANF(GwH0shk9!&m$!5(3R(TK#5&%et{xk%L5W5<-D=buxxP;cc@3>9 z8o5W9u|rq`R@Gj~z7A`kRb?N#*R?@h^8=5@DIS~P(fn+W7PIaXXXXvYaHwkdEDn=5 zn4_a9^B0l!gdeNf`)Shql|Rn8%z~42U{D`sav6+0!ih^6aWzI=ooTMYbhp6_2+&Yx zj(vTL0l;o#VHR@+2Si?_TsMk-C2ns99Ah87C=;9KN@s`Dx0BSDw z#UszJ7Y8Sbg-IM^o7@E0BhR!~(0^PQ{ac&XFT5ZEr_tAcgFDCIpvY$4XONtuD?{>V zLz$wIp|U`YVq5Y|Vl3OX#YO1FRe-10K4fEcI^DCdNaDc?GP36X=)CN_y8fbbU@Z@= z$swK8`MJU)mK<>&}dr!^js5u zQxH4jG7w=OC&YPNT56*_!XlaoD0_Jq;C)p+Kvms9Ree{ijXKu`b9QlWY|zHanAC8% z{6n!mG_DWITDeAtkgJ+wTYl0@SA#UkMEFo3d#VW!h(}W3&r0CGNLhmSP$fdO)^M&A zRVDZ`zv-OcS$C=@cvpN4yYaUm{{|EV759s2ME{-*w zI%D!N?A{(Oe078qZxN1kqFp*!-y+(4>1FnSE)D6@ShMJlbWBdi-F*1P@=-bYwnTJx K<(44TX@K?*b( zZ?Pt(n;80F)6nZ2$lO diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6cd0a0e6b2a904f28efe58132af2ae9622ffa77d GIT binary patch literal 1282 zcma)5%}*0S6rcU-CkO^i4Yf*4NUQ?Y7;gk)Vl=1m2mE$DI6 zHJq46#pJ#i7Nt;|_h^mnOYtZ>?YY)Vvgi}WEAfUHJ8XxyV7!h9(j|;^Ir1ohM|l%s z-hv)CUBL=?QNzB!2%mtbF4FXg_2CatPDzQPs}`jAMbb4Hk;Fps#4bt}t4(=Z+k}9( zM9@(?XO;LbtK>heQXOVE-V{#bOj9}Q6H851Pvb14*>gO2Ce86F!c9oO*RdHVE}@2N z)<~FPaJ&Y$xkJLNNjWUW3&|Q`%(O_ON0ei%;<=o9P9r_%`E%o#7J~`{F7T6?zGNv=1Ouskg++ z#Y~toqG${w%os+^!@fg6?=g%;-*iL*hC#(u3^iCJPMDatiGvvxjA43)Ec0h>-REIS zs3s+5m|U{4ML7G04#5T;kCm!kjgqd$hFV(YLG)X_YD-C8g*}j@RFX zsyId}u8DBVJ_CIC^R@c(D_ZOF^B|Iy#LvR$#%$Brc^$m6g8Nk=1$(z(?-lIUP;q0V zS=t#7=16dNUdWKOJ7nz*S*`r-jR(z#JClKK1^22#^7d}t-pkvq+{miG_WrvY%v!-B z4Mv%e9N*3Hy&P|+wSi0<0jwm&N3TJ2^g2MfsL}y37!+`&GfneCi>wMl6Sq17@wV6m zz-ex6Ii&&lc{mVrM;9!_#DcS2OoR!%V7itUS0)ivi^Zi&Pl?irrx*v&9n^7ZBCh)+ sy$Mv}fiVN1tw@s8LRW)sX`vfIx3tx?1c9H2RkG$Ci20)n7Ng*Q10H`zsQ>@~ literal 0 HcmV?d00001 diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640edbdcec3e5c1744466c916e7acdd2763b..64f448d48ed2611383e8b4c0a950fd8279e6583b 100644 GIT binary patch literal 2564 zcmaJ@&2JM&6rc6_JN}4`p)C#IkPvW`I!zSukl5|t{XsE0I&9P(#yw5wHX?Ws~vxdnw&4praV_1cM(GWPy2;|@tHbixNxU6cwXCE zl1$forGbw9yt4!XxX}BkOzPV!NO4{(w$XbQl z6L;Z+nF^k;^#&Y%B^dsa{6s3Ua!#91!_YNbl*rF*H=Esp*gzN_;xpUkr& z<%8xp&7NrH*yy56&GP($mRHLBq$Pw~wUkfc*vrb)ylKNj3+6qWk>yDc@_qy}+UOj| zDqsR0tNsblzM^f1H|E|ZHdMdfj*{Ssr z)}u*1nylVx_>V6S=>FrY@@7xXKT-Ej=>Cc7)kdUu<(MAntw;LwNMH4qL zJ>08@d#g7Zp_9vVdg$bO-)6cN8n1`O_0V|r`nFSWCAP^yc#CuI+5)%W8b`fOuv|uO z_wfn6#UU=bAyfz}?L4R41=kouq$hNvG1&}DSZDCOK8_6X{o#y^H-{3rtQGtDud;Rhuk z1Ffa9@>r57orDPwWpi?+sO_UBh7zNtC7F zWBr?AEjCtXgl|^_f~^q#ha3BO^dEo1ocRbhI8F)uW?8&?eJXfoFsD(4Za~ ztX^+K&LBO{Y>w3;7weIWdgLN3@9tZ1>)n0psap4Fy?a#e9x)5!k-j}=s4 delta 164 zcmZn>xyYEXoR^o20SKo5$j`I{(vLwL7+``jJ_`XE(-~42QW$d>av7r-85vTTf*CZK zUxE~9GTvg#%}+_qDfZK3y2Y82m6(^Fua}Zk#0-?2{DsNf>KBI%P(f)d0X Xi)Det2WCb_#v2SW7qFosHlPXs-Yq02 diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 2a36fd69370b38a98d8b01bf8eb9817c42f16ed6..02d6866fbadc5bee5e3036ed896a9b4d08794618 100644 GIT binary patch literal 1403 zcmZuw&2JM&6rc63ch~X88ycX9lx9gHsHI@vLJy_f_)sJoVIovt&}MhA*X&1_nN0$6 z+6d(kP$ak!q#QV12;=iFP!>jlQp)=)9CGc^M3Em``X{e$Hx#* zrSZaBkP-S@C>iBWh2td<-Xa&dl8*wZE(N)IP7->~mjk7)fGoR;pAXc!8fbMb)$_g{ z6zYW(r}|?-v0emO+eUT6)oZ9+_$b1cb6h1jbTQ#N!LCQJ!^#rZ15Byi!1SYZ0@9X9 z)F5`ii?t|h+{aI2Oa;&!Qg1~h5WdU{@bf6dj_}PW4+0d3j$gp-Tg0+^__hYP_gTq9 zR)h{fI~?3>N^R55?cA-inV znElLRafsatSDI0P%QDwjPxgUw=A&aYc13NK`NOe6TPw1-c;A)!inuphE zW%U^u7oh|bS<^p(ZJ~e6^Si(PWzKvsXFBFw*PPqB(^rvhZvV1({)0B1XwygLw|ndR z?T$I$HRpGfUeSDgP*gdCub95wy%NDzhh`(x?@^h)7nwsxpS9#6K9VuSo_Ai(tfG0DW=*- zz_xA!()jAl)nsb^_eQ6<&@C<`%EB>Zj_#Gm`GniD!$wr0&4@6lou=JOJIYI^HqkWV zt(-Jn4I&r&G#wk!AqvlnIn#7l+&FcKnFkm#lC)cYAR-ozTm<$>{{ce8KK_x+fGU1K vx(%!^OOn(>*OD)t9-2)?PY->UeChPiOfq_U=yEc8`pTqqy^sFS(k%Z28|g-O 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}_7fK6rSDnza6s<0SDvQCZz~RfRoSzrD+qAU_wPgMI4ZPS#3O%&4%@^*LFEy4;*vk$Z;&~!I~3NPq`V96H=wVUH?E5)Y4h++xIu~-uvdw_>ZBX z2!e4=`B~i#AoQ0j^oPI4yqf{$H-r)9G*sovT$L~L9OBU}g!x|(76`W`^e62C_hKNG z1?*czdH=p^&hso%RTWdVRYSK}plV>ES(W}w_Z#mC?=;>GNl=-?sLW%oEGVe#;}P+1 zL7Lrxc`Se?xD^^`ILu)m_BR8&K1c)J?%3dQ(DMxUH8|7^?{eS+@4zSG`FMc1I?Oer z$9!Uk*HI82`klk^=80X%_yxS(0TD&dGuqee0`sCTAh0L?!#;dC5>$4wIdU|L62zx) z42ue{a?R6+!H4-Dqm}$0XpJ6;eex4%ojKz3DMVAB;d9pW`FGUQo=>a~AMDK7v7O0y zK0^Z^Uo(5uM+r7_hY?ixavYz779D5d<$iCLSnvnafJUt{Ud2Vm-(Jl7SWK?lhEy?$ zY!l3)HB+t1=C<^ZY_qUMOjXv@9|?;+Cg!?f5lNS;g!ygN*2w;ANGi`k_sdTujp&NK z$)cE86;rLbX8}z9bxqbEG6Bom`5+t=VfpR~3oIMDs{paIc9R85bz=482R9d4_yNKC zKvP;;W1-S!-R!#*@7-pBqN(;~tllWG(5h_L&Aws{BCOWk2>b4Vg)qU&rlD4dWr`rP zh-J&BE!ip*5+XY8azVW1)wYklIp#2Yy8a=<#DIgY?~F za*sTMLTomqsg_N2Vs^2LSYU$~02qrxU@&$K!78yVSs^Ua17DJDfULV8y75GkF=k=a zl4_c~O)!{(m~6;(&Cc^?-c4@;$V&bM3rXIJlEfmC1lLbpBf!Tb=}}$Q+>AjAs=8{! zX0jM2HK>~C6%`P15n|B=Z}*qoi_3Ix7Z#gWl^f6(MYm8EUf7h)9$O+$?LG?#cG;mt zXr9tQjLjQ{Mr6Hfj2Jc2yBz;S?_hQGezve_R7s(}Uf1nwoUi4^oYw?f5UCJGkD&_hj(sueB4N2=T0Yt!r5OVPAJn( zq~0V>(d5Ll$4+u$&-eN~ElX54Y0_#XEhlMF(QYS3X=jyhT6`T++#Wz##J(806^q z^z#eO`1D?dj?cHo=biC+DlUAK?%q|Joo!`jo$M?X=RN{wZ-M6KTDdtVH%G-AhZ3jh zYpwJ(Cw+~IUwcbkbt}L6YJ_Hst!&ZB7O8lvok-KnRAa-*OznM1GjpxXoRe{v>K5vc zx^)3La7pJ}dN{E2z5AF8{eD=18!e2tWL+_?;B~LPy^ij7%)IO7`7Q$YJ~Y!kEZ><$ s5Z%8_>pqZ1t4+-B+M*si- literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 71a8362..a1cb243 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,35 @@ from django.db import models -# Create your models here. +class Program(models.Model): + DAYS_OF_WEEK = [ + ('MON', 'Monday'), + ('TUE', 'Tuesday'), + ('WED', 'Wednesday'), + ('THU', 'Thursday'), + ('FRI', 'Friday'), + ('SAT', 'Saturday'), + ('SUN', 'Sunday'), + ] + title = models.CharField(max_length=200) + description = models.TextField(blank=True) + day = models.CharField(max_length=3, choices=DAYS_OF_WEEK) + start_time = models.TimeField() + end_time = models.TimeField() + dj_name = models.CharField(max_length=100, blank=True) + + class Meta: + ordering = ['day', 'start_time'] + + def __str__(self): + return f"{self.title} ({self.get_day_display()})" + +class SongRequest(models.Model): + listener_name = models.CharField(max_length=100) + song_title = models.CharField(max_length=200) + artist_name = models.CharField(max_length=200) + message = models.TextField(blank=True) + created_at = models.DateTimeField(auto_now_add=True) + is_played = models.BooleanField(default=False) + + def __str__(self): + return f"{self.song_title} by {self.artist_name} - Requested by {self.listener_name}" \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 1e7e5fb..ec98fd9 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,25 +1,70 @@ - - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}Lili Records Radio{% endblock %} + + + + + + + + + + {% load static %} + + + {% block head %}{% endblock %} - - {% block content %}{% endblock %} - + - +
+ {% if messages %} +
+ {% for message in messages %} + + {% endfor %} +
+ {% endif %} + + {% block content %}{% endblock %} +
+ +
+
+

© 2026 Lili Records Radio. All rights reserved.

+

Powered by Flatlogic AI

+
+
+ + + + {% 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..f1758bf 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,97 @@ -{% extends "base.html" %} - -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% extends 'base.html' %} +{% load static %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… + +
+
+
+
+ Live On Air +

Your Voice, Your Music,
Your Radio.

+

Broadcasting the best records 24/7. Join our community and shape the playlist.

+ +
+
-

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

Radio Schedule

+ {% if programs %} +
+ {% for program in programs %} +
+
+
{{ program.title }}
+

with {{ program.dj_name|default:"AutoDJ" }}

+
+
+ {{ program.start_time|time:"H:i" }} - {{ program.end_time|time:"H:i" }} +
{{ program.get_day_display }}
+
+
+ {% endfor %} +
+ {% else %} +
+

No programs scheduled for today. Tune in for our 24/7 mix!

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

Request a Song

+
+ {% csrf_token %} +
+ + {{ form.listener_name }} +
+
+
+ + {{ form.song_title }} +
+
+ + {{ form.artist_name }} +
+
+
+ + {{ form.message }} +
+ +
+
+
+
+
+ + +
+
+
+

Connect via WhatsApp

+

Want to talk to us directly? Join our WhatsApp community for instant updates and exclusive contests.

+ +
+
+
+{% endblock %} diff --git a/core/views.py b/core/views.py index c9aed12..d95b31c 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,26 @@ -import os -import platform - -from django import get_version as django_version -from django.shortcuts import render +from django.shortcuts import render, redirect +from django.contrib import messages +from .models import Program, SongRequest +from .forms import SongRequestForm from django.utils import timezone - 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() + # Get current programs (simplification: showing all for now, sorted) + programs = Program.objects.all() + + # Handle song request form + if request.method == 'POST': + form = SongRequestForm(request.POST) + if form.is_valid(): + form.save() + messages.success(request, 'Your song request has been sent! Stay tuned.') + return redirect('home') + else: + form = SongRequestForm() 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", ""), + 'programs': programs, + 'form': form, + '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..6f59a5e 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,111 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +:root { + --bg-dark: #0B0D17; + --bg-card: #1A1E2E; + --neon-pink: #FF007A; + --neon-cyan: #00F0FF; + --text-main: #FFFFFF; + --text-muted: #A0A0A0; + --accent-gradient: linear-gradient(45deg, var(--neon-pink), var(--neon-cyan)); } + +body { + background-color: var(--bg-dark); + color: var(--text-main); + font-family: 'Poppins', sans-serif; + margin: 0; + overflow-x: hidden; +} + +.navbar { + background-color: rgba(11, 13, 23, 0.95); + backdrop-filter: blur(10px); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} + +.navbar-brand { + font-weight: 800; + background: var(--accent-gradient); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-size: 1.5rem; +} + +.hero-section { + padding: 100px 0; + position: relative; + background: radial-gradient(circle at top right, rgba(255, 0, 122, 0.1), transparent), + radial-gradient(circle at bottom left, rgba(0, 240, 255, 0.1), transparent); +} + +.card { + background-color: var(--bg-card); + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 15px; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.card:hover { + transform: translateY(-5px); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); +} + +.btn-neon { + background: var(--accent-gradient); + border: none; + color: white; + font-weight: 600; + padding: 12px 30px; + border-radius: 30px; + transition: all 0.3s ease; +} + +.btn-neon:hover { + box-shadow: 0 0 20px rgba(255, 0, 122, 0.5); + transform: scale(1.05); + color: white; +} + +.form-control { + background-color: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + color: white; + border-radius: 10px; +} + +.form-control:focus { + background-color: rgba(255, 255, 255, 0.1); + border-color: var(--neon-cyan); + color: white; + box-shadow: 0 0 10px rgba(0, 240, 255, 0.3); +} + +.live-badge { + background-color: var(--neon-pink); + color: white; + padding: 5px 15px; + border-radius: 20px; + font-size: 0.8rem; + font-weight: 700; + text-transform: uppercase; + animation: pulse 2s infinite; +} + +@keyframes pulse { + 0% { opacity: 1; } + 50% { opacity: 0.5; } + 100% { opacity: 1; } +} + +.schedule-item { + padding: 15px; + border-left: 3px solid var(--neon-cyan); + margin-bottom: 10px; + background: rgba(255, 255, 255, 0.02); +} + +.footer { + padding: 50px 0; + border-top: 1px solid rgba(255, 255, 255, 0.05); + text-align: center; + color: var(--text-muted); +} \ No newline at end of file