This commit is contained in:
Flatlogic Bot 2025-10-25 14:09:13 +00:00
parent a4426feaec
commit f9a1f1c71e
14 changed files with 135 additions and 182 deletions

View File

@ -1,3 +1,4 @@
from django.contrib import admin from django.contrib import admin
from .models import Book
# Register your models here. admin.site.register(Book)

View File

@ -0,0 +1,25 @@
# Generated by Django 5.2.7 on 2025-10-25 14:03
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Book',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('author', models.CharField(max_length=200)),
('isbn', models.CharField(max_length=13, unique=True)),
('total_copies', models.PositiveIntegerField(default=1)),
('available_copies', models.PositiveIntegerField(default=1)),
],
),
]

View File

@ -0,0 +1,36 @@
# Generated by Django 5.0.7 on 2025-10-25 14:30
from django.db import migrations
def preload_books(apps, schema_editor):
Book = apps.get_model('core', 'Book')
books = [
('The Great Gatsby', 'F. Scott Fitzgerald', '9780743273565', 5, 5),
('To Kill a Mockingbird', 'Harper Lee', '9780061120084', 3, 3),
('1984', 'George Orwell', '9780451524935', 7, 7),
('The Catcher in the Rye', 'J.D. Salinger', '9780316769488', 4, 4),
('The Lord of the Rings', 'J.R.R. Tolkien', '9780618640157', 2, 2),
('Pride and Prejudice', 'Jane Austen', '9780141439518', 6, 6),
('The Hobbit', 'J.R.R. Tolkien', '9780618260300', 8, 8),
('Brave New World', 'Aldous Huxley', '9780060850524', 5, 5),
('Moby Dick', 'Herman Melville', '9781503280786', 3, 3),
('War and Peace', 'Leo Tolstoy', '9781400079988', 2, 2),
]
for title, author, isbn, total_copies, available_copies in books:
Book.objects.create(
title=title,
author=author,
isbn=isbn,
total_copies=total_copies,
available_copies=available_copies
)
class Migration(migrations.Migration):
dependencies = [
('core', '0001_initial'),
]
operations = [
migrations.RunPython(preload_books),
]

View File

@ -1,3 +1,11 @@
from django.db import models from django.db import models
# Create your models here. class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
isbn = models.CharField(max_length=13, unique=True)
total_copies = models.PositiveIntegerField(default=1)
available_copies = models.PositiveIntegerField(default=1)
def __str__(self):
return self.title

View File

@ -1,11 +1,23 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>{% block title %}Knowledge Base{% endblock %}</title> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Library{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
{% block head %}{% endblock %} {% block head %}{% endblock %}
</head> </head>
<body> <body>
{% block content %}{% endblock %} <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
</body> <div class="container">
</html> <a class="navbar-brand" href="{% url 'index' %}">Library</a>
</div>
</nav>
<main role="main" class="container">
{% block content %}{% endblock %}
</main>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View File

@ -1,154 +1,40 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% load static %}
{% block title %}{{ project_name }}{% endblock %} {% block title %}{{ project_name }} - Catalog{% endblock %}
{% block head %}
{% if project_description %}
<meta name="description" content="{{ project_description }}">
<meta property="og:description" content="{{ project_description }}">
<meta property="twitter:description" content="{{ project_description }}">
{% endif %}
{% if project_image_url %}
<meta property="og:image" content="{{ project_image_url }}">
<meta property="twitter:image" content="{{ project_image_url }}">
{% endif %}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
<style>
: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);
}
* {
box-sizing: border-box;
}
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;
min-height: 100vh;
text-align: center;
overflow: hidden;
position: relative;
}
body::before {
content: '';
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100 100'><path d='M-10 10L110 10M10 -10L10 110' stroke-width='1' stroke='rgba(255,255,255,0.05)'/></svg>");
animation: bg-pan 20s linear infinite;
z-index: -1;
}
@keyframes bg-pan {
0% {
background-position: 0% 0%;
}
100% {
background-position: 100% 100%;
}
}
main {
padding: 2rem;
}
.card {
background: var(--card-bg-color);
border: 1px solid var(--card-border-color);
border-radius: 16px;
padding: 2.5rem 2rem;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
box-shadow: 0 12px 36px rgba(0, 0, 0, 0.25);
}
h1 {
font-size: clamp(2.2rem, 3vw + 1.2rem, 3.2rem);
font-weight: 700;
margin: 0 0 1.2rem;
letter-spacing: -0.02em;
}
p {
margin: 0.5rem 0;
font-size: 1.1rem;
opacity: 0.92;
}
.loader {
margin: 1.5rem auto;
width: 56px;
height: 56px;
border: 4px solid rgba(255, 255, 255, 0.25);
border-top-color: #fff;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.runtime code {
background: rgba(0, 0, 0, 0.25);
padding: 0.15rem 0.45rem;
border-radius: 4px;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
footer {
position: absolute;
bottom: 1rem;
width: 100%;
text-align: center;
font-size: 0.85rem;
opacity: 0.75;
}
</style>
{% endblock %}
{% block content %} {% block content %}
<main> <div class="container mt-5">
<div class="card"> <div class="text-center mb-5">
<h1>Analyzing your requirements and generating your app…</h1> <h1 class="display-4">Public Library Catalog</h1>
<div class="loader" role="status" aria-live="polite" aria-label="Applying initial changes"> <p class="lead">Browse our collection of available books.</p>
<span class="sr-only">Loading…</span>
</div> </div>
<p class="hint">AppWizzy AI is collecting your requirements and applying the first changes.</p>
<p class="hint">This page will refresh automatically as the plan is implemented.</p> <div class="table-responsive">
<p class="runtime"> <table class="table table-striped table-hover">
Runtime: Django <code>{{ django_version }}</code> · Python <code>{{ python_version }}</code> <thead class="table-dark">
— UTC <code>{{ current_time|date:"Y-m-d H:i:s" }}</code> <tr>
</p> <th scope="col">Title</th>
</div> <th scope="col">Author</th>
</main> <th scope="col">ISBN</th>
<footer> <th scope="col">Available Copies</th>
Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) </tr>
</footer> </thead>
{% endblock %} <tbody>
{% for book in books %}
<tr>
<td>{{ book.title }}</td>
<td>{{ book.author }}</td>
<td>{{ book.isbn }}</td>
<td>{{ book.available_copies }} / {{ book.total_copies }}</td>
</tr>
{% empty %}
<tr>
<td colspan="4" class="text-center">No books available at the moment.</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View File

@ -1,7 +1,7 @@
from django.urls import path from django.urls import path
from .views import home from .views import index
urlpatterns = [ urlpatterns = [
path("", home, name="home"), path("", index, name="index"),
] ]

View File

@ -1,25 +1,10 @@
import os
import platform
from django import get_version as django_version
from django.shortcuts import render from django.shortcuts import render
from django.utils import timezone from .models import Book
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()
def index(request):
books = Book.objects.all()
context = { context = {
"project_name": "New Style", 'books': books,
"agent_brand": agent_brand, 'project_name': 'Library',
"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", ""),
} }
return render(request, "core/index.html", context) return render(request, 'core/index.html', context)