First commit
This commit is contained in:
32
.gitignore
vendored
Normal file
32
.gitignore
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
|
||||
# Next.js
|
||||
.next/
|
||||
out/
|
||||
|
||||
# Production builds
|
||||
dist/
|
||||
build/
|
||||
|
||||
# TypeScript
|
||||
tsconfig.tsbuildinfo
|
||||
|
||||
# Environment variables
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
167
DESIGN.md
Normal file
167
DESIGN.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# Bay Area Email Services Design Mockups
|
||||
|
||||
Purpose: visual direction probes for a dedicated marketing landing page for Bay Area Email Services, based on the current project brief, landing page plan, and research handovers.
|
||||
|
||||
## Direction 1: Local Trust
|
||||
|
||||

|
||||
|
||||
Positioning: bright, local, service-led, and human. This direction should make the visitor feel that a real Corpus Christi IT team will handle email setup, migration, and support.
|
||||
|
||||
Carry forward:
|
||||
- Light interface with deep navy, muted coastal blue, and small green status accents.
|
||||
- Strong hero with service, location, price, and assessment CTA visible immediately.
|
||||
- Local service area and phone number as trust elements, not footer afterthoughts.
|
||||
- A simple dashboard-style email panel instead of generic SaaS illustration.
|
||||
|
||||
## Direction 2: Infrastructure Credibility
|
||||
|
||||

|
||||
|
||||
Positioning: serious, technical, and resilient. This direction is strongest if the page should emphasize AWS, Amazon S3 buffering, Amazon SES, DNS authentication, and failover.
|
||||
|
||||
Carry forward:
|
||||
- Dark hero for operational credibility, paired with lighter lower sections for readability.
|
||||
- Mail-flow diagram as the main visual object: inbound, S3 buffer, mailbox delivery, outbound SES, standby failover.
|
||||
- Status labels for SPF, DKIM, DMARC, and continuity.
|
||||
- Careful claims like "designed for continuity" and "helps reduce spam-folder risk."
|
||||
|
||||
## Direction 3: Product Pricing
|
||||
|
||||

|
||||
|
||||
Positioning: productized, transparent, and easy to compare. This direction makes the $5 per inbox offer the main conversion hook.
|
||||
|
||||
Carry forward:
|
||||
- Strict grid and pricing-forward hero.
|
||||
- Inclusion table instead of repeated feature cards.
|
||||
- Fit-based comparison against Google Workspace, Microsoft 365, shared hosting, and Bay Area Email Services.
|
||||
- Transparent caveat area for setup, migration, support scope, minimums, taxes, and add-ons.
|
||||
|
||||
## Direction 4: Migration Onboarding
|
||||
|
||||

|
||||
|
||||
Positioning: reduces switching anxiety. This direction is best if the buyer is worried about moving email, downtime, DNS access, and device setup.
|
||||
|
||||
Carry forward:
|
||||
- Four-step onboarding flow: assess, configure DNS, migrate mail, set up devices.
|
||||
- Device visuals for Outlook, iPhone, and iPad.
|
||||
- DNS audit checklist and migration checklist as conversion tools.
|
||||
- CTA framed around a low-risk 20-minute assessment.
|
||||
|
||||
## Selected Direction
|
||||
|
||||
The preferred direction is closest to Direction 2: Infrastructure Credibility.
|
||||
|
||||

|
||||
|
||||
Use a dark, operational, infrastructure-led landing page with a large mail-flow diagram as the main first-viewport visual. The page should feel like a local managed email platform, not a generic SaaS template.
|
||||
|
||||
Carry forward from the selected mockup:
|
||||
|
||||
- Dark navy page shell with crisp blue linework and green operational status accents.
|
||||
- Large left-aligned hero: "Business Email Hosting in Corpus Christi."
|
||||
- Primary CTA and phone CTA visible above the fold.
|
||||
- Large technical architecture panel: inbound email, S3 buffering, mailbox delivery, outbound SES, standby failover.
|
||||
- Compact lower modules for DNS authentication, migration process, pricing, and plan comparison.
|
||||
- Local support proof strip at the bottom of the first landing-page section.
|
||||
- Status-bar component showing inbound, delivery, and outbound as operational.
|
||||
|
||||
The resulting site should feel technically credible first, local and human second, and product-priced third:
|
||||
|
||||
- Above the fold: "Business Email Hosting in Corpus Christi", "$5 / inbox / month", "25 GB mailbox included", local phone, and assessment CTA.
|
||||
- First scroll: concrete included services and migration/onboarding path.
|
||||
- Middle: DNS deliverability and AWS-backed continuity explained in plain English.
|
||||
- Later: pricing caveats, comparison, service area, FAQ, and final CTA.
|
||||
|
||||
## Stitch Prompt
|
||||
|
||||
Create a high-fidelity responsive landing page mockup for "Bay Area Email Services", a local business email hosting service by Bay Area IT in Corpus Christi, Texas.
|
||||
|
||||
Design direction:
|
||||
Dark infrastructure-led marketing page. The page should look like a serious managed email platform operated by a local IT team. It should feel precise, technical, trustworthy, and buildable. Avoid generic SaaS gradients, glassmorphism, decorative blobs, cartoon illustrations, and over-rounded icon cards.
|
||||
|
||||
Visual style:
|
||||
- Background: deep navy / near-black blue, not pure black.
|
||||
- Surfaces: slightly lighter navy panels with thin blue-gray borders.
|
||||
- Accents: electric-but-restrained blue for CTAs and connection lines, green for operational checks/status, off-white text.
|
||||
- Typography: confident modern sans-serif, strong H1, compact technical labels, excellent hierarchy.
|
||||
- Layout: asymmetric hero, left copy column and right large architecture diagram.
|
||||
- Components should be dense, crisp, and operational, like a premium infrastructure/status dashboard.
|
||||
|
||||
Hero content:
|
||||
- Logo: Bay Area Email Services, with a simple outlined envelope mark.
|
||||
- Navigation: Services, Infrastructure, Pricing, Migration, About, Resources, Support.
|
||||
- Header phone CTA: "Call (361) 765-8400".
|
||||
- Header button: "Book a 20-minute email assessment".
|
||||
- H1: "Business Email Hosting in Corpus Christi".
|
||||
- Subcopy: "Infrastructure and support from a local team that understands how business gets done."
|
||||
- Bullets:
|
||||
- "AWS-built architecture"
|
||||
- "Configured to improve deliverability"
|
||||
- "Real people. Local support."
|
||||
- Primary CTA: "Book a 20-minute email assessment".
|
||||
- Secondary phone CTA: "Call (361) 765-8400".
|
||||
|
||||
Main hero visual:
|
||||
Create a large architecture panel showing the email flow:
|
||||
1. Inbound Email: Internet, remote mail server, other providers.
|
||||
2. Buffer & Process: Amazon S3 buffering, virus and malware scanning, policy and content filtering, message validation, logging and monitoring.
|
||||
3. Mailbox Delivery: mailbox delivery with laptop and phone icons.
|
||||
4. Outbound Email: Amazon SES outbound to internet.
|
||||
5. Standby: AWS standby environment / hot standby.
|
||||
|
||||
Include a bottom status strip inside the panel:
|
||||
"System Status", "All Systems Operational", "Inbound Operational", "Delivery Operational", "Outbound Operational", "View status".
|
||||
|
||||
Below hero:
|
||||
Create four compact modules in one row on desktop:
|
||||
1. DNS Authentication:
|
||||
"We configure and validate the records that help protect your domain."
|
||||
Checklist: SPF, DKIM, DMARC.
|
||||
2. Migration Process:
|
||||
Four steps: Discover, Plan, Migrate, Validate.
|
||||
3. Pricing:
|
||||
"$5 / inbox / month"
|
||||
Includes: Business email on your domain, AWS-backed infrastructure, web/mobile/desktop access, local support from real people.
|
||||
Button: "Book a 20-minute email assessment".
|
||||
4. Compare Plans:
|
||||
Table columns: Feature, BES Basic, BES Pro, Other Providers.
|
||||
Rows: Business email, Custom domain, AWS infrastructure, Local support, Transparent pricing.
|
||||
|
||||
Local support strip:
|
||||
Title: "Local Support. Real People."
|
||||
Use compact proof items:
|
||||
- Local team in Corpus Christi
|
||||
- U.S.-based support
|
||||
- Responsive during business hours
|
||||
- Small business focused
|
||||
- Part of the Bay Area IT Services family
|
||||
|
||||
Claim safety:
|
||||
Do not use "guaranteed inbox placement", "zero downtime", "spam-proof", "hack-proof", or "no email ever lost".
|
||||
Use careful phrases like "configured to improve deliverability", "helps reduce spam-folder risk", "designed for continuity", "standby failover", and "AWS-backed infrastructure".
|
||||
|
||||
Responsive behavior:
|
||||
Desktop: dense dashboard-style hero and modules.
|
||||
Tablet: architecture diagram stacks below hero copy.
|
||||
Mobile: hero copy first, CTA buttons full width, architecture diagram simplified into vertical flow cards, lower modules stacked.
|
||||
|
||||
Make the output look like a polished real website mockup, not a wireframe.
|
||||
|
||||
## Claim Rules
|
||||
|
||||
Use:
|
||||
- "Configured to improve deliverability"
|
||||
- "Helps reduce spam-folder risk"
|
||||
- "Designed for continuity"
|
||||
- "Standby failover"
|
||||
- "Built on AWS services including Amazon S3 and Amazon SES"
|
||||
|
||||
Avoid:
|
||||
- "Guaranteed inbox placement"
|
||||
- "Zero downtime"
|
||||
- "Spam-proof"
|
||||
- "Hack-proof"
|
||||
- "No email ever lost"
|
||||
174
PLAN.md
Normal file
174
PLAN.md
Normal file
@@ -0,0 +1,174 @@
|
||||
# Landingpage Plan
|
||||
|
||||
```yaml
|
||||
goal: >
|
||||
Eine separate Marketing-/Landingpage fuer Bay Area Email Services planen, die lokal in Corpus Christi verkauft und spaeter SaaS-nahe erweitert werden kann.
|
||||
current_phase: >
|
||||
plan
|
||||
owner: >
|
||||
swarm-planner
|
||||
context:
|
||||
- "Projektordner: C:\\Users\\a931627\\Documents\\gitea\\bayarea\\E-Mail Webseite Marketing"
|
||||
- "Produkt: lokale Business-E-Mail-Loesung mit 25 GB Mailboxen fuer $5 pro Inbox, Domain-E-Mail, DNS-Setup, Migration, Outlook/iPhone/iPad Setup und laufendem Support."
|
||||
- "Technische Positionierung: AWS-basierte Infrastruktur, inbound Amazon S3 Buffering, outbound Amazon SES, Hot-Standby/Failover, SPF/DKIM/DMARC."
|
||||
- "SEO-Chance: dedizierte Email-only-Landingpage fuer Corpus Christi, weil lokale Wettbewerber E-Mail meist nur als Unterpunkt breiter Managed-IT-Angebote behandeln."
|
||||
constraints:
|
||||
- "Keine Implementierung in dieser Phase."
|
||||
- "Die Seite muss lokale Service-Nachfrage bedienen und spaeter als Produkt-/SaaS-Landingpage erweiterbar bleiben."
|
||||
- "Keine garantierten Deliverability-, Uptime-, Security- oder 'no email lost'-Claims ohne belegbares SLA und technische Nachweise."
|
||||
- "Preisclaim '$5 per inbox' nur mit Abrechnungszeitraum, Leistungsumfang, Setup-/Migrationskosten und eventuellen Mindestmengen verwenden."
|
||||
assumptions:
|
||||
- "Primaere Zielgruppe sind kleine lokale Unternehmen in Corpus Christi und Coastal Bend."
|
||||
- "Bay Area Email Services bleibt vorerst der Produktname."
|
||||
- "Assessment-CTA, Telefonnummer (361) 765-8400 und Service Area aus dem bestehenden Material bleiben gueltig."
|
||||
open_questions:
|
||||
- "Ist $5 pro Inbox monatlich oder anders abgerechnet?"
|
||||
- "Sind DNS-Setup, Migration, Device-Setup und laufender Support im Preis enthalten oder Add-ons?"
|
||||
- "Welche SLA-, Uptime-, Failover- und S3-Retention-Aussagen sind belegbar?"
|
||||
- "Gibt es Testimonials, Review-Sterne, Case Studies, Kundenlogos oder Uptime-Historie?"
|
||||
- "Welche Domain-Struktur ist geplant: bestehende Website, Subdomain oder eigenstaendige Produktdomain?"
|
||||
requested_output:
|
||||
- "Eine erste Landingpage mit klarer lokaler Positionierung, transparenter Preis-/Leistungsdarstellung, technischer Glaubwuerdigkeit und Assessment-CTA."
|
||||
done_definition:
|
||||
- "Seitenstruktur, SEO-Ziele, Copy-Positionierung, CTAs, Claim-Regeln und offene Produktentscheidungen sind dokumentiert."
|
||||
- "Ein Implementer kann danach Wireframe, Copy und Frontend-Prototyp erstellen, ohne die Grundlagen erneut zu recherchieren."
|
||||
verification:
|
||||
- "Research-Handover der drei gestarteten Research-Stränge gelesen."
|
||||
- "swarm-plan Skill und Handover-Contract angewendet."
|
||||
- "Plan-Datei erstellt; keine App-Dateien implementiert."
|
||||
```
|
||||
|
||||
## Seitenstruktur
|
||||
|
||||
1. Hero
|
||||
- H1: `Business Email Hosting in Corpus Christi`
|
||||
- Subcopy: Domain-E-Mail, 25 GB Mailboxen, lokale Einrichtung, DNS-Authentifizierung, Migration und Support.
|
||||
- Primaerer CTA: `Book a 20-minute email assessment`
|
||||
- Sekundaerer CTA: `See what is included`
|
||||
- Preisanker: `$5 per inbox` sichtbar machen, sobald die Preisbedingungen bestaetigt sind.
|
||||
|
||||
2. Problem
|
||||
- Kostenlose Gmail/Yahoo-Adressen wirken unprofessionell.
|
||||
- Webhost-Mail und falsch konfigurierte DNS-Eintraege fuehren zu Spam-Folder-Problemen.
|
||||
- E-Mail-Ausfaelle kosten Leads, Freigaben und Vertrauen.
|
||||
- Kleine Teams wollen keinen anonymen Self-Service-Support.
|
||||
|
||||
3. Angebot
|
||||
- 25 GB Mailboxen
|
||||
- Domain-Adressen und Aliases
|
||||
- Outlook, iPhone und iPad Setup
|
||||
- SPF, DKIM, DMARC und MX-Konfiguration
|
||||
- Migration von Gmail, Yahoo, Webhost-Mail oder altem Provider
|
||||
- Forwards, Auto-Replies, Custom Spam Filtering
|
||||
- Lokaler Support
|
||||
|
||||
4. Deliverability und Sicherheit
|
||||
- SPF/DKIM/DMARC in einfacher Sprache erklaeren.
|
||||
- Amazon SES als technische Grundlage fuer authentifiziertes Senden darstellen.
|
||||
- Formulierung: `helps reduce spam-folder risk`, nicht `guaranteed inbox placement`.
|
||||
|
||||
5. Reliability
|
||||
- AWS, S3-Inbound-Buffering und Hot Standby erklaeren.
|
||||
- Formulierung: `designed for continuity` und `standby failover`, nicht `zero downtime`.
|
||||
- Optional spaeter: Status-/Uptime-Block, wenn echte Daten vorhanden sind.
|
||||
|
||||
6. Migration und Onboarding
|
||||
- Was benoetigt wird: Domain-Zugang, Mailboxliste, aktueller Provider.
|
||||
- Prozess: Audit, DNS-Plan, Mailbox-Erstellung, Migration, Device Setup, Go-live Check.
|
||||
- Kaufangst reduzieren: klare Migrationsfenster und realistische Downtime-Erwartungen.
|
||||
|
||||
7. Pricing
|
||||
- Basiszeile: `$5 per inbox / month`, falls bestaetigt.
|
||||
- Direkt darunter: `25 GB mailbox included`.
|
||||
- Separat ausweisen: Setup, Migration, Support, Minimums, Add-ons, Taxes/Fees.
|
||||
|
||||
8. Comparison
|
||||
- Google Workspace: passend fuer Teams, die die volle Google-Suite brauchen.
|
||||
- Microsoft 365: passend fuer Office/Teams/OneDrive-orientierte Teams.
|
||||
- Shared hosting email: guenstig, aber oft schwaecher bei Support, Deliverability und Resilienz.
|
||||
- Bay Area Email Services: passend fuer lokale kleine Unternehmen, die professionelle E-Mail, Migration, DNS-Korrektheit und lokalen Support wollen.
|
||||
|
||||
9. Local Trust
|
||||
- Corpus Christi und Coastal Bend sichtbar nennen.
|
||||
- Orte: Corpus Christi, Portland, Rockport, Aransas Pass, Kingsville.
|
||||
- Trust Proofs: 30+ Jahre IT-Erfahrung, 30+ lokale Unternehmen, Telefonnummer, echte Reviews oder Testimonials sobald verfuegbar.
|
||||
|
||||
10. FAQ
|
||||
- What is a professional business email address?
|
||||
- Why are my business emails going to spam?
|
||||
- Can you migrate our existing emails?
|
||||
- Does this work with Outlook, iPhone, and iPad?
|
||||
- What does $5 per inbox include?
|
||||
- Is this Microsoft 365 or Google Workspace?
|
||||
- What happens if the mail server is down?
|
||||
- Do you support aliases, forwards, shared inboxes, and auto-replies?
|
||||
|
||||
11. Final CTA
|
||||
- `Book a 20-minute email assessment`
|
||||
- `Get a mailbox count quote`
|
||||
- `Call (361) 765-8400`
|
||||
|
||||
## SEO Targets
|
||||
|
||||
Primaerer Suchintent:
|
||||
|
||||
- `business email hosting Corpus Christi`
|
||||
- `business email services Corpus Christi`
|
||||
- `professional business email Corpus Christi`
|
||||
- `small business email setup Corpus Christi`
|
||||
|
||||
Sekundaere Cluster:
|
||||
|
||||
- `business email Coastal Bend`
|
||||
- `Outlook email setup Corpus Christi`
|
||||
- `iPhone business email setup`
|
||||
- `email migration services Corpus Christi`
|
||||
- `SPF DKIM DMARC setup Corpus Christi`
|
||||
- `why business emails go to spam`
|
||||
- `affordable business email hosting`
|
||||
|
||||
Empfohlene URL:
|
||||
|
||||
- `/business-email-hosting-corpus-christi/`
|
||||
|
||||
Title/Meta Startpunkt:
|
||||
|
||||
- Title: `Business Email Hosting Corpus Christi | $5/Inbox Local Support`
|
||||
- Meta: `Professional domain email hosting for Corpus Christi businesses. 25 GB mailboxes, Outlook and iPhone setup, SPF/DKIM/DMARC, migration, and local support.`
|
||||
|
||||
Schema:
|
||||
|
||||
- `LocalBusiness` oder `ProfessionalService` fuer lokale Firma
|
||||
- `Service` fuer Business Email Services
|
||||
- `Offer` nur, wenn Preis und Bedingungen final sind
|
||||
- FAQ-Inhalte fuer Nutzer einbauen; FAQ Rich Results nicht als Haupt-SEO-Hebel einplanen
|
||||
|
||||
## Claim-Safety Regeln
|
||||
|
||||
- Deliverability: `configured to improve deliverability`, `helps reduce spam-folder risk`.
|
||||
- Nicht verwenden: `guaranteed inbox placement`, `spam-proof`.
|
||||
- Reliability: `designed for continuity`, `redundant infrastructure`, `standby failover`.
|
||||
- Nicht verwenden: `zero downtime`, `no email ever lost`.
|
||||
- Security: `email security hardening`, `SPF/DKIM/DMARC setup`, `spam filtering`.
|
||||
- Nicht verwenden: `fully secure`, `hack-proof`.
|
||||
- AWS: `built on AWS services including Amazon S3 and Amazon SES`.
|
||||
- Nicht verwenden: Formulierungen, die AWS-Partnerschaft oder Zertifizierung implizieren, falls nicht belegt.
|
||||
|
||||
## Naechste Entscheidungen
|
||||
|
||||
- Preis finalisieren: monatlich, jaehrlich, Mindestanzahl, Taxes, Add-ons.
|
||||
- Supportumfang klaeren: was ist pro Inbox enthalten, was laeuft ueber Helpdesk/Retainer?
|
||||
- Setup/Migration klaeren: kostenlos, pauschal, individuell oder Paketpreise.
|
||||
- Technische Claims pruefen: SLA, Failover-Test, S3-Retention, Monitoring, Backup.
|
||||
- Brand/Domain entscheiden: bestehende Bay Area IT Website, Subdomain oder eigenstaendige Produktdomain.
|
||||
- Proof sammeln: Reviews, Testimonials, Case Studies, Screenshots, Uptime-/Monitoring-Daten.
|
||||
|
||||
## Implementierungs-Akzeptanzkriterien
|
||||
|
||||
- Die erste Ansicht macht Service, Ort, Preisanker und CTA ohne Scrollen klar.
|
||||
- Die Seite erklaert technische Vorteile in Business-Sprache und kann Details fuer technische Kaeufer ausklappen.
|
||||
- Pricing ist transparent genug, dass ein kleiner Betrieb eine Anfrage mit realistischer Erwartung stellen kann.
|
||||
- Die Seite enthaelt keine unhaltbaren Guarantees.
|
||||
- Local SEO ist sauber: Ort, Service Area, Telefonnummer, Services und strukturierte Daten stimmen zusammen.
|
||||
- Mobile Layout ist voll nutzbar; CTA, Pricing und FAQ sind ohne Textueberlauf scanbar.
|
||||
- Spaetere Erweiterung zu SaaS ist moeglich, ohne die komplette Informationsarchitektur neu zu bauen.
|
||||
45
PRODUCT.md
Normal file
45
PRODUCT.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Product
|
||||
|
||||
## Register
|
||||
|
||||
brand
|
||||
|
||||
## Users
|
||||
|
||||
Small business owners, office managers, and local operators in Corpus Christi and the Coastal Bend who rely on email for leads, approvals, scheduling, documents, and customer communication. They may currently use Gmail, Yahoo, shared hosting email, old providers, or poorly configured Microsoft/Outlook setups.
|
||||
|
||||
Their context is practical and often anxious: email feels essential, DNS feels confusing, migration feels risky, and support queues feel too remote. They want professional email on their own domain, correct setup, reliable migration, Outlook and mobile support, and a local person to call when something breaks.
|
||||
|
||||
## Product Purpose
|
||||
|
||||
Bay Area Email Services is a dedicated marketing landing page for Bay Area IT's managed business email hosting offer. It must explain the offer, build trust in the infrastructure, clarify pricing, and convert qualified local businesses into assessment or quote requests.
|
||||
|
||||
Success means a visitor quickly understands: this is business email hosting for Corpus Christi, it costs $5 per inbox per month with 25 GB mailboxes, DNS authentication and migration are handled, the infrastructure is AWS-backed, and local support is available.
|
||||
|
||||
## Brand Personality
|
||||
|
||||
Precise, local, operational.
|
||||
|
||||
The brand should feel technically competent without becoming cold, local without becoming folksy, and productized without pretending to be a generic self-serve SaaS company. Copy should be plain-English, specific, and careful with claims.
|
||||
|
||||
## Anti-references
|
||||
|
||||
Avoid generic SaaS landing pages with purple gradients, glassmorphism, floating blobs, identical icon-card grids, vague AI-style copy, or oversized hero metrics. Avoid enterprise cybersecurity fear marketing, neon hacker aesthetics, and stock-photo-heavy IT support pages.
|
||||
|
||||
Avoid unsupported claims such as guaranteed inbox placement, zero downtime, spam-proof, hack-proof, or no email ever lost.
|
||||
|
||||
## Design Principles
|
||||
|
||||
Show the system, not just the promise. The page should make email flow, DNS authentication, buffering, outbound sending, standby infrastructure, and local support visible.
|
||||
|
||||
Make the first viewport do the sales work. Service, location, price, core infrastructure proof, CTA, and phone number must be visible without scrolling on desktop.
|
||||
|
||||
Translate technical depth into buyer confidence. SPF, DKIM, DMARC, Amazon S3, Amazon SES, and failover should be explained in business language, with technical labels available for credibility.
|
||||
|
||||
Keep pricing clear but scoped. The $5 per inbox price should be easy to find, while setup, migration, support scope, minimums, taxes, and add-ons must not be implied as free unless confirmed.
|
||||
|
||||
Build for local trust first, future SaaS expansion second. The site can feel product-led, but the strongest differentiator is managed local support from Bay Area IT.
|
||||
|
||||
## Accessibility & Inclusion
|
||||
|
||||
Target WCAG AA. The dark visual direction needs strong text contrast, visible focus states, non-color-only status indicators, reduced-motion support, and responsive layouts that preserve reading order. Technical diagrams must have textual summaries so the core message is not trapped inside imagery.
|
||||
59
PROJECT_BRIEF.md
Normal file
59
PROJECT_BRIEF.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# E-Mail Webseite Marketing
|
||||
|
||||
## Projektziel
|
||||
|
||||
Separate Marketing-Webseite fuer die E-Mail-Webloesung von Bay Area Email Services. Die Seite soll zunaechst als Landingpage/Marketingseite funktionieren und spaeter zu einer SaaS-Produkt-Landingpage ausgebaut werden koennen.
|
||||
|
||||
## Ausgangsangebot
|
||||
|
||||
Bay Area Email Services bietet Business-E-Mail-Hosting fuer kleine Unternehmen in Corpus Christi und der Coastal Bend Region.
|
||||
|
||||
Kernangebot:
|
||||
|
||||
- 25 GB Business-Mailbox fuer $5 pro Inbox
|
||||
- Domain-basierte E-Mail-Adressen wie `info@`, `contact@` und persoenliche Adressen
|
||||
- Microsoft Outlook Setup und Lizenzierung
|
||||
- iPhone- und iPad-Konfiguration
|
||||
- DNS-Konfiguration fuer MX, SPF, DKIM und DMARC
|
||||
- Spamfilter-Konfiguration und E-Mail-Security-Hardening
|
||||
- Migration von Gmail, Yahoo, vorherigem Hosting oder alten Providern
|
||||
- Shared Inboxes, Aliases, Weiterleitungen und Auto-Replies
|
||||
- Lokaler technischer Support in Corpus Christi
|
||||
|
||||
## Infrastruktur-Positionierung
|
||||
|
||||
Die Loesung ist als resiliente E-Mail-Plattform positioniert:
|
||||
|
||||
- AWS-basierte Infrastruktur
|
||||
- Eingehende Nachrichten werden vor der Zustellung in Amazon S3 gepuffert
|
||||
- Ausgehende E-Mail laeuft ueber Amazon SES
|
||||
- Hot-Standby-Server fuer Failover innerhalb weniger Minuten
|
||||
- DNS, Migration und laufende Verwaltung werden lokal betreut
|
||||
|
||||
## Aktuelle Problem-/Value-Proposition
|
||||
|
||||
Freie Gmail- oder Yahoo-Adressen wirken unprofessionell und koennen Vertrauen kosten. Viele E-Mails landen nicht wegen des Inhalts im Spam, sondern wegen fehlender oder falsch konfigurierter DNS-Eintraege. Die Loesung richtet professionelle Domain-E-Mail korrekt ein, verbessert Zustellbarkeit, reduziert Ausfallrisiko und gibt lokalen Unternehmen schnellen Support.
|
||||
|
||||
## Vertrauenssignale aus bestehendem Material
|
||||
|
||||
- 30+ Jahre IT-Erfahrung
|
||||
- 30+ lokale Unternehmen unterstuetzt
|
||||
- Klare, jargonfreie Erklaerung technischer Themen
|
||||
- Schnelle lokale Reaktion statt anonymem Support-Queue
|
||||
- Erfahrung mit Outlook, mobilen Geraeten, DNS, Migration und Security
|
||||
|
||||
## Erste Zielgruppen
|
||||
|
||||
- Kleine Unternehmen in Corpus Christi und Coastal Bend
|
||||
- Unternehmen, die noch kostenlose Gmail/Yahoo-Adressen nutzen
|
||||
- Unternehmen mit Problemen bei Spam-Zustellung oder DNS-Konfiguration
|
||||
- Unternehmen, die von Shared-Hosting-Mail oder alten Providern migrieren
|
||||
- Teams, die lokale Einrichtung und laufenden Support statt Self-Service-only wollen
|
||||
|
||||
## Offene strategische Fragen
|
||||
|
||||
- Soll die Seite primaer lokal-serviceorientiert bleiben oder staerker als Produkt/SaaS auftreten?
|
||||
- Soll der Preis `$5 per inbox` als Hauptanker im Hero stehen oder erst im Pricing-Abschnitt?
|
||||
- Welche Claims zur Deliverability duerfen rechtlich und faktisch sicher genutzt werden?
|
||||
- Welche Domain/Brand-Struktur ist geplant: eigene Produktdomain, Subdomain oder Unterseite?
|
||||
- Gibt es echte Testimonials, Case Studies, SLA-Angaben oder Uptime-Historie?
|
||||
174
SHAPE_BRIEF.md
Normal file
174
SHAPE_BRIEF.md
Normal file
@@ -0,0 +1,174 @@
|
||||
# Impeccable Shape Brief: Bay Area Email Services Landing Page
|
||||
|
||||
## Visual Probe
|
||||
|
||||

