fullstack.rocks skills · demos

Orrisvane House — homepage design

An inhabited house, presented as an editorial sequence: arrival, people, rooms, ordinary days, and the care that makes returning possible. Warm paper, precise serif headlines and natural-light photography give way to a personal letter on estuary green.

design.jpg is the complete desktop art-direction reference at 1440 × 4239 px, generated with the built-in image generation tool and proportionally resampled to the requested width. The image establishes composition and photographic intent; this spec supplies the authoritative live copy, colour tokens, estate-plan labels and responsive behaviour. In particular, the week section’s generated eyebrow reads “02”; build it as “03” below. Do not implement the screenshot as a page background or extract its text into image assets.

Build static semantic HTML, CSS and minimal JavaScript with no build step. Google Fonts is the only external request source. Use relative assets from ../../clients/estate/assets/. The house, founders, treatment record and identity are fictional; no third-party branding appears.

Grid and spacing

Colour

Use precisely these six palette tokens, with no opacity on text or functional controls.

Token Hex Role
Salt paper #F4F1E9 Main canvas; invitation/footer text; light button and input surfaces
Household ink #252C2A Main reading text, headings, estate-plan labels and functional outlines
Estuary #243F3A Invitation and footer background; primary actions and light-button text
Dried clay #8A4B38 Underlined editorial links; field error text and error boundaries
Olive grey #60665E Secondary text, captions, placeholders and disabled labels, on salt paper only
Warm stone #DDD5C8 Estate-plan and conservation surfaces; dark-surface secondary text and hover fill

The following is the exhaustive allowed text/background pairing list, including interactive states. Ratios were calculated from the hex values using linearised sRGB relative luminance, L = .2126R + .7152G + .0722B, and (Llighter + .05) / (Ldarker + .05), rounded to two decimals. All exceed 4.5:1, including small text; none depends on the large-text exception.

Text Background Contrast Where used
Ink #252C2A Paper #F4F1E9 12.64:1 Headlines, body, navigation, fields, hover text
Olive #60665E Paper #F4F1E9 5.23:1 Paper captions, placeholders, disabled control labels
Clay #8A4B38 Paper #F4F1E9 5.92:1 Editorial links and errors
Estuary #243F3A Paper #F4F1E9 10.07:1 Light action labels and active navigation
Ink #252C2A Stone #DDD5C8 9.80:1 Map, conservation copy/captions, hovered fields
Clay #8A4B38 Stone #DDD5C8 4.59:1 Atelier link on conservation panel
Estuary #243F3A Stone #DDD5C8 7.81:1 Hovered light actions and copied-email feedback
Paper #F4F1E9 Estuary #243F3A 10.07:1 Invitation/footer copy, outline actions and links
Stone #DDD5C8 Estuary #243F3A 7.81:1 Dark-surface support copy and hovered links

On stone use ink for every secondary caption; olive on stone would be only 4.05:1 and is excluded. Keep all text off photographs. Small labels on the plan must use ink on a solid stone field, not over tinted trees or paths. Decorative foliage uses olive, buildings use ink, the pool uses estuary, and all are backed by stone; meaningful plan shapes must retain at least 3:1 contrast. Distinguish the estate boundary with a dashed ink line and a written label, rather than colour alone.

Functional input borders and light-surface focus indicators use ink against paper or stone (12.64:1 / 9.80:1). Dark-surface borders and focus indicators use paper against estuary (10.07:1). A 1 px stone rule on paper is decorative only. Ledger rows remain understandable through their labels and spacing without their rules.

Type

Use the Google Fonts families Newsreader (400 normal and 400 italic) and Source Sans 3 (400 and 500 normal). Load with display=swap. Fallbacks: Georgia, serif and "Segoe UI", sans-serif. Use optical sizing for Newsreader; never synthesize heavier weights. Wordmark artwork is a custom, restrained letterspaced serif arrangement of the invented name, not a real brand reference.

Role Family / weight Desktop size / line height Mobile size / line height Letter spacing
H1 Newsreader 400 84 / 88 px 48 / 52 px -.02em
H2 Newsreader 400 48 / 54 px 36 / 42 px -.02em
H3 / editorial lead Newsreader 400 28 / 36 px 26 / 34 px -.01em
Invitation signature Newsreader 400 italic 24 / 32 px 24 / 32 px 0
Body / ledger values Source Sans 3 400 18 / 28.8 px 18 / 28.8 px 0
Navigation / action / ledger labels Source Sans 3 500 16 / 24 px 16 / 24 px 0
Caption / support / footer Source Sans 3 400 14 / 22 px 14 / 22 px 0
Short uppercase eyebrow Source Sans 3 500 12 / 18 px 12 / 18 px .16em (1.92 px)

