Nicholai 0cda5c0497 feat: overhaul homepage layout, add contact page, refactor components
- Add new media assets for hero, mosaic, service area, etc.
- Create Astro components: Nav, Footer, Button, Container, Section, SectionHeading, Hero, ExpertiseMosaic, ServiceList, WhyUs, ServiceArea.
- Refactor src/pages/index.astro into reusable components.
- Add src/pages/contact.astro with contact form and info.
- Fix dead navigation links and service links.
- Implement mobile navigation using details/summary.
- Apply strict 12‑column grid and 1140px container.
- Add scroll‑triggered reveal animations and sticky hero background.
2025-12-27 09:12:19 -07:00

370 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Continuity Log
Development log for tracking changes, decisions, and next steps.
## Entry Template
```markdown
## YYYY-MM-DD - Brief Description
### Changes
- What changed
- Why it changed
### Decisions
- Key decisions made
- Trade-offs considered
### Next Steps
- [ ] Follow-up items
```
---
## 2025-12-27 - Editorial Grid, Atmosphere, & Dynamic Text Reveal
### Changes
- **Structural Foundation**:
- Narrowed the primary container (`--width-brand`) to **1140px** for a focused, magazine-style layout.
- Implemented a strict **12-column grid system** (`.grid-12`) across all sections for precise content alignment.
- Significant vertical rhythm update: Increased section padding to `py-32 md:py-48 lg:py-64` to solve the "short/stunted" section feeling.
- **Atmospheric Image Integration**:
- **Hero**: Implemented a **pinned/sticky background** effect using `painting1.png`, allowing content to scroll over a fixed gritty texture.
- **Expertise Mosaic**: Updated bento tiles with high-texture assets (`mixing1.png`, `shavings1.png`, `cloth1.png`) and added floating `shavings` connector assets to bridge section gaps.
- **Service Area**: Layered `wall2.png` as a subtle atmospheric overlay on the mountain visual.
- **Dynamic Reveal Animations**:
- Implemented a global **Intersection Observer** for scroll-triggered reveal animations.
- Added "Sliding Line" text reveals for all major headings (H1, H2) using `text-reveal-mask` and `text-reveal-line` utilities.
- Applied `reveal-item` fade/slide transitions to bento tiles, image cards, and trust badges.
- **Interaction & Polish**:
- **Button Refinement**: Updated `Button.astro` with premium editorial tracking, bold uppercase text, and hover-lift effects.
- **Soft Edge Masks**: Applied `mask-soft-edges` (linear gradients) to dark sections to create a seamless transition into the cream page background.
- **Section Alignment**: Re-balanced all elements to specific column spans (e.g., col-span-7 content, col-span-5 media) for a high-end editorial feel.
### Decisions
- **Sticky Hero Background**: Chose a sticky background for the hero to create immediate visual depth and a "painterly" parallax impression.
- **Strict Grid Spans**: Used the 12-column grid to intentionally limit text line-lengths, mimicking premium print layout standards.
- **Connector Assets**: Used floating wood shavings (`shavings2.png`, `shavings3.png`) to literally "sew" sections together, breaking up horizontal division lines.
### Next Steps
- [ ] Audit the contact page for consistency with the new 1140px container and grid-12 structure.
- [ ] Review performance of high-texture images on low-bandwidth mobile devices.
- [ ] Finalize any remaining dead links in the refined footer.
---
## 2025-12-27 - Vibrant Bento & Editorial Polish
### Changes
- **Expertise Section Redesign**:
- Rebuilt the Expertise section as a structured **Bento Grid** with high-impact imagery and interactive chips.
- Added magazine-style numbering ("01", "02", "03") and hover-reveal logic for a high-end feel.
- **Dynamic Brand Marquee**:
- Implemented a seamless scrolling marquee with bold brand essence keywords: "TRUSTWORTHY", "EDITORIAL", "ORGANIC", "STURDY".
- **Media Split Service Area**:
- Refactored the Service Area into an asymmetric layout with a large, moody mountain visual on the left and neighborhood chips on the right.
- **Service List (More Than Just Painting) Polish**:
- Added "stat" labels (e.g., "Precise", "Clean") to each service item for editorial precision.
- Refined the layout with better card spacing and a floating stat badge.
- **Refined Site Shell**:
- **Nav**: Updated button hierarchy and sticky behavior for better contrast and usability.
- **Footer**: Added a top social bar, organized links into a three-column "Hybrid Footer" grid, and refined the "Pill" CTA section.
### Decisions
- **Bento Logic**: Chose to prioritize one large card for "Premium Painting" to establish it as the primary service, with smaller auxiliary cards for secondary services.
- **Marquee Integration**: Placed the marquee between the Expertise and Service List sections to serve as a high-energy visual divider.
- **Media Split**: Used a grayscale-to-color transition on the mountain image to emphasize the "discovery" aspect of locating the service area.
### Next Steps
- [ ] Review the mobile transition for the media split (ensure it stacks elegantly).
- [ ] Finalize the "Recipes" or "Project Stories" slider if real project data becomes available.
- [ ] Conduct a final cross-browser audit for animation performance (marquee and hover states).
---
## 2025-12-27 - Hero, Services, and Footer Design Revamp
### Changes
- **Hero Section Redesign**:
- Replaced mountain background with a dark green (`#3A4D39`) color and a custom tileable pattern texture (`tileablepattern.png`).
- Added a new hero visual on the right featuring a paintbrush and color swatches image (`brushandswatchestransparent.png`).
- Implemented floating decorative service cards ("Deck Restoration" and "Ext. Paint") overlaid on the hero image with hover animations.
- Updated typography to match the "Craftsmanship For Your Home" editorial style.
- **Services Section Redesign**:
- Renamed and restructured the section to "Our Expertise".
- Replaced the vertical list with a horizontal grid of three cards: "Interior & Exterior Painting", "Wood Restoration", and "Skilled Handyman".
- Each card features a distinct background color (Sage or Forest green), unique service images, and "Learn More" call-to-action buttons.
- **Footer Redesign**:
- Restructured the footer into two main sections.
- Added a branding top section with a large logo, company mission statement, and a dark green background.
- Updated the bottom section with a black background, maintaining the "Ready to Transform Your Home?" CTA and navigation links.
- **Lucide Icon Fixes**:
- Updated all Lucide icon components in `src/pages/index.astro` to use `className` instead of `class` to resolve React linter errors.
### Decisions
- **Visual Consistency**: Chose to layer the tileable pattern at low opacity (20%) to add texture without distracting from the main hero content.
- **Card Styling**: Used varying shades of green (`#3A4D39` and `#739072`) for the services cards to create visual interest while staying within the brand's palette.
- **Layout Adjustments**: Shifted the hero content to a split-screen layout to accommodate the large paintbrush image while maintaining readability on all devices.
### Next Steps
- [ ] Verify responsive behavior across various mobile screen sizes.
- [ ] Replace placeholder "Map" component with a real interactive map or high-quality image.
- [ ] Connect the "Learn More" buttons and "Get a Quote" CTAs to their respective destinations.
---
## 2025-12-27 - Hero Screenshot Match Polish
### Changes
- **Hero background treatment**:
- Moved the tileable pattern so it lives *outside* the hero card (page background) to match the reference composition.
- Updated the hero card to a smoother forest gradient with a soft vignette/highlight, closer to the mock.
- **Hero visual composition**:
- Added/strengthened the circular backdrop behind the brush/swatches image.
- Nudged/scaled the brush/swatches to reveal more of the circle and create more negative space.
- Repositioned/restyled the floating cards so they sit closer to the brush/circle like the provided screenshot.
- **CTA styling**:
- Tweaked the secondary button to have a subtle dark fill + light border (instead of fully transparent) to better match the mock.
### Decisions
- Prioritized matching the mocks “pattern outside the card” framing over keeping texture inside the hero card.
### Next Steps
- [ ] Replace the floating card text/labels (e.g. “Woodwork Care”) with final approved copy (if needed).
---
## 2025-12-27 - Expertise Mosaic Redesign
### Changes
- Replaced the prior 3-card “Our Expertise” layout with a **2-row mosaic grid** (icon tiles + image tiles + text tiles) to match the provided screenshot.
- Added a **patterned frame treatment** for the expertise section using `src/assets/tileablepattern.png`, including top/bottom pattern strips and subtle vignette.
- Reused existing site imagery assets (`closeupbrush4.png`, `cards.png`, `puttyknife2.png`) for the mosaic image tiles.
### Decisions
- Kept the sections semantic heading (`h2`) as **screen-reader-only** to preserve accessibility while matching the screenshots visual layout.
- Implemented the mosaic with a responsive grid: stacks to 1 column on mobile, 2 columns on small screens, 4 columns on desktop.
### Next Steps
- [ ] Review and approve the tile text copy (Premium Painting / Handyman Services descriptions).
---
## 2025-12-27 - Logo Integration & Favicon Generation
### Changes
- **Generated Complete Favicon Set**: Used ffmpeg to convert logo-black.png into all standard favicon sizes
- 16x16 favicon.ico (classic browser favicon)
- 32x32 favicon-32.png (standard size)
- 192x192 favicon-192.png (Android/PWA)
- 180x180 apple-touch-icon.png (iOS)
- 512x512 favicon-512.png (high-res/PWA)
- **WebP Optimization**: Converted all three logo variants to WebP format for modern browsers with transparency support
- logo-col.png (2.7MB) → logo-col.webp (513KB) - 81% reduction
- logo-black.png (781KB) → logo-black.webp (423KB) - 46% reduction
- logo-white.png (1.5MB) → logo-white.webp (578KB) - 61% reduction
- Initial attempt with AVIF failed due to libaom-av1 codec not supporting alpha channel transparency
- **Navigation Logo**: Replaced placeholder "S" badge with colored logo (logo-col.webp/png) in src/pages/index.astro:40-55
- Used `<picture>` element with WebP + PNG fallback
- Set to 48x48px size for optimal navigation display
- **Footer Logo**: Replaced placeholder "S" badge with white logo (logo-white.webp/png) in src/pages/index.astro:681-696
- Provides clean contrast against dark footer background
- Maintains brand consistency across page sections
- **HTML Head Updates**: Added complete favicon references in src/layouts/Layout.astro:19-24
- SVG favicon (primary, with dark mode support)
- ICO fallback for legacy browsers
- Multiple PNG sizes for different contexts
- Apple touch icon for iOS home screen
### Decisions
- **Logo Placement Strategy**:
- Navigation: Colored logo for maximum brand presence on light background
- Footer: White logo for contrast on dark background (#1c1917)
- Favicons: Black logo as base for simple, recognizable appearance
- **Image Format Strategy**: Used `<picture>` element with WebP as primary format and PNG fallback for maximum compatibility and performance
- Chose WebP over AVIF due to better transparency (alpha channel) support with current ffmpeg/libaom-av1 build
- **Favicon Approach**: Generated multiple sizes to support all platforms (web browsers, Android, iOS, PWA) from single source
- **Compression**: Leveraged WebP format for 46-81% file size reduction while maintaining quality and transparency
### Technical Details
- Used ffmpeg with lanczos scaling filter for high-quality favicon resizing
- Used libwebp encoder for WebP compression with alpha channel (bgra format) to preserve transparency
- All images maintain RGBA/BGRA color space for transparency support
- Progressive encoding for optimal loading experience
- AVIF attempted first but libaom-av1 codec incompatible with yuva420p pixel format, falling back to yuv420p which strips alpha channel
### Next Steps
- [ ] Test favicon display across different browsers and devices
- [ ] Consider creating a PWA manifest file to complement the favicon set
- [ ] Monitor AVIF adoption and adjust fallback strategy if needed
- [ ] Potentially create additional logo sizes for different marketing contexts
---
## 2025-12-27 - Hybrid "Eden" Design Implementation
### Changes
- **Aesthetic Overhaul**: Transformed the template into "Eden Style" (Editorial + Organic).
- Adopted `Playfair Display` (Serif) for headings.
- Updated color palette to Earth Tones: Deep Forest (`#3A4D39`), Sage (`#739072`), Cream (`#ECE3CE`), and Stone Black (`#1c1917`).
- **Structure Refinement (Hybrid)**:
- Rebuilt "More Than Just Painting" section with a split "List + Floating Cards" layout.
- **Restored** the unified "Rounded Dark Footer" to anchor the page.
- **Cleaned** Hero background shapes (Geometric vs. Blurry) for a crisp look.
- Updated `design.json` with new identity and tokens.
### Decisions
- **Hybrid Approach**: We combined the trustworthy/sturdy feel of the original template (Rounded Footer, Clean Shapes) with the premium/editorial feel of the new reference (Serif fonts, Floating UI cards).
- **Typography**: Paired `Playfair Display` with `Plus Jakarta Sans` to balance elegance with modern readability.
### Next Steps
- [ ] Visual QA of all service pages (if expanding beyond single page).
- [ ] Connect Contact Form to backend/service.
- [ ] Replace placeholder "Map" with actual embed or image.
---
## 2024-12-27 - Minimal Template Setup
### Changes
- Created minimal Astro development template
- Single example blog post showing MDX structure
- Minimal section examples (hero, experience, skills, featured-project)
- Simple contact page example
- Utility scripts: AVIF conversion, AI commit messages
- Design system documentation in `dev/design.json`
### Stack
- Astro 5 + React 19 + Tailwind CSS 4
- TypeScript
- MDX content collections
- Cloudflare Pages deployment
- pnpm package manager
### Structure
- Content-driven architecture with type-safe schemas
- Example content showing data structures
- Utility scripts for common tasks
- Clean development environment
### Next Steps
- [ ] Replace example content with your own
- [ ] Customize design system as needed
- [ ] Configure deployment
---
## 2025-12-27 - Homepage Redesign & Component Refactor
### Changes
- **Aggressive Component Refactor**: Broke monolithic `src/pages/index.astro` (780+ lines) into reusable Astro components:
- **Site Shell**: `src/components/site/Nav.astro` (sticky nav with mobile menu using `details/summary`), `src/components/site/Footer.astro`
- **UI Primitives**: `src/components/ui/Container.astro`, `src/components/ui/Button.astro`, `src/components/ui/Section.astro`, `src/components/ui/SectionHeading.astro`
- **Homepage Sections**: `src/components/home/Hero.astro`, `src/components/home/ExpertiseMosaic.astro`, `src/components/home/ServiceList.astro`, `src/components/home/WhyUs.astro`, `src/components/home/ServiceArea.astro`
- **Fixed Dead Navigation Links**: All CTAs and nav links that pointed to non-existent `#contact` now route to `/contact` page
- **Created `/contact` Page**: New `src/pages/contact.astro` with:
- Contact information card (phone, email, location, hours)
- Service areas chips
- Contact form with name, phone, email, service dropdown, project details
- Consistent styling with homepage
- **Mobile Navigation**: Added functional hamburger menu using native `details/summary` (no JavaScript required)
- Shows all nav links, phone number, and CTA
- Toggle icon changes from hamburger to X when open
- **Services Section Redesign**: Replaced confusing mosaic grid with clean 3-column card layout:
- Each card has image, icon badge, title, description, and "Get a Quote" CTA
- Clear visual hierarchy and relationship between elements
- Bottom CTA for consultation
- **Footer Links Fixed**: Service links now point to `#services` instead of dead `#` links
### Decisions
- **No JavaScript Mobile Menu**: Used `details/summary` HTML pattern for mobile nav to stay Astro-first and reduce client-side JS
- **Separate Contact Page**: Chose dedicated `/contact` page over inline section to allow for future form integration
- **Component Granularity**: Created both low-level UI primitives and page-specific section components for flexibility
- **Phone Number**: Using placeholder `(312) 456-7890` from `dev/design.json` - needs updating with real number
### Technical Details
- All components use brand tokens from `src/styles/global.css` (`--color-brand-green`, `--color-brand-sage`, etc.)
- Button component supports `primary`, `secondary`, `outline`, `ghost` variants
- Section component supports `default`, `white`, `dark`, `accent` backgrounds
- Mobile menu auto-closes when navigating (native browser behavior)
### Next Steps
- [ ] Update placeholder phone number/email with real contact info
- [ ] Add form submission handler (Cloudflare Functions or external service)
- [ ] Create `/privacy` and `/terms` pages (footer links currently dead)
- [ ] Add scroll-margin-top to sections for better anchor navigation with sticky header
- [ ] Consider adding subtle entrance animations to homepage sections
---
## 2025-12-27 - Editorial Cohesion & Moody Identity Implementation
### Changes
- **Layout Refinement**:
- Narrowed the primary content container (`--width-brand`) to **1200px** for a more focused, high-end editorial feel.
- Increased section vertical spacing and added significant breathing room between blocks.
- **Hero Transformation**:
- Replaced the split-screen hero with a centered, high-impact "Moody Hero" layout.
- Integrated `brush1.png` as an atmospheric background texture with radial lighting and blended gradients.
- Enhanced typography with larger, more intentional serif and italic pairings.
- **Visual Depth & Texture**:
- Implemented a page-wide subtle texture using `tileablepattern.png` on the `body` background.
- Refactored `ExpertiseMosaic`, `ServiceList`, and `ServiceArea` to use semi-transparent backgrounds (`bg-brand-cream/50`) and backdrop blurs to melt into the page texture.
- Standardized all section rounding to match the "Pill" design language.
- **"Pill" Footer Implementation**:
- Rebuilt the footer to precisely match the brand identity guide.
- Added a floating dark green "Pill" CTA section that anchors the page.
- Refactored the bottom links into a "Hybrid Footer" three-column grid (Contact, Branding, Links).
- **Design Token Standardization**:
- Renamed all remaining `stone-` and `#3a4d39` references to brand tokens (`brand-dark`, `brand-green`, etc.) across the entire codebase.
### Decisions
- **Centered Hero**: Moving to a centered hero created a more direct and atmospheric first impression, allowing the `brush1.png` texture to serve as the "canvas" for the site.
- **Narrower Width**: Reducing the width from 1440px to 1200px immediately improved the "editorial" feel, making long paragraphs more readable and visual assets more balanced.
- **Page-wide Texture**: Using a very subtle (1.5% opacity) texture on the `body` instead of per-section backgrounds eliminated the "abrupt transition" issue.
### Next Steps
- [ ] Review mobile responsiveness for the new centered hero and layered footer.
- [ ] Finalize the interactive map or neighborhood visualization in the `ServiceArea` section.
- [ ] Audit all secondary pages (Contact) for the new container width.
---
## 2025-12-27 - Full-Page Beautification & Bento Refactor
### Changes
- **Expertise Mosaic Redesign**:
- Completely rebuilt the section as a high-impact **Bento Mosaic**.
- Replaced standard cards with large, background-image-driven tiles.
- Added hover-reveal descriptions and magazine-style numbering ("01", "02", "03").
- Integrated glassmorphism UI elements for icons and CTAs.
- **Service List (More Than Just Painting) Polish**:
- Rebuilt as a premium card with a subtle pattern background and rounded layout.
- Replaced the simple list with a grid of icon chips for handyman services.
- Added a floating "200+ Jobs Completed" badge for social proof.
- **Service Area (Service Area) Redesign**:
- Transformed into a "Community Card" with a full-width mountain backdrop (`mountains.png`).
- Added a floating, glowing map marker badge and stylized neighborhood tags.
- Included a bottom trust bar with core value indicators (Licensed & Insured, etc.).
- **Navigation (Nav) Refinement**:
- Enhanced the sticky header with backdrop-blur glassmorphism.
- Added a sub-brand line ("& Handyman Services") and refined typography with better tracking and bold uppercase weights.
- Improved hover states with animated underlines and subtle shadow transitions on CTAs.
- **Layout Breathing Room**:
- Increased vertical margins between large sections (to `mb-48` in some cases) to create an airy, premium "editorial" feel.
### Decisions
- **Photography First**: Shifted the design to lead with high-quality, large-scale photography to better showcase craftsmanship.
- **Micro-Interactions**: Added scale and rotate animations on hover for cards and images to make the site feel responsive and high-end.
- **Glassmorphism**: Used backdrop filters (`backdrop-blur-xl`) on navigation and floating elements to maintain legibility while overlaying beautiful imagery.
### Next Steps
- [ ] Add smooth-scroll behavior to the whole page for better anchor navigation.
- [ ] Finalize mobile responsiveness for the new bento tiles (ensure text remains readable over images).
- [ ] Update the placeholder project counts/years once real data is available.