Auto commit: 2026-02-03T22:50:32.700Z

This commit is contained in:
Flatlogic Bot 2026-02-03 22:50:32 +00:00
parent 7f5df11593
commit be88f15a90
15 changed files with 142 additions and 51 deletions

View File

@ -133,7 +133,7 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/5.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'es'
TIME_ZONE = 'UTC'
@ -179,4 +179,4 @@ if EMAIL_USE_SSL:
# Default primary key field type
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

View File

@ -8,6 +8,8 @@ def project_context(request):
return {
"project_description": os.getenv("PROJECT_DESCRIPTION", ""),
"project_image_url": os.getenv("PROJECT_IMAGE_URL", ""),
"whatsapp_number": "+5359177041",
"whatsapp_group_link": "https://chat.whatsapp.com/EXAMPLE", # Reemplazar con el link real
# Used for cache-busting static assets
"deployment_timestamp": int(time.time()),
}
}

View File

@ -6,8 +6,8 @@ class SongRequestForm(forms.ModelForm):
model = SongRequest
fields = ['listener_name', 'song_title', 'artist_name', 'message']
widgets = {
'listener_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Your Name'}),
'song_title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Song Title'}),
'artist_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Artist Name'}),
'message': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Optional message', 'rows': 3}),
}
'listener_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Tu Nombre'}),
'song_title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Título de la Canción'}),
'artist_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Nombre del Artista'}),
'message': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Mensaje opcional', 'rows': 3}),
}

View File

@ -0,0 +1,18 @@
# Generated by Django 5.2.7 on 2026-02-03 22:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='program',
name='day',
field=models.CharField(choices=[('MON', 'Lunes'), ('TUE', 'Martes'), ('WED', 'Miércoles'), ('THU', 'Jueves'), ('FRI', 'Viernes'), ('SAT', 'Sábado'), ('SUN', 'Domingo')], max_length=3),
),
]

View File

@ -2,13 +2,13 @@ from django.db import models
class Program(models.Model):
DAYS_OF_WEEK = [
('MON', 'Monday'),
('TUE', 'Tuesday'),
('WED', 'Wednesday'),
('THU', 'Thursday'),
('FRI', 'Friday'),
('SAT', 'Saturday'),
('SUN', 'Sunday'),
('MON', 'Lunes'),
('TUE', 'Martes'),
('WED', 'Miércoles'),
('THU', 'Jueves'),
('FRI', 'Viernes'),
('SAT', 'Sábado'),
('SUN', 'Domingo'),
]
title = models.CharField(max_length=200)
description = models.TextField(blank=True)
@ -32,4 +32,4 @@ class SongRequest(models.Model):
is_played = models.BooleanField(default=False)
def __str__(self):
return f"{self.song_title} by {self.artist_name} - Requested by {self.listener_name}"
return f"{self.song_title} by {self.artist_name} - Requested by {self.listener_name}"

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -13,6 +13,9 @@
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
{% load static %}
<link rel="stylesheet" href="{% static 'css/custom.css' %}?v={{ deployment_timestamp }}">
@ -28,13 +31,13 @@
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="#schedule">Schedule</a>
<a class="nav-link" href="#schedule">Horario</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#request">Request Song</a>
<a class="nav-link" href="#request">Pedir Canción</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/admin/">Admin</a>
<a class="nav-link" href="/admin/">Administración</a>
</li>
</ul>
</div>
@ -47,7 +50,7 @@
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show bg-card text-white border-0" role="alert">
{{ message }}
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="alert" aria-label="Close"></button>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="alert" aria-label="Cerrar"></button>
</div>
{% endfor %}
</div>
@ -56,10 +59,18 @@
{% block content %}{% endblock %}
</main>
<!-- WhatsApp Widget -->
<div class="whatsapp-widget">
<div class="whatsapp-tooltip">¡Envía tu mensaje de voz aquí!</div>
<a href="https://wa.me/{{ whatsapp_number|cut:'+'|cut:' ' }}?text=Hola,%20quiero%20enviar%20un%20mensaje%20de%20voz%20para%20la%20radio" class="whatsapp-button" target="_blank">
<i class="fab fa-whatsapp"></i>
</a>
</div>
<footer class="footer">
<div class="container">
<p>&copy; 2026 Lili Records Radio. All rights reserved.</p>
<p class="small">Powered by Flatlogic AI</p>
<p>&copy; 2026 Lili Records Radio. Todos los derechos reservados.</p>
<p class="small">Desarrollado por Flatlogic AI</p>
</div>
</footer>

