diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index cd6f855..8718a8e 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 9aa598b..24d6959 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 6867ddf..0729160 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..debf9e2 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,3 +1,8 @@ from django.contrib import admin +from .models import Event -# Register your models here. +@admin.register(Event) +class EventAdmin(admin.ModelAdmin): + list_display = ('artist_name', 'venue_name', 'date', 'city', 'status', 'age_restriction') + list_filter = ('status', 'city', 'date', 'age_restriction') + search_fields = ('artist_name', 'venue_name', 'city') \ No newline at end of file diff --git a/core/models.py b/core/models.py index 71a8362..0967bfb 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,29 @@ from django.db import models -# Create your models here. +class Event(models.Model): + AGE_CHOICES = [ + ('18+', '18+'), + ('21+', '21+'), + ('All Ages', 'All Ages'), + ] + STATUS_CHOICES = [ + ('Open', 'Open'), + ('Closed', 'Closed'), + ] + + artist_name = models.CharField(max_length=200) + date = models.DateField() + venue_name = models.CharField(max_length=200) + city = models.CharField(max_length=100) + state = models.CharField(max_length=100) + age_restriction = models.CharField(max_length=10, choices=AGE_CHOICES, default='21+') + status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='Open') + description = models.TextField(blank=True) + featured_image = models.URLField(max_length=200, blank=True) + ticket_url = models.URLField(max_length=200, blank=True) + + def __str__(self): + return f"{self.artist_name} at {self.venue_name} on {self.date}" + + class Meta: + ordering = ['date'] \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 788576e..af6832d 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,11 +1,45 @@ - + - {% block title %}Knowledge Base{% endblock %} + + {% block title %}Sacred Hive Promo Dashboard{% endblock %} + + + + + {% load static %} + {% block head %}{% endblock %} - - - {% block content %}{% endblock %} - - + + + + +
+ {% block content %}{% endblock %} +
+ + + + + + \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 0a3f404..0138cf4 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,154 +1,45 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} +{% block title %}Home - Sacred Hive Promo Dashboard{% endblock %} {% block head %} -{% if project_description %} - - - -{% endif %} -{% if project_image_url %} - - -{% endif %} - - - - + {% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+

Sacred Hive Promo Dashboard

+

Your portal to the underground. Apply, promote, and get on the list.

-

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

-
-
- + + +
+

Upcoming Events

+
+ {% if events %} + {% for event in events %} +
+
+
+
+
{{ event.artist_name }}
+ {{ event.status }} +
+

📅 {{ event.date|date:"m/d/y" }}

+

📍 {{ event.venue_name }} - {{ event.city }}, {{ event.state }}

+

🔞 {{ event.age_restriction }}

+ +
+
+
+ {% endfor %} + {% else %} +
+

No upcoming events. Check back soon!

+
+ {% endif %} +
+
{% endblock %} \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..ba8c6e6 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,9 @@ -import os -import platform - -from django import get_version as django_version from django.shortcuts import render -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() +from .models import Event +def index(request): + events = Event.objects.all() 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", ""), + 'events': events, } - 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 new file mode 100644 index 0000000..011151c --- /dev/null +++ b/static/css/custom.css @@ -0,0 +1,133 @@ +:root { + --dark-indigo: #0D0C1D; + --purple-accent: #9F70FD; + --blue-accent: #4A90E2; + --light-text: #FFFFFF; + --muted-text: #a0aec0; + --status-open: #7ED321; + --status-closed: #888888; + --card-bg: #1A192D; + --card-border: rgba(159, 112, 253, 0.2); + --font-headings: 'Poppins', sans-serif; + --font-body: 'Inter', sans-serif; +} + +body { + background-color: var(--dark-indigo); + color: var(--light-text); + font-family: var(--font-body); + padding-top: 70px; /* For fixed navbar */ +} + +.navbar { + background-color: rgba(13, 12, 29, 0.85); + backdrop-filter: blur(10px); +} + +.navbar-brand { + font-family: var(--font-headings); + font-weight: 700; + font-size: 1.5rem; + color: var(--purple-accent) !important; +} + +.nav-link { + font-weight: 500; + transition: color 0.3s ease; +} + +.nav-link:hover, .nav-link.active { + color: var(--purple-accent) !important; +} + +.hero-section { + padding: 6rem 0; + background: linear-gradient(45deg, rgba(74, 144, 226, 0.1), rgba(159, 112, 253, 0.1)); + text-align: center; +} + +.hero-title { + font-family: var(--font-headings); + font-size: clamp(2.5rem, 5vw, 4rem); + font-weight: 700; + color: var(--light-text); +} + +.hero-tagline { + font-size: 1.25rem; + color: var(--muted-text); + max-width: 600px; + margin: 1rem auto 0; +} + +.content-section { + padding: 4rem 0; +} + +.section-title { + font-family: var(--font-headings); + font-weight: 600; + font-size: 2.5rem; + margin-bottom: 2.5rem; + text-align: center; + color: var(--light-text); +} + +.event-card { + background-color: var(--card-bg); + border: 1px solid var(--card-border); + border-radius: 12px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + height: 100%; + position: relative; +} + +.event-card:hover { + transform: translateY(-5px); + box-shadow: 0 10px 20px rgba(159, 112, 253, 0.1); +} + +.event-card .card-body { + padding: 1.5rem; +} + +.event-card .card-title { + font-family: var(--font-headings); + font-weight: 600; + font-size: 1.3rem; + color: var(--light-text); +} + +.event-card .card-text { + color: var(--muted-text); + margin-bottom: 0.5rem; + display: flex; + align-items: center; +} + +.event-card .card-text .icon { + margin-right: 0.75rem; +} + +.status-badge { + font-size: 0.8rem; + font-weight: 500; + padding: 0.4em 0.8em; + border-radius: 20px; +} + +.status-open { + background-color: rgba(126, 211, 33, 0.15); + color: var(--status-open); +} + +.status-closed { + background-color: rgba(136, 136, 136, 0.15); + color: var(--status-closed); +} + +footer { + background-color: var(--card-bg); + color: var(--muted-text); + border-top: 1px solid var(--card-border); +}