At tablet widths interpolate H1 to 64 px and H2 to 42 px. Set sizes in rem with a 16 px default root, preserving browser font preferences; the px sizes above describe the default rendering. Do not reduce body copy on mobile. No forced headline line breaks below 768 px. At desktop the hero can break after “house” to read “A house / to return to.”; other headlines wrap naturally. Use one H1, H2 for sections 2–8 and H3 only for subordinate labels that genuinely form headings. Eyebrows are paragraphs, not headings. The footer wordmark is not a heading.

Sections

1. Arrival

Purpose: establish the place, its scale and the promise of returning, immediately.

Layout: header above a 4/8 split; text occupies columns 1–4 and courtyard photo columns 5–12. Keep the photo about 16:9 with its caption below. Text sits on paper, never across the picture. Header content and exact labels appear under Components.

Exact copy:

Images: hero-courtyard.webp. Alt: “Three shaded courtyard openings face a timber breakfast table, with terracotta paving and an orchard visible beyond.”

Mobile: text, link, photo, caption in that DOM order. Full content width; 4:3 crop with the three openings and table still visible. No viewport-height hero.

2. The household

Purpose: explain who lives and works here, and why the calendar is limited.

Layout: founders’ photograph columns 1–6; copy columns 8–12, vertically centred. Use a 3:2 landscape portrait of the two people in their actual workshop setting.

Exact copy:

Images: household-portrait.webp. Alt: “Iria and Tomé stand beside a walnut chair in the conservation workshop, with hand tools hanging on the limewashed wall.” Caption belongs to the figure even if visually aligned beneath the adjacent copy.

Mobile: eyebrow and headline, portrait with caption, then body. Use grid placement on desktop while retaining this reading order in HTML. Do not crop out either face or the chair.

3. The house and grounds

Purpose: show shared and private space, and make arrival and access understandable.

Layout: id="house-and-grounds". Full-width heading; suite photograph spans columns 1–7, pool columns 8–12, common image-row height about 320 px. Below, a stone panel holds the plan across 7 columns and practical copy across 5, with 32 px internal padding. Labels and practical copy are ink.

Exact copy:

Images: suite-orchard.webp, alt “A linen-covered bed and walnut chair face open courtyard doors, with olive trees in the orchard beyond.” pool-orchard.webp, alt “The rectangular sixteen-metre pool sits beside the orchard, edged by stone paving and low planting.” estate-plan.svg, alt “Schematic plan of the estate; a complete text description follows.” The plan is an icon/technical diagram asset, not an interactive map. It is a fictional orientation drawing, not surveyed access evidence. Do not imply a step-free route, private beach or measured distance to the sea; invite discussion of actual needs.

Mobile: heading, suite, pool, plan, caption and text equivalent, practical copy. Photos are 3:2; plan stays entirely visible. Essential map information is also readable as HTML so shrinking the illustration loses nothing.

4. A week here

Purpose: show possibilities within an unscheduled day.

Layout: heading above three static four-column figures, in breakfast/library/orchard order. Use a gentle 16 px vertical offset for the middle figure on desktop, without changing reading order. Beneath, main paragraph spans 8 columns and atelier note spans 4.

Exact copy:

Images: breakfast-table.webp, alt “Breakfast is laid for six on a courtyard table with woven linen, ceramic plates, bread and fruit.” west-room-library.webp, alt “A reading chair and bookshelves sit beside the west room’s open window, looking toward the orchard.” orchard-walk.webp, alt “A guest walks between mature orchard trees on an unpaved path in soft afternoon light.”

Mobile: headline, three image/caption figures stacked without offsets, body, note. No carousel or invented timetable.

5. The work of care

Purpose: substantiate the working conservation practice through one readable treatment sequence.

Layout: full-bleed stone band, inner 12-column container. Introductory copy and link occupy columns 1–4. Three sequential figures occupy the remaining 8 columns in equal widths, with captions beneath. A plain fictional-record note follows the figures. Preserve viewable original joint detail in all crops.

Exact copy:

Images: chair-condition.webp, alt “The walnut writing chair’s rear joint has opened slightly, exposing the original timber and worn surface.” chair-intervention.webp, alt “Tomé steadies the same walnut chair joint at the bench while securing its original timber.” chair-finished-detail.webp, alt “The secured rear joint of the same walnut chair retains its old scratches and darkened surface marks.” The three images must show the same chair, same joint and consistent grain. Their dates are narrative for this fictional example, not an asserted real conservation record.

