16 KiB
16 KiB
v0.5.3 — Phase 5 Batch 6: Footer + Contact Improvements — 2026-05-17
Completed
- Footer cleanup: email (
info@queuenorth.com), phone ((906) 482-6616), and CTA (Request Consultation) all present - Contact page hero: prominent phone/email display + CTA button
- Home page CTA links added to Trust Signals, Services, Why Queue North sections
- Minor updates to Support page
Files Modified
src/components/layout/Footer.jsx— Footer cleanupsrc/pages/Home.jsx— CTA links in sectionssrc/pages/Contact.jsx— Hero CTAsrc/pages/Support.jsx— Minor updatespackage.json— Version bumped to 0.5.3
Verified
npm run buildpasses- Docker image builds and container starts on port 3001
- Footer renders with email, phone, and CTA
- Contact page hero displays phone/email and Request Consultation button
v0.5.2 — Phase 5 Batch 5: Why Queue North Section Refinement — 2026-05-17
Completed
- Replaced generic "Architecture/Deployment/Lifecycle" pillars with 4 concrete differentiators
- Added lucide-react icons: Headphones, UserCheck, Activity, ShieldCheck
- Changed grid from 3-col to 4-col responsive layout (1 col mobile, 2 col tablet, 4 col desktop)
- Removed unused CardDescription import
- Updated Why Queue North section subtitle to "Four concrete differentiators that set us apart"
- Clean card layout with centered icon containers and consistent styling
Files Modified
src/pages/Home.jsx— Why Queue North section complete redesignpackage.json— Version bumped to 0.5.2
Verified
npm run buildpasses- Docker image builds and container starts
- Home page loads on http://localhost:3001
- Responsive layout verified (1/2/4 columns as specified)
v0.5.1 — Phase 5 Batch 1: Hamburger Menu Fix + DialogTitle A11y — 2026-05-13
Verified Complete
- Fixed SheetContent missing positional CSS classes (panel was zero-size)
- Installed and configured tailwindcss-animate
- Added visually hidden SheetTitle for accessibility (Radix DialogTitle requirement)
- Forgejo issues #22, #23 closed
v0.5.4 — Phase 5 Batch 4: Services Rewrite — Business Outcomes — 2026-05-17
Completed
- Section title changed: "Our Services" → "What We Handle"
- Subtitle changed to outcome-focused: "From phones to firewalls, we keep your business running"
- Added
homeDescfield to all 7 services insrc/data/services.jswith business-outcome language - Service cards now show: icon + name + homeDesc (outcome) + shortDesc (supporting) + CTA
- lucide-react icons per service: MessageCircle, Users, LifeBuoy, GraduationCap, LinkIcon, Wifi, Network
- B2B professional card layout with icon containers (primary-navy/10 bg)
- Service detail pages (ServiceDetail.jsx) unchanged
Files Modified
src/pages/Home.jsx— Services section rewritesrc/data/services.js— Added homeDesc field to each serviceFUTURE.md— Marked batch 0.5.4 complete
v0.5.3 — Phase 5 Batch 3: Trust Signals Section — 2026-05-17
Completed
- Added dedicated Trust Signals section immediately after hero section
- 8x8 Certified Partner badge: prominent white card with logo, certification number, and descriptive text
- Veteran Owned badge: VCERT verified with certification #, values-based messaging
- "25+ Years Experience": metric card with 25+ using Georgia font (font-numeric class)
- Metrics grid: 4 key stats displayed (99.99% uptime, <15m response, 24/7 support, 100% satisfaction)
- Clean card layout: white cards on section-alt background with hover effects
- Mobile-first: three-column grid on desktop, stacked on mobile
- Business outcomes focus: reliability, experience, support承诺, not technical jargon
Files Modified
src/pages/Home.jsx— Added Trust Signals section after heroFUTURE.md— Marked batch 0.5.3 complete
Notes for Next Agent
- The trust signals are now front and center after the hero, before services
- Georgia font (
font-numeric) consistently used for all metrics - All metrics use realistic placeholder values that can be replaced with real stats when available
- The white card design provides contrast against the section-alt background
v0.5.2 — Phase 5 Batch 2: Hero Section Rewrite — 2026-05-17
Completed
- Hero headline replaced: "Modern Communications Infrastructure Without the Vendor Noise" → "Reliable Business Communications — Without the Runaround"
- Subtext updated to emphasize trust, reliability, and business outcomes
- 8x8 Certified Partner badge made prominent (featured card with logo, not small pill)
- Trust signals immediately visible on mobile without scrolling
- CTAs updated: "Schedule Consultation" (primary, /contact), "View Services" (secondary, /services)
- Color palette evolved: navy base with teal-900 gradient accent
- Mobile-first design verified — trust signals visible above fold on phone viewports
Files Modified
src/pages/Home.jsx— Hero section rewrite.learnings/scarlett/LEARNINGS.md— Added hero rewrite entryFUTURE.md— Marked batch 0.5.2 complete
Notes for Next Agent
- The 8x8 badge is now prominently featured — keep this prominence in future sections
- Georgia font (
font-numeric) used for "25+ Years Experience" — consistent with design rule - Consider similar trust signal presentation in the Trust Bar section
v0.4.8 — Phase 4 Batch 8: Error Handling Hardening + Dep Audit — 2026-05-13
Verified Complete
- Global error handlers: uncaughtException + unhandledRejection → log + exit(1)
- 404 catch-all for
/api/*routes returns{ error: 'Not found' } - Health check enhanced: DB connectivity check, returns
{ status: 'ok', db: 'ok' }or 503 - Request timeout: 30-second middleware, 504 response
- Consistent error format: 400/404/429/500/503/504 all follow
{ error, fields? }pattern npm audit: 0 vulnerabilitiesnpm outdated: major updates noted (Express 5, Vite 8, etc.) but not upgraded
v0.4.7 — Phase 4 Batch 7: Rate Limiting + Security Headers + CORS — 2026-05-13
Verified Complete
- express-rate-limit: 5 req/min per IP on /api/leads and /api/support, configurable via RATE_LIMIT_PER_MINUTE
- helmet: CSP (scripts 'self', styles 'self' inline, fonts 'self' + Google Fonts), HSTS, X-Content-Type-Options, X-Frame-Options DENY
- cors: configurable via CORS_ORIGIN env var, credentials enabled, API routes only
- Trust proxy enabled for correct client IP behind Docker/reverse proxy
- Rate limit returns 429 with JSON error + retryAfter
- All security headers confirmed via curl
- Docker config updated: all new env vars in Dockerfile and docker-compose.yml
v0.4.6 — Phase 4 Batch 6: Zoho Forwarding Layer — 2026-05-13
Verified Complete
- Zoho CRM forwarding via REST API v8 (POST /crm/v8/Leads)
- OAuth2 token management: refresh token → access token, in-memory cache with auto-refresh
- Fire-and-forget: Zoho forwarding is async, never blocks form response
- Configurable via 6 env vars: ZOHO_ENABLED, ZOHO_API_DOMAIN, ZOHO_CLIENT_ID, ZOHO_CLIENT_SECRET, ZOHO_REFRESH_TOKEN, ZOHO_REDIRECT_URI
- Best-effort design: Zoho failures logged but never propagate to client
- ZOHO_ENABLED=false: no Zoho activity, form submits normally
- ZOHO_ENABLED=true with invalid creds: form still succeeds, Zoho errors logged to console
v0.4.5 — Phase 4 Batch 5: Server-Side Validation + Input Sanitization — 2026-05-13
Verified Complete
- Zod schemas updated with
.trim()and.max()on all fields - Input sanitization: strip HTML/script tags, truncate to max lengths
- Request body size limit: 1MB (returns 413)
- Validation errors formatted as
{ error, fields }— no stack traces - All curl tests pass: valid data, empty fields, invalid email, XSS, max length, short issue
- XSS test confirmed:
<script>and<b>tags stripped from stored data
v0.4.4 — Phase 4 Batch 4: Client-Side Validation + Sonner Feedback — 2026-05-13
Verified Complete
- Contact form: required field validation (company, name, email, message)
- Support form: required field validation (name, company, email, issue)
- Email format validation with regex on both forms
- Issue minimum length validation (10 chars) on Support form
- Inline error messages below each invalid field (red text, small)
- Sonner toast for validation errors on submit attempt
- Error clearing as user corrects fields (onChange)
- Red ring/border on Input/Textarea when field has validation error
- Form inputs disabled during submission (mutation.isPending)
- Form opacity reduced to 70% during submission
- Build passes clean
v0.4.1 — Phase 4 Batch 1: Contact Form Wired to Express — 2026-05-12
Verified Complete
- Contact form submits all fields to
/api/leadsvia TanStack Query mutation - Success/error response handling with Sonner toasts
- Confirmation shown on success, form resets
- Error state shown on failure
- Backend Zod validation + SQLite storage working
- Already implemented in Phase 1/2, verified end-to-end
v0.2.13-fix — Phase 2 Fix: Legacy CSS Consolidation — 2026-05-13
Fixed
- Removed duplicate
src/index.css(was not imported anywhere) - Created clean
src/index.cssas single Tailwind entry point - Moved
maxWidth.container: 1280pxintotailwind.config.jstheme extensions - Updated
src/App.jsximport from./App.cssto./index.css - Deleted redundant
src/App.css - All
bg-section-altusages verified still working
Verified
npm run buildpasses- All 14 Phase 2 batches now fully verified
v0.4.3 — Phase 4 Batch 3: SQLite Persistence Verification — 2026-05-13
Verified Complete
- Database file (
db/queuenorth.db) created on first run if missing leadsandsupport_requeststables have correct schema (all columns match server/index.js)- Data persists across server restarts
- Docker volume test: stop container, restart, confirm data present
- Health check endpoint responds correctly
docker-test.shpersistence suite passes all checks
v0.4.2 — Phase 4 Batch 2: Support Form Wired to Express — 2026-05-12
Verified Complete
- Support form submits all fields to
/api/supportvia TanStack Query mutation - Success/error response handling with Sonner toasts
- Confirmation shown on success, form resets
- Error state shown on failure
- Backend Zod validation + SQLite storage working
- Already implemented in Phase 1/2, verified end-to-end
v0.2.2 — Docker Image Size Fix — 2026-05-12
Fixed
- Removed duplicate
node_modulescopy in Dockerfile runner stage (was copying full dev+prod modules as a permanent layer) - Reduced image size from 331MB to 215MB (35% reduction)
npm ci --omit=devnow runs cleanly without pre-existing dev modules
Verified
- Docker build succeeds
- Container starts and health check passes
- Frontend serves correctly
Queue-North-Website — Changelog
v0.3.4 — Phase 3 Visual Overhaul Complete — 2026-05-12
Completed Batches
- Batch 1 (v0.3.1): Tailwind theme tokens, spacing scale, container width, Inter font
- Batch 2 (v0.3.2): Home page redesign — hero, trust bar, services grid, why QN pillars, industries preview, final CTA
- Batch 3 (v0.3.3): Header/footer/mobilenav polish, navy-light color token, fixed Button.jsx TS generics build bug
- Batch 4 (v0.3.4): Inner pages layout system — consistent hero/card/CTA pattern across About, Services, ServiceDetail, Industries, IndustryDetail, 8x8
- Batch 5: Contact/Support forms verified compliant, no changes needed
Verified
- All batches build successfully
- Contact and Support pages already compliant with OVERHAUL_PLAN.md
- No
asChildusage on Button (unsupported, replaced with styled anchors)
v0.3.2 — Phase 3 Batch 2: Home Page Redesign — 2026-05-12
Changed
- Updated Home.jsx to import
industriesdata from data file - Replaced hardcoded industry data with dynamic rendering from
industries.js - Updated Services and Industries cards to use Button component for "Learn more" links
- Added MapPin icon from lucide-react for industry cards
- Added useNavigate hook for programmatic navigation
- Ensured consistent use of shadcn/ui Button component across the home page
- Updated version to
0.3.2for Phase 3 Batch 2
Verified
npm run buildpasses- All routes respond correctly
- Button components render with correct styling
- Responsive layout works on mobile and desktop
v0.3.1 — Phase 3 Batch 1: Theme + Tailwind Config + Typography — 2026-05-12
Changed
- Enhanced Tailwind spacing scale with utility values (24-48rem)
- Updated container max-width to 1280px per design spec
- Confirmed color palette, Inter font, Georgia numeric font already in place
v0.1.1 — Phase 1 Agent-Pass Checkpoint — 2026-05-12
Changed
- Corrected Phase 1 version to reflect completed agent-pass checkpoint semantics.
- Documented that every completed agent pass/checkpoint within a phase increments the patch version.
- Confirmed Phase 1 verified output is pushed to
devat0.1.1.
Verified
npm run buildpasses.- Backend health endpoint responds successfully at
/api/health.
v0.2.1 — Dockerization — 2026-05-12
Added
- Docker build for production deployment
- docker-compose.yml for local development with SQLite persistence
- npm scripts:
docker:build,docker:run,docker:compose:up/down/logs - Health check in Dockerfile and docker-compose
- Non-root
nodejsuser for security - Layer caching optimization (copy package.json first, install, then copy source)
.dockerignoreto exclude node_modules, dist, db, logs, git, private docs
Changed
- Updated package.json to
0.2.1for Docker batch
Verified
- Docker build succeeds with
npm run docker:build - Container starts and health check passes
- SQLite database persists in
./dbvolume
v0.2.0 — Phase 2 Layout Complete — 2026-05-12
Added
- All route pages implemented (Home, About, Services, ServiceDetail, Industries, IndustryDetail, 8x8, Contact, Support).
- Data files for services and industries moved to
/src/data/. - Layout components (Header, Footer, MobileNav) built and integrated.
- Legacy
styles.cssremoved (replaced by Tailwind configuration). - Contact and support forms wired to Express backend via TanStack Query.
- All pages render meaningful content matching original business information.
- Version bumped to
0.2.0for Phase 2 baseline.
Changed
- Replaced hash-based routing with React Router 7.
- Standardized layout patterns across all pages (page hero, main content, sidebar, CTA band).
- Updated package.json, PROJECT.md, OVERHAUL_PLAN.md, HISTORY.md to reflect Phase 2 status.
- Overhaul plan updated to note Phase 2 scope and goals.
Verified
npm run buildpasses.- All routes respond correctly.
- Contact form submits via
/api/leads. - Support form submits via
/api/support. - No references to legacy
styles.cssremain in source code.
v0.1.0 — Phase 1 Foundation — 2026-05-12
Added
- Rebuilt project foundation on Vite + React SPA with React Router.
- Added Tailwind CSS with Queue North light-first business palette.
- Added shadcn/ui-style local primitives for buttons, cards, inputs, textarea, select, badge, sheet, and dialog usage.
- Added Sonner toast support and TanStack Query provider/API helper.
- Added Express backend with
/api/health,/api/leads, and/api/support. - Added better-sqlite3 storage for
leadsandsupport_requests. - Added all planned frontend routes for home, about, services, service details, industries, industry details, 8x8, contact, and support.
- Added Phase 1 documentation, build summary, script reference, and phase-based versioning rules.
Changed
- Replaced the static HTML/CSS/JS entry with the Vite React entry.
- Updated README to point to
OVERHAUL_PLAN.mdas the design source of truth. - Standardized versioning so Phase 1 uses
0.1.x, Phase 2 uses0.2.x, and later phases follow the same pattern. - Added Bishop verification rules and the requirement that Ripley pushes to
devafter each verified phase.
Verified
npm run buildpasses.- Backend health endpoint responds successfully at
/api/health. - Required routes are configured.
- Contact and support API paths exist and write through SQLite.
v0.0.1 — Project Initialization — 2026-05-11
Added
- Project initialized with PROJECT.md, STRUCTURE.md, FUTURE.md, HISTORY.md, DEVELOPMENT_LOG.md.