Use when selecting, sourcing, optimizing, placing, or writing alt text for photography and visual assets on a renovation website with static Next.js export. Use when user asks to 'add hero image', 'optimize photos', 'write alt text', 'choose renovation photos', or 'set up next/image'. Covers Unsplash sourcing, next/image sizing, WebP conversion, focal-point cropping, and WCAG alt text patterns. Do NOT use for SVG icons, CSS background patterns, logo design, video embeds, or non-photography illustration work.
Guide selection, art direction, optimisation, and placement of photography and visual assets across the Garnebo website. Imagery must reinforce brand trust and drive conversions. Static export on S3/CloudFront: images.unoptimized: true, all images pre-built into /public/, primary format .webp.
Brand personality: Clean, precise, tech-enabled, premium-organised. Think architect's presentation folder — not a TV home improvement show.
.webp format and resizing them for static exportnext/image props for static export (unoptimized, priority, sizes)Do NOT use for: SVG icon design, CSS gradient backgrounds, brand logo work, or component layout decisions.
priority attribute and loading strategy)| Use case | Min dimensions | Aspect ratio | Format | Max file size |
|---|---|---|---|---|
| Hero background | 2400x1600 px | 3:2 / 16:9 | .webp | 400 KB |
| Before/After pair | 1200x900 px | 4:3 | .webp | 200 KB each |
| Service card thumbnail | 800x600 px | 4:3 | .webp | 100 KB |
| Team portrait | 400x400 px | 1:1 | .webp | 60 KB |
| Project gallery | 1200x900 px | 4:3 or 3:2 | .webp | 150 KB each |
Since images.unoptimized: true disables Next.js optimization, images must be manually pre-optimised:
# Convert JPEG/PNG to WebP
cwebp -q 82 input.jpg -o output.webp
# Resize first:
convert input.jpg -resize 1200x900^ -gravity center -extent 1200x900 resized.jpg
# Batch convert /public/projects/
for f in public/projects/raw/*.jpg; do
filename=$(basename "$f" .jpg)
cwebp -q 82 "$f" -o "public/projects/${filename}.webp"
done
Hero background (static export compatible):
import Image from 'next/image';
<Image
src="/hero-finished-apartment.webp"
alt="Renovated apartment with new parquet flooring in Bologna"
fill
priority
sizes="100vw"
className="object-cover object-center z-0"
unoptimized
/>
Service card image:
<div className="aspect-[4/3] overflow-hidden rounded-t-lg">
<img
src="/services/cosmetic-painting.webp"
alt="Interior painting — smooth plaster finish on living room walls"
className="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"
loading="lazy"
width={800}
height={600}
/>
</div>
Bad: alt="photo1.jpg"
Bad: alt="renovation"
Bad: alt="before"
Good: alt="Living room before renovation — worn parquet flooring and dated wallpaper"
Good: alt="Same living room after Garnebo renovation — new engineered oak flooring and fresh white plaster"
Good: alt="Tiler applying precision grout to 60x60cm porcelain tiles in a Bologna bathroom"
Good: alt="Marco Bianchi, Garnebo Project Manager, on-site at a completed renovation in Bolognina"
Formula:
[Room type] before renovation — [key before-state details][Room type] after Garnebo renovation — [key improvements][Who] doing [what] [where][Full name], [role at Garnebo]Use kebab-case. No Italian accents (breaks some S3 configs). No spaces.
/public/
projects/
via-indipendenza-before.webp
via-indipendenza-after.webp
services/
cosmetic-painting.webp
team/
marco-bianchi.webp
testimonials/
marco-b-avatar.webp
Use: Finished interiors with natural light. Empty/minimally furnished spaces. Precision action shots (hands on tile, trowel, level). Before/After pairs from same angle. Approachable team portraits.
Never use: Generic hardhat/safety vest photos. Blueprint close-ups. Thumbs up/handshake poses. Dark or cluttered job sites. Images with watermarks. Very dark photos.
<Image sizes="100vw" ... /> // full-width
<Image sizes="(min-width: 768px) 50vw, 100vw" ... /> // 2-col grid
<Image sizes="(min-width: 1024px) 33vw, (min-width: 768px) 50vw, 100vw" ... /> // 3-col
Constraints: Do NOT add uncompressed JPEG/PNG to
/public/. Do NOT usenext/imagewithoutunoptimizedprop on static export. Do NOT use generic contractor stock (hi-vis, hardhats). Do NOT forgetwidthandheighton<img>tags. Always usepriorityon hero/LCP image. Always provide meaningful alt text.
/public/ are in .webp formatpriority on all hero/LCP images; loading="lazy" on all below-fold imagesunoptimized prop on every next/image component