Auto commit: 2026-02-03T22:50:32.700Z
This commit is contained in:
parent
7f5df11593
commit
be88f15a90
Binary file not shown.
@ -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'
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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()),
|
||||
}
|
||||
}
|
||||
@ -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}),
|
||||
}
|
||||
18
core/migrations/0002_alter_program_day.py
Normal file
18
core/migrations/0002_alter_program_day.py
Normal 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),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
@ -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}"
|
||||
|
||||
@ -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>© 2026 Lili Records Radio. All rights reserved.</p>
|
||||
<p class="small">Powered by Flatlogic AI</p>
|
||||
<p>© 2026 Lili Records Radio. Todos los derechos reservados.</p>
|
||||
<p class="small">Desarrollado por Flatlogic AI</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
@ -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 %}
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user