diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392..0abf306 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640..61a215b 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 2a36fd6..601b31d 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/admin.py b/core/admin.py index 8c38f3f..351658c 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,3 +1,10 @@ from django.contrib import admin +from .models import RadioConfig -# Register your models here. +@admin.register(RadioConfig) +class RadioConfigAdmin(admin.ModelAdmin): + def has_add_permission(self, request): + # Limit to only one configuration object + if self.model.objects.count() >= 1: + return False + return super().has_add_permission(request) \ No newline at end of file diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..0c23bce --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# Generated by Django 5.2.7 on 2026-02-02 00:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='RadioConfig', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='La Morenita Radio', max_length=255)), + ('stream_url', models.URLField(help_text='Direct link to the audio stream')), + ('whatsapp_number', models.CharField(default='+52 844 218 8814', max_length=20)), + ('facebook_url', models.URLField(default='https://www.facebook.com/profile.php?id=61583511337947')), + ('tiktok_url', models.URLField(default='https://www.tiktok.com/@chikipapiradio')), + ], + options={ + 'verbose_name': 'Radio Configuration', + 'verbose_name_plural': 'Radio Configuration', + }, + ), + ] diff --git a/core/migrations/__pycache__/0001_initial.cpython-311.pyc b/core/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000..9508676 Binary files /dev/null and b/core/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 71a8362..8a1e220 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,15 @@ from django.db import models -# Create your models here. +class RadioConfig(models.Model): + title = models.CharField(max_length=255, default="La Morenita Radio") + stream_url = models.URLField(help_text="Direct link to the audio stream") + whatsapp_number = models.CharField(max_length=20, default="+52 844 218 8814") + facebook_url = models.URLField(default="https://www.facebook.com/profile.php?id=61583511337947") + tiktok_url = models.URLField(default="https://www.tiktok.com/@chikipapiradio") + + class Meta: + verbose_name = "Radio Configuration" + verbose_name_plural = "Radio Configuration" + + def __str__(self): + return self.title \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..e5cf6d3 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,80 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} +{% block title %}{{ config.title }}{% endblock %} {% block head %} - - - - + + {% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+

{{ config.title }}

+

MÚSICA 24/7

+
+ +
+
-

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" }} -

-
-
- -{% endblock %} \ No newline at end of file + +
+ +

Presiona Play para escuchar

+
+ + + + + + +Admin Panel + + +{% endblock %} diff --git a/core/views.py b/core/views.py index c9aed12..51fce99 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,23 @@ import os -import platform - -from django import get_version as django_version from django.shortcuts import render -from django.utils import timezone - +from .models import RadioConfig 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 for La Morenita Radio.""" + config = RadioConfig.objects.first() + + # Provide default data if not configured in admin yet + if not config: + config = { + "title": "La Morenita Radio", + "stream_url": "https://streaming.hostpannel.lat:8054/stream", + "whatsapp_number": "+52 844 218 8814", + "facebook_url": "https://www.facebook.com/profile.php?id=61583511337947", + "tiktok_url": "https://www.tiktok.com/@chikipapiradio", + } 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", ""), + "config": config, + "project_description": os.getenv("PROJECT_DESCRIPTION", "La Morenita Radio - Música 24/7"), } return render(request, "core/index.html", context) diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..b76baee 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,149 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Open+Sans:wght@400;600&display=swap'); + +:root { + --primary-black: #0a0a0a; + --primary-red: #ff0000; + --primary-yellow: #ffcc00; + --text-white: #ffffff; + --bg-gradient: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 100%); } + +body { + margin: 0; + padding: 0; + font-family: 'Open Sans', sans-serif; + background: var(--bg-gradient); + color: var(--text-white); + min-height: 100vh; + overflow-x: hidden; +} + +h1, h2, h3, .brand-font { + font-family: 'Montserrat', sans-serif; + text-transform: uppercase; + font-weight: 700; +} + +/* Radio Hub Layout */ +.radio-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 2rem; + text-align: center; + max-width: 600px; + margin: 0 auto; +} + +/* Rotating Disc Animation */ +.disc-container { + position: relative; + width: 250px; + height: 250px; + margin: 2rem 0; +} + +.disc { + width: 100%; + height: 100%; + border-radius: 50%; + background: radial-gradient(circle, #333 10%, #111 20%, #000 70%); + border: 5px solid #222; + box-shadow: 0 0 30px rgba(0,0,0,0.5); + position: relative; + animation: rotate 10s linear infinite; + animation-play-state: paused; +} + +.disc.playing { + animation-play-state: running; +} + +.disc::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80px; + height: 80px; + background: var(--primary-red); + border-radius: 50%; + border: 4px solid var(--primary-yellow); + background-image: url('https://via.placeholder.com/80?text=La+Morenita'); /* Placeholder for Logo */ + background-size: cover; +} + +@keyframes rotate { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +/* Player Controls */ +.controls { + margin: 2rem 0; +} + +.btn-play { + background: var(--primary-red); + border: none; + color: white; + width: 80px; + height: 80px; + border-radius: 50%; + font-size: 2rem; + cursor: pointer; + transition: transform 0.2s, background 0.3s; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 4px 15px rgba(255, 0, 0, 0.3); +} + +.btn-play:hover { + transform: scale(1.1); + background: #cc0000; +} + +/* Social Icons */ +.social-links { + display: flex; + gap: 1.5rem; + margin-top: 2rem; +} + +.social-icon { + width: 50px; + height: 50px; + border-radius: 50%; + background: rgba(255,255,255,0.1); + display: flex; + align-items: center; + justify-content: center; + color: var(--primary-yellow); + font-size: 1.5rem; + text-decoration: none; + transition: background 0.3s, color 0.3s, transform 0.2s; + border: 1px solid rgba(255, 204, 0, 0.3); +} + +.social-icon:hover { + background: var(--primary-yellow); + color: var(--primary-black); + transform: translateY(-5px); +} + +.whatsapp:hover { background: #25D366; border-color: #25D366; color: white; } +.facebook:hover { background: #1877F2; border-color: #1877F2; color: white; } +.tiktok:hover { background: #010101; border-color: #010101; color: white; } + +/* Admin Link */ +.admin-link { + position: fixed; + bottom: 1rem; + right: 1rem; + font-size: 0.8rem; + color: rgba(255,255,255,0.3); + text-decoration: none; +} \ No newline at end of file diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 108056f..b76baee 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,21 +1,149 @@ +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Open+Sans:wght@400;600&display=swap'); :root { - --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); + --primary-black: #0a0a0a; + --primary-red: #ff0000; + --primary-yellow: #ffcc00; + --text-white: #ffffff; + --bg-gradient: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 100%); } + body { margin: 0; - font-family: 'Inter', sans-serif; - background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end)); - color: var(--text-color); - display: flex; - justify-content: center; - align-items: center; + padding: 0; + font-family: 'Open Sans', sans-serif; + background: var(--bg-gradient); + color: var(--text-white); min-height: 100vh; - text-align: center; - overflow: hidden; - position: relative; + overflow-x: hidden; } + +h1, h2, h3, .brand-font { + font-family: 'Montserrat', sans-serif; + text-transform: uppercase; + font-weight: 700; +} + +/* Radio Hub Layout */ +.radio-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 2rem; + text-align: center; + max-width: 600px; + margin: 0 auto; +} + +/* Rotating Disc Animation */ +.disc-container { + position: relative; + width: 250px; + height: 250px; + margin: 2rem 0; +} + +.disc { + width: 100%; + height: 100%; + border-radius: 50%; + background: radial-gradient(circle, #333 10%, #111 20%, #000 70%); + border: 5px solid #222; + box-shadow: 0 0 30px rgba(0,0,0,0.5); + position: relative; + animation: rotate 10s linear infinite; + animation-play-state: paused; +} + +.disc.playing { + animation-play-state: running; +} + +.disc::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80px; + height: 80px; + background: var(--primary-red); + border-radius: 50%; + border: 4px solid var(--primary-yellow); + background-image: url('https://via.placeholder.com/80?text=La+Morenita'); /* Placeholder for Logo */ + background-size: cover; +} + +@keyframes rotate { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +/* Player Controls */ +.controls { + margin: 2rem 0; +} + +.btn-play { + background: var(--primary-red); + border: none; + color: white; + width: 80px; + height: 80px; + border-radius: 50%; + font-size: 2rem; + cursor: pointer; + transition: transform 0.2s, background 0.3s; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 4px 15px rgba(255, 0, 0, 0.3); +} + +.btn-play:hover { + transform: scale(1.1); + background: #cc0000; +} + +/* Social Icons */ +.social-links { + display: flex; + gap: 1.5rem; + margin-top: 2rem; +} + +.social-icon { + width: 50px; + height: 50px; + border-radius: 50%; + background: rgba(255,255,255,0.1); + display: flex; + align-items: center; + justify-content: center; + color: var(--primary-yellow); + font-size: 1.5rem; + text-decoration: none; + transition: background 0.3s, color 0.3s, transform 0.2s; + border: 1px solid rgba(255, 204, 0, 0.3); +} + +.social-icon:hover { + background: var(--primary-yellow); + color: var(--primary-black); + transform: translateY(-5px); +} + +.whatsapp:hover { background: #25D366; border-color: #25D366; color: white; } +.facebook:hover { background: #1877F2; border-color: #1877F2; color: white; } +.tiktok:hover { background: #010101; border-color: #010101; color: white; } + +/* Admin Link */ +.admin-link { + position: fixed; + bottom: 1rem; + right: 1rem; + font-size: 0.8rem; + color: rgba(255,255,255,0.3); + text-decoration: none; +} \ No newline at end of file