|
||||
|
||||
## 1. Feature Summary
|
||||
|
||||
This is a dedicated marketing landing page for Bay Area Email Services, a managed business email hosting offer for small businesses in Corpus Christi and the Coastal Bend.
|
||||
|
||||
The page must sell professional domain email by making the infrastructure visible, the local support credible, and the price easy to understand. It should feel like a local managed email platform operated by serious IT people, not a generic SaaS landing page.
|
||||
|
||||
## 2. Primary User Action
|
||||
|
||||
The primary action is to book a 20-minute email assessment.
|
||||
|
||||
The secondary action is to call `(361) 765-8400`. Pricing, DNS, migration, and infrastructure content should all support one decision: "This team can assess and fix our business email setup."
|
||||
|
||||
## 3. Design Direction
|
||||
|
||||
Color strategy: Committed.
|
||||
|
||||
The page is mostly carried by a dark operational navy environment, with electric-but-restrained blue for action and connection lines, green for operational status, and off-white for copy. This color system is load-bearing and should not be softened into a generic light SaaS page.
|
||||
|
||||
Theme scene sentence: A small business owner or office manager reviews email risk and pricing on a desktop during work hours while a local IT team monitors the mail platform in the background, so the interface should feel like a readable operations console rather than a decorative marketing page.
|
||||
|
||||
Anchor references:
|
||||
|
||||
- AWS architecture diagrams, for serious mail-flow explanation.
|
||||
- Stripe-style product clarity, for pricing and conversion discipline.
|
||||
- Linear-style operational polish, for dark UI precision and status feedback.
|
||||
|
||||
Winning visual probe: selected dark infrastructure-led direction. The final brief carries forward the large architecture panel, system status strip, compact lower modules, and local support proof band.
|
||||
|
||||
## 4. Scope
|
||||
|
||||
Fidelity: production-ready visual plan.
|
||||
|
||||
Breadth: full landing page, with extra emphasis on the first viewport and first scroll.
|
||||
|
||||
Interactivity: static marketing page with interactive-feeling components. Accordions, hover states, CTA feedback, table hover states, and status/tooltips can be implemented later, but the core experience should not depend on heavy interactivity.
|
||||
|
||||
Time intent: polish until it can be built as the first real version of the page.
|
||||
|
||||
## 5. Layout Strategy
|
||||
|
||||
The first viewport should be a dense dashboard-like marketing composition:
|
||||
|
||||
- Top nav with logo, core anchors, phone CTA, and assessment CTA.
|
||||
- Left hero column with H1, short subcopy, trust bullets, CTA, and phone.
|
||||
- Right hero column dominated by a mail-flow architecture panel.
|
||||
- Status strip inside the architecture panel to make reliability legible.
|
||||
- First-scroll module row: DNS Authentication, Migration Process, Pricing, Compare Plans.
|
||||
- Local support proof strip below those modules.
|
||||
|
||||
The rest of the page should open up slightly after the dense hero:
|
||||
|
||||
1. Problem and buyer pain: free Gmail/Yahoo, spam-folder issues, shared-hosting mail, support queues.
|
||||
2. What is included: 25 GB mailboxes, domain email, Outlook, iPhone/iPad setup, migration, aliases, forwards, shared inboxes, auto-replies.
|
||||
3. Deliverability section: SPF, DKIM, DMARC explained in plain English.
|
||||
4. Reliability section: AWS, Amazon S3 buffering, Amazon SES outbound, standby failover.
|
||||
5. Migration section: assessment, DNS plan, mailbox creation, migration window, device setup, go-live check.
|
||||
6. Pricing and caveats: $5 per inbox per month, 25 GB included, setup/migration/support terms clearly scoped.
|
||||
7. Comparison: Google Workspace, Microsoft 365, shared hosting, Bay Area Email Services by fit.
|
||||
8. Local trust: Corpus Christi, Coastal Bend, 30+ years IT experience, 30+ local businesses if confirmed.
|
||||
9. FAQ and final CTA.
|
||||
|
||||
## 6. Key States
|
||||
|
||||
Default: The page loads into the full dark infrastructure hero. User immediately sees service, location, CTA, price, phone, and operational proof.
|
||||
|
||||
Mobile: Hero copy appears first, CTAs become full-width or stacked, architecture diagram converts into vertical flow cards, comparison table becomes horizontally scrollable or turns into grouped rows.
|
||||
|
||||
Loading: Avoid skeleton noise. If implemented as a static landing page, load primary copy and CTA first, then animate diagram lines/status labels with reduced-motion fallback.
|
||||
|
||||
Error: Contact form errors should be inline and plain-English. Do not use modals. Phone CTA remains available if form submission fails.
|
||||
|
||||
Success: After assessment request, show a concise confirmation inline: "Thanks. We’ll review your mailbox count and current provider before we reply." Keep phone CTA visible.
|
||||
|
||||
Reduced motion: Disable animated connector-line tracing and section reveal motion. Keep status and flow readable without animation.
|
||||
|
||||
Long content: FAQ, pricing caveats, and comparison copy must wrap cleanly without overflowing cards or buttons.
|
||||
|
||||
## 7. Interaction Model
|
||||
|
||||
Primary CTA buttons scroll or route to the assessment/contact form.
|
||||
|
||||
Phone CTAs use `tel:+13617658400`.
|
||||
|
||||
Navigation anchors scroll to Infrastructure, Pricing, Migration, FAQ, and Contact sections.
|
||||
|
||||
Architecture panel can have subtle hover tooltips or captions for Amazon S3 buffering, Amazon SES outbound, SPF, DKIM, DMARC, and standby failover. These explanations must also exist as visible text elsewhere for accessibility.
|
||||
|
||||
FAQ uses inline accordions. Only one answer may open at a time on mobile to preserve page length.
|
||||
|
||||
Comparison table should be readable without interaction on desktop. On mobile, use stacked comparison rows rather than a cramped table if needed.
|
||||
|
||||
## 8. Content Requirements
|
||||
|
||||
Hero:
|
||||
|
||||
- H1: "Business Email Hosting in Corpus Christi"
|
||||
- Subcopy: "Infrastructure and support from a local team that understands how business gets done."
|
||||
- Bullets:
|
||||
- "AWS-built architecture"
|
||||
- "Configured to improve deliverability"
|
||||
- "Real people. Local support."
|
||||
- Primary CTA: "Book a 20-minute email assessment"
|
||||
- Secondary CTA: "Call (361) 765-8400"
|
||||
|
||||
Architecture labels:
|
||||
|
||||
- Inbound Email
|
||||
- Buffer & Process
|
||||
- Mailbox Delivery
|
||||
- Outbound Email
|
||||
- Standby Environment
|
||||
- Amazon S3 buffering
|
||||
- Amazon SES outbound
|
||||
- Virus & Malware Scanning
|
||||
- Policy & Content Filtering
|
||||
- Message Validation
|
||||
- Logging & Monitoring
|
||||
|
||||
Status strip:
|
||||
|
||||
- System Status
|
||||
- All Systems Operational
|
||||
- Inbound Operational
|
||||
- Delivery Operational
|
||||
- Outbound Operational
|
||||
- View status
|
||||
|
||||
Module copy:
|
||||
|
||||
- DNS Authentication: "We configure and validate the records that help protect your domain."
|
||||
- Migration Process: Discover, Plan, Migrate, Validate.
|
||||
- Pricing: "$5 / inbox / month", "25 GB mailbox included."
|
||||
- Compare Plans: Business email, Custom domain, AWS infrastructure, Local support, Transparent pricing.
|
||||
|
||||
Claim-safe language:
|
||||
|
||||
- Use "configured to improve deliverability."
|
||||
- Use "helps reduce spam-folder risk."
|
||||
- Use "designed for continuity."
|
||||
- Use "standby failover."
|
||||
- Use "built on AWS services including Amazon S3 and Amazon SES."
|
||||
|
||||
Avoid:
|
||||
|
||||
- "Guaranteed inbox placement"
|
||||
- "Zero downtime"
|
||||
- "Spam-proof"
|
||||
- "Hack-proof"
|
||||
- "No email ever lost"
|
||||
|
||||
## 9. Recommended References
|
||||
|
||||
- `reference/brand.md`, for the landing page register and visual ambition.
|
||||
- `reference/layout.md`, for dense first-viewport hierarchy and responsive rhythm.
|
||||
- `reference/typeset.md`, for strong dark-surface typography.
|
||||
- `reference/clarify.md`, for plain-English technical copy.
|
||||
- `reference/adapt.md`, for mobile conversion and diagram simplification.
|
||||
- `reference/harden.md`, before shipping, for edge cases, accessibility, long text, and form states.
|
||||
|
||||
## 10. Open Questions
|
||||
|
||||
- Confirm whether `$5 / inbox / month` is final and whether minimums, taxes, setup, migration, or support fees apply.
|
||||
- Confirm whether the site should use an assessment form, a booking link, a contact form, or all three.
|
||||
- Confirm exact support hours before using "responsive during business hours."
|
||||
- Confirm whether "30+ local businesses supported" and "30+ years IT experience" can be used on the final page.
|
||||
- Confirm whether there is a real status page. If not, "View status" should either be removed or replaced with "How continuity works."
|
||||
- Confirm whether the final build lives inside the existing Bay Area IT site, a subdomain, or a standalone domain.
|
||||
|
||||
4027
app/globals.css
Normal file
4027
app/globals.css
Normal file
File diff suppressed because it is too large
Load Diff
20
app/layout.tsx
Normal file
20
app/layout.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import type { Metadata } from "next";
|
||||
import "./globals.css";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Business Email Hosting Corpus Christi | Bay Area Email Services",
|
||||
description:
|
||||
"Professional domain email hosting for Corpus Christi businesses. 25 GB mailboxes, Outlook and iPhone setup, SPF/DKIM/DMARC, migration, and local support.",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body>{children}</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
240
app/page.tsx
Normal file
240
app/page.tsx
Normal file
@@ -0,0 +1,240 @@
|
||||
"use client";
|
||||
|
||||
import { FormEvent, MouseEvent, useEffect, useState } from "react";
|
||||
import SiteHeader from "../components/SiteHeader";
|
||||
import HeroSection from "../components/HeroSection";
|
||||
import ProblemSection from "../components/ProblemSection";
|
||||
import ProcessSection from "../components/ProcessSection";
|
||||
import DeliverabilitySection from "../components/DeliverabilitySection";
|
||||
import ContinuitySection, { type ContinuityFeature, type FeatureKey } from "../components/ContinuitySection";
|
||||
import MigrationProcessSection from "../components/MigrationProcessSection";
|
||||
import PricingSection, { type Plan } from "../components/PricingSection";
|
||||
import FaqSection from "../components/FaqSection";
|
||||
import AssessmentSection from "../components/AssessmentSection";
|
||||
import SiteFooter from "../components/SiteFooter";
|
||||
|
||||
|
||||
type Theme = "dark" | "light";
|
||||
const pricingSummaries: Record<Plan, string> = {
|
||||
hosting:
|
||||
"Core business email hosting with 25 GB mailboxes, custom domain email, and AWS-backed infrastructure.",
|
||||
managed:
|
||||
"Managed setup adds rollout planning, DNS validation, migration coordination, and device handoff checks during the assessment.",
|
||||
};
|
||||
|
||||
const continuityFeatures: Record<FeatureKey, ContinuityFeature> = {
|
||||
buffering: {
|
||||
title: "Inbound buffering",
|
||||
copy: "Incoming mail can be buffered before mailbox delivery during maintenance or provider-side disruption.",
|
||||
proof: [
|
||||
"Supports planned maintenance windows",
|
||||
"Keeps delivery flow observable",
|
||||
"Feeds mailbox delivery after processing",
|
||||
],
|
||||
},
|
||||
sending: {
|
||||
title: "Outbound sending",
|
||||
copy: "Amazon SES gives outbound email an authenticated sending path with reputation tooling and clearer operational visibility.",
|
||||
proof: [
|
||||
"Separates outbound sending from old shared hosting mail",
|
||||
"Uses domain authentication as part of setup",
|
||||
"Makes sending behavior easier to troubleshoot",
|
||||
],
|
||||
},
|
||||
standby: {
|
||||
title: "Standby failover",
|
||||
copy: "A standby environment is part of the continuity plan when primary systems need intervention or provider-side work.",
|
||||
proof: [
|
||||
"Keeps the fallback path visible",
|
||||
"Reduces guesswork during incidents",
|
||||
"Pairs with status checks and local support",
|
||||
],
|
||||
},
|
||||
local: {
|
||||
title: "Local management",
|
||||
copy: "Domain records, migration, mailbox changes, device setup, and troubleshooting stay with a local Corpus Christi team.",
|
||||
proof: [
|
||||
"One support path for DNS and devices",
|
||||
"Migration scope is reviewed before work starts",
|
||||
"Mailbox changes stay tied to the business context",
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export default function Page() {
|
||||
const [menuOpen, setMenuOpen] = useState(false);
|
||||
const [theme, setTheme] = useState<Theme>("dark");
|
||||
const [activeFeature, setActiveFeature] = useState<FeatureKey>("buffering");
|
||||
const [activePlan, setActivePlan] = useState<Plan>("hosting");
|
||||
const [mailboxes, setMailboxes] = useState(25);
|
||||
const [formErrors, setFormErrors] = useState({ name: "", email: "" });
|
||||
const [formStatus, setFormStatus] = useState("");
|
||||
const activeFeatureDetails = continuityFeatures[activeFeature];
|
||||
|
||||
useEffect(() => {
|
||||
const storedTheme = window.localStorage.getItem("bes-theme");
|
||||
setTheme(storedTheme === "light" ? "light" : "dark");
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
document.documentElement.dataset.theme = theme;
|
||||
window.localStorage.setItem("bes-theme", theme);
|
||||
}, [theme]);
|
||||
|
||||
useEffect(() => {
|
||||
document.body.classList.toggle("menu-open", menuOpen);
|
||||
return () => document.body.classList.remove("menu-open");
|
||||
}, [menuOpen]);
|
||||
|
||||
useEffect(() => {
|
||||
const scrollProgress = document.querySelector<HTMLElement>(".scroll-progress");
|
||||
if (!scrollProgress) {
|
||||
return;
|
||||
}
|
||||
|
||||
let ticking = false;
|
||||
const updateScrollProgress = () => {
|
||||
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
|
||||
const progress = maxScroll > 0 ? window.scrollY / maxScroll : 0;
|
||||
scrollProgress.style.setProperty("--scroll-progress", Math.min(Math.max(progress, 0), 1).toFixed(4));
|
||||
ticking = false;
|
||||
};
|
||||
const onScroll = () => {
|
||||
if (ticking) {
|
||||
return;
|
||||
}
|
||||
ticking = true;
|
||||
requestAnimationFrame(updateScrollProgress);
|
||||
};
|
||||
|
||||
updateScrollProgress();
|
||||
window.addEventListener("scroll", onScroll, { passive: true });
|
||||
return () => window.removeEventListener("scroll", onScroll);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const revealItems = [
|
||||
document.querySelector(".hero-copy"),
|
||||
document.querySelector(".architecture-panel"),
|
||||
...document.querySelectorAll(".module-card"),
|
||||
document.querySelector(".local-strip"),
|
||||
...document.querySelectorAll(".content-section > *"),
|
||||
].filter((item): item is Element => item instanceof Element);
|
||||
|
||||
revealItems.forEach((item, index) => {
|
||||
if (item instanceof HTMLElement) {
|
||||
item.classList.add("reveal-item");
|
||||
item.style.setProperty("--reveal-delay", `${Math.min(index % 4, 3) * 85}ms`);
|
||||
}
|
||||
});
|
||||
|
||||
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
||||
if (prefersReducedMotion || !("IntersectionObserver" in window)) {
|
||||
revealItems.forEach((item) => item instanceof HTMLElement && item.classList.add("is-revealed"));
|
||||
return;
|
||||
}
|
||||
|
||||
document.body.classList.add("motion-ready");
|
||||
const revealObserver = new IntersectionObserver(
|
||||
(entries, observer) => {
|
||||
entries.forEach((entry) => {
|
||||
if (!entry.isIntersecting) {
|
||||
return;
|
||||
}
|
||||
entry.target.classList.add("is-revealed");
|
||||
observer.unobserve(entry.target);
|
||||
});
|
||||
},
|
||||
{
|
||||
threshold: 0.18,
|
||||
rootMargin: "0px 0px -8% 0px",
|
||||
},
|
||||
);
|
||||
|
||||
revealItems.forEach((item) => revealObserver.observe(item));
|
||||
return () => {
|
||||
revealObserver.disconnect();
|
||||
document.body.classList.remove("motion-ready");
|
||||
};
|
||||
}, []);
|
||||
|
||||
const handleNavClick = (event: MouseEvent<HTMLElement>) => {
|
||||
if (event.target instanceof HTMLAnchorElement) {
|
||||
setMenuOpen(false);
|
||||
}
|
||||
};
|
||||
|
||||
const handleAssessmentSubmit = (event: FormEvent<HTMLFormElement>) => {
|
||||
event.preventDefault();
|
||||
const form = event.currentTarget;
|
||||
const formData = new FormData(form);
|
||||
const name = String(formData.get("name") || "").trim();
|
||||
const email = String(formData.get("email") || "").trim();
|
||||
const nextErrors = {
|
||||
name: name ? "" : "Please enter your name.",
|
||||
email: "",
|
||||
};
|
||||
|
||||
if (!email) {
|
||||
nextErrors.email = "Please enter your business email.";
|
||||
} else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
||||
nextErrors.email = "Email address needs to include an @ symbol.";
|
||||
}
|
||||
|
||||
setFormErrors(nextErrors);
|
||||
setFormStatus("");
|
||||
|
||||
if (nextErrors.name || nextErrors.email) {
|
||||
window.requestAnimationFrame(() => {
|
||||
document.getElementById(nextErrors.name ? "name" : "email")?.focus();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
setFormStatus("Thanks. We'll review your mailbox count and current provider before we reply.");
|
||||
form.reset();
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<a className="skip-link" href="#main">Skip to content</a>
|
||||
<div className="scroll-progress" aria-hidden="true"></div>
|
||||
|
||||
<SiteHeader
|
||||
menuOpen={menuOpen}
|
||||
theme={theme}
|
||||
onMenuToggle={() => setMenuOpen((isOpen) => !isOpen)}
|
||||
onThemeToggle={() => setTheme((currentTheme) => (currentTheme === "light" ? "dark" : "light"))}
|
||||
onNavClick={handleNavClick}
|
||||
/>
|
||||
|
||||
<main id="main">
|
||||
<HeroSection />
|
||||
<ProblemSection />
|
||||
<ProcessSection />
|
||||
<DeliverabilitySection />
|
||||
<ContinuitySection
|
||||
activeFeature={activeFeature}
|
||||
activeFeatureDetails={activeFeatureDetails}
|
||||
onFeatureChange={setActiveFeature}
|
||||
/>
|
||||
<MigrationProcessSection />
|
||||
<PricingSection
|
||||
activePlan={activePlan}
|
||||
mailboxes={mailboxes}
|
||||
pricingSummaries={pricingSummaries}
|
||||
onPlanChange={setActivePlan}
|
||||
onMailboxesChange={setMailboxes}
|
||||
/>
|
||||
<FaqSection />
|
||||
<AssessmentSection
|
||||
formErrors={formErrors}
|
||||
formStatus={formStatus}
|
||||
onAssessmentSubmit={handleAssessmentSubmit}
|
||||
/>
|
||||
</main>
|
||||
|
||||
<SiteFooter />
|
||||
</>
|
||||
);
|
||||
}
|
||||
114
components/AssessmentSection.tsx
Normal file
114
components/AssessmentSection.tsx
Normal file
@@ -0,0 +1,114 @@
|
||||
import type { FormEventHandler } from "react";
|
||||
|
||||
type AssessmentSectionProps = {
|
||||
formErrors: { name: string; email: string };
|
||||
formStatus: string;
|
||||
onAssessmentSubmit: FormEventHandler<HTMLFormElement>;
|
||||
};
|
||||
|
||||
export default function AssessmentSection({ formErrors, formStatus, onAssessmentSubmit }: AssessmentSectionProps) {
|
||||
return (
|
||||
<section className="content-section assessment-section" id="assessment" aria-labelledby="assessment-title">
|
||||
<div className="assessment-bg" aria-hidden="true"></div>
|
||||
<div className="assessment-layout">
|
||||
<div className="assessment-form-card">
|
||||
<div className="assessment-form-head">
|
||||
<div>
|
||||
<p>Bay Area Email Services</p>
|
||||
<h3>Request an assessment</h3>
|
||||
</div>
|
||||
<span className="form-head-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24">
|
||||
<path d="M22 17a2 2 0 0 1-2 2H6.8a2 2 0 0 0-1.4.6l-2.2 2.2A.7.7 0 0 1 2 21.3V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2Z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form className="assessment-form" noValidate onSubmit={onAssessmentSubmit}>
|
||||
<div className="form-row">
|
||||
<label htmlFor="name">Your name <span>*</span></label>
|
||||
<input id="name" name="name" type="text" autoComplete="name" placeholder="Jane Doe" required />
|
||||
<p className="field-error" id="name-error">{formErrors.name}</p>
|
||||
</div>
|
||||
<div className="form-row">
|
||||
<label htmlFor="email">Business email <span>*</span></label>
|
||||
<input id="email" name="email" type="email" autoComplete="email" placeholder="you@company.com" required />
|
||||
<p className="field-error" id="email-error">{formErrors.email}</p>
|
||||
</div>
|
||||
<div className="form-row split-form-row">
|
||||
<div>
|
||||
<label htmlFor="mailboxes">Mailboxes</label>
|
||||
<input id="mailboxes" name="mailboxes" type="number" min="1" inputMode="numeric" placeholder="12" />
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="provider">Current provider</label>
|
||||
<select id="provider" name="provider">
|
||||
<option value="">Select one</option>
|
||||
<option>Gmail or Google Workspace</option>
|
||||
<option>Microsoft 365</option>
|
||||
<option>Yahoo</option>
|
||||
<option>Shared hosting email</option>
|
||||
<option>Old or unknown provider</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div className="form-row">
|
||||
<label htmlFor="message">What should we review?</label>
|
||||
<textarea id="message" name="message" rows={4} placeholder="Domain, mailbox count, migration timing, device setup..."></textarea>
|
||||
</div>
|
||||
<button className="button button-primary button-large" type="submit">
|
||||
Request email assessment
|
||||
<span aria-hidden="true">→</span>
|
||||
</button>
|
||||
<p className="form-status" role="status" aria-live="polite">{formStatus}</p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div className="assessment-copy">
|
||||
<p className="eyebrow">Start here</p>
|
||||
<h2 id="assessment-title">Let’s review your email setup.</h2>
|
||||
<p>
|
||||
Tell us about your domain, mailbox count, current provider, and support needs. We will reply with clear next steps for hosting, DNS, migration, and device setup.
|
||||
</p>
|
||||
|
||||
<div className="assessment-highlights" aria-label="Assessment includes">
|
||||
<article>
|
||||
<span aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 6v6h4"></path><circle cx="12" cy="12" r="10"></circle></svg>
|
||||
</span>
|
||||
<div>
|
||||
<strong>Quick response</strong>
|
||||
<p>Most requests receive a reply within one business day.</p>
|
||||
</div>
|
||||
</article>
|
||||
<article>
|
||||
<span aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><circle cx="6" cy="19" r="3"></circle><path d="M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15"></path><circle cx="18" cy="5" r="3"></circle></svg>
|
||||
</span>
|
||||
<div>
|
||||
<strong>Clear next steps</strong>
|
||||
<p>We outline DNS, migration, mailbox, and device requirements before work starts.</p>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<div className="direct-contact-card">
|
||||
<span className="contact-avatar" aria-hidden="true">
|
||||
<svg viewBox="0 0 40 32">
|
||||
<path d="M3 5.5h34v21H3z"></path>
|
||||
<path d="m4.5 7 15.5 11.5L35.5 7"></path>
|
||||
<path d="m4.5 25 11.2-9.2"></path>
|
||||
<path d="m35.5 25-11.2-9.2"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<div>
|
||||
<p>Prefer to talk?</p>
|
||||
<strong>Local Corpus Christi support</strong>
|
||||
</div>
|
||||
<a href="tel:+13617658400">Call (361) 765-8400</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
95
components/ContinuitySection.tsx
Normal file
95
components/ContinuitySection.tsx
Normal file
@@ -0,0 +1,95 @@
|
||||
export type FeatureKey = "buffering" | "sending" | "standby" | "local";
|
||||
|
||||
export type ContinuityFeature = {
|
||||
title: string;
|
||||
copy: string;
|
||||
proof: string[];
|
||||
};
|
||||
|
||||
type ContinuitySectionProps = {
|
||||
activeFeature: FeatureKey;
|
||||
activeFeatureDetails: ContinuityFeature;
|
||||
onFeatureChange: (feature: FeatureKey) => void;
|
||||
};
|
||||
|
||||
export default function ContinuitySection({ activeFeature, activeFeatureDetails, onFeatureChange }: ContinuitySectionProps) {
|
||||
return (
|
||||
<section className="content-section continuity-section" id="continuity" aria-labelledby="continuity-title">
|
||||
<div className="section-heading narrow">
|
||||
<p className="eyebrow">Continuity</p>
|
||||
<h2 id="continuity-title">Designed for continuity, explained in plain English.</h2>
|
||||
<p>
|
||||
The platform uses AWS services including Amazon S3 and Amazon SES, plus standby infrastructure and local management.
|
||||
</p>
|
||||
</div>
|
||||
<div className="feature-showcase" data-active-feature={activeFeature}>
|
||||
<div className="feature-tabs" role="tablist" aria-label="Continuity capabilities">
|
||||
<button
|
||||
className={activeFeature === "buffering" ? "is-active" : ""}
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={activeFeature === "buffering"}
|
||||
data-feature="buffering"
|
||||
onClick={() => onFeatureChange("buffering")}
|
||||
>
|
||||
<span>01</span>
|
||||
<strong>Inbound buffering</strong>
|
||||
<small>Hold mail before delivery when systems need attention.</small>
|
||||
</button>
|
||||
<button
|
||||
className={activeFeature === "sending" ? "is-active" : ""}
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={activeFeature === "sending"}
|
||||
data-feature="sending"
|
||||
onClick={() => onFeatureChange("sending")}
|
||||
>
|
||||
<span>02</span>
|
||||
<strong>Outbound sending</strong>
|
||||
<small>Use an authenticated sending path through Amazon SES.</small>
|
||||
</button>
|
||||
<button
|
||||
className={activeFeature === "standby" ? "is-active" : ""}
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={activeFeature === "standby"}
|
||||
data-feature="standby"
|
||||
onClick={() => onFeatureChange("standby")}
|
||||
>
|
||||
<span>03</span>
|
||||
<strong>Standby failover</strong>
|
||||
<small>Keep a standby environment visible in the continuity plan.</small>
|
||||
</button>
|
||||
<button
|
||||
className={activeFeature === "local" ? "is-active" : ""}
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={activeFeature === "local"}
|
||||
data-feature="local"
|
||||
onClick={() => onFeatureChange("local")}
|
||||
>
|
||||
<span>04</span>
|
||||
<strong>Local management</strong>
|
||||
<small>Keep DNS, devices, mailbox changes, and support together.</small>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div className="feature-panel" role="tabpanel" aria-live="polite">
|
||||
<div className="feature-panel-top">
|
||||
<span className="panel-label">Selected capability</span>
|
||||
<span className="status-pill">Operational</span>
|
||||
</div>
|
||||
<h3 className="feature-panel-title">{activeFeatureDetails.title}</h3>
|
||||
<p className="feature-panel-copy">
|
||||
{activeFeatureDetails.copy}
|
||||
</p>
|
||||
<ul className="feature-proof-list">
|
||||
{activeFeatureDetails.proof.map((proof) => (
|
||||
<li key={proof}>{proof}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
75
components/DeliverabilitySection.tsx
Normal file
75
components/DeliverabilitySection.tsx
Normal file
@@ -0,0 +1,75 @@
|
||||
export default function DeliverabilitySection() {
|
||||
return (
|
||||
<section className="content-section deliverability-section" id="deliverability" aria-labelledby="deliverability-title">
|
||||
<div className="deliverability-panel">
|
||||
<div className="deliverability-bg" aria-hidden="true"></div>
|
||||
<div className="deliverability-head">
|
||||
<div>
|
||||
<p className="eyebrow">Deliverability foundation</p>
|
||||
<h2 id="deliverability-title">Authenticate your domain before mail starts moving.</h2>
|
||||
</div>
|
||||
<p>
|
||||
Receiving mail systems look for SPF, DKIM, and DMARC before they decide how much they trust your messages.
|
||||
We configure and check those records before migration work begins.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="deliverability-card-grid" aria-label="Email authentication records">
|
||||
<article className="deliverability-card">
|
||||
<div className="record-visual record-visual-spf" aria-hidden="true">
|
||||
<div className="record-code">
|
||||
<span>TXT</span>
|
||||
<code>v=spf1 include:mail.bes.host -all</code>
|
||||
</div>
|
||||
<div className="record-route">
|
||||
<span>Domain</span>
|
||||
<i></i>
|
||||
<span>Allowed sender</span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>SPF</h3>
|
||||
<p>Defines which servers are allowed to send email for your domain.</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article className="deliverability-card">
|
||||
<div className="record-visual record-visual-dkim" aria-hidden="true">
|
||||
<div className="signature-card">
|
||||
<span>DKIM signature</span>
|
||||
<strong>key verified</strong>
|
||||
</div>
|
||||
<div className="key-row">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>DKIM</h3>
|
||||
<p>Adds a signed key to outgoing messages so receiving systems can verify they were not altered.</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article className="deliverability-card">
|
||||
<div className="record-visual record-visual-dmarc" aria-hidden="true">
|
||||
<div className="policy-meter">
|
||||
<span>none</span>
|
||||
<span>quarantine</span>
|
||||
<span>reject</span>
|
||||
</div>
|
||||
<div className="report-line">
|
||||
<span>Policy</span>
|
||||
<strong>aligned</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>DMARC</h3>
|
||||
<p>Sets the policy for suspicious mail and gives you a clearer path for domain protection.</p>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
32
components/FaqSection.tsx
Normal file
32
components/FaqSection.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
export default function FaqSection() {
|
||||
return (
|
||||
<section className="content-section faq-section" id="faq" aria-labelledby="faq-title">
|
||||
<div className="section-heading narrow">
|
||||
<p className="eyebrow">Questions</p>
|
||||
<h2 id="faq-title">Business email questions, answered directly.</h2>
|
||||
</div>
|
||||
<div className="faq-list">
|
||||
<details>
|
||||
<summary>What is a professional business email address?</summary>
|
||||
<p>It is an email address on your domain, such as info@yourcompany.com or name@yourcompany.com, instead of a free Gmail or Yahoo address.</p>
|
||||
</details>
|
||||
<details>
|
||||
<summary>Why are my business emails going to spam?</summary>
|
||||
<p>Common causes include missing or incorrect SPF, DKIM, and DMARC records, old provider reputation, shared sending systems, or inconsistent domain settings.</p>
|
||||
</details>
|
||||
<details>
|
||||
<summary>Can you migrate our existing email?</summary>
|
||||
<p>Yes. The migration plan depends on your current provider, mailbox count, domain access, and preferred migration window.</p>
|
||||
</details>
|
||||
<details>
|
||||
<summary>Does this work with Outlook, iPhone, and iPad?</summary>
|
||||
<p>Yes. Outlook, iPhone, iPad, web, and desktop access are part of the setup conversation.</p>
|
||||
</details>
|
||||
<details>
|
||||
<summary>Is this Microsoft 365 or Google Workspace?</summary>
|
||||
<p>No. It is a managed business email hosting service for teams that want professional email, DNS correctness, migration help, and local support without buying a full office suite by default.</p>
|
||||
</details>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
187
components/HeroSection.tsx
Normal file
187
components/HeroSection.tsx
Normal file
@@ -0,0 +1,187 @@
|
||||
export default function HeroSection() {
|
||||
return (
|
||||
<section id="top" className="hero-section" aria-labelledby="hero-title">
|
||||
<div className="hero-grid">
|
||||
<div className="hero-copy">
|
||||
<p className="eyebrow">Corpus Christi business email hosting</p>
|
||||
<h1 id="hero-title">Business Email Hosting in Corpus Christi</h1>
|
||||
<p className="hero-lede">
|
||||
Infrastructure and support from a local team that understands how business gets done.
|
||||
</p>
|
||||
|
||||
<ul className="trust-list" aria-label="Core trust points">
|
||||
<li>
|
||||
<span className="check-icon" aria-hidden="true"></span>
|
||||
AWS-built architecture
|
||||
</li>
|
||||
<li>
|
||||
<span className="chart-icon" aria-hidden="true"></span>
|
||||
Configured to improve deliverability
|
||||
</li>
|
||||
<li>
|
||||
<span className="people-icon" aria-hidden="true"></span>
|
||||
Real people. Local support.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div className="hero-actions">
|
||||
<a className="button button-primary button-large" href="#assessment">
|
||||
Book a 20-minute email assessment
|
||||
<span aria-hidden="true">→</span>
|
||||
</a>
|
||||
<a className="call-inline" href="tel:+13617658400">Call (361) 765-8400</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section id="infrastructure" className="architecture-panel" aria-labelledby="architecture-title">
|
||||
<h2 id="architecture-title" className="sr-only">Mail flow designed for continuity</h2>
|
||||
<img
|
||||
className="architecture-image architecture-image-dark"
|
||||
src="/assets/mail-flow-panel.png"
|
||||
alt="Mail flow diagram showing inbound email, Amazon S3 buffering, mailbox delivery, Amazon SES outbound sending, standby infrastructure, and operational system status."
|
||||
/>
|
||||
<img
|
||||
className="architecture-image architecture-image-light"
|
||||
src="/assets/mail-flow-panel-light.png"
|
||||
alt=""
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<p className="sr-only">
|
||||
Inbound messages are collected from the internet, remote mail servers, and other providers, buffered and processed through Amazon S3, delivered to mailboxes, sent outbound through Amazon SES, and supported by standby infrastructure.
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div className="module-grid" aria-label="Service highlights">
|
||||
<article className="module-card" id="services">
|
||||
<div className="module-title">
|
||||
<h2>DNS authentication</h2>
|
||||
<span className="shield-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"></path><path d="m9 12 2 2 4-5"></path></svg>
|
||||
</span>
|
||||
</div>
|
||||
<p>We configure and validate the records that help protect your domain.</p>
|
||||
<ul className="check-stack">
|
||||
<li>SPF</li>
|
||||
<li>DKIM</li>
|
||||
<li>DMARC</li>
|
||||
</ul>
|
||||
<a href="#deliverability">Learn more about email security</a>
|
||||
</article>
|
||||
|
||||
<article className="module-card" id="migration">
|
||||
<span className="module-icon migration-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M4 7h10"></path><path d="M4 17h10"></path><path d="m14 3 4 4-4 4"></path><path d="m14 13 4 4-4 4"></path><path d="M18 7h2"></path><path d="M18 17h2"></path></svg>
|
||||
</span>
|
||||
<h2>Local migration help</h2>
|
||||
<ol className="process-steps">
|
||||
<li>
|
||||
<span>1</span>
|
||||
<strong>Discover</strong>
|
||||
<p>We learn your setup, volume, and needs.</p>
|
||||
</li>
|
||||
<li>
|
||||
<span>2</span>
|
||||
<strong>Plan</strong>
|
||||
<p>We design the migration and share the plan.</p>
|
||||
</li>
|
||||
<li>
|
||||
<span>3</span>
|
||||
<strong>Migrate</strong>
|
||||
<p>We move mail, users, and settings.</p>
|
||||
</li>
|
||||
<li>
|
||||
<span>4</span>
|
||||
<strong>Validate</strong>
|
||||
<p>We test, verify, and hand it over.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<a href="#migration-detail">See the full migration checklist</a>
|
||||
</article>
|
||||
|
||||
<article className="module-card price-card" id="pricing">
|
||||
<span className="module-icon hosting-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M4 6.5h16v11H4z"></path><path d="m5 8 7 5 7-5"></path><path d="M8 21h8"></path><path d="M12 17.5V21"></path></svg>
|
||||
</span>
|
||||
<h2>AWS-backed email</h2>
|
||||
<p className="price"><span>$5</span> / inbox / month</p>
|
||||
<p className="included">25 GB mailbox included.</p>
|
||||
<ul className="check-stack compact">
|
||||
<li>Business email on your domain</li>
|
||||
<li>AWS-backed infrastructure</li>
|
||||
<li>Web, mobile, and desktop access</li>
|
||||
<li>Local support from real people</li>
|
||||
</ul>
|
||||
<a className="button button-primary" href="#assessment">Book a 20-minute email assessment</a>
|
||||
</article>
|
||||
|
||||
<article className="module-card compare-card">
|
||||
<h2>Compare Plans</h2>
|
||||
<div className="compare-table" role="table" aria-label="Business email plan comparison">
|
||||
<div role="row" className="table-head">
|
||||
<span role="columnheader">Feature</span>
|
||||
<span role="columnheader">BES Basic</span>
|
||||
<span role="columnheader">BES Pro</span>
|
||||
<span role="columnheader">Other Providers</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span role="cell">Business email</span><span role="cell">✓</span><span role="cell">✓</span><span role="cell">✓</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span role="cell">Custom domain</span><span role="cell">✓</span><span role="cell">✓</span><span role="cell">✓</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span role="cell">AWS infrastructure</span><span role="cell">✓</span><span role="cell">✓</span><span role="cell">Varies</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span role="cell">Local support</span><span role="cell">✓</span><span role="cell">✓</span><span role="cell">Varies</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span role="cell">Transparent pricing</span><span role="cell">✓</span><span role="cell">✓</span><span role="cell">Varies</span>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#pricing-detail">View full plan details</a>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<section className="local-strip" aria-labelledby="local-title">
|
||||
<div>
|
||||
<h2 id="local-title">Local Support. Real People.</h2>
|
||||
<p>Corpus Christi support for setup, migration, DNS, and day-to-day email questions.</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
<span className="building-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M4 21V7l8-4 8 4v14"></path><path d="M9 21v-7h6v7"></path><path d="M8 9h.1M12 9h.1M16 9h.1"></path></svg>
|
||||
</span>
|
||||
<strong>Corpus Christi team</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span className="headset-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M4 13a8 8 0 0 1 16 0"></path><path d="M4 13v4a2 2 0 0 0 2 2h2v-8H6a2 2 0 0 0-2 2Z"></path><path d="M20 13v4a2 2 0 0 1-2 2h-2v-8h2a2 2 0 0 1 2 2Z"></path><path d="M16 19a4 4 0 0 1-4 2"></path></svg>
|
||||
</span>
|
||||
<strong>U.S.-based support</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span className="clock-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v5l3 2"></path></svg>
|
||||
</span>
|
||||
<strong>Business-hour response</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span className="people-outline-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2"></path><circle cx="9.5" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.8"></path><path d="M16 3.3a4 4 0 0 1 0 7.4"></path></svg>
|
||||
</span>
|
||||
<strong>Small business focused</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span className="shield-outline-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"></path><path d="m9 12 2 2 4-5"></path></svg>
|
||||
</span>
|
||||
<strong>Bay Area IT family</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
51
components/MigrationProcessSection.tsx
Normal file
51
components/MigrationProcessSection.tsx
Normal file
@@ -0,0 +1,51 @@
|
||||
export default function MigrationProcessSection() {
|
||||
return (
|
||||
<section className="content-section migration-detail" id="migration-detail" aria-labelledby="migration-title">
|
||||
<div className="migration-process-panel">
|
||||
<div className="migration-process-head">
|
||||
<div>
|
||||
<p className="eyebrow">Switching providers</p>
|
||||
<h2 id="migration-title">Migration process</h2>
|
||||
</div>
|
||||
<span aria-hidden="true"></span>
|
||||
<p>how we move your business email</p>
|
||||
</div>
|
||||
|
||||
<div className="migration-process-line" aria-hidden="true"></div>
|
||||
|
||||
<ol className="migration-process-grid" aria-label="Email migration steps">
|
||||
<li>
|
||||
<div className="migration-step-badge badge-blue">01</div>
|
||||
<h3>Assess</h3>
|
||||
<p>Domain, provider, mailbox count, aliases, forwards, and device needs are reviewed first.</p>
|
||||
</li>
|
||||
<li>
|
||||
<div className="migration-step-badge badge-purple">02</div>
|
||||
<h3>Prepare DNS</h3>
|
||||
<p>MX, SPF, DKIM, DMARC, routing, aliases, and spam rules are staged before cutover.</p>
|
||||
</li>
|
||||
<li>
|
||||
<div className="migration-step-badge badge-green">03</div>
|
||||
<h3>Migrate mail</h3>
|
||||
<p>Existing mail is moved from Gmail, Yahoo, Microsoft 365, shared hosting, or legacy providers.</p>
|
||||
</li>
|
||||
<li>
|
||||
<div className="migration-step-badge badge-amber">04</div>
|
||||
<h3>Set up devices</h3>
|
||||
<p>Outlook, iPhone, iPad, web access, and login details are verified before handoff.</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div className="migration-needs">
|
||||
<strong>What we need from you</strong>
|
||||
<ul>
|
||||
<li>Domain access</li>
|
||||
<li>User and mailbox list</li>
|
||||
<li>Current provider details</li>
|
||||
<li>Preferred migration window</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
133
components/PricingSection.tsx
Normal file
133
components/PricingSection.tsx
Normal file
@@ -0,0 +1,133 @@
|
||||
export type Plan = "hosting" | "managed";
|
||||
|
||||
type PricingSectionProps = {
|
||||
activePlan: Plan;
|
||||
mailboxes: number;
|
||||
pricingSummaries: Record<Plan, string>;
|
||||
onPlanChange: (plan: Plan) => void;
|
||||
onMailboxesChange: (mailboxes: number) => void;
|
||||
};
|
||||
|
||||
export default function PricingSection({ activePlan, mailboxes, pricingSummaries, onPlanChange, onMailboxesChange }: PricingSectionProps) {
|
||||
return (
|
||||
<section className="content-section pricing-detail" id="pricing-detail" aria-labelledby="pricing-title">
|
||||
<div className="section-heading">
|
||||
<p className="eyebrow">Simple mailbox pricing</p>
|
||||
<h2 id="pricing-title">$5 per inbox per month, scoped before you switch.</h2>
|
||||
<p>
|
||||
Pick a mailbox count and plan focus. The base mailbox price is transparent; setup, migration, support scope, minimums, taxes, and add-ons are confirmed during the assessment.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="pricing-builder" data-plan={activePlan} data-mailboxes={mailboxes}>
|
||||
<div className="pricing-control-panel">
|
||||
<div>
|
||||
<span className="panel-label">Plan focus</span>
|
||||
<div className="pricing-segmented" data-active={activePlan} role="group" aria-label="Plan focus">
|
||||
<button
|
||||
className={activePlan === "hosting" ? "is-active" : ""}
|
||||
type="button"
|
||||
data-plan="hosting"
|
||||
aria-pressed={activePlan === "hosting"}
|
||||
onClick={() => onPlanChange("hosting")}
|
||||
>
|
||||
Hosting
|
||||
</button>
|
||||
<button
|
||||
className={activePlan === "managed" ? "is-active" : ""}
|
||||
type="button"
|
||||
data-plan="managed"
|
||||
aria-pressed={activePlan === "managed"}
|
||||
onClick={() => onPlanChange("managed")}
|
||||
>
|
||||
Managed setup
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span className="panel-label">Mailbox count</span>
|
||||
<div className="mailbox-options" role="group" aria-label="Estimated mailbox count">
|
||||
{[10, 25, 50].map((mailboxCount) => (
|
||||
<button
|
||||
className={mailboxes === mailboxCount ? "is-active" : ""}
|
||||
type="button"
|
||||
data-mailboxes={mailboxCount}
|
||||
aria-pressed={mailboxes === mailboxCount}
|
||||
onClick={() => onMailboxesChange(mailboxCount)}
|
||||
key={mailboxCount}
|
||||
>
|
||||
{mailboxCount}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="price-estimate">
|
||||
<span className="panel-label">Estimated base hosting</span>
|
||||
<p><span className="plan-total">${mailboxes * 5}</span><span>/ month</span></p>
|
||||
<small>Based on <strong className="selected-mailboxes">{mailboxes}</strong> inboxes at $5 each.</small>
|
||||
</div>
|
||||
|
||||
<p className="plan-summary">
|
||||
{pricingSummaries[activePlan]}
|
||||
</p>
|
||||
|
||||
<a className="button button-primary" href="#assessment">Get a mailbox count quote</a>
|
||||
</div>
|
||||
|
||||
<div className="pricing-comparison-panel">
|
||||
<div className="comparison-head">
|
||||
<div>
|
||||
<span className="panel-label">What changes by scope</span>
|
||||
<h3>Hosting first, managed help when the migration needs it.</h3>
|
||||
</div>
|
||||
<span className="status-pill">Operational plan</span>
|
||||
</div>
|
||||
|
||||
<div className="plan-feature-grid" role="table" aria-label="Plan feature comparison">
|
||||
<div className="plan-feature-row table-head" role="row">
|
||||
<span role="columnheader">Feature</span>
|
||||
<span role="columnheader">Hosting</span>
|
||||
<span role="columnheader">Managed setup</span>
|
||||
</div>
|
||||
<div className="plan-feature-row" role="row">
|
||||
<span role="cell">25 GB mailbox</span>
|
||||
<span role="cell">Included</span>
|
||||
<span role="cell">Included</span>
|
||||
</div>
|
||||
<div className="plan-feature-row" role="row">
|
||||
<span role="cell">Custom domain email</span>
|
||||
<span role="cell">Included</span>
|
||||
<span role="cell">Included</span>
|
||||
</div>
|
||||
<div className="plan-feature-row" role="row">
|
||||
<span role="cell">SPF, DKIM, DMARC check</span>
|
||||
<span role="cell">Configured</span>
|
||||
<span role="cell">Configured + validated</span>
|
||||
</div>
|
||||
<div className="plan-feature-row" role="row">
|
||||
<span role="cell">Migration from current provider</span>
|
||||
<span role="cell">Scoped</span>
|
||||
<span role="cell">Planned with handoff</span>
|
||||
</div>
|
||||
<div className="plan-feature-row" role="row">
|
||||
<span role="cell">Outlook, iPhone, iPad setup</span>
|
||||
<span role="cell">Guided</span>
|
||||
<span role="cell">Checked before handoff</span>
|
||||
</div>
|
||||
<div className="plan-feature-row" role="row">
|
||||
<span role="cell">Local support</span>
|
||||
<span role="cell">Available</span>
|
||||
<span role="cell">Priority during rollout</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="pricing-note">
|
||||
No inbox placement guarantees, no zero-downtime promise. The assessment confirms DNS access, provider constraints, migration timing, and device needs before work starts.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
31
components/ProblemSection.tsx
Normal file
31
components/ProblemSection.tsx
Normal file
@@ -0,0 +1,31 @@
|
||||
export default function ProblemSection() {
|
||||
return (
|
||||
<section className="content-section problem-section" aria-labelledby="problem-title">
|
||||
<div className="section-heading">
|
||||
<p className="eyebrow">Why it matters</p>
|
||||
<h2 id="problem-title">Email problems rarely look technical at first.</h2>
|
||||
<p>
|
||||
They show up as missed leads, delayed approvals, confused customers, and a team that does not know who to call.
|
||||
</p>
|
||||
</div>
|
||||
<div className="pain-grid">
|
||||
<article>
|
||||
<strong>Free addresses cost trust</strong>
|
||||
<p>Gmail and Yahoo are fine for personal use. A business domain signals that your company is established.</p>
|
||||
</article>
|
||||
<article>
|
||||
<strong>DNS mistakes send mail to spam</strong>
|
||||
<p>SPF, DKIM, and DMARC help receiving servers recognize legitimate mail from your domain.</p>
|
||||
</article>
|
||||
<article>
|
||||
<strong>Shared hosting mail breaks quietly</strong>
|
||||
<p>Old hosting mailboxes often hide weak deliverability, limited storage, and unclear support paths.</p>
|
||||
</article>
|
||||
<article>
|
||||
<strong>Support queues slow the fix</strong>
|
||||
<p>When email breaks, a local team can assess the domain, provider, device, and DNS together.</p>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
73
components/ProcessSection.tsx
Normal file
73
components/ProcessSection.tsx
Normal file
@@ -0,0 +1,73 @@
|
||||
export default function ProcessSection() {
|
||||
return (
|
||||
<section className="content-section process-section" id="process" aria-labelledby="process-title">
|
||||
<div className="process-inner">
|
||||
<div className="section-heading narrow process-heading">
|
||||
<p className="process-kicker">Process</p>
|
||||
<h2 id="process-title">How your email move works.</h2>
|
||||
<p>
|
||||
A clear three-step path from assessment to working mailboxes, DNS records, and device setup.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="process-card-grid">
|
||||
<article className="process-card">
|
||||
<span className="process-corner process-corner-tl" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-tr" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-bl" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-br" aria-hidden="true"></span>
|
||||
<div className="process-card-content">
|
||||
<div className="process-step-label">
|
||||
<span>Step 1</span>
|
||||
</div>
|
||||
<h3>Assess the setup</h3>
|
||||
<p>
|
||||
We review your domain, mailbox count, current provider, DNS status, aliases, and device needs before anything changes.
|
||||
</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article className="process-card">
|
||||
<span className="process-corner process-corner-tl" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-tr" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-bl" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-br" aria-hidden="true"></span>
|
||||
<div className="process-card-content">
|
||||
<div className="process-step-label">
|
||||
<span>Step 2</span>
|
||||
</div>
|
||||
<h3>Configure the records</h3>
|
||||
<p>
|
||||
Mailboxes, MX routing, SPF, DKIM, DMARC, aliases, forwards, and sending paths are prepared and checked.
|
||||
</p>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article className="process-card">
|
||||
<span className="process-corner process-corner-tl" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-tr" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-bl" aria-hidden="true"></span>
|
||||
<span className="process-corner process-corner-br" aria-hidden="true"></span>
|
||||
<div className="process-card-content">
|
||||
<div className="process-step-label">
|
||||
<span>Step 3</span>
|
||||
</div>
|
||||
<h3>Migrate and hand off</h3>
|
||||
<p>
|
||||
We move mail when needed, verify delivery, set up Outlook and mobile devices, and leave your team with a clear support path.
|
||||
</p>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<div className="process-cta">
|
||||
<p>Ready to review your current email setup?</p>
|
||||
<a className="button button-outline" href="#assessment">
|
||||
Request an assessment
|
||||
<span aria-hidden="true">→</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
63
components/SiteFooter.tsx
Normal file
63
components/SiteFooter.tsx
Normal file
@@ -0,0 +1,63 @@
|
||||
export default function SiteFooter() {
|
||||
return (
|
||||
<footer className="site-footer" aria-label="Footer">
|
||||
<div className="footer-inner">
|
||||
<div className="footer-main">
|
||||
<div className="footer-brand">
|
||||
<a className="footer-logo" href="#top" aria-label="Bay Area Email Services home">
|
||||
<span className="brand-mark" aria-hidden="true">
|
||||
<svg viewBox="0 0 40 32" role="img">
|
||||
<path d="M3 5.5h34v21H3z"></path>
|
||||
<path d="m4.5 7 15.5 11.5L35.5 7"></path>
|
||||
<path d="m4.5 25 11.2-9.2"></path>
|
||||
<path d="m35.5 25-11.2-9.2"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span>
|
||||
<strong>Bay Area</strong>
|
||||
<span>Email Services</span>
|
||||
</span>
|
||||
</a>
|
||||
<p>
|
||||
Business email hosting, DNS authentication, migration help, and local support for Corpus Christi teams.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<nav className="footer-links" aria-label="Footer navigation">
|
||||
<h2>Explore</h2>
|
||||
<ul>
|
||||
<li><a href="#services">Services</a></li>
|
||||
<li><a href="#infrastructure">Infrastructure</a></li>
|
||||
<li><a href="#pricing-detail">Pricing</a></li>
|
||||
<li><a href="#migration-detail">Migration</a></li>
|
||||
<li><a href="#faq">FAQ</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div className="footer-contact">
|
||||
<h2>Contact</h2>
|
||||
<ul>
|
||||
<li><a href="tel:+13617658400">Call (361) 765-8400</a></li>
|
||||
<li><a href="#assessment">Book a 20-minute email assessment</a></li>
|
||||
<li>Corpus Christi and the Coastal Bend</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="footer-bottom">
|
||||
<p>Bay Area Email Services, part of Bay Area IT. All rights reserved.</p>
|
||||
<div>
|
||||
<a href="#assessment">Support</a>
|
||||
<a href="#top" className="back-to-top">
|
||||
Back to top
|
||||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path d="m5 12 7-7 7 7"></path>
|
||||
<path d="M12 19V5"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
}
|
||||
87
components/SiteHeader.tsx
Normal file
87
components/SiteHeader.tsx
Normal file
@@ -0,0 +1,87 @@
|
||||
import type { MouseEventHandler } from "react";
|
||||
|
||||
type Theme = "dark" | "light";
|
||||
|
||||
type SiteHeaderProps = {
|
||||
menuOpen: boolean;
|
||||
theme: Theme;
|
||||
onMenuToggle: () => void;
|
||||
onThemeToggle: () => void;
|
||||
onNavClick: MouseEventHandler<HTMLElement>;
|
||||
};
|
||||
|
||||
export default function SiteHeader({ menuOpen, theme, onMenuToggle, onThemeToggle, onNavClick }: SiteHeaderProps) {
|
||||
return (
|
||||
<header className="site-header" aria-label="Primary navigation">
|
||||
<a className="brand" href="#top" aria-label="Bay Area Email Services home">
|
||||
<span className="brand-mark" aria-hidden="true">
|
||||
<svg viewBox="0 0 40 32" role="img">
|
||||
<path d="M3 5.5h34v21H3z"></path>
|
||||
<path d="m4.5 7 15.5 11.5L35.5 7"></path>
|
||||
<path d="m4.5 25 11.2-9.2"></path>
|
||||
<path d="m35.5 25-11.2-9.2"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span>
|
||||
<strong>Bay Area</strong>
|
||||
<span>Email Services</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<button
|
||||
className="menu-toggle"
|
||||
type="button"
|
||||
aria-expanded={menuOpen}
|
||||
aria-controls="nav-menu"
|
||||
onClick={onMenuToggle}
|
||||
>
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
<b>Menu</b>
|
||||
<span className="sr-only">Open menu</span>
|
||||
</button>
|
||||
|
||||
<nav id="nav-menu" className={`nav-menu${menuOpen ? " is-open" : ""}`} onClick={onNavClick}>
|
||||
<a href="#services">Services</a>
|
||||
<a href="#infrastructure">Infrastructure</a>
|
||||
<a href="#pricing">Pricing</a>
|
||||
<a href="#migration">Migration</a>
|
||||
<a href="#faq">Resources</a>
|
||||
<a href="#assessment">Support</a>
|
||||
</nav>
|
||||
|
||||
<div className="header-actions">
|
||||
<a className="phone-link" href="tel:+13617658400" aria-label="Call Bay Area Email Services at 361 765 8400">
|
||||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path d="M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.4 19.4 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 1.9.7 2.8a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.3-1.2a2 2 0 0 1 2.1-.5c.9.3 1.8.6 2.8.7a2 2 0 0 1 1.7 2Z"></path>
|
||||
</svg>
|
||||
Call (361) 765-8400
|
||||
</a>
|
||||
<button
|
||||
className="theme-toggle"
|
||||
type="button"
|
||||
aria-pressed={theme === "light"}
|
||||
aria-label={theme === "light" ? "Switch to dark mode" : "Switch to light mode"}
|
||||
onClick={onThemeToggle}
|
||||
>
|
||||
<svg className="theme-icon theme-icon-sun" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<circle cx="12" cy="12" r="4"></circle>
|
||||
<path d="M12 2v2.5"></path>
|
||||
<path d="M12 19.5V22"></path>
|
||||
<path d="m4.9 4.9 1.8 1.8"></path>
|
||||
<path d="m17.3 17.3 1.8 1.8"></path>
|
||||
<path d="M2 12h2.5"></path>
|
||||
<path d="M19.5 12H22"></path>
|
||||
<path d="m4.9 19.1 1.8-1.8"></path>
|
||||
<path d="m17.3 6.7 1.8-1.8"></path>
|
||||
</svg>
|
||||
<svg className="theme-icon theme-icon-moon" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path d="M21 14.5A8.5 8.5 0 0 1 9.5 3a7 7 0 1 0 11.5 11.5Z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<a className="button button-primary" href="#assessment">Book a 20-minute email assessment</a>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
6
next-env.d.ts
vendored
Normal file
6
next-env.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
/// <reference path="./.next/types/routes.d.ts" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
||||
4
next.config.mjs
Normal file
4
next.config.mjs
Normal file
@@ -0,0 +1,4 @@
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {};
|
||||
|
||||
export default nextConfig;
|
||||
963
package-lock.json
generated
Normal file
963
package-lock.json
generated
Normal file
@@ -0,0 +1,963 @@
|
||||
{
|
||||
"name": "bay-area-email-services-marketing",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "bay-area-email-services-marketing",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"next": "^15.3.3",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.15.24",
|
||||
"@types/react": "^19.0.12",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@emnapi/runtime": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
|
||||
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/colour": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
|
||||
"integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-darwin-arm64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
|
||||
"integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-darwin-arm64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-darwin-x64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
|
||||
"integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-darwin-x64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-darwin-arm64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
|
||||
"integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-darwin-x64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
|
||||
"integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-arm": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
|
||||
"integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-arm64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
|
||||
"integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-ppc64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
|
||||
"integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-riscv64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
|
||||
"integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-s390x": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
|
||||
"integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-x64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
|
||||
"integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
|
||||
"integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
|
||||
"integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-arm": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
|
||||
"integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-arm": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-arm64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
|
||||
"integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-arm64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-ppc64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
|
||||
"integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-ppc64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-riscv64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
|
||||
"integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-riscv64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-s390x": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
|
||||
"integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-s390x": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-x64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
|
||||
"integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-x64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linuxmusl-arm64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
|
||||
"integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linuxmusl-x64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
|
||||
"integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linuxmusl-x64": "1.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-wasm32": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
|
||||
"integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
|
||||
"cpu": [
|
||||
"wasm32"
|
||||
],
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@emnapi/runtime": "^1.7.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-win32-arm64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
|
||||
"integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-win32-ia32": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
|
||||
"integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-win32-x64": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
|
||||
"integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/env": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.18.tgz",
|
||||
"integrity": "sha512-hAV85Ckd9QR6RvH04MEKwsfLTksvFpO47j9xwtoIuvuPnlwecpSi+uZTtm8HirVbtlI2Fnz//xpcSTjFdyJk+g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@next/swc-darwin-arm64": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.18.tgz",
|
||||
"integrity": "sha512-w0WvQf1n+txiwns/9pwIQteCJpZTbxzO2SE0FLcwuD4v0WEh1JPOjdyxWL21XwJsdpx8cFRjyzxzCS/siP7HcQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-darwin-x64": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.18.tgz",
|
||||
"integrity": "sha512-znn71QmDuxm+BOaglihMZfvyySMnNljkVIY5Z2TCssBmm+WqL6c19VhtH5ktFkHa8EZ2bnTUpcNcmNSQsg67og==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-linux-arm64-gnu": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.18.tgz",
|
||||
"integrity": "sha512-yPPe5MNL+igZUa+OsqQJisqSfh6oarIuA1Q0BDxljGJhRQyZeP+WRHh7rs/jZUGMh5aY0YdIjXZG0VohkKkUdw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-linux-arm64-musl": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.18.tgz",
|
||||
"integrity": "sha512-glaCczEWIrHsokFZ3pP08U4BpKxwIdnT+txdOM32OBgpL9Yw4aqx8NejmgtZQZOdstQ5f0L3CasIZudzCuD+nw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-linux-x64-gnu": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.18.tgz",
|
||||
"integrity": "sha512-oUfg2EgJmU3R0OCOWiokGFUTvZiPfXtriXiuF3YNxRoROCdgvTedHIzYoeKH34gsZxS/V7mHbfq2hpAHwhH1/A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-linux-x64-musl": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.18.tgz",
|
||||
"integrity": "sha512-JLxSP3KTd9iu/bvUMQxH7RJo9xKSHf55/6RPE4a6FTSZygGn7uvZbCej0AHXydwkggQGSD9UddSjwv6Xz5ESfA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-win32-arm64-msvc": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.18.tgz",
|
||||
"integrity": "sha512-ir1v7enP52K2HNz3tQQvwF+x7VNxBk1ciiZ18WBPvxf4C59IqdfmHPJYK3vH7rSxpuCVw/8C712wTXNAtEp+NA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@next/swc-win32-x64-msvc": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.18.tgz",
|
||||
"integrity": "sha512-LIu5me6QTANCd25E7I5uIEfvgQ06RK7tvHAbYo3zCb3VpxQEPvMcSpd87NwUABDT6MbGPdEGR5VRiK4PPTJhQg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/helpers": {
|
||||
"version": "0.5.15",
|
||||
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
|
||||
"integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"tslib": "^2.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.19.19",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz",
|
||||
"integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "19.2.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz",
|
||||
"integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"csstype": "^3.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/react-dom": {
|
||||
"version": "19.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
|
||||
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@types/react": "^19.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001793",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz",
|
||||
"integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "CC-BY-4.0"
|
||||
},
|
||||
"node_modules/client-only": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
|
||||
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "3.2.3",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
||||
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/detect-libc": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
||||
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.12",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
|
||||
"integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/next": {
|
||||
"version": "15.5.18",
|
||||
"resolved": "https://registry.npmjs.org/next/-/next-15.5.18.tgz",
|
||||
"integrity": "sha512-eKL8zUJkX9Y5lE+RX/2YJoItVdGlIscyVyboeD9wSpp0PaGqjoA4tTpT2qPqz9ax+5IzGESyLSeZ/RCwbSZ2uQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@next/env": "15.5.18",
|
||||
"@swc/helpers": "0.5.15",
|
||||
"caniuse-lite": "^1.0.30001579",
|
||||
"postcss": "8.4.31",
|
||||
"styled-jsx": "5.1.6"
|
||||
},
|
||||
"bin": {
|
||||
"next": "dist/bin/next"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@next/swc-darwin-arm64": "15.5.18",
|
||||
"@next/swc-darwin-x64": "15.5.18",
|
||||
"@next/swc-linux-arm64-gnu": "15.5.18",
|
||||
"@next/swc-linux-arm64-musl": "15.5.18",
|
||||
"@next/swc-linux-x64-gnu": "15.5.18",
|
||||
"@next/swc-linux-x64-musl": "15.5.18",
|
||||
"@next/swc-win32-arm64-msvc": "15.5.18",
|
||||
"@next/swc-win32-x64-msvc": "15.5.18",
|
||||
"sharp": "^0.34.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@opentelemetry/api": "^1.1.0",
|
||||
"@playwright/test": "^1.51.1",
|
||||
"babel-plugin-react-compiler": "*",
|
||||
"react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
|
||||
"react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
|
||||
"sass": "^1.3.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@opentelemetry/api": {
|
||||
"optional": true
|
||||
},
|
||||
"@playwright/test": {
|
||||
"optional": true
|
||||
},
|
||||
"babel-plugin-react-compiler": {
|
||||
"optional": true
|
||||
},
|
||||
"sass": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.31",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
||||
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/postcss"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.6",
|
||||
"picocolors": "^1.0.0",
|
||||
"source-map-js": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "19.2.6",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz",
|
||||
"integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-dom": {
|
||||
"version": "19.2.6",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz",
|
||||
"integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"scheduler": "^0.27.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^19.2.6"
|
||||
}
|
||||
},
|
||||
"node_modules/scheduler": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
|
||||
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.8.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
|
||||
"integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
|
||||
"license": "ISC",
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/sharp": {
|
||||
"version": "0.34.5",
|
||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
|
||||
"integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@img/colour": "^1.0.0",
|
||||
"detect-libc": "^2.1.2",
|
||||
"semver": "^7.7.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-darwin-arm64": "0.34.5",
|
||||
"@img/sharp-darwin-x64": "0.34.5",
|
||||
"@img/sharp-libvips-darwin-arm64": "1.2.4",
|
||||
"@img/sharp-libvips-darwin-x64": "1.2.4",
|
||||
"@img/sharp-libvips-linux-arm": "1.2.4",
|
||||
"@img/sharp-libvips-linux-arm64": "1.2.4",
|
||||
"@img/sharp-libvips-linux-ppc64": "1.2.4",
|
||||
"@img/sharp-libvips-linux-riscv64": "1.2.4",
|
||||
"@img/sharp-libvips-linux-s390x": "1.2.4",
|
||||
"@img/sharp-libvips-linux-x64": "1.2.4",
|
||||
"@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
|
||||
"@img/sharp-libvips-linuxmusl-x64": "1.2.4",
|
||||
"@img/sharp-linux-arm": "0.34.5",
|
||||
"@img/sharp-linux-arm64": "0.34.5",
|
||||
"@img/sharp-linux-ppc64": "0.34.5",
|
||||
"@img/sharp-linux-riscv64": "0.34.5",
|
||||
"@img/sharp-linux-s390x": "0.34.5",
|
||||
"@img/sharp-linux-x64": "0.34.5",
|
||||
"@img/sharp-linuxmusl-arm64": "0.34.5",
|
||||
"@img/sharp-linuxmusl-x64": "0.34.5",
|
||||
"@img/sharp-wasm32": "0.34.5",
|
||||
"@img/sharp-win32-arm64": "0.34.5",
|
||||
"@img/sharp-win32-ia32": "0.34.5",
|
||||
"@img/sharp-win32-x64": "0.34.5"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/styled-jsx": {
|
||||
"version": "5.1.6",
|
||||
"resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
|
||||
"integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"client-only": "0.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@babel/core": {
|
||||
"optional": true
|
||||
},
|
||||
"babel-plugin-macros": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
22
package.json
Normal file
22
package.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "bay-area-email-services-marketing",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"next": "^15.3.3",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.15.24",
|
||||
"@types/react": "^19.0.12",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
}
|
||||
BIN
public/assets/mail-flow-panel-light.png
Normal file
BIN
public/assets/mail-flow-panel-light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 MiB |
BIN
public/assets/mail-flow-panel.png
Normal file
BIN
public/assets/mail-flow-panel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
86
research-handover.yaml
Normal file
86
research-handover.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
goal: >
|
||||
Informationssammlung fuer eine lokale Marketing-/Landingpage fuer Bay Area Email Services, damit spaeter eine SEO-starke SaaS-/Service-Landingpage geplant werden kann.
|
||||
current_phase: >
|
||||
research
|
||||
owner: >
|
||||
swarm-researcher
|
||||
context:
|
||||
- "Produkt: Business email hosting fuer Corpus Christi / Coastal Bend mit 25 GB Mailboxen fuer $5 pro Inbox, AWS-basierter Infrastruktur, inbound buffering in Amazon S3, outbound via Amazon SES, hot standby/failover, DNS-Setup, Migration und laufendem lokalen Support."
|
||||
- "Google SEO-Grundlage: Seiten sollten Suchmaschinen helfen, Inhalt und Seitenstruktur zu verstehen, aber vor allem Nutzern helfen, die richtige Entscheidung zu treffen; Ranking-Garantien sind nicht belastbar."
|
||||
- "Local SEO-Grundlage: Google Business Profile sollte reale Business-Daten, passende Service Areas und klare Service-Beschreibungen nutzen; wer Kunden nicht am Standort empfaengt, muss Service-Area-Regeln sauber beachten."
|
||||
- "FAQPage Rich Results werden laut Google ab 7. Mai 2026 nicht mehr in Google Search angezeigt; FAQs bleiben fuer Nutzer und Long-Tail-Intent sinnvoll, sollten aber nicht als Rich-Result-Hebel verkauft werden."
|
||||
- "Amazon SES unterstuetzt DKIM, SPF und DMARC, Reputation-/Deliverability-Dashboards, Bounce-/Complaint-Monitoring und Email Receiving mit Speicherung in Amazon S3."
|
||||
- "AWS empfiehlt fuer SES typischerweise DKIM und optional Custom MAIL FROM; Deliverability haengt weiter von Domain-Reputation, Empfaengerfiltern, Versandmustern und DNS-Korrektheit ab."
|
||||
constraints:
|
||||
- "Keine Implementierung in dieser Phase; nur Research und Handover."
|
||||
- "Marketing-Claims muessen belegbar, qualifiziert und nicht irrefuehrend formuliert werden."
|
||||
- "Preisclaim '$5 per inbox' sollte mit klaren Bedingungen erscheinen: Speicher, Abrechnung, Setup-/Migrationskosten, Supportumfang und etwaige Limits."
|
||||
- "Keine absoluten Garantien wie 'no emails lost', 'always reaches the inbox', 'zero downtime' oder 'spam-proof', sofern keine SLA-/Monitoring-/Rechtsgrundlage vorliegt."
|
||||
assumptions:
|
||||
- "Die Zielkunden sind lokale kleine Unternehmen, die professionelle Domain-E-Mail ohne eigenes IT-Team wollen."
|
||||
- "Bay Area Email Services darf AWS, Amazon S3 und Amazon SES namentlich nennen, ohne eine Partnerschaft oder Zertifizierung zu behaupten."
|
||||
- "Der Service ist primaer ein lokaler Managed-Service, kann aber spaeter als SaaS-nahe Landingpage mit Self-Serve-Anteilen positioniert werden."
|
||||
- "Telefon und Assessment-CTA aus dem bestehenden Kontext bleiben valide: (361) 765-8400 und kostenloses 20-Minuten-Assessment."
|
||||
open_questions:
|
||||
- "Gibt es eine belegbare Uptime-Historie oder ein formales SLA fuer Failover/Verfuegbarkeit?"
|
||||
- "Sind Setup, Migration und DNS-Konfiguration im $5/InBox-Preis enthalten oder einmalige Leistungen?"
|
||||
- "Welche Mailbox-Protokolle/Clients werden sicher unterstuetzt: IMAP, SMTP, webmail, Outlook, Apple Mail, iOS/Android?"
|
||||
- "Gibt es lokale Testimonials, Review-Sterne, Case Studies oder konkrete Kundenlogos, die verwendet werden duerfen?"
|
||||
- "Soll die Seite unter der bestehenden Bay Area IT Website laufen oder als eigenstaendige Produktdomain?"
|
||||
requested_output:
|
||||
- "Zielgruppen:"
|
||||
- " - Lokale kleine Unternehmen in Corpus Christi / Coastal Bend, die noch Gmail/Yahoo oder Hosting-Mail nutzen."
|
||||
- " - Kanzleien, Bau-/Handwerksbetriebe, Praxen, lokale Dienstleister und Shops, bei denen verpasste E-Mails direkte Umsatz-/Vertrauenskosten verursachen."
|
||||
- " - Unternehmen mit 2-30 Mailboxen, die Outlook/iPhone-Setup, Migration und laufenden Support wichtiger finden als reine Software-Suite-Funktionen."
|
||||
- " - Existing IT-helpdesk clients, die E-Mail als Teil eines betreuten IT-Betriebs auslagern wollen."
|
||||
- "Kernbotschaften:"
|
||||
- " - Professional email on your domain, managed locally in Corpus Christi."
|
||||
- " - $5 per inbox with 25 GB storage, plus setup and support from a local IT team."
|
||||
- " - Built for continuity: resilient AWS-backed mail flow, S3 inbound buffering, and standby failover."
|
||||
- " - Better email foundation: DNS, SPF, DKIM, DMARC, migration and troubleshooting handled for you."
|
||||
- " - Alternative zu ueberdimensionierten Suites: business email without paying for tools your team does not use."
|
||||
- "Conversion-Abschnitte:"
|
||||
- " - Hero: klares Angebot, lokaler Bezug, Preisanker, primaerer CTA 'Book a 20-minute email assessment' und sekundärer CTA 'See what is included'."
|
||||
- " - Pain section: free Gmail looks unprofessional, missed messages, spam-folder delivery, DNS confusion, downtime, migration anxiety."
|
||||
- " - Offer block: 25 GB mailbox, $5/inbox, forwards, auto-replies, spam filtering, DNS setup, migration, local support."
|
||||
- " - Infrastructure explainer: simple visual flow inbound buffering -> mailbox delivery -> SES outbound -> standby/failover; nicht zu technisch im Above-the-fold."
|
||||
- " - Local trust block: Corpus Christi / Coastal Bend service area, 30+ years IT experience, 30+ local businesses supported, phone number, response expectations."
|
||||
- " - Migration block: what we need from you, timeline, downtime-minimization, old provider coverage."
|
||||
- " - Pricing/FAQ: transparent recurring price, one-time setup/migration caveats, supported clients, DNS records, deliverability, support scope."
|
||||
- " - Final CTA: assessment booking, call, or message form with low-friction copy."
|
||||
- "Vertrauenssignale:"
|
||||
- " - Real local phone number and service-area cities: Corpus Christi, Portland, Rockport, Aransas Pass, Kingsville."
|
||||
- " - Specific infrastructure details: Amazon SES, Amazon S3 buffering, hot standby, DNS authentication."
|
||||
- " - Operational proof: monitoring screenshots, status page, uptime history, migration checklist, before/after DNS audit examples."
|
||||
- " - Social proof: permitted testimonials, review snippets, local client categories, years of experience."
|
||||
- " - Security hygiene: SPF/DKIM/DMARC, spam filtering, password reset process, access support, incident response language."
|
||||
- "CTA-Empfehlungen:"
|
||||
- " - Primary: 'Book a 20-minute email assessment'."
|
||||
- " - Secondary: 'Check my domain email setup' or 'Get a mailbox count estimate'."
|
||||
- " - Phone CTA for local intent: 'Call (361) 765-8400'."
|
||||
- " - Mid-page CTA after pain section: 'Find out why your emails go to spam'."
|
||||
- " - Pricing CTA: 'Start with your first mailbox' only if onboarding can actually begin without custom scoping."
|
||||
- "Risiken/Claims die sauber formuliert werden sollten:"
|
||||
- " - Deliverability: use 'configured to improve deliverability' or 'helps reduce spam-folder risk', not 'guaranteed inbox placement'."
|
||||
- " - Uptime/failover: use 'designed for continuity' and 'standby server can take over within minutes' only if monitored and tested; avoid 'zero downtime'."
|
||||
- " - S3 buffering: use 'messages can be safely buffered during maintenance or outage windows' if technically exact; avoid 'no message is ever lost' unless the entire chain is guaranteed."
|
||||
- " - Security: use 'email security hardening' and 'spam filtering configuration'; avoid 'hack-proof', 'fully secure', or unqualified compliance claims."
|
||||
- " - AWS: say 'built on AWS services including Amazon S3 and Amazon SES'; avoid implying AWS partnership/certification unless documented."
|
||||
- " - Local support: define support hours, SLA, emergency coverage and whether 24/7 applies."
|
||||
- " - Pricing: disclose whether DNS setup, migration, mailbox backups, archiving, support, taxes or minimum mailbox count are included."
|
||||
done_definition:
|
||||
- "Research packet identifies audience, messages, sections, trust signals, CTAs and claim risks."
|
||||
- "Next planning role can create a landing-page outline and SEO brief without repeating foundational research."
|
||||
- "No production files or app implementation are created in this phase."
|
||||
verification:
|
||||
- "Created project folder: C:\\Users\\a931627\\Documents\\gitea\\bayarea\\E-Mail Webseite Marketing"
|
||||
- "Checked swarm-research skill and handover contract."
|
||||
- "Reviewed current public sources for Google SEO, Google Business Profile, FAQ structured data, Amazon SES and FTC ad substantiation."
|
||||
- "Agent launch attempted but blocked by active thread limit; sequential research fallback used."
|
||||
sources:
|
||||
- "Google SEO Starter Guide: https://developers.google.com/search/docs/fundamentals/seo-starter-guide"
|
||||
- "Google Business Profile Guidelines: https://support.google.com/business/answer/3038177"
|
||||
- "Google FAQ structured data deprecation notice: https://developers.google.com/search/docs/appearance/structured-data/faqpage"
|
||||
- "Amazon SES documentation overview: https://aws.amazon.com/documentation-overview/ses/"
|
||||
- "AWS SES domain/deliverability guidance: https://aws.amazon.com/blogs/messaging-and-targeting/choosing-the-right-domain-for-optimal-deliverability-with-amazon-ses/"
|
||||
- "FTC advertising substantiation principles: https://www.ftc.gov/business-guidance/resources/health-products-compliance-guidance"
|
||||
158
research/landingpage-best-practices-handover.yaml
Normal file
158
research/landingpage-best-practices-handover.yaml
Normal file
@@ -0,0 +1,158 @@
|
||||
goal: >
|
||||
Prepare a concise research handover for turning Bay Area Email Services into a separate
|
||||
marketing/Product-Led landing page that can later support SaaS positioning.
|
||||
current_phase: >
|
||||
research
|
||||
owner: >
|
||||
swarm-researcher
|
||||
context:
|
||||
- The separate project folder already exists at C:/Users/a931627/Documents/gitea/bayarea/E-Mail Webseite Marketing.
|
||||
- Existing project content positions the offer as local Corpus Christi business email setup/support plus a distinct Bay Area Email Services hosting offer.
|
||||
- Current core offer from local materials: 25 GB business mailbox, $5 per inbox, domain email, DNS setup for MX/SPF/DKIM/DMARC, migration, spam filtering, aliases/forwards/auto-replies, Outlook/mobile setup, and local support.
|
||||
- Infrastructure positioning from existing materials: AWS-based platform, inbound S3 buffering before delivery, outbound Amazon SES, hot standby failover, DNS/migration/day-to-day management handled locally.
|
||||
- Google Workspace Business Starter is a relevant comparison anchor: custom business email, 30 GB pooled storage per user, listed at $7/user/month on annual billing in the checked US-facing page.
|
||||
- Microsoft 365 Business Basic is a relevant comparison anchor: custom business email plus web/mobile Office apps, Teams, OneDrive, spam/malware filtering, listed at $6/user/month paid yearly on the checked US-facing page.
|
||||
- AWS SES documentation supports claims around deliverability insights, configuration recommendations, and SPF/DKIM/DMARC support, but not a blanket guarantee that every message reaches inboxes.
|
||||
- AWS S3 Standard documentation supports a factual durability/availability claim for objects stored in S3, but that should not be converted into an email-platform uptime guarantee unless the service has its own SLA.
|
||||
- Google SEO guidance favors descriptive URLs, helpful reliable people-first content, and structured data where it accurately describes the page/business.
|
||||
recommended_sections:
|
||||
- id: hero
|
||||
purpose: >
|
||||
State the product-level promise before listing infrastructure.
|
||||
content_direction:
|
||||
- "Headline option: Business email that stays professional, deliverable, and locally supported."
|
||||
- "Subcopy should combine domain email, DNS correctness, migration, and local Corpus Christi support."
|
||||
- "Primary CTA: Get email set up / Book assessment. Secondary CTA: Compare plans or See how migration works."
|
||||
decision_points:
|
||||
- Decide whether "$5 per inbox" appears in the hero or in the pricing band; hero price is strong for product-led positioning, but may attract low-intent buyers if setup/support is the real margin.
|
||||
- id: problem
|
||||
purpose: >
|
||||
Name the business pain in non-technical terms before introducing SPF/DKIM/DMARC.
|
||||
content_direction:
|
||||
- "Missed leads from spam-folder delivery."
|
||||
- "Unprofessional free Gmail/Yahoo addresses."
|
||||
- "Downtime or lockouts from old/shared hosting email."
|
||||
- "No clear local support when email breaks."
|
||||
- id: product_snapshot
|
||||
purpose: >
|
||||
Make the offer scannable as a product, not only a consulting service.
|
||||
content_direction:
|
||||
- "25 GB mailbox."
|
||||
- "$5 per inbox."
|
||||
- "Domain email addresses."
|
||||
- "DNS authentication setup."
|
||||
- "Migration and device setup."
|
||||
- "Local support."
|
||||
- id: benefits_map
|
||||
purpose: >
|
||||
Translate technical features into buyer outcomes.
|
||||
content_direction:
|
||||
- "SPF/DKIM/DMARC -> better authentication and lower spoofing/spam risk."
|
||||
- "S3 inbound buffering -> continuity during maintenance or server issues."
|
||||
- "Amazon SES outbound -> deliverability tooling and sender-authentication foundation."
|
||||
- "Hot standby -> reduced downtime risk."
|
||||
- "Local setup/support -> fewer self-service admin failures."
|
||||
- id: how_it_works
|
||||
purpose: >
|
||||
Explain the architecture without making unsupported guarantees.
|
||||
content_direction:
|
||||
- "1. We verify your domain and DNS."
|
||||
- "2. We create mailboxes, aliases, forwards, and spam rules."
|
||||
- "3. We migrate existing mail and configure Outlook/iPhone/iPad."
|
||||
- "4. We monitor and support day-to-day changes."
|
||||
- "Optional visual: inbound email -> S3 buffer -> mailbox delivery; outbound email -> SES -> recipients."
|
||||
- id: pricing
|
||||
purpose: >
|
||||
Present the offer as simple and transparent while leaving room for migration/setup fees.
|
||||
content_direction:
|
||||
- "Single anchor: $5 per inbox/month, 25 GB included."
|
||||
- "Separate setup/migration/support line items if they are not included."
|
||||
- "Use a comparison row against Google Workspace Starter and Microsoft 365 Business Basic only for fit, not as attack copy."
|
||||
decision_points:
|
||||
- Clarify whether $5 includes support, DNS setup, migration, backup/buffering, and device setup or whether those are onboarding/support add-ons.
|
||||
- Clarify billing interval, minimum mailbox count, cancellation policy, and whether taxes/fees apply.
|
||||
- id: comparison
|
||||
purpose: >
|
||||
Differentiate against Google Workspace, Microsoft 365, and shared hosting.
|
||||
content_direction:
|
||||
- "Google Workspace: best when a business wants the full Google productivity suite and AI/collaboration bundle."
|
||||
- "Microsoft 365: best when a business wants Microsoft apps, Teams, OneDrive, and broader Office ecosystem."
|
||||
- "Shared hosting email: often cheap, but weaker support, deliverability, admin control, and resilience story."
|
||||
- "Bay Area Email Services: best when a small local business wants professional email, careful DNS/migration, resilient hosting, and local support without buying a full office suite."
|
||||
- id: trust_security
|
||||
purpose: >
|
||||
Reduce perceived risk around email infrastructure.
|
||||
content_direction:
|
||||
- "30+ years IT experience."
|
||||
- "30+ local businesses supported, if verifiable."
|
||||
- "Plain-English DNS/security explanations."
|
||||
- "Corpus Christi / Coastal Bend local support."
|
||||
- "Use exact terms: SPF, DKIM, DMARC, spam filtering, authentication, failover, S3 buffering, SES."
|
||||
decision_points:
|
||||
- Avoid absolute claims like 'no emails lost' or 'guaranteed inbox placement' unless backed by SLA/logging/legal review.
|
||||
- Decide whether to publish uptime history, SLA, data retention, backup, and incident-response language.
|
||||
- id: migration_onboarding
|
||||
purpose: >
|
||||
Turn switching anxiety into a managed process.
|
||||
content_direction:
|
||||
- "What we need: domain access, user list, current provider details."
|
||||
- "What happens next: discovery, DNS plan, mailbox creation, migration window, device setup, post-migration check."
|
||||
- "Address downtime explicitly with realistic expectations."
|
||||
- id: local_seo
|
||||
purpose: >
|
||||
Capture Corpus Christi and Coastal Bend demand while preserving product-led readability.
|
||||
content_direction:
|
||||
- "Primary URL idea: /business-email-hosting-corpus-christi or /business-email-services-corpus-christi."
|
||||
- "Support pages/blogs: business email vs Google Workspace vs Microsoft 365; why business emails go to spam; SPF DKIM DMARC setup; email migration checklist; shared hosting email problems."
|
||||
- "Use LocalBusiness/ProfessionalService structured data for the local company page and Product/Offer-style schema only where pricing/offer details are accurate."
|
||||
- id: faq
|
||||
purpose: >
|
||||
Answer purchase-blocking questions and support SEO long-tail queries.
|
||||
content_direction:
|
||||
- "Is this Google Workspace or Microsoft 365?"
|
||||
- "Can you migrate from Gmail/Yahoo/shared hosting?"
|
||||
- "Will my emails stop going to spam?"
|
||||
- "What does $5 per inbox include?"
|
||||
- "Do you set up Outlook/iPhone/iPad?"
|
||||
- "What happens if the mail server is down?"
|
||||
- "Do you support aliases, forwards, shared inboxes, and auto-replies?"
|
||||
constraints:
|
||||
- Keep claims legally and technically defensible; use 'designed to', 'helps', 'reduces risk', and 'supports' where infrastructure docs do not prove end-to-end guarantees.
|
||||
- The page must work both as a local service landing page now and as a SaaS/product landing page later.
|
||||
- Do not position directly against Google Workspace/Microsoft 365 as universally better; position by fit and buyer need.
|
||||
- Existing content has encoding artifacts in src/pages/ServicesPage.tsx, so future implementation should normalize copy/encoding before reuse.
|
||||
assumptions:
|
||||
- The product brand remains Bay Area Email Services unless a new SaaS brand/domain is chosen.
|
||||
- The first target audience is small businesses in Corpus Christi/Coastal Bend, not national self-serve SaaS buyers.
|
||||
- $5 per inbox is an ongoing mailbox price, while setup/migration/support terms still need clarification.
|
||||
- The AWS/S3/SES architecture is already implemented or will be implemented as described in current materials.
|
||||
open_questions:
|
||||
- Is there a separate setup fee, migration fee, monthly support plan, or minimum mailbox count?
|
||||
- What exact uptime/failover/SLA claims are allowed?
|
||||
- What retention period applies to S3-buffered inbound messages?
|
||||
- Are testimonials, case studies, Google reviews, or named customer logos available?
|
||||
- Will the site use the existing Bay Area IT domain, a subdomain, or a standalone product domain?
|
||||
- Should the product target only Corpus Christi/Coastal Bend or expand to broader US small businesses?
|
||||
requested_output:
|
||||
- A landingpage plan that converts the recommended_sections into wireframe-level content blocks.
|
||||
- A pricing/packaging decision sheet clarifying what $5 includes and which services are add-ons.
|
||||
- A claim-safety checklist for all infrastructure, deliverability, uptime, security, and migration claims.
|
||||
done_definition:
|
||||
- The next role can draft a landingpage without rediscovering product facts, competitor anchors, SEO direction, or unresolved decisions.
|
||||
- Each major section has a clear purpose, content direction, and known decision points.
|
||||
- Unsupported claims are flagged before implementation.
|
||||
verification:
|
||||
- Checked local project for existing email-service copy and product facts.
|
||||
- Confirmed separate marketing folder exists and added this research handover under research/.
|
||||
- Checked current public pages/docs for Google Workspace, Microsoft 365, Google Search Central, AWS SES, and AWS S3.
|
||||
- Agent launch was attempted but blocked by the current collab thread limit; research was completed sequentially as fallback.
|
||||
sources:
|
||||
- "Existing brief: C:/Users/a931627/Documents/gitea/bayarea/E-Mail Webseite Marketing/PROJECT_BRIEF.md"
|
||||
- "Existing repo content: C:/Users/a931627/Documents/gitea/bayarea/byarea/src/data/seoData.ts"
|
||||
- "Existing repo content: C:/Users/a931627/Documents/gitea/bayarea/byarea/src/pages/ServicesPage.tsx"
|
||||
- "Google Workspace Business pricing/features: https://workspace.google.com/intl/en_US/business/"
|
||||
- "Microsoft 365 Business Basic pricing/features: https://www.microsoft.com/en-us/microsoft-365/business/microsoft-365-business-basic"
|
||||
- "Google SEO Starter Guide: https://developers.google.com/search/docs/fundamentals/seo-starter-guide"
|
||||
- "Google LocalBusiness structured data: https://developers.google.com/search/docs/appearance/structured-data/local-business"
|
||||
- "Amazon SES documentation overview: https://aws.amazon.com/documentation-overview/ses/"
|
||||
- "Amazon S3 data durability documentation: https://docs.aws.amazon.com/AmazonS3/latest/userguide/DataDurability.html"
|
||||
215
research/seo-local-research-handover.yaml
Normal file
215
research/seo-local-research-handover.yaml
Normal file
@@ -0,0 +1,215 @@
|
||||
goal: >
|
||||
Informationssammlung fuer SEO und Local SEO einer separaten Marketing-Webseite/Landingpage
|
||||
fuer Business Email Services in Corpus Christi und Coastal Bend.
|
||||
current_phase: >
|
||||
research
|
||||
owner: >
|
||||
swarm-researcher
|
||||
context:
|
||||
- Das Angebot kombiniert lokale Einrichtung und Support mit gehosteter Business-E-Mail:
|
||||
Domain-Adressen, Outlook/iPhone/iPad Setup, SPF/DKIM/DMARC, Migration, Amazon SES
|
||||
Deliverability, AWS-Redundanz, 25 GB Mailboxen fuer $5 pro Inbox.
|
||||
- Google Local Ranking wird offiziell stark durch Relevance, Distance und Prominence
|
||||
beeinflusst; Google Business Profile, vollstaendige Services, Bewertungen und lokale
|
||||
Signale sind deshalb fuer diese Seite relevant.
|
||||
- Google empfiehlt eindeutige, beschreibende Title-Tags, hilfreiche Inhalte fuer echte
|
||||
Nutzer und strukturierte Daten dort, wo sie den Seiteninhalt korrekt beschreiben.
|
||||
- FAQ Rich Results sind fuer die meisten nicht-behoerdlichen und nicht-gesundheitsbezogenen
|
||||
Websites stark eingeschraenkt; FAQ-Inhalte bleiben trotzdem sinnvoll fuer Nutzer,
|
||||
interne Struktur und AI/maschinenlesbares Verstaendnis.
|
||||
- Lokale Wettbewerber in Corpus Christi/Coastal Bend positionieren sich meist breit
|
||||
als Managed-IT-, Cybersecurity-, VoIP-, Netzwerk- oder Cloud-Anbieter statt mit einer
|
||||
dedizierten Business-Email-Hosting-Landingpage.
|
||||
- Beispiele fuer lokale Wettbewerber/Referenzen: Coltarus Halo, 1820 Services, Southern
|
||||
Sky Technologies, ReNetworked, Corpus Christi IT Services, Copano IT, ITECH2 und
|
||||
Tech-Net. Viele sprechen IT-Support breit an; klare Email-only-Positionierung und
|
||||
transparente Inbox-Preise sind weniger sichtbar.
|
||||
- AWS SES kann eingehende E-Mails per Receipt Rules unter anderem in Amazon S3 speichern;
|
||||
Amazon SES Virtual Deliverability Manager adressiert Inbox Deliverability, Reputation
|
||||
und Authentifizierungsprobleme wie fehlende SPF/DMARC/DKIM-Eintraege.
|
||||
constraints:
|
||||
- Separate Marketing-/SaaS-artige Seite soll eine Ebene ueber dem bestehenden Projekt
|
||||
liegen: C:\Users\a931627\Documents\gitea\bayarea\E-Mail Webseite Marketing.
|
||||
- Nicht ueberclaimen: Amazon SES, SPF, DKIM und DMARC als bessere technische Grundlage,
|
||||
geringeres Spam-Risiko und staerkere Reputation formulieren, nicht als garantierte
|
||||
Inbox-Platzierung.
|
||||
- Corpus Christi sollte primaerer lokaler Fokus sein; Coastal Bend und Orte wie
|
||||
Portland, Rockport, Aransas Pass und Kingsville sollten sekundaer und nicht als
|
||||
duplizierte Doorway-Pages behandelt werden.
|
||||
- Preisangabe "$5 pro Inbox" nur mit Abrechnungszeitraum und Leistungsumfang verwenden,
|
||||
sobald das bestaetigt ist.
|
||||
assumptions:
|
||||
- Zielkunden sind kleine Unternehmen, Office Manager, lokale Dienstleister und Teams,
|
||||
die von Gmail/Yahoo, Webhost-Mail oder schlecht betreutem Microsoft/Outlook-Setup
|
||||
weg wollen.
|
||||
- Lokale Naehe, schneller Support und technische E-Mail-Kompetenz sind staerkere
|
||||
Differenzierer als ein generisches "Managed IT" Versprechen.
|
||||
- Die Seite darf sichtbare Preise, lokale Trust Proofs und eine direkte Assessment-CTA
|
||||
verwenden.
|
||||
- Es gibt oder soll ein Google Business Profile geben, dessen Services und Bewertungen
|
||||
auf diese E-Mail-Leistung ausgerichtet werden koennen.
|
||||
open_questions:
|
||||
- Soll die Marke "Bay Area Email Services", "Bay Area Business Email" oder ein neuer
|
||||
SaaS-artiger Produktname werden?
|
||||
- Ist "$5 pro Inbox" monatlich, jaehrlich, promotional oder an Mindestanzahl/Setup-Fee
|
||||
gebunden?
|
||||
- Sind Kalender/Kontakte/Groupware enthalten, oder ist das Produkt primaer IMAP/SMTP
|
||||
Mailbox plus Outlook/mobile Einrichtung?
|
||||
- Welche SLA-, Uptime-, Backup-, Retention- und Failover-Aussagen sind technisch und
|
||||
rechtlich sicher belegbar?
|
||||
- Soll die Seite nur lokal verkaufen oder spaeter national skalierbar als SaaS-Landingpage
|
||||
funktionieren?
|
||||
requested_output:
|
||||
- Landingpage-Plan mit einer kanonischen Hauptseite fuer Corpus Christi plus spaeteren
|
||||
Support-/Vergleichsseiten fuer Migration, SPF/DKIM/DMARC und Outlook/iPhone Setup.
|
||||
- SEO-Brief fuer Copy, Informationsarchitektur, FAQ, Schema und Google Business Profile.
|
||||
done_definition:
|
||||
- Die naechste Rolle kann daraus direkt Seitenstruktur, Copy oder Frontend-Prototyp
|
||||
erstellen, ohne die SEO-Grundlagen erneut zu recherchieren.
|
||||
- Die Seite adressiert lokale transaktionale Suchintention, erklaert das Produkt klar,
|
||||
differenziert sich gegen generische Managed-IT-Seiten und erzeugt Assessment- oder
|
||||
Quote-Anfragen.
|
||||
keyword_clusters:
|
||||
primary_local_transactional:
|
||||
- business email services Corpus Christi
|
||||
- business email hosting Corpus Christi
|
||||
- professional business email Corpus Christi
|
||||
- small business email setup Corpus Christi
|
||||
- business email provider Corpus Christi
|
||||
- custom domain email Corpus Christi
|
||||
coastal_bend_modifiers:
|
||||
- business email Coastal Bend
|
||||
- business email hosting Coastal Bend
|
||||
- IT support email setup Coastal Bend
|
||||
- business email Portland TX
|
||||
- business email Rockport TX
|
||||
- business email Aransas Pass TX
|
||||
- business email Kingsville TX
|
||||
setup_support_intent:
|
||||
- Outlook email setup Corpus Christi
|
||||
- Outlook setup for business email
|
||||
- iPhone business email setup
|
||||
- iPad email setup for business
|
||||
- email migration services Corpus Christi
|
||||
- migrate business email from Gmail
|
||||
- migrate business email from Yahoo
|
||||
- move from web hosting email
|
||||
deliverability_security_intent:
|
||||
- SPF DKIM DMARC setup Corpus Christi
|
||||
- why business emails go to spam
|
||||
- email DNS setup for business
|
||||
- DMARC setup for small business
|
||||
- business email deliverability help
|
||||
- domain email authentication setup
|
||||
comparison_intent:
|
||||
- Gmail vs business email
|
||||
- web hosting email vs business email hosting
|
||||
- Microsoft 365 vs local email hosting
|
||||
- best email hosting for small business Corpus Christi
|
||||
- affordable business email hosting
|
||||
pricing_intent:
|
||||
- $5 business email inbox
|
||||
- affordable business email Corpus Christi
|
||||
- 25 GB business email mailbox
|
||||
- low cost business email hosting
|
||||
recommended_page_structure:
|
||||
- Hero: "Business Email Hosting in Corpus Christi" mit Preis, 25 GB Mailbox, lokalem
|
||||
Support und primaerer CTA.
|
||||
- Problem: kostenlose Gmail/Yahoo-Adressen, Webhost-Mail-Ausfaelle, Spam-Folder,
|
||||
verpasste Leads und Vertrauensverlust.
|
||||
- Product: Domain-Mailboxen, info@/contact@/user@, Outlook, iPhone, iPad, Aliases,
|
||||
Forwards, Auto-Replies und Custom Spam Filtering.
|
||||
- Deliverability: SPF, DKIM, DMARC, DNS-Konfiguration, Amazon SES, Reputation und
|
||||
plain-English Erklaerung.
|
||||
- Reliability: AWS-Redundanz, S3-Inbound-Buffering, Hot Standby/Failover und
|
||||
Wartungs-/Ausfallpositionierung nur soweit belegbar.
|
||||
- Migration: Wechsel von Gmail, Yahoo, Webhost-Mail oder altem Provider mit minimaler
|
||||
Unterbrechung.
|
||||
- Local Support: Corpus Christi/Coastal Bend, lokale Telefonnummer, Onboarding,
|
||||
Passwort-Resets, neue Nutzer, laufende Hilfe.
|
||||
- Pricing: klarer per-inbox Preis, was enthalten ist, was optional/extra ist.
|
||||
- FAQ: echte Kauf- und Setup-Fragen statt Keyword-Stuffing.
|
||||
- CTA: "Book a 20-minute email setup assessment" und "Get a mailbox count quote".
|
||||
title_meta_ideas:
|
||||
- title: "Business Email Services Corpus Christi | $5/Inbox Local Support"
|
||||
meta: "Professional domain email hosting for Corpus Christi businesses. 25 GB mailboxes, Outlook and iPhone setup, SPF/DKIM/DMARC, migration, and local support."
|
||||
- title: "Business Email Hosting in Corpus Christi | Bay Area Email Services"
|
||||
meta: "Affordable business email hosting with 25 GB mailboxes, Amazon SES deliverability, AWS redundancy, DNS setup, migration, and Coastal Bend IT support."
|
||||
- title: "Professional Email Setup Corpus Christi | Outlook, SPF, DKIM, DMARC"
|
||||
meta: "Upgrade from Gmail, Yahoo, or web-host email. We set up domain email, Outlook, iPhone, iPad, DNS records, spam protection, and email migration."
|
||||
faq_targets:
|
||||
- question: "What is a professional business email address?"
|
||||
intent: "Domain-based email versus free Gmail/Yahoo erklaeren."
|
||||
- question: "Why are my business emails going to spam?"
|
||||
intent: "SPF/DKIM/DMARC und DNS-Fehlkonfiguration verstaendlich erklaeren."
|
||||
- question: "Can you migrate my old email?"
|
||||
intent: "Migration von Gmail/Yahoo/Webhost/Altanbieter abfangen."
|
||||
- question: "Does this work with Outlook, iPhone, and iPad?"
|
||||
intent: "Client- und Device-Setup-Bedenken beantworten."
|
||||
- question: "How much does business email cost?"
|
||||
intent: "$5/inbox und 25 GB Mailbox transparent machen."
|
||||
- question: "Is this Microsoft 365?"
|
||||
intent: "Positionierung gegenueber Microsoft 365 klaeren, ohne Kaeufer zu verwirren."
|
||||
- question: "Do you support businesses outside Corpus Christi?"
|
||||
intent: "Coastal-Bend-Servicegebiet natuerlich einbinden."
|
||||
- question: "What do SPF, DKIM, and DMARC do?"
|
||||
intent: "Technische Autoritaet und Vertrauen aufbauen."
|
||||
content_gap_opportunities:
|
||||
- Dedizierte Email-only-Landingpage statt Email als Unterpunkt in Managed IT.
|
||||
- Sichtbarer per-inbox Preis; viele lokale IT-Anbieter erzwingen erst Kontaktaufnahme.
|
||||
- Plain-English-Seite zu SPF/DKIM/DMARC mit Bezug auf verpasste Leads und Spam-Folder.
|
||||
- Vergleichscontent: Gmail/Yahoo vs Domain Email, Webhost Email vs Managed Business
|
||||
Email, Microsoft 365 vs lokal betreutes Email Hosting.
|
||||
- Lokaler Proof: 30+ Jahre IT-Erfahrung, 30+ lokale Unternehmen, konkrete Orte,
|
||||
Branchen, Testimonials, Response-Zeiten.
|
||||
- Technischer Trust ohne Ueberladung: SES, AWS-Redundanz, S3-Buffering, Failover und
|
||||
25 GB Mailboxes als Business-Vorteile statt Infrastruktur-Deep-Dive.
|
||||
- Setup-Workflow: Domain-Zugang, Mailboxliste, Migrationsfenster, Device Setup,
|
||||
DNS-Verifikation, Go-live-Checkliste.
|
||||
concrete_seo_recommendations:
|
||||
- Eine kanonische Landing-URL nutzen, z.B. /business-email-corpus-christi/ oder
|
||||
/email-services-corpus-christi/.
|
||||
- H1 mit Service und Ort: "Business Email Hosting in Corpus Christi".
|
||||
- Above the fold: Preis, Mailboxgroesse, lokale Hilfe und Domain-Email-Versprechen
|
||||
sichtbar machen.
|
||||
- LocalBusiness oder ProfessionalService Schema mit Name, URL, Telefon, Service Area,
|
||||
Adresse/Area Served, Opening Hours, sameAs und angebotenen Services verwenden.
|
||||
- Service Schema fuer Business Email Services/Email Hosting ergaenzen, wenn die Seite
|
||||
den Service klar beschreibt.
|
||||
- FAQPage Schema nur als semantische Hilfe einbauen; nicht als Traffic-Hebel fuer
|
||||
Google FAQ-Dropdowns verkaufen.
|
||||
- GBP Services abstimmen: Business Email Services, Email Hosting, Email Migration,
|
||||
Microsoft Outlook Setup, IT Support, SPF/DKIM/DMARC Setup.
|
||||
- Kundenbewertungen gezielt, aber natuerlich einsammeln; Wuensche: "business email",
|
||||
"Outlook setup", "email migration", "Corpus Christi", "local support".
|
||||
- Keine duplizierten Ortseiten fuer jede Stadt erstellen, solange kein einzigartiger
|
||||
lokaler Inhalt/Proof vorhanden ist; lieber ein starkes Service-Area-Modul.
|
||||
- Spaetere Content-Seiten priorisieren: "Why business emails go to spam", "SPF DKIM
|
||||
DMARC setup for small businesses", "Business email migration checklist", "Outlook
|
||||
and iPhone business email setup".
|
||||
verification:
|
||||
- Swarm-research Skill und Handover-Contract gelesen.
|
||||
- Vorhandener Zielordner geprueft: C:\Users\a931627\Documents\gitea\bayarea\E-Mail Webseite Marketing.
|
||||
- Ein Subagent fuer Keyword/Local-Intent-Research wurde erfolgreich gestartet und
|
||||
ausgewertet; weitere Agent-Spawns waren durch Thread-Limit blockiert.
|
||||
- Web-Recherche mit aktuellen Quellen zu Google Local SEO, Google Title/Content/FAQ
|
||||
Guidance, AWS SES, Amazon S3 Receiving und lokalen Corpus-Christi-Wettbewerbern
|
||||
durchgefuehrt.
|
||||
- Handover-Datei wurde erstellt.
|
||||
sources:
|
||||
- "Google Business Profile local ranking: https://support.google.com/business/answer/7091/improve-your-local-ranking-on-google"
|
||||
- "Google LocalBusiness structured data: https://developers.google.com/search/docs/appearance/structured-data/local-business"
|
||||
- "Google title link guidance: https://developers.google.com/search/docs/appearance/title-link"
|
||||
- "Google helpful content guidance: https://developers.google.com/search/docs/fundamentals/creating-helpful-content"
|
||||
- "Google FAQ/HowTo rich result changes: https://developers.google.com/search/blog/2023/08/howto-faq-changes"
|
||||
- "Amazon SES S3 receiving action: https://docs.aws.amazon.com/ses/latest/dg/receiving-email-action-s3.html"
|
||||
- "Amazon SES Virtual Deliverability Manager: https://docs.aws.amazon.com/ses/latest/dg/vdm.html"
|
||||
- "Amazon SES email receiving: https://docs.aws.amazon.com/ses/latest/dg/receiving-email.html"
|
||||
- "Coltarus Halo competitor reference: https://www.coltarushalo.com/"
|
||||
- "1820 Services competitor reference: https://1820services.com/"
|
||||
- "Southern Sky Technologies competitor reference: https://getsouthern.com/"
|
||||
- "ReNetworked competitor reference: https://www.renetworked.com/"
|
||||
- "Corpus Christi IT Services competitor reference: https://ccitservices.net/"
|
||||
- "Copano IT competitor reference: https://www.copanoit.com/contact/"
|
||||
- "ITECH2 Corpus Christi competitor reference: https://itech2.net/city/corpus-christi/"
|
||||
- "Tech-Net competitor reference: https://www.tech-net.com/"
|
||||
24
tsconfig.json
Normal file
24
tsconfig.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2017",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
]
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
Reference in New Issue
Block a user