View File

@ -7,12 +7,12 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<span class="live-badge mb-3 d-inline-block">Live On Air</span>
<h1 class="display-3 fw-bold mb-4">Your Voice, Your Music, <br><span style="color: var(--neon-cyan)">Your Radio.</span></h1>
<p class="lead text-muted mb-5">Broadcasting the best records 24/7. Join our community and shape the playlist.</p>
<span class="live-badge mb-3 d-inline-block">En Vivo</span>
<h1 class="display-3 fw-bold mb-4">Tu Voz, Tu Música, <br><span style="color: var(--neon-cyan)">Tu Radio.</span></h1>
<p class="lead text-muted mb-5">Transmitiendo los mejores discos las 24 horas, los 7 días de la semana. Únete a nuestra comunidad y crea la lista de reproducción.</p>
<div class="d-flex justify-content-center gap-3">
<a href="#request" class="btn btn-neon">Request a Song</a>
<a href="#schedule" class="btn btn-outline-light rounded-pill px-4">View Schedule</a>
<a href="#request" class="btn btn-neon">Pedir una Canción</a>
<a href="#schedule" class="btn btn-outline-light rounded-pill px-4">Ver Horario</a>
</div>
</div>
</div>
@ -24,26 +24,26 @@
<div class="row g-4">
<!-- Schedule Section -->
<div class="col-lg-7" id="schedule">
<div class="card h-100 p-4">
<h2 class="h3 mb-4 fw-bold">Radio Schedule</h2>
<div class="card h-100 p-4 text-white">
<h2 class="h3 mb-4 fw-bold text-white">Horario de la Radio</h2>
{% if programs %}
<div class="schedule-list">
{% for program in programs %}
<div class="schedule-item d-flex justify-content-between align-items-center">
<div>
<h5 class="mb-1 fw-bold">{{ program.title }}</h5>
<p class="mb-0 text-muted small">with {{ program.dj_name|default:"AutoDJ" }}</p>
<h5 class="mb-1 fw-bold text-white">{{ program.title }}</h5>
<p class="mb-0 text-white small">con {{ program.dj_name|default:"AutoDJ" }}</p>
</div>
<div class="text-end">
<span class="badge bg-dark text-cyan">{{ program.start_time|time:"H:i" }} - {{ program.end_time|time:"H:i" }}</span>
<div class="small text-muted mt-1">{{ program.get_day_display }}</div>
<div class="small text-white mt-1">{{ program.get_day_display }}</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="text-center py-5">
<p class="text-muted">No programs scheduled for today. Tune in for our 24/7 mix!</p>
<p class="text-white">No hay programas programados para hoy. ¡Sintoniza nuestra mezcla 24/7!</p>
</div>
{% endif %}
</div>
@ -52,46 +52,52 @@
<!-- Song Request Section -->
<div class="col-lg-5" id="request">
<div class="card h-100 p-4">
<h2 class="h3 mb-4 fw-bold">Request a Song</h2>
<h2 class="h3 mb-4 fw-bold text-white">Pedir una Canción</h2>
<form method="post" class="song-form">
{% csrf_token %}
<div class="mb-3">
<label class="form-label small text-muted">Your Name</label>
<label class="form-label small text-white">Tu Nombre</label>
{{ form.listener_name }}
</div>
<div class="row mb-3">
<div class="col">
<label class="form-label small text-muted">Song Title</label>
<label class="form-label small text-white">Título de la Canción</label>
{{ form.song_title }}
</div>
<div class="col">
<label class="form-label small text-muted">Artist Name</label>
<label class="form-label small text-white">Nombre del Artista</label>
{{ form.artist_name }}
</div>
</div>
<div class="mb-4">
<label class="form-label small text-muted">Shoutout / Message</label>
<label class="form-label small text-white">Saludo / Mensaje</label>
{{ form.message }}
</div>
<button type="submit" class="btn btn-neon w-100">Send Request</button>
<button type="submit" class="btn btn-neon w-100">Enviar Pedido</button>
</form>
</div>
</div>
</div>
</div>
<!-- CTA Section -->
<!-- WhatsApp Community Section -->
<section class="py-5 bg-dark">
<div class="container">
<div class="card p-5 text-center" style="background: linear-gradient(rgba(0,0,0,0.8), rgba(0,0,0,0.8)), url('https://images.unsplash.com/photo-1598488035139-bdbb2231ce04?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80'); background-size: cover;">
<h2 class="mb-3">Connect via WhatsApp</h2>
<p class="mb-4 text-muted">Want to talk to us directly? Join our WhatsApp community for instant updates and exclusive contests.</p>
<div>
<a href="https://wa.me/your-number" class="btn btn-success btn-lg rounded-pill px-5">
<i class="bi bi-whatsapp"></i> Chat on WhatsApp
<div class="card p-5 text-center shadow-lg border-0" style="background: linear-gradient(135deg, #128C7E 0%, #075E54 100%);">
<div class="mb-4">
<i class="fab fa-whatsapp display-1 text-white"></i>
</div>
<h2 class="mb-3 text-white fw-bold">¡Únete a nuestra Comunidad!</h2>
<p class="mb-4 text-white lead">Creamos un grupo exclusivo para que puedas estar en contacto directo. <br> <strong>¡Envía tus mensajes de voz y sal al aire en la radio!</strong></p>
<div class="d-flex flex-column flex-md-row justify-content-center gap-3">
<a href="{{ whatsapp_group_link }}" target="_blank" class="btn btn-light btn-lg rounded-pill px-5 fw-bold text-success">
<i class="fas fa-users me-2"></i> Unirme al Grupo
</a>
<a href="https://wa.me/{{ whatsapp_number|cut:'+'|cut:' ' }}?text=Hola,%20quiero%20enviar%20un%20mensaje%20de%20voz%20para%20la%20radio" target="_blank" class="btn btn-outline-light btn-lg rounded-pill px-5 fw-bold">
<i class="fas fa-microphone me-2"></i> Enviar Mensaje de Voz
</a>
</div>
</div>
</div>
</section>
{% endblock %}
{% endblock %}

