Merge pull request #6 from jasonMPM/claude/isp-website-docker-EB8pB

Claude/isp website docker eb8p b
This commit is contained in:
jasonMPM
2026-02-28 20:10:21 -06:00
committed by GitHub
8 changed files with 327 additions and 121 deletions

View File

@@ -41,12 +41,14 @@ Each container is deployed individually through the Unraid Container Builder and
---
### Step 1 Clone the repository onto your Unraid share
### Step 1 Clone the repository onto your Unraid cache drive
> **Unraid volume mount requirement:** Docker containers on Unraid **cannot reliably access `/mnt/user/` paths**. `/mnt/user` is a FUSE filesystem that is not available inside the Docker container namespace — the container sees an empty directory, Apache finds no files, and returns a 403 Forbidden. Always clone and mount from the **cache drive path directly** (`/mnt/cache/appdata/`).
Open an Unraid terminal (**Tools → Terminal** or SSH in):
```bash
cd /mnt/user/appdata
cd /mnt/cache/appdata
git clone https://github.com/jasonMPM/alwisp.git
cd alwisp
```
@@ -58,7 +60,7 @@ cd alwisp
The web container uses a custom image built from the included `Dockerfile`. Build it once from the terminal — Unraid's Container Builder will reference it by name.
```bash
cd /mnt/user/appdata/alwisp
cd /mnt/cache/appdata/alwisp
docker build -t alwisp_web:latest .
```
@@ -93,8 +95,8 @@ docker build -t alwisp_web:latest .
| Container Path | Host Path | Access Mode |
|---|---|---|
| `/var/lib/mysql` | `/mnt/user/appdata/alwisp/db_data` | Read/Write |
| `/docker-entrypoint-initdb.d/init.sql` | `/mnt/user/appdata/alwisp/docker/mysql/init.sql` | Read Only |
| `/var/lib/mysql` | `/mnt/cache/appdata/alwisp/db_data` | Read/Write |
| `/docker-entrypoint-initdb.d/init.sql` | `/mnt/cache/appdata/alwisp/docker/mysql/init.sql` | Read Only |
6. Click **Apply** — Unraid pulls the MySQL image and starts the container
@@ -130,8 +132,8 @@ docker build -t alwisp_web:latest .
| Container Path | Host Path | Access Mode |
|---|---|---|
| `/var/www/html` | `/mnt/user/appdata/alwisp/www` | Read/Write |
| `/etc/apache2/ssl` | `/mnt/user/appdata/alwisp/docker/apache/ssl` | Read Only |
| `/var/www/html` | `/mnt/cache/appdata/alwisp/www` | Read/Write |
| `/etc/apache2/ssl` | `/mnt/cache/appdata/alwisp/docker/apache/ssl` | Read Only |
> The Apache vhost config (`000-default.conf`) is baked directly into the image via `COPY` in the Dockerfile — no bind mount needed. To change it, edit the file in `docker/apache/` and rebuild the image.
@@ -192,7 +194,7 @@ Because the web container has a dedicated LAN IP, reverse proxy setup is straigh
1. Add a **Proxy Host** in Nginx Proxy Manager
2. Forward hostname/IP: `192.168.1.100` (the web container's br0 IP), port `80`
3. Enable SSL via Let's Encrypt
4. Drop your certificate files into `/mnt/user/appdata/alwisp/docker/apache/ssl/` — they are already mounted into the container
4. Drop your certificate files into `/mnt/cache/appdata/alwisp/docker/apache/ssl/` — they are already mounted into the container
---
@@ -200,7 +202,7 @@ Because the web container has a dedicated LAN IP, reverse proxy setup is straigh
| Setting | Value |
|---|---|
| Share path | `/mnt/user/appdata/alwisp` |
| Share path | `/mnt/cache/appdata/alwisp` |
| Use cache | Yes (cache-only or prefer) |
| Exclude from backup | No — include in Appdata backup |
@@ -330,15 +332,15 @@ alwisp/
## Updating the Site
Because `/mnt/user/appdata/alwisp/www` is bind-mounted directly into `alwisp_web`, **PHP and asset changes take effect immediately** — no rebuild or restart needed.
Because `/mnt/cache/appdata/alwisp/www` is bind-mounted directly into `alwisp_web`, **PHP and asset changes take effect immediately** — no rebuild or restart needed.
```bash
# Pull latest code
cd /mnt/user/appdata/alwisp
cd /mnt/cache/appdata/alwisp
git pull origin main
# If the Dockerfile changed, rebuild the image and restart the web container:
docker build -t alwisp_web:latest /mnt/user/appdata/alwisp
docker build -t alwisp_web:latest /mnt/cache/appdata/alwisp
docker restart alwisp_web
```
@@ -350,7 +352,7 @@ The database container (`alwisp_db`) is completely independent — updates to th
```bash
# Rebuild the web image after Dockerfile changes
docker build -t alwisp_web:latest /mnt/user/appdata/alwisp
docker build -t alwisp_web:latest /mnt/cache/appdata/alwisp
# Start / stop individual containers
docker start alwisp_web
@@ -371,7 +373,7 @@ docker exec -it alwisp_web bash
docker exec -it alwisp_db mysql -u alwisp_user -p alwisp
# Manual database backup
docker exec alwisp_db mysqldump -u alwisp_user -p alwisp > /mnt/user/appdata/alwisp/backups/backup_$(date +%F).sql
docker exec alwisp_db mysqldump -u alwisp_user -p alwisp > /mnt/cache/appdata/alwisp/backups/backup_$(date +%F).sql
```
---

View File

@@ -8,16 +8,17 @@
<a href="/" class="nav__logo" aria-label="ALWISP Home">
<span class="nav__logo-text">AL<span class="accent">WISP</span></span>
</a>
<p class="footer__tagline">Connecting Alabama,<br>one node at a time.</p>
<p class="footer__tagline">Custom networks.<br>Real solutions.</p>
</div>
<div class="footer__links">
<h4 class="footer__heading">Services</h4>
<ul>
<li><a href="/services#residential">Residential Internet</a></li>
<li><a href="/services#business">Business Internet</a></li>
<li><a href="/services#infrastructure">Network Infrastructure</a></li>
<li><a href="/services#managed">Managed Networking</a></li>
<li><a href="/services#mesh">Custom Mesh Networking</a></li>
<li><a href="/services#managed">Managed Network Services</a></li>
<li><a href="/services#cabling">Structured Cabling</a></li>
<li><a href="/services#access">Access Control</a></li>
<li><a href="/services#cameras">IP Camera & Surveillance</a></li>
</ul>
</div>
@@ -25,7 +26,7 @@
<h4 class="footer__heading">Company</h4>
<ul>
<li><a href="/about">About Us</a></li>
<li><a href="/coverage">Coverage Map</a></li>
<li><a href="/portfolio">Portfolio</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</div>
@@ -44,7 +45,7 @@
</div>
<div class="footer__bottom container">
<p>&copy; <?= date('Y') ?> Alabama WISP Mesh Network Solutions. All rights reserved.</p>
<p>&copy; <?= date('Y') ?> ALWISP Custom Networking Solutions. All rights reserved.</p>
</div>
</footer>

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Alabama WISP Mesh Network Solutions. High-speed wireless internet and enterprise networking for rural and underserved communities.">
<meta name="description" content="ALWISP Custom networking solutions for Alabama businesses. Mesh network deployments, managed services, structured cabling, access control, and IP camera systems.">
<title>ALWISP Mesh Network Solutions</title>
<!-- Preconnect for performance -->
@@ -35,9 +35,9 @@
<ul class="nav__menu" id="nav-menu" role="menubar">
<li role="none"><a href="/" class="nav__link" role="menuitem">Home</a></li>
<li role="none"><a href="/services" class="nav__link" role="menuitem">Services</a></li>
<li role="none"><a href="/coverage" class="nav__link" role="menuitem">Coverage</a></li>
<li role="none"><a href="/portfolio" class="nav__link" role="menuitem">Portfolio</a></li>
<li role="none"><a href="/about" class="nav__link" role="menuitem">About</a></li>
<li role="none"><a href="/contact" class="nav__link nav__link--cta" role="menuitem">Get Connected</a></li>
<li role="none"><a href="/contact" class="nav__link nav__link--cta" role="menuitem">Request a Quote</a></li>
</ul>
</nav>
</header>

View File

@@ -6,7 +6,7 @@ $path = trim($_GET['path'] ?? '', '/');
$pages = [
'' => 'pages/home.php',
'services' => 'pages/services.php',
'coverage' => 'pages/coverage.php',
'portfolio' => 'pages/coverage.php',
'about' => 'pages/about.php',
'contact' => 'pages/contact.php',
];

View File

@@ -1,14 +1,69 @@
<!-- ABOUT PAGE placeholder -->
<!-- ABOUT PAGE -->
<section class="section page-hero">
<div class="container">
<span class="section__eyebrow">Who We Are</span>
<h1 class="section__heading">About ALWISP</h1>
<p class="section__sub">Alabama's locally-owned wireless internet and mesh networking company.</p>
<p class="section__sub">A networking solutions company built on the belief that every environment deserves a network that actually works.</p>
</div>
</section>
<section class="section">
<div class="container" style="max-width:800px">
<div class="placeholder-block">Company story, team bios, and mission statement will go here.</div>
<div class="section__header" style="text-align:left; margin-bottom:2rem">
<span class="section__eyebrow">Our Story</span>
<h2 class="section__heading">Born in the Field</h2>
</div>
<p style="margin-bottom:1.25rem">ALWISP wasn't started in a boardroom. It was started under a tent.</p>
<p style="margin-bottom:1.25rem">After a tornado tore through an Alabama community, the area was left without reliable internet at exactly the moment it was needed most — when charity workers, relief organizations, and volunteers were mobilizing to help. No connectivity meant no coordination.</p>
<p style="margin-bottom:1.25rem">We stepped in. We sourced equipment, designed a deployment on the fly, set it up outdoors in field conditions, and built out access nodes so that relief workers and residents could get online. The network went up fast because it had to.</p>
<p style="margin-bottom:1.25rem">That experience became the foundation of how we think about every project: assess the environment, engineer a real solution, deploy it fast, and make sure it works when it counts. No templates. No assumptions. No cutting corners on the infrastructure people are going to depend on.</p>
<p>Today ALWISP designs and deploys custom mesh networks, managed services, structured cabling, access control, and IP camera systems for clients across Alabama — bringing the same field-tested mentality to every job, whether it's a small office or a multi-building campus.</p>
</div>
</section>
<section class="section section--alt">
<div class="container" style="max-width:800px">
<div class="section__header" style="text-align:left; margin-bottom:2rem">
<span class="section__eyebrow">What Drives Us</span>
<h2 class="section__heading">Our Mission</h2>
</div>
<p style="margin-bottom:1.25rem">We exist to build networks that solve real problems. Not to sell subscriptions, not to lock clients into contracts, and not to hand off a half-finished system with a manual and a phone number.</p>
<p style="margin-bottom:1.25rem">Every engagement starts with listening understanding the environment, the workflows that depend on connectivity, and the constraints we're working within. From there we design, install, and manage a solution that fits.</p>
<p>We're a small, local team. Our clients have our direct line. When something needs attention, we respond not a call center, not a ticket queue.</p>
</div>
</section>
<section class="section">
<div class="container" style="max-width:800px">
<div class="section__header" style="text-align:left; margin-bottom:2rem">
<span class="section__eyebrow">How We Work</span>
<h2 class="section__heading">Our Approach</h2>
</div>
<div class="cards" style="grid-template-columns: repeat(auto-fit, minmax(220px, 1fr))">
<div class="card">
<h3 class="card__title">1. Assess</h3>
<p class="card__body">We start with a site survey and a conversation. We want to understand your environment, your existing infrastructure, and what success looks like for your organization.</p>
</div>
<div class="card">
<h3 class="card__title">2. Design</h3>
<p class="card__body">We build a custom solution for your situation equipment selection, topology, IP schema, and physical routing before any installation begins.</p>
</div>
<div class="card">
<h3 class="card__title">3. Deploy</h3>
<p class="card__body">Our team handles the full installation. Cabling, mounting, configuration, and testing everything documented as we go.</p>
</div>
<div class="card">
<h3 class="card__title">4. Manage</h3>
<p class="card__body">We stay on. Monitoring, maintenance, updates, and support keep your network running at full capacity long after the install is done.</p>
</div>
</div>
</div>
</section>
<section class="section cta-band" aria-labelledby="about-cta">
<div class="container cta-band__content">
<h2 id="about-cta" class="cta-band__heading">Ready to work together?</h2>
<p class="cta-band__sub">Tell us about your project and we'll get back to you with a straight answer.</p>
<a href="/contact" class="btn btn--primary">Get in Touch</a>
</div>
</section>

View File

@@ -1,17 +1,77 @@
<!-- COVERAGE PAGE placeholder -->
<!-- PORTFOLIO PAGE -->
<section class="section page-hero">
<div class="container">
<span class="section__eyebrow">Service Area</span>
<h1 class="section__heading">Coverage Map</h1>
<p class="section__sub">See where ALWISP service is available.</p>
<span class="section__eyebrow">Our Work</span>
<h1 class="section__heading">Project Portfolio</h1>
<p class="section__sub">A sample of the environments we've designed and deployed for — every one a custom solution.</p>
</div>
</section>
<section class="section">
<div class="container">
<div class="placeholder-block" style="min-height:420px; display:flex; align-items:center; justify-content:center;">
Interactive coverage map will be embedded here.<br>
(Leaflet.js / Google Maps integration roadmap item)
<div class="section__header">
<span class="section__eyebrow">Deployment Types</span>
<h2 class="section__heading">What We've Built</h2>
<p class="section__sub">We work across industries and environments. Here's a cross-section of the project types in our portfolio.</p>
</div>
<div class="cards">
<div class="card">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
</div>
<h3 class="card__title">Disaster Relief Networking</h3>
<p class="card__body">Our first deployment — a wireless mesh network stood up in field conditions after a tornado to support charity relief workers and restore internet access for the surrounding community.</p>
</div>
<div class="card">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 7V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2"/></svg>
</div>
<h3 class="card__title">Commercial Facilities</h3>
<p class="card__body">Managed wireless and wired networks for offices, retail locations, and light industrial facilities — including access control and IP camera integration.</p>
</div>
<div class="card">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3h18v18H3z"/><path d="M3 9h18M3 15h18M9 3v18M15 3v18"/></svg>
</div>
<h3 class="card__title">Event & Temporary Networks</h3>
<p class="card__body">Fast-deploy mesh networks for outdoor events, festivals, temporary operations, and pop-up facilities — up and running on your schedule.</p>
</div>
<div class="card">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>
</div>
<h3 class="card__title">Multi-Site Enterprise</h3>
<p class="card__body">Unified managed networks spanning multiple locations — consistent policy, centralized monitoring, and a single point of contact for support across all sites.</p>
</div>
<div class="card">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>
</div>
<h3 class="card__title">Surveillance Deployments</h3>
<p class="card__body">IP camera systems designed from the ground up — camera placement, cabling, NVR setup, and remote access — for warehouses, parking areas, and multi-building campuses.</p>
</div>
<div class="card">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
</div>
<h3 class="card__title">Access Control Buildouts</h3>
<p class="card__body">From a single entry point to a full multi-door system with credential management and audit logging — retrofit or new construction, indoors or out.</p>
</div>
</div>
</div>
</section>
<section class="section cta-band" aria-labelledby="portfolio-cta">
<div class="container cta-band__content">
<h2 id="portfolio-cta" class="cta-band__heading">Working on something similar?</h2>
<p class="cta-band__sub">Tell us about it. We'll give you a straight assessment of what the right solution looks like.</p>
<a href="/contact" class="btn btn--primary">Start a Conversation</a>
</div>
</section>

View File

@@ -6,18 +6,18 @@
<section class="hero" aria-labelledby="hero-heading">
<div class="hero__mesh-bg" aria-hidden="true"></div>
<div class="container hero__content">
<p class="hero__eyebrow">Alabama's Wireless Network Provider</p>
<p class="hero__eyebrow">Custom Networking Solutions</p>
<h1 id="hero-heading" class="hero__heading">
Fast, Reliable Internet<br>
<span class="gradient-text">Built for Alabama</span>
Networks Engineered<br>
<span class="gradient-text">Around Your Needs</span>
</h1>
<p class="hero__sub">
Enterprise-grade mesh networking that reaches where fiber can't.
Residential plans, business solutions, and infrastructure buildouts across Alabama.
We design and deploy custom mesh networks, structured cabling, access control,
and IP camera systems built for your environment and managed by our team.
</p>
<div class="hero__actions">
<a href="/coverage" class="btn btn--primary">Check My Coverage</a>
<a href="/services" class="btn btn--ghost">View Plans</a>
<a href="/contact" class="btn btn--primary">Request a Consultation</a>
<a href="/services" class="btn btn--ghost">Our Services</a>
</div>
</div>
<div class="hero__scroll-hint" aria-hidden="true">
@@ -30,20 +30,20 @@
<section class="stats-bar" aria-label="Quick statistics">
<div class="container stats-bar__grid">
<div class="stat">
<span class="stat__value" data-count="500">0</span><span class="stat__unit">+</span>
<span class="stat__label">Active Subscribers</span>
</div>
<div class="stat">
<span class="stat__value" data-count="15">0</span><span class="stat__unit"> Counties</span>
<span class="stat__label">Coverage Area</span>
<span class="stat__value" data-count="50">0</span><span class="stat__unit">+</span>
<span class="stat__label">Custom Deployments</span>
</div>
<div class="stat">
<span class="stat__value" data-count="99">0</span><span class="stat__unit">%</span>
<span class="stat__label">Uptime SLA</span>
</div>
<div class="stat">
<span class="stat__value" data-count="1">0</span><span class="stat__unit">Gbps</span>
<span class="stat__label">Backbone Capacity</span>
<span class="stat__value" data-count="24">0</span><span class="stat__unit">/7</span>
<span class="stat__label">Monitoring & Support</span>
</div>
<div class="stat">
<span class="stat__value" data-count="4">0</span><span class="stat__unit">hr</span>
<span class="stat__label">Avg. Response Time</span>
</div>
</div>
</section>
@@ -53,49 +53,49 @@
<section class="section services-preview" aria-labelledby="services-heading">
<div class="container">
<div class="section__header">
<span class="section__eyebrow">What We Offer</span>
<h2 id="services-heading" class="section__heading">Connectivity Solutions</h2>
<p class="section__sub">From home internet to full network infrastructure buildouts.</p>
<span class="section__eyebrow">What We Do</span>
<h2 id="services-heading" class="section__heading">End-to-End Network Solutions</h2>
<p class="section__sub">Every project is custom-designed for the environment, the client, and the goal.</p>
</div>
<div class="cards">
<div class="card card--hover">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
</div>
<h3 class="card__title">Residential Internet</h3>
<p class="card__body">High-speed wireless internet for homes and small properties. No contracts, transparent pricing.</p>
<a href="/services#residential" class="card__link">See Plans </a>
</div>
<div class="card card--hover">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 7V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2"/><line x1="12" y1="12" x2="12" y2="16"/><line x1="10" y1="14" x2="14" y2="14"/></svg>
</div>
<h3 class="card__title">Business Internet</h3>
<p class="card__body">Dedicated bandwidth, static IPs, and priority support for businesses of any size.</p>
<a href="/services#business" class="card__link">See Plans </a>
</div>
<div class="card card--hover">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="2"/><circle cx="12" cy="5" r="1"/><circle cx="19" cy="9" r="1"/><circle cx="19" cy="15" r="1"/><circle cx="12" cy="19" r="1"/><circle cx="5" cy="15" r="1"/><circle cx="5" cy="9" r="1"/><path d="M12 7v3m5.2.8-2.5 1.5m2.5 4.7-2.5-1.5M12 17v-3m-5.2-.8 2.5-1.5m-2.5-4.7 2.5 1.5"/></svg>
</div>
<h3 class="card__title">Mesh Infrastructure</h3>
<p class="card__body">Full network design, tower buildouts, and mesh deployments for communities and enterprises.</p>
<a href="/services#infrastructure" class="card__link">Learn More </a>
<h3 class="card__title">Custom Mesh Networking</h3>
<p class="card__body">Outdoor and indoor wireless mesh deployments engineered for your site from temporary event networks to permanent enterprise infrastructure.</p>
<a href="/services#mesh" class="card__link">Learn More </a>
</div>
<div class="card card--hover">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
</div>
<h3 class="card__title">Managed Networking</h3>
<p class="card__body">Ongoing monitoring, maintenance, and support so your network runs itself.</p>
<h3 class="card__title">Managed Network Services</h3>
<p class="card__body">24/7 monitoring, proactive maintenance, and remote support. Your network runs itself while our team watches over it.</p>
<a href="/services#managed" class="card__link">Learn More </a>
</div>
<div class="card card--hover">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
</div>
<h3 class="card__title">Access Control</h3>
<p class="card__body">Custom door access systems key cards, fobs, mobile credentials, and remote management for facilities of any size.</p>
<a href="/services#access" class="card__link">Learn More </a>
</div>
<div class="card card--hover">
<div class="card__icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>
</div>
<h3 class="card__title">IP Camera & Surveillance</h3>
<p class="card__body">End-to-end IP camera design, installation, and NVR configuration with remote viewing and alerts.</p>
<a href="/services#cameras" class="card__link">Learn More </a>
</div>
</div>
</div>
</section>
@@ -106,20 +106,19 @@
<div class="container why__grid">
<div class="why__text">
<span class="section__eyebrow">Why ALWISP</span>
<h2 id="why-heading" class="section__heading">Local Team.<br>Enterprise Tech.</h2>
<p>We're an Alabama company solving Alabama's connectivity gap. We deploy the same equipment used by major carriers without the corporate red tape or out-of-state call centers.</p>
<h2 id="why-heading" class="section__heading">Built From Experience.<br>Driven by Mission.</h2>
<p>ALWISP was born in the field. After a tornado left an Alabama community without internet during disaster relief efforts, we built and deployed custom equipment under tents to restore connectivity for charity workers and residents. That solve-it-anywhere mentality drives every project we take on today.</p>
<ul class="why__list">
<li><span class="why__check" aria-hidden="true"></span> Local 24/7 technical support</li>
<li><span class="why__check" aria-hidden="true"></span> No data caps on most plans</li>
<li><span class="why__check" aria-hidden="true"></span> Month-to-month options available</li>
<li><span class="why__check" aria-hidden="true"></span> Self-healing mesh redundancy</li>
<li><span class="why__check" aria-hidden="true"></span> Transparent pricing no hidden fees</li>
<li><span class="why__check" aria-hidden="true"></span> Rapid deployment operational in hours when it matters</li>
<li><span class="why__check" aria-hidden="true"></span> Custom-engineered for every environment</li>
<li><span class="why__check" aria-hidden="true"></span> End-to-end management from design through support</li>
<li><span class="why__check" aria-hidden="true"></span> Local team with on-site capability</li>
<li><span class="why__check" aria-hidden="true"></span> No cookie-cutter solutions built around your needs</li>
</ul>
<a href="/about" class="btn btn--primary" style="margin-top:1.5rem">About Us</a>
<a href="/about" class="btn btn--primary" style="margin-top:1.5rem">Our Story</a>
</div>
<div class="why__visual" aria-hidden="true">
<div class="mesh-diagram">
<!-- SVG mesh nodes decorative -->
<svg viewBox="0 0 400 340" xmlns="http://www.w3.org/2000/svg" class="mesh-svg">
<defs>
<linearGradient id="lineGrad" x1="0%" y1="0%" x2="100%" y2="100%">
@@ -127,7 +126,6 @@
<stop offset="100%" stop-color="#1565c0" stop-opacity="0.3"/>
</linearGradient>
</defs>
<!-- Edges -->
<g stroke="url(#lineGrad)" stroke-width="1.5" fill="none">
<line x1="200" y1="60" x2="320" y2="140"/>
<line x1="200" y1="60" x2="80" y2="140"/>
@@ -141,7 +139,6 @@
<line x1="200" y1="200" x2="280" y2="280"/>
<line x1="200" y1="200" x2="120" y2="280"/>
</g>
<!-- Nodes -->
<g>
<circle cx="200" cy="60" r="12" fill="#f57c00" opacity="0.9" class="mesh-node mesh-node--tower"/>
<circle cx="320" cy="140" r="9" fill="#00bcd4" opacity="0.85" class="mesh-node"/>
@@ -157,14 +154,11 @@
</section>
<!-- COVERAGE CTA -->
<!-- CTA BAND -->
<section class="section cta-band" aria-labelledby="cta-heading">
<div class="container cta-band__content">
<h2 id="cta-heading" class="cta-band__heading">Are you in our coverage area?</h2>
<p class="cta-band__sub">Enter your address to see available plans in your area.</p>
<form class="cta-band__form" action="/coverage" method="get" role="search" aria-label="Coverage check">
<input type="text" name="address" placeholder="Enter your address…" class="cta-band__input" aria-label="Street address" required>
<button type="submit" class="btn btn--primary">Check Now</button>
</form>
<h2 id="cta-heading" class="cta-band__heading">Have a project in mind?</h2>
<p class="cta-band__sub">Whether it's a mesh network for an event, a managed network for your facility, or a complete surveillance deployment — let's talk through it.</p>
<a href="/contact" class="btn btn--primary">Start a Conversation</a>
</div>
</section>

View File

@@ -1,45 +1,139 @@
<!-- SERVICES PAGE placeholder -->
<!-- SERVICES PAGE -->
<section class="section page-hero page-hero--services">
<div class="container">
<span class="section__eyebrow">What We Offer</span>
<span class="section__eyebrow">What We Do</span>
<h1 class="section__heading">Our Services</h1>
<p class="section__sub">Flexible plans for every need from a farmhouse to a full enterprise campus.</p>
<p class="section__sub">Custom-engineered solutions for every environment from a single facility to a multi-site enterprise deployment.</p>
</div>
</section>
<section class="section" id="residential">
<section class="section" id="mesh">
<div class="container">
<div class="section__header">
<h2 class="section__heading">Residential Plans</h2>
<p class="section__sub">Content coming soon plan tiers will be displayed here.</p>
<h2 class="section__heading">Custom Mesh Networking</h2>
<p class="section__sub">Wireless infrastructure built around your site, not a template.</p>
</div>
<div class="placeholder-block">Plan cards will go here.</div>
<div class="cards">
<div class="card">
<h3 class="card__title">Site Survey & Design</h3>
<p class="card__body">We assess your physical environment, interference sources, and coverage requirements before a single piece of equipment is ordered. Every deployment starts with a plan.</p>
</div>
</section>
<section class="section section--alt" id="business">
<div class="container">
<div class="section__header">
<h2 class="section__heading">Business Plans</h2>
<div class="card">
<h3 class="card__title">Outdoor Mesh Deployments</h3>
<p class="card__body">Weatherproof access nodes, directional links, and self-healing mesh topologies for campuses, event venues, industrial yards, and outdoor facilities.</p>
</div>
<div class="placeholder-block">Business plan cards will go here.</div>
<div class="card">
<h3 class="card__title">Rapid Event Networking</h3>
<p class="card__body">Need a network up in hours? We specialize in fast-turnaround deployments for events, emergency response, and temporary facilities operational before your team hits the ground.</p>
</div>
<div class="card">
<h3 class="card__title">Indoor Enterprise Wi-Fi</h3>
<p class="card__body">High-density indoor wireless for offices, warehouses, medical facilities, and multi-floor buildings. VLAN segmentation, guest isolation, and centralized management included.</p>
</div>
</section>
<section class="section" id="infrastructure">
<div class="container">
<div class="section__header">
<h2 class="section__heading">Network Infrastructure</h2>
</div>
<div class="placeholder-block">Infrastructure service details will go here.</div>
</div>
</section>
<section class="section section--alt" id="managed">
<div class="container">
<div class="section__header">
<h2 class="section__heading">Managed Networking</h2>
<h2 class="section__heading">Managed Network Services</h2>
<p class="section__sub">We don't just build it and leave. We keep it running.</p>
</div>
<div class="cards">
<div class="card">
<h3 class="card__title">24/7 Monitoring</h3>
<p class="card__body">Continuous monitoring of every node, link, and device on your network. Issues are detected and triaged before your team notices anything wrong.</p>
</div>
<div class="card">
<h3 class="card__title">Proactive Maintenance</h3>
<p class="card__body">Firmware updates, configuration reviews, and performance tuning on a scheduled basis so your network stays current and secure.</p>
</div>
<div class="card">
<h3 class="card__title">Remote & On-Site Support</h3>
<p class="card__body">Most issues are resolved remotely within our SLA window. When hands-on work is needed, our local team dispatches directly to your site.</p>
</div>
<div class="card">
<h3 class="card__title">Network Documentation</h3>
<p class="card__body">Full topology maps, IP schema, and configuration records maintained and updated with every change. You always know what's on your network.</p>
</div>
</div>
<div class="placeholder-block">Managed service details will go here.</div>
</div>
</section>
<section class="section" id="cabling">
<div class="container">
<div class="section__header">
<h2 class="section__heading">Structured Cabling & Wired Networks</h2>
<p class="section__sub">The physical foundation every reliable network is built on.</p>
</div>
<div class="cards">
<div class="card">
<h3 class="card__title">Cat6 / Cat6A Runs</h3>
<p class="card__body">Clean, tested, and documented copper cabling for workstations, APs, cameras, and access control panels run to spec and labeled for longevity.</p>
</div>
<div class="card">
<h3 class="card__title">Fiber Optic Backbones</h3>
<p class="card__body">Single-mode and multi-mode fiber for building-to-building interconnects and high-bandwidth backbone runs where copper falls short.</p>
</div>
<div class="card">
<h3 class="card__title">IDF / MDF Buildouts</h3>
<p class="card__body">Patch panels, structured racks, cable management, and power distribution organized infrastructure that's easy to maintain and expand.</p>
</div>
</div>
</div>
</section>
<section class="section section--alt" id="access">
<div class="container">
<div class="section__header">
<h2 class="section__heading">Access Control</h2>
<p class="section__sub">Know who enters your facility and when.</p>
</div>
<div class="cards">
<div class="card">
<h3 class="card__title">Door Controllers & Readers</h3>
<p class="card__body">IP-based door controllers paired with key card, key fob, or mobile credential readers. Works with new construction and retrofit installations.</p>
</div>
<div class="card">
<h3 class="card__title">Credential Management</h3>
<p class="card__body">Centralized user management — add, remove, or restrict access for any credential in real time without being on-site.</p>
</div>
<div class="card">
<h3 class="card__title">Audit Logs & Alerts</h3>
<p class="card__body">Full entry/exit logging with time-stamped records and configurable alerts for after-hours access or forced-entry events.</p>
</div>
</div>
</div>
</section>
<section class="section" id="cameras">
<div class="container">
<div class="section__header">
<h2 class="section__heading">IP Camera & Surveillance</h2>
<p class="section__sub">Purpose-built camera systems designed for your facility, not off the shelf.</p>
</div>
<div class="cards">
<div class="card">
<h3 class="card__title">Camera Placement Design</h3>
<p class="card__body">Coverage planning that eliminates blind spots — we map every camera angle before installation to ensure complete visibility of the areas that matter.</p>
</div>
<div class="card">
<h3 class="card__title">NVR / DVR Configuration</h3>
<p class="card__body">Network video recorder setup with appropriate retention policies, motion triggers, and scheduled recording. Local storage or cloud backup options available.</p>
</div>
<div class="card">
<h3 class="card__title">Remote Viewing</h3>
<p class="card__body">Secure remote access to your camera feeds from any device — smartphone, tablet, or desktop — with user-level access controls.</p>
</div>
</div>
</div>
</section>
<section class="section cta-band" aria-labelledby="services-cta">
<div class="container cta-band__content">
<h2 id="services-cta" class="cta-band__heading">Not sure what you need?</h2>
<p class="cta-band__sub">Describe your situation and we'll put together a solution. No obligation, no sales pitch just a straight conversation about what makes sense.</p>
<a href="/contact" class="btn btn--primary">Talk to Us</a>
</div>
</section>