Mobile: copy and link, then the three figure/caption pairs in condition/intervention/finished order, then note. They remain separate images, not a before/after slider. At tablet widths use the full row below the introduction; on mobile use 3:2 crops with the joint prominent.

6. Returning

Purpose: explain the return privilege and the guest’s control over stored belongings and preferences.

Layout: belongings photograph columns 1–6; copy columns 7–12. Paper background, approximately 3:2 image, aligned at the top of the headline block.

Exact copy:

Images: returning-books.webp. Alt: “A small wooden belongings box rests beside well-used books on a library shelf, ready for a returning guest.” Books have unbranded, unreadable spines; no identifiable real publishing marks or personal names.

Mobile: eyebrow, headline, image, two paragraphs. The right to return is a first option, not an automatic booking or a guaranteed unchanged price.

7. Before an introduction

Purpose: provide all practical terms before asking for correspondence.

Layout: full-width heading and six-row dl ledger on paper. Desktop terms span 3 columns, values 9; fine stone rules and clear 16 px row padding. No accordion: all terms are visible.

Exact copy:

Term Exact value
The residence Seven nights. One party. Three suites. Six guests, including children.
The season Eighteen residences, March–November. Two empty nights between visits.
Included Accommodation, meals, house wines, laundry, housekeeping and return road transfers from Lisbon airport.
Quoted separately Flights, outside excursions and commissioned conservation work.
The proposal One agreed household price, shared in your personal proposal before commitment.
An introduction A referral is welcome. Iria may also invite guests after direct correspondence. A request is neither a booking nor an invitation.

Images: none. Buttons/links: none. No prices, availability claims or currency symbols are added.

Mobile: each term sits above its value; pairs remain grouped with 8 px between term/value and 24 px between pairs. No table overflow or horizontal scrolling.

8. The invitation

Purpose: begin a personal conversation with the named host.

Layout: estuary background. Left half: small paper-coloured three-opening emblem, eyebrow and heading. Right half: note, signature, paper-filled primary action, selectable email and outlined copy action. On desktop the email and copy button may share a wrapping row; the support line is below. Keep comfortable whitespace around the letter.

Exact copy:

Images: courtyard-emblem.svg, decorative here, aria-hidden="true". No additional photo or form.

Action contract: give this section id="introduction". The main action is an anchor, not a submit button, with mailto:iria@orrisvane.example?subject=An%20introduction%20to%20Orrisvane%20House&body=Name%3A%20%0APreferred%20season%3A%20%0AParty%20size%3A%20%0AIntroducer%20%28optional%29%3A%20. The adjacent visible email is a simple mailto link and remains selectable. The .example address is a reserved showcase address, not a working destination. Never invent a sent-message confirmation or a reply-time promise.

The copy button uses navigator.clipboard.writeText after activation, when available. Announce the success/failure text through a persistent role="status" region. On failure leave the visible address selectable. If JavaScript is unavailable, hide the copy button and retain the email; the primary email link still works. Do not turn the homepage into a form or store the suggested details locally.

Mobile: emblem, eyebrow, heading, note, signature, full-width main action, email, copy button, support. Buttons can grow taller if labels wrap. Allow the email to wrap with overflow-wrap: anywhere at extreme zoom.

Purpose: repeat the house identity, regional location, contact and utility links consistently.

Layout: continuation of the estuary background, separated by a 1 px paper rule. Three flexible columns: identity; location/contact; utility links and showcase attribution. All labels are paper; support copy can be stone. Keep contact in this same DOM position on every page.

Exact copy:

Images: orrisvane-wordmark.svg, rendered in paper. Its accessible name is “Orrisvane House”; the linked image goes to #top. The same wordmark appears in ink in the masthead.

Mobile: identity, location, email, utility links, attribution stacked, with 24 px group gaps. Preserve 44 px standalone link targets. Privacy and Accessibility link to actual privacy.html and accessibility.html pages in the finished site; those utility pages are required before shipping, with no empty href or dead # destinations.

Components

Buttons

Form fields

The homepage has no form fields: the profile specifies direct email. The following field contract is reserved for a later, explicitly commissioned form and must not add a submission flow to this build.

Motion

Element / trigger Behaviour Duration / easing Reduced motion
Link hover Underline thickness/offset and text colour transition; underline remains present on editorial links 400 ms, cubic-bezier(.22,1,.36,1) Immediate state change
Button hover Paper/stone fill and label colour transition 400 ms, same easing Immediate state change
Native mobile menu Standard disclosure open/close; content reflows Immediate; no animated height Same
Keyboard focus Visible outline and underline appear 0 ms Same
Photographs and page content Still and visible immediately; no scroll-triggered hiding or transforms None Same
Anchor navigation / scrolling Native browser jump and native scrolling None Same