View File

@ -13,7 +13,7 @@ def home(request):
form = SongRequestForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'Your song request has been sent! Stay tuned.')
messages.success(request, '¡Tu pedido de canción ha sido enviado! Mantente en sintonía.')
return redirect('home')
else:
form = SongRequestForm()
@ -23,4 +23,4 @@ def home(request):
'form': form,
'current_time': timezone.now(),
}
return render(request, 'core/index.html', context)
return render(request, 'core/index.html', context)

View File

@ -6,6 +6,7 @@
--text-main: #FFFFFF;
--text-muted: #A0A0A0;
--accent-gradient: linear-gradient(45deg, var(--neon-pink), var(--neon-cyan));
--whatsapp-green: #25D366;
}
body {
@ -108,4 +109,57 @@ body {
border-top: 1px solid rgba(255, 255, 255, 0.05);
text-align: center;
color: var(--text-muted);
}
}
/* WhatsApp Widget */
.whatsapp-widget {
position: fixed;
bottom: 30px;
right: 30px;
z-index: 1000;
display: flex;
flex-direction: column;
align-items: flex-end;
}
.whatsapp-button {
width: 60px;
height: 60px;
background-color: var(--whatsapp-green);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
text-decoration: none;
font-size: 30px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
}
.whatsapp-button:hover {
transform: scale(1.1);
color: white;
box-shadow: 0 6px 20px rgba(37, 211, 102, 0.4);
}
.whatsapp-tooltip {
background: var(--bg-card);
color: white;
padding: 10px 15px;
border-radius: 10px;
margin-bottom: 15px;
font-size: 0.9rem;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(255, 255, 255, 0.1);
opacity: 0;
transform: translateY(10px);
transition: all 0.3s ease;
pointer-events: none;
white-space: nowrap;
}
.whatsapp-widget:hover .whatsapp-tooltip {
opacity: 1;
transform: translateY(0);
}