- Docker Compose orchestrating PHP 8.2/Apache web container and MySQL 8.0 - Dockerfile with GD, PDO, MySQLi extensions and security hardening - Apache vhost with mod_rewrite, deflate, expires, and security headers - PHP config with OPcache enabled and display_errors off - MySQL init schema (contacts, coverage_zones tables) - Front-controller PHP router (index.php → pages/) - Responsive homepage: hero, stats bar, services cards, why section, coverage CTA - Stub pages: services, coverage, about, contact (with working form skeleton), 404 - CSS design system using brand palette from logo (navy #0d1b3e → teal #00bcd4 + orange #f57c00 accents) - JS: nav scroll/mobile toggle, IntersectionObserver counter animation, scroll reveal https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
24 lines
836 B
SQL
24 lines
836 B
SQL
-- ALWISP Database Schema (skeleton)
|
|
CREATE DATABASE IF NOT EXISTS `alwisp` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
USE `alwisp`;
|
|
|
|
-- Contact form submissions
|
|
CREATE TABLE IF NOT EXISTS `contacts` (
|
|
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
`name` VARCHAR(120) NOT NULL,
|
|
`email` VARCHAR(255) NOT NULL,
|
|
`phone` VARCHAR(30),
|
|
`subject` VARCHAR(255),
|
|
`message` TEXT NOT NULL,
|
|
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB;
|
|
|
|
-- Service availability zones (placeholder)
|
|
CREATE TABLE IF NOT EXISTS `coverage_zones` (
|
|
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
`zone_name` VARCHAR(120) NOT NULL,
|
|
`description` TEXT,
|
|
`active` TINYINT(1) DEFAULT 1,
|
|
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB;
|