Under prefers-reduced-motion: reduce, set transitions and animations to none and scroll-behavior: auto. Keep focus immediate regardless of motion preference. No video, autoplay, image zoom, parallax, scroll interception or loading curtain is needed. The calm comes from layout, not delayed access to content.

Asset list

Asset team destination: examples/maison-lumen/clients/estate/assets/. The table describes production assets to make; this handoff creates only design.jpg and this spec. Dimensions are export pixel dimensions (SVG entries describe viewBox width × height). Photos are sRGB, without baked text, UI or branding; use honest natural light, walking-height cameras and straight architecture. Obtain permission for represented people and objects in any eventual real production. The technical plan is listed as icon to fit the supplied asset-kind vocabulary.

File name Kind Size in px Format What it shows
orrisvane-wordmark.svg logo 640 × 80 SVG Original restrained serif “ORRISVANE HOUSE”; outlined custom lettering; single colour, ink for header and paper for footer via currentColor/inline SVG
courtyard-emblem.svg monogram 160 × 120 SVG Original three-opening courtyard elevation, simple single-colour architectural strokes; ink or paper via currentColor
arrow-right.svg icon 24 × 24 SVG Plain line arrow, no word or brand, 1.5 px stroke, currentColor; decorative 16 px inline rendering
estate-plan.svg icon 1600 × 800 SVG Schematic 28-hectare inland estate: labelled dashed boundary, arrival road, courtyard, three suites, library, orchard, gardens, 16 m pool; public coastline outside diagram; labels at least 32 px in source, readable text equivalent in HTML
hero-courtyard.webp photo 2400 × 1350 WebP Limewashed courtyard, three shaded openings, terracotta paving, timber table and orchard beyond; horizontal 16:9 with central 4:3 mobile-safe composition
household-portrait.webp photo 1800 × 1200 WebP Iria and Tomé beside a walnut chair in their working conservation atelier; both faces and chair remain visible
suite-orchard.webp photo 1800 × 1200 WebP Linen bed, walnut chair and open doors toward the courtyard/orchard; room-height architectural view
pool-orchard.webp photo 1500 × 1000 WebP Rectangular 16 m pool, stone paving and orchard; no sea, beach claim or resort spectacle
breakfast-table.webp photo 1200 × 800 WebP A courtyard breakfast laid for six with woven linen, bread, fruit and everyday ceramics
west-room-library.webp photo 1200 × 800 WebP Reading chair, bookshelves and open west-room window; book spines without real names or logos
orchard-walk.webp photo 1200 × 800 WebP One guest walking among mature orchard trees, unpaved path and natural afternoon light
chair-condition.webp photo 1000 × 1250 WebP Rear joint of one aged walnut writing chair before repair; open joint and old marks clearly visible
chair-intervention.webp photo 1000 × 1250 WebP Same chair, joint, timber grain and viewpoint; conservator’s hands securing original timber at the bench
chair-finished-detail.webp photo 1000 × 1250 WebP Same joint after treatment, secured but with original scratches and patina; no cosmetic replacement
returning-books.webp photo 1800 × 1200 WebP A modest wooden belongings box and well-used unbranded books on the library shelf

SVG labels must use Source Sans 3 or outlined glyphs; the map’s full text equivalent remains live HTML. Use inline decorative SVGs with aria-hidden="true"; a wordmark used as the home link needs the link’s accessible name. One-colour SVGs should inherit currentColor so both palette variants use the same file. No texture asset is required: tactile detail belongs in the photographs.

Generation provenance: built-in imagegen, first generated as a complete original UI mockup, then edited against that image. Final edit prompt: “Edit this complete full-page Orrisvane House homepage. Preserve the ENTIRE current composition, every photograph, ALL sections, color palette, typography, copy, and footer. Make only these refinements: change the small label above ‘A week with room around it.’ from ‘02 / A WEEK HERE’ to exactly ‘03 / A WEEK HERE’; ensure work-of-care label is ‘04 / THE WORK OF CARE’; keep warm paper and green SOLID flat colors with NO added grain or vignette. Output a higher resolution image exactly 1440 pixels wide and approximately 4240 pixels tall, with crisp legible type. Preserve every section and footer uncropped. No real brands or logos. This is a precise correction of the supplied design, not a redesign.” The tool returned 731 × 2152 px; the saved deliverable is proportionally resampled to 1440 px width. Its unresolved generated label and map typography are specified correctly above for the developer and asset team.