diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392..9b9ba49 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000..906cdad Binary files /dev/null and b/core/__pycache__/forms.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640..c3d3b31 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..b80d713 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..c6e7dd2 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin +from .models import Booking -# Register your models here. +@admin.register(Booking) +class BookingAdmin(admin.ModelAdmin): + list_display = ('name', 'email', 'company', 'created_at') + list_filter = ('created_at',) + search_fields = ('name', 'email', 'company', 'message') + readonly_fields = ('created_at',) \ No newline at end of file diff --git a/core/forms.py b/core/forms.py new file mode 100644 index 0000000..654fd9d --- /dev/null +++ b/core/forms.py @@ -0,0 +1,13 @@ +from django import forms +from .models import Booking + +class BookingForm(forms.ModelForm): + class Meta: + model = Booking + fields = ['name', 'email', 'company', 'message'] + widgets = { + 'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Your Name'}), + 'email': forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'Your Email'}), + 'company': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Company Name (Optional)'}), + 'message': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'How can we help you?', 'rows': 4}), + } diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..9900de9 --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2.7 on 2026-02-13 20:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Booking', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('email', models.EmailField(max_length=254)), + ('company', models.CharField(blank=True, max_length=255)), + ('message', models.TextField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ], + options={ + 'ordering': ['-created_at'], + }, + ), + ] 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..bd6a985 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..289a74c 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,14 @@ from django.db import models -# Create your models here. +class Booking(models.Model): + name = models.CharField(max_length=255) + email = models.EmailField() + company = models.CharField(max_length=255, blank=True) + message = models.TextField() + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"Booking from {self.name} ({self.company})" + + class Meta: + ordering = ['-created_at'] \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 1e7e5fb..2151669 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,25 +1,72 @@ +{% load static %} - - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}Fin Build | Modern Web Design for Businesses{% endblock %} + + + + + + + + + + + + + + {% block extra_head %}{% endblock %} - - {% block content %}{% endblock %} - + - +
+ {% if messages %} +
+ {% for message in messages %} + + {% endfor %} +
+ {% endif %} + + {% block content %}{% endblock %} +
+ + + + + + {% block extra_js %}{% endblock %} + + \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..2f3f4b6 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,153 @@ -{% extends "base.html" %} - -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% extends 'base.html' %} +{% load static %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… + +
+
+
+
+

Websites Built for Business Growth

+

We create modern, clean, and professional websites that help business owners build trust and attract more clients.

+ +
+
+ +
+
+ Professional. Clean. Confident. +
+
+
-

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 + + + +
+
+
+

Our Services

+
+
+
+
+
+
+

Custom Web Design

+

Tailor-made websites designed to reflect your brand's unique identity and professional values.

+
+
+
+
+
+

Mobile Optimization

+

Ensuring your business looks great on every device—from desktops to smartphones.

+
+
+
+
+
+

Performance & Speed

+

Fast-loading pages designed to keep your visitors engaged and improve search rankings.

+
+
+
+
+
+ + +
+
+
+

How It Works

+
+
+
+
+
01
+

Consultation

+

We discuss your business goals and target audience to understand your needs.

+
+
+
02
+

Design & Build

+

Our team crafts a professional website tailored to your business requirements.

+
+
+
03
+

Launch

+

Your new professional website goes live, ready to serve your customers.

+
+
+
+
+ + +
+
+
+

Featured Work

+
+
+
+
+
+
+ Law Firm Website +
+
+

Apex Legal Partners

+

Clean, corporate, and trustworthy design.

+
+
+
+
+
+
+ Medical Clinic Website +
+
+

Green Valley Health

+

Patient-focused and easy to navigate.

+
+
+
+
+
+
+ + +
+
+
+
+
+
+

Book Your Consultation

+

Ready to elevate your business? Let's talk.

+
+
+ {% csrf_token %} +
+ {{ form.name }} +
+
+ {{ form.email }} +
+
+ {{ form.company }} +
+
+ {{ form.message }} +
+ +
+
+
+
+
+
+{% endblock %} diff --git a/core/views.py b/core/views.py index c9aed12..099df8b 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,18 @@ -import os -import platform - -from django import get_version as django_version -from django.shortcuts import render -from django.utils import timezone - +from django.shortcuts import render, redirect +from django.contrib import messages +from .forms import BookingForm 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() + if request.method == 'POST': + form = BookingForm(request.POST) + if form.is_valid(): + form.save() + messages.success(request, 'Thank you! Your booking request has been received. We will contact you shortly.') + return redirect('home') + else: + form = BookingForm() 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", ""), + 'form': form, } - 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 index 925f6ed..c906bec 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,121 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +/* Fin Build Branding */ +:root { + --fb-bg: #0B1F1A; + --fb-section-bg: #0A1512; + --fb-card-bg: #1A1F1D; + --fb-heading: #FFFFFF; + --fb-body: #EDEFEA; + --fb-secondary: #B7BCB9; + --fb-accent: #C6A74E; } + +body { + background-color: var(--fb-bg); + color: var(--fb-body); + font-family: 'Inter', sans-serif; + line-height: 1.6; +} + +h1, h2, h3, h4, h5, h6, .navbar-brand { + font-family: 'Montserrat', sans-serif; + color: var(--fb-heading); + font-weight: 700; +} + +.text-secondary { + color: var(--fb-secondary) !important; +} + +.bg-section { + background-color: var(--fb-section-bg); +} + +.card { + background-color: var(--fb-card-bg); + border: 1px solid rgba(255, 255, 255, 0.05); + transition: transform 0.3s ease; +} + +.card:hover { + transform: translateY(-5px); +} + +.btn-accent { + background-color: var(--fb-accent); + color: var(--fb-bg); + font-weight: 600; + border: none; + padding: 12px 24px; + border-radius: 4px; + transition: opacity 0.3s ease; +} + +.btn-accent:hover { + opacity: 0.9; + color: var(--fb-bg); +} + +.btn-outline-accent { + border: 2px solid var(--fb-accent); + color: var(--fb-accent); + font-weight: 600; + padding: 10px 22px; +} + +.btn-outline-accent:hover { + background-color: var(--fb-accent); + color: var(--fb-bg); +} + +/* Form Styling */ +.form-control { + background-color: #0d1211; + border: 1px solid #2a3331; + color: var(--fb-body); +} + +.form-control:focus { + background-color: #0d1211; + border-color: var(--fb-accent); + color: var(--fb-body); + box-shadow: none; +} + +.form-control::placeholder { + color: var(--fb-secondary); + opacity: 0.5; +} + +/* Navbar Styling */ +.navbar { + background-color: var(--fb-bg); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); +} + +.nav-link { + color: var(--fb-secondary) !important; + font-weight: 500; +} + +.nav-link:hover { + color: var(--fb-accent) !important; +} + +/* Hero Section */ +.hero-section { + padding: 120px 0; + background: radial-gradient(circle at top right, #1a2e28 0%, var(--fb-bg) 60%); +} + +.section-padding { + padding: 100px 0; +} + +.accent-text { + color: var(--fb-accent); +} + +.footer { + border-top: 1px solid rgba(255, 255, 255, 0.05); + padding: 40px 0; +} \ No newline at end of file