Contact form subject options now match the five service lines on the site:
New Project Inquiry, Mesh Networking, Managed Services, Structured
Cabling, Access Control, IP Camera Systems, Technical Support, Other.
Removed the old ISP-generic options (billing, coverage, new-service).
Updated $subject_labels in admin-inbox.php to match.
README updates:
- ADMIN_PASS added to web container env vars table and env vars section
- Project structure updated to include db.php and admin-inbox.php
- Milestone 1 contact form item updated to note MySQL storage
- Milestone 4 marks contact DB storage and staff inbox as complete;
email notification remains as the next open item
https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
- contact.php now inserts submissions into MySQL via PDO prepared
statements; raw values stored (htmlspecialchars moved to output only)
- www/includes/db.php: shared PDO helper with auto-migration that adds
the is_read column to existing deployments without a full DB reset
- docker/mysql/init.sql: added is_read TINYINT column to contacts table
for fresh deploys
- www/pages/admin-inbox.php: self-contained staff inbox at /staff-portal
with session-based password login, per-message mark-as-read, and
mark-all-read; unread count shown in browser tab title
- index.php: routes /staff-portal before public header/footer so the
admin page is fully standalone
- docker-compose.yml: ADMIN_PASS env var wired to web container
Set ADMIN_PASS in .env (gitignored) before deploying.
If the DB volume already exists, the auto-migration in db.php will
add the is_read column automatically on first request.
https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
CSS file changes were not rendering - likely due to Apache mod_expires
caching style.css for 1 week in the browser. Two fixes:
- Cache-bust the stylesheet link (?v=4) so the browser is forced to
fetch a fresh copy of the CSS file
- Move the dark card and heading size fix to inline styles on the hero
div directly in home.php, so the change lives in the PHP output and
is not subject to any CSS caching layer
https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
Previous card attempt used padding: 3rem 3.5rem which overrode the
container's padding-inline and shrank the text area from 652px to 568px,
making the heading clip worse and the card look too narrow to read.
Two fixes:
- max-width: 780px + padding: 3rem 2.5rem gives 730px text area,
comfortably containing the heading at any viewport size
- heading clamp changed from (2.4rem, 6vw, 4rem) to (2.2rem, 4.5vw, 3.25rem)
so the max rendered size stays well within the card width
https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
The hero gradient (navy→blue→teal) used the same colors as the gradient
text (teal→blue), making the heading dissolve into the background.
Two fixes:
- hero__content now has a dark semi-transparent card (rgba 72% opacity)
with blur backdrop, keeping the animated gradient background visible
around it while text sits on a dark, readable surface
- --grad-text changed from teal→blue to orange→teal so the gradient
heading contrasts against the card and visually pops
https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
Remove all ISP-subscriber framing (coverage areas, residential plans,
500+ customers, backbone capacity) and replace with accurate positioning
as a custom networking and managed services company.
Key changes:
- Hero: new headline and CTA focused on custom solutions
- Stats bar: Deployments, Uptime SLA, 24/7 support, response time
- Services cards: Mesh Networking, Managed Services, Access Control, IP Cameras
- Why section: founding story (tornado relief, tent deployment, charity event)
- CTA band: contact-focused instead of address lookup form
- Services page: expanded to 5 service areas with real content cards;
removed Residential/Business internet sections
- About page: full founding story, mission statement, 4-step approach
- Portfolio page: repurposed from Coverage Map; shows deployment types
including the disaster relief origin story
- Nav: Coverage → Portfolio, Get Connected → Request a Quote
- Footer: updated service links and tagline
- Router: coverage route renamed to portfolio
https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd