From 99cb89d1e8a54e4a3c5e1f7881f2cee4e57931fa Mon Sep 17 00:00:00 2001 From: mifi Date: Sun, 15 Feb 2026 14:10:57 -0300 Subject: [PATCH] =?UTF-8?q?Svelte=20conversion=20=E2=80=94=20quick=20and?= =?UTF-8?q?=20dirty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .devcontainer/devcontainer.json | 83 +- .gitignore | 5 +- .prettierrc | 22 +- .woodpecker/ci.yaml | 11 + AGENTS.md | 53 + Dockerfile | 2 +- README.md | 93 +- eslint.config.js | 50 +- package.json | 83 +- pnpm-lock.yaml | 2694 ++++++++++++++--- postcss.config.js | 9 + scripts/build.js | 78 - scripts/critical-css.js | 40 + src/app.css | 99 + src/app.d.ts | 13 + src/app.html | 10 + src/assets/css/style.css | 147 - src/assets/js/script.js | 120 - src/index.html | 246 -- src/lib/components/GalleryFigure.svelte | 83 + src/lib/components/SiteHeader.svelte | 30 + src/lib/media.ts | 178 ++ src/routes/+layout.svelte | 5 + src/routes/+layout.ts | 1 + src/routes/+page.svelte | 68 + src/routes/+page.ts | 5 + .../assets/android-chrome-192x192.png | Bin .../assets/android-chrome-512x512.png | Bin {src => static}/assets/apple-touch-icon.png | Bin {src => static}/assets/favicon-16x16.png | Bin {src => static}/assets/favicon-32x32.png | Bin {src => static}/assets/favicon.ico | Bin {src => static}/assets/js/ga-init.js | 0 static/assets/js/script.js | 108 + .../media/desktop/backyard_parking.webp | Bin .../media/desktop/backyard_parking@1x.webp | Bin .../assets/media/desktop/bedroom_suite_1.webp | Bin .../media/desktop/bedroom_suite_1@1x.webp | Bin .../assets/media/desktop/bedroom_suite_2.webp | Bin .../media/desktop/bedroom_suite_2@1x.webp | Bin .../assets/media/desktop/bedroom_suite_3.webp | Bin .../media/desktop/bedroom_suite_3@1x.webp | Bin .../assets/media/desktop/coat_closet.webp | Bin .../assets/media/desktop/coat_closet@1x.webp | Bin .../assets/media/desktop/deck_1.webp | Bin .../assets/media/desktop/deck_1@1x.webp | Bin .../assets/media/desktop/deck_2.webp | Bin .../assets/media/desktop/deck_2@1x.webp | Bin .../assets/media/desktop/exterior.webp | Bin .../assets/media/desktop/exterior@1x.webp | Bin .../assets/media/desktop/guest_bath.webp | Bin .../assets/media/desktop/guest_bath@1x.webp | Bin .../assets/media/desktop/kitchen.webp | Bin .../assets/media/desktop/kitchen@1x.webp | Bin .../assets/media/desktop/laundry.webp | Bin .../assets/media/desktop/laundry@1x.webp | Bin .../assets/media/desktop/living_room_1.webp | Bin .../media/desktop/living_room_1@1x.webp | Bin .../assets/media/desktop/living_room_2.webp | Bin .../media/desktop/living_room_2@1x.webp | Bin .../media/desktop/office_fitness_guest_1.webp | Bin .../desktop/office_fitness_guest_1@1x.webp | Bin .../media/desktop/office_fitness_guest_2.webp | Bin .../desktop/office_fitness_guest_2@1x.webp | Bin .../media/desktop/office_fitness_guest_3.webp | Bin .../desktop/office_fitness_guest_3@1x.webp | Bin .../media/desktop/office_fitness_guest_4.webp | Bin .../desktop/office_fitness_guest_4@1x.webp | Bin .../assets/media/desktop/onsuite_1.webp | Bin .../assets/media/desktop/onsuite_1@1x.webp | Bin .../assets/media/desktop/onsuite_2.webp | Bin .../assets/media/desktop/onsuite_2@1x.webp | Bin .../assets/media/desktop/tour_still.webp | Bin .../assets/media/desktop/tour_still@1x.webp | Bin .../assets/media/mobile/backyard_parking.webp | Bin .../media/mobile/backyard_parking@1x.webp | Bin .../media/mobile/backyard_parking_mobile.webp | Bin .../assets/media/mobile/bedroom_suite_1.webp | Bin .../media/mobile/bedroom_suite_1@1x.webp | Bin .../media/mobile/bedroom_suite_1_mobile.webp | Bin .../assets/media/mobile/bedroom_suite_2.webp | Bin .../media/mobile/bedroom_suite_2@1x.webp | Bin .../media/mobile/bedroom_suite_2_mobile.webp | Bin .../assets/media/mobile/bedroom_suite_3.webp | Bin .../media/mobile/bedroom_suite_3@1x.webp | Bin .../media/mobile/bedroom_suite_3_mobile.webp | Bin .../assets/media/mobile/coat_closet.webp | Bin .../assets/media/mobile/coat_closet@1x.webp | Bin .../media/mobile/coat_closet_mobile.webp | Bin .../assets/media/mobile/deck_1.webp | Bin .../assets/media/mobile/deck_1@1x.webp | Bin .../assets/media/mobile/deck_1_mobile.webp | Bin .../assets/media/mobile/deck_2.webp | Bin .../assets/media/mobile/deck_2@1x.webp | Bin .../assets/media/mobile/deck_2_mobile.webp | Bin .../assets/media/mobile/exterior.webp | Bin .../assets/media/mobile/exterior@1x.webp | Bin .../assets/media/mobile/exterior_mobile.webp | Bin .../assets/media/mobile/guest_bath.webp | Bin .../assets/media/mobile/guest_bath@1x.webp | Bin .../media/mobile/guest_bath_mobile.webp | Bin .../assets/media/mobile/kitchen.webp | Bin .../assets/media/mobile/kitchen@1x.webp | Bin .../assets/media/mobile/kitchen_mobile.webp | Bin .../assets/media/mobile/laundry.webp | Bin .../assets/media/mobile/laundry@1x.webp | Bin .../assets/media/mobile/laundry_mobile.webp | Bin .../assets/media/mobile/living_room_1.webp | Bin .../assets/media/mobile/living_room_1@1x.webp | Bin .../media/mobile/living_room_1_mobile.webp | Bin .../assets/media/mobile/living_room_2.webp | Bin .../assets/media/mobile/living_room_2@1x.webp | Bin .../media/mobile/living_room_2_mobile.webp | Bin .../media/mobile/office_fitness_guest_1.webp | Bin .../mobile/office_fitness_guest_1@1x.webp | Bin .../mobile/office_fitness_guest_1_mobile.webp | Bin .../media/mobile/office_fitness_guest_2.webp | Bin .../mobile/office_fitness_guest_2@1x.webp | Bin .../mobile/office_fitness_guest_2_mobile.webp | Bin .../media/mobile/office_fitness_guest_3.webp | Bin .../mobile/office_fitness_guest_3@1x.webp | Bin .../mobile/office_fitness_guest_3_mobile.webp | Bin .../media/mobile/office_fitness_guest_4.webp | Bin .../mobile/office_fitness_guest_4@1x.webp | Bin .../mobile/office_fitness_guest_4_mobile.webp | Bin .../assets/media/mobile/onsuite_1.webp | Bin .../assets/media/mobile/onsuite_1@1x.webp | Bin .../assets/media/mobile/onsuite_1_mobile.webp | Bin .../assets/media/mobile/onsuite_2.webp | Bin .../assets/media/mobile/onsuite_2@1x.webp | Bin .../assets/media/mobile/onsuite_2_mobile.webp | Bin .../assets/media/mobile/tour_still.webp | Bin .../assets/media/mobile/tour_still@1x.webp | Bin .../assets/media/tablet/backyard_parking.webp | Bin .../media/tablet/backyard_parking@1x.webp | Bin .../assets/media/tablet/bedroom_suite_1.webp | Bin .../media/tablet/bedroom_suite_1@1x.webp | Bin .../assets/media/tablet/bedroom_suite_2.webp | Bin .../media/tablet/bedroom_suite_2@1x.webp | Bin .../assets/media/tablet/bedroom_suite_3.webp | Bin .../media/tablet/bedroom_suite_3@1x.webp | Bin .../assets/media/tablet/coat_closet.webp | Bin .../assets/media/tablet/coat_closet@1x.webp | Bin .../assets/media/tablet/deck_1.webp | Bin .../assets/media/tablet/deck_1@1x.webp | Bin .../assets/media/tablet/deck_2.webp | Bin .../assets/media/tablet/deck_2@1x.webp | Bin .../assets/media/tablet/exterior.webp | Bin .../assets/media/tablet/exterior@1x.webp | Bin .../assets/media/tablet/guest_bath.webp | Bin .../assets/media/tablet/guest_bath@1x.webp | Bin .../assets/media/tablet/kitchen.webp | Bin .../assets/media/tablet/kitchen@1x.webp | Bin .../assets/media/tablet/laundry.webp | Bin .../assets/media/tablet/laundry@1x.webp | Bin .../assets/media/tablet/living_room_1.webp | Bin .../assets/media/tablet/living_room_1@1x.webp | Bin .../assets/media/tablet/living_room_2.webp | Bin .../assets/media/tablet/living_room_2@1x.webp | Bin .../media/tablet/office_fitness_guest_1.webp | Bin .../tablet/office_fitness_guest_1@1x.webp | Bin .../media/tablet/office_fitness_guest_2.webp | Bin .../tablet/office_fitness_guest_2@1x.webp | Bin .../media/tablet/office_fitness_guest_3.webp | Bin .../tablet/office_fitness_guest_3@1x.webp | Bin .../media/tablet/office_fitness_guest_4.webp | Bin .../tablet/office_fitness_guest_4@1x.webp | Bin .../assets/media/tablet/onsuite_1.webp | Bin .../assets/media/tablet/onsuite_1@1x.webp | Bin .../assets/media/tablet/onsuite_2.webp | Bin .../assets/media/tablet/onsuite_2@1x.webp | Bin .../assets/media/tablet/tour_still.webp | Bin .../assets/media/tablet/tour_still@1x.webp | Bin .../media/thumbnail/backyard_parking.webp | Bin .../media/thumbnail/bedroom_suite_1.webp | Bin .../media/thumbnail/bedroom_suite_2.webp | Bin .../media/thumbnail/bedroom_suite_3.webp | Bin .../assets/media/thumbnail/coat_closet.webp | Bin .../assets/media/thumbnail/deck_1.webp | Bin .../assets/media/thumbnail/deck_2.webp | Bin .../assets/media/thumbnail/exterior.webp | Bin .../assets/media/thumbnail/guest_bath.webp | Bin .../assets/media/thumbnail/kitchen.webp | Bin .../assets/media/thumbnail/laundry.webp | Bin .../assets/media/thumbnail/living_room_1.webp | Bin .../assets/media/thumbnail/living_room_2.webp | Bin .../thumbnail/office_fitness_guest_1.webp | Bin .../thumbnail/office_fitness_guest_2.webp | Bin .../thumbnail/office_fitness_guest_3.webp | Bin .../thumbnail/office_fitness_guest_4.webp | Bin .../assets/media/thumbnail/onsuite_1.webp | Bin .../assets/media/thumbnail/onsuite_2.webp | Bin .../assets/media/thumbnail/tour.webp | Bin {src => static}/assets/media/videos/tour.mp4 | 0 static/robots.txt | 2 + svelte.config.js | 27 + tsconfig.json | 14 + vite.config.ts | 6 + 198 files changed, 3192 insertions(+), 1193 deletions(-) create mode 100644 AGENTS.md create mode 100644 postcss.config.js delete mode 100644 scripts/build.js create mode 100644 scripts/critical-css.js create mode 100644 src/app.css create mode 100644 src/app.d.ts create mode 100644 src/app.html delete mode 100644 src/assets/css/style.css delete mode 100644 src/assets/js/script.js delete mode 100644 src/index.html create mode 100644 src/lib/components/GalleryFigure.svelte create mode 100644 src/lib/components/SiteHeader.svelte create mode 100644 src/lib/media.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+layout.ts create mode 100644 src/routes/+page.svelte create mode 100644 src/routes/+page.ts rename {src => static}/assets/android-chrome-192x192.png (100%) rename {src => static}/assets/android-chrome-512x512.png (100%) rename {src => static}/assets/apple-touch-icon.png (100%) rename {src => static}/assets/favicon-16x16.png (100%) rename {src => static}/assets/favicon-32x32.png (100%) rename {src => static}/assets/favicon.ico (100%) rename {src => static}/assets/js/ga-init.js (100%) create mode 100644 static/assets/js/script.js rename {src => static}/assets/media/desktop/backyard_parking.webp (100%) rename {src => static}/assets/media/desktop/backyard_parking@1x.webp (100%) rename {src => static}/assets/media/desktop/bedroom_suite_1.webp (100%) rename {src => static}/assets/media/desktop/bedroom_suite_1@1x.webp (100%) rename {src => static}/assets/media/desktop/bedroom_suite_2.webp (100%) rename {src => static}/assets/media/desktop/bedroom_suite_2@1x.webp (100%) rename {src => static}/assets/media/desktop/bedroom_suite_3.webp (100%) rename {src => static}/assets/media/desktop/bedroom_suite_3@1x.webp (100%) rename {src => static}/assets/media/desktop/coat_closet.webp (100%) rename {src => static}/assets/media/desktop/coat_closet@1x.webp (100%) rename {src => static}/assets/media/desktop/deck_1.webp (100%) rename {src => static}/assets/media/desktop/deck_1@1x.webp (100%) rename {src => static}/assets/media/desktop/deck_2.webp (100%) rename {src => static}/assets/media/desktop/deck_2@1x.webp (100%) rename {src => static}/assets/media/desktop/exterior.webp (100%) rename {src => static}/assets/media/desktop/exterior@1x.webp (100%) rename {src => static}/assets/media/desktop/guest_bath.webp (100%) rename {src => static}/assets/media/desktop/guest_bath@1x.webp (100%) rename {src => static}/assets/media/desktop/kitchen.webp (100%) rename {src => static}/assets/media/desktop/kitchen@1x.webp (100%) rename {src => static}/assets/media/desktop/laundry.webp (100%) rename {src => static}/assets/media/desktop/laundry@1x.webp (100%) rename {src => static}/assets/media/desktop/living_room_1.webp (100%) rename {src => static}/assets/media/desktop/living_room_1@1x.webp (100%) rename {src => static}/assets/media/desktop/living_room_2.webp (100%) rename {src => static}/assets/media/desktop/living_room_2@1x.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_1.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_1@1x.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_2.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_2@1x.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_3.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_3@1x.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_4.webp (100%) rename {src => static}/assets/media/desktop/office_fitness_guest_4@1x.webp (100%) rename {src => static}/assets/media/desktop/onsuite_1.webp (100%) rename {src => static}/assets/media/desktop/onsuite_1@1x.webp (100%) rename {src => static}/assets/media/desktop/onsuite_2.webp (100%) rename {src => static}/assets/media/desktop/onsuite_2@1x.webp (100%) rename {src => static}/assets/media/desktop/tour_still.webp (100%) rename {src => static}/assets/media/desktop/tour_still@1x.webp (100%) rename {src => static}/assets/media/mobile/backyard_parking.webp (100%) rename {src => static}/assets/media/mobile/backyard_parking@1x.webp (100%) rename {src => static}/assets/media/mobile/backyard_parking_mobile.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_1.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_1@1x.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_1_mobile.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_2.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_2@1x.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_2_mobile.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_3.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_3@1x.webp (100%) rename {src => static}/assets/media/mobile/bedroom_suite_3_mobile.webp (100%) rename {src => static}/assets/media/mobile/coat_closet.webp (100%) rename {src => static}/assets/media/mobile/coat_closet@1x.webp (100%) rename {src => static}/assets/media/mobile/coat_closet_mobile.webp (100%) rename {src => static}/assets/media/mobile/deck_1.webp (100%) rename {src => static}/assets/media/mobile/deck_1@1x.webp (100%) rename {src => static}/assets/media/mobile/deck_1_mobile.webp (100%) rename {src => static}/assets/media/mobile/deck_2.webp (100%) rename {src => static}/assets/media/mobile/deck_2@1x.webp (100%) rename {src => static}/assets/media/mobile/deck_2_mobile.webp (100%) rename {src => static}/assets/media/mobile/exterior.webp (100%) rename {src => static}/assets/media/mobile/exterior@1x.webp (100%) rename {src => static}/assets/media/mobile/exterior_mobile.webp (100%) rename {src => static}/assets/media/mobile/guest_bath.webp (100%) rename {src => static}/assets/media/mobile/guest_bath@1x.webp (100%) rename {src => static}/assets/media/mobile/guest_bath_mobile.webp (100%) rename {src => static}/assets/media/mobile/kitchen.webp (100%) rename {src => static}/assets/media/mobile/kitchen@1x.webp (100%) rename {src => static}/assets/media/mobile/kitchen_mobile.webp (100%) rename {src => static}/assets/media/mobile/laundry.webp (100%) rename {src => static}/assets/media/mobile/laundry@1x.webp (100%) rename {src => static}/assets/media/mobile/laundry_mobile.webp (100%) rename {src => static}/assets/media/mobile/living_room_1.webp (100%) rename {src => static}/assets/media/mobile/living_room_1@1x.webp (100%) rename {src => static}/assets/media/mobile/living_room_1_mobile.webp (100%) rename {src => static}/assets/media/mobile/living_room_2.webp (100%) rename {src => static}/assets/media/mobile/living_room_2@1x.webp (100%) rename {src => static}/assets/media/mobile/living_room_2_mobile.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_1.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_1@1x.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_1_mobile.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_2.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_2@1x.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_2_mobile.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_3.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_3@1x.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_3_mobile.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_4.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_4@1x.webp (100%) rename {src => static}/assets/media/mobile/office_fitness_guest_4_mobile.webp (100%) rename {src => static}/assets/media/mobile/onsuite_1.webp (100%) rename {src => static}/assets/media/mobile/onsuite_1@1x.webp (100%) rename {src => static}/assets/media/mobile/onsuite_1_mobile.webp (100%) rename {src => static}/assets/media/mobile/onsuite_2.webp (100%) rename {src => static}/assets/media/mobile/onsuite_2@1x.webp (100%) rename {src => static}/assets/media/mobile/onsuite_2_mobile.webp (100%) rename {src => static}/assets/media/mobile/tour_still.webp (100%) rename {src => static}/assets/media/mobile/tour_still@1x.webp (100%) rename {src => static}/assets/media/tablet/backyard_parking.webp (100%) rename {src => static}/assets/media/tablet/backyard_parking@1x.webp (100%) rename {src => static}/assets/media/tablet/bedroom_suite_1.webp (100%) rename {src => static}/assets/media/tablet/bedroom_suite_1@1x.webp (100%) rename {src => static}/assets/media/tablet/bedroom_suite_2.webp (100%) rename {src => static}/assets/media/tablet/bedroom_suite_2@1x.webp (100%) rename {src => static}/assets/media/tablet/bedroom_suite_3.webp (100%) rename {src => static}/assets/media/tablet/bedroom_suite_3@1x.webp (100%) rename {src => static}/assets/media/tablet/coat_closet.webp (100%) rename {src => static}/assets/media/tablet/coat_closet@1x.webp (100%) rename {src => static}/assets/media/tablet/deck_1.webp (100%) rename {src => static}/assets/media/tablet/deck_1@1x.webp (100%) rename {src => static}/assets/media/tablet/deck_2.webp (100%) rename {src => static}/assets/media/tablet/deck_2@1x.webp (100%) rename {src => static}/assets/media/tablet/exterior.webp (100%) rename {src => static}/assets/media/tablet/exterior@1x.webp (100%) rename {src => static}/assets/media/tablet/guest_bath.webp (100%) rename {src => static}/assets/media/tablet/guest_bath@1x.webp (100%) rename {src => static}/assets/media/tablet/kitchen.webp (100%) rename {src => static}/assets/media/tablet/kitchen@1x.webp (100%) rename {src => static}/assets/media/tablet/laundry.webp (100%) rename {src => static}/assets/media/tablet/laundry@1x.webp (100%) rename {src => static}/assets/media/tablet/living_room_1.webp (100%) rename {src => static}/assets/media/tablet/living_room_1@1x.webp (100%) rename {src => static}/assets/media/tablet/living_room_2.webp (100%) rename {src => static}/assets/media/tablet/living_room_2@1x.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_1.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_1@1x.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_2.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_2@1x.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_3.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_3@1x.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_4.webp (100%) rename {src => static}/assets/media/tablet/office_fitness_guest_4@1x.webp (100%) rename {src => static}/assets/media/tablet/onsuite_1.webp (100%) rename {src => static}/assets/media/tablet/onsuite_1@1x.webp (100%) rename {src => static}/assets/media/tablet/onsuite_2.webp (100%) rename {src => static}/assets/media/tablet/onsuite_2@1x.webp (100%) rename {src => static}/assets/media/tablet/tour_still.webp (100%) rename {src => static}/assets/media/tablet/tour_still@1x.webp (100%) rename {src => static}/assets/media/thumbnail/backyard_parking.webp (100%) rename {src => static}/assets/media/thumbnail/bedroom_suite_1.webp (100%) rename {src => static}/assets/media/thumbnail/bedroom_suite_2.webp (100%) rename {src => static}/assets/media/thumbnail/bedroom_suite_3.webp (100%) rename {src => static}/assets/media/thumbnail/coat_closet.webp (100%) rename {src => static}/assets/media/thumbnail/deck_1.webp (100%) rename {src => static}/assets/media/thumbnail/deck_2.webp (100%) rename {src => static}/assets/media/thumbnail/exterior.webp (100%) rename {src => static}/assets/media/thumbnail/guest_bath.webp (100%) rename {src => static}/assets/media/thumbnail/kitchen.webp (100%) rename {src => static}/assets/media/thumbnail/laundry.webp (100%) rename {src => static}/assets/media/thumbnail/living_room_1.webp (100%) rename {src => static}/assets/media/thumbnail/living_room_2.webp (100%) rename {src => static}/assets/media/thumbnail/office_fitness_guest_1.webp (100%) rename {src => static}/assets/media/thumbnail/office_fitness_guest_2.webp (100%) rename {src => static}/assets/media/thumbnail/office_fitness_guest_3.webp (100%) rename {src => static}/assets/media/thumbnail/office_fitness_guest_4.webp (100%) rename {src => static}/assets/media/thumbnail/onsuite_1.webp (100%) rename {src => static}/assets/media/thumbnail/onsuite_2.webp (100%) rename {src => static}/assets/media/thumbnail/tour.webp (100%) rename {src => static}/assets/media/videos/tour.mp4 (100%) create mode 100644 static/robots.txt create mode 100644 svelte.config.js create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 87495b8..39cd0ac 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,40 +1,47 @@ { - "name": "Armandine", - "image": "mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm", - "features": { - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {} - }, - "postCreateCommand": "corepack enable && corepack prepare pnpm@10.29.2 --activate && pnpm install", - "forwardPorts": [3000, 80], - "portsAttributes": { - "3000": { - "label": "Static site (pnpm serve)", - "onAutoForward": "notify" - }, - "80": { - "label": "Nginx (when running container)", - "onAutoForward": "silent" - } - }, - "customizations": { - "vscode": { - "extensions": [ - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - "stylelint.vscode-stylelint" - ], - "settings": { - "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit", - "source.fixAll.stylelint": "explicit" - } - } - } - }, - "remoteUser": "node" + "name": "Armandine", + "image": "mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm", + "features": { + "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {} + }, + "postCreateCommand": "corepack enable && corepack prepare pnpm@10.29.2 --activate && pnpm install", + "forwardPorts": [5173, 4173, 80], + "portsAttributes": { + "80": { + "label": "Nginx (when running container)", + "onAutoForward": "silent" + }, + "4173": { + "label": "Preview build (pnpm preview)", + "onAutoForward": "silent" + }, + "5173": { + "label": "SvelteKit dev (pnpm dev)", + "onAutoForward": "notify" + } + }, + "customizations": { + "vscode": { + "extensions": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "stylelint.vscode-stylelint", + "svelte.svelte-vscode" + ], + "settings": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[svelte]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.fixAll.stylelint": "explicit" + } + } + } + }, + "remoteUser": "node" } diff --git a/.gitignore b/.gitignore index f626f0d..6786e42 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,10 @@ Thumbs.db *.swo *~ -# Build output (if added later) +# SvelteKit +.svelte-kit + +# Build output dist build .next diff --git a/.prettierrc b/.prettierrc index 81507a8..8887ffa 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,15 +1,11 @@ { - "semi": true, - "singleQuote": true, - "tabWidth": 4, - "trailingComma": "all", - "overrides": [ - { - "files": "*.yml", - "options": { - "tabWidth": 4, - "proseWrap": "preserve" - } - } - ] + "semi": true, + "singleQuote": true, + "tabWidth": 4, + "trailingComma": "all", + "plugins": ["prettier-plugin-svelte"], + "overrides": [ + { "files": "*.yml", "options": { "tabWidth": 4, "proseWrap": "preserve" } }, + { "files": "*.svelte", "options": { "parser": "svelte" } } + ] } diff --git a/.woodpecker/ci.yaml b/.woodpecker/ci.yaml index d13bcea..b29bc54 100644 --- a/.woodpecker/ci.yaml +++ b/.woodpecker/ci.yaml @@ -50,6 +50,16 @@ steps: depends_on: - install + - name: check + image: node:22-alpine + commands: + - corepack enable + - corepack prepare pnpm@10.29.2 --activate + - pnpm install --frozen-lockfile + - pnpm check + depends_on: + - install + - name: Send Prettier Status Notification (failure) image: curlimages/curl environment: @@ -85,5 +95,6 @@ steps: - install - lint - format check + - check when: - status: [success] diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d31d8c5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,53 @@ +# AGENTS.md – guidance for LLM agents + +This file helps LLM agents work with the Armandine codebase without introducing antipatterns. + +## Stack and goals + +- **Svelte 5** + **SvelteKit** with **TypeScript**. The site is a **single pre-rendered page** (no SSR, no backend). +- **adapter-static**: the app is built to static HTML/JS/CSS in `build/`. The gallery is **rendered at build time** from `src/lib/media.ts`; the HTML already contains the full gallery. Lightbox and theme toggle are handled by a **client script** (`static/assets/js/script.js`) that binds to the pre-rendered DOM. +- **PostCSS**: nesting and CSS level 2; component-scoped ` diff --git a/src/lib/components/SiteHeader.svelte b/src/lib/components/SiteHeader.svelte new file mode 100644 index 0000000..5afe330 --- /dev/null +++ b/src/lib/components/SiteHeader.svelte @@ -0,0 +1,30 @@ + + + diff --git a/src/lib/media.ts b/src/lib/media.ts new file mode 100644 index 0000000..8636f9f --- /dev/null +++ b/src/lib/media.ts @@ -0,0 +1,178 @@ +export interface MediaItem { + type: 'image' | 'video'; + name: string; + caption: string; + alt: string; + height?: number; + width?: number; + loading?: 'lazy' | 'eager'; + fetchpriority?: 'high' | 'low' | 'auto'; +} + +export const mediaItems: MediaItem[] = [ + { + type: 'image', + name: 'living_room_1', + caption: 'An inviting blend of comfort and curated art—relaxation guaranteed.', + alt: 'Sunny living room with stylish seating and vibrant artwork.', + height: 200, + width: 300, + loading: 'eager', + fetchpriority: 'high' + }, + { + type: 'image', + name: 'living_room_2', + caption: 'Relaxation elevated—your stylish living space awaits.', + alt: 'Spacious living area featuring elegant furniture and tasteful decor.', + height: 200, + width: 300, + fetchpriority: 'high' + }, + { + type: 'image', + name: 'kitchen', + caption: 'The culinary stage is set—snacking encouraged, style required.', + alt: 'Modern kitchen showcasing sleek appliances and contemporary design.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'bedroom_suite_1', + caption: 'A bedroom suite designed to make snoozing irresistible.', + alt: 'Inviting bedroom suite with cozy bedding and warm lighting.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'bedroom_suite_2', + caption: 'Style meets comfort—sleeping in has never been easier.', + alt: 'Comfortable bedroom suite with elegant decor and soft tones.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'bedroom_suite_3', + caption: 'Where dreams get stylish—a bedroom that feels like home.', + alt: 'Welcoming bedroom with soothing colors and inviting ambiance.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'guest_bath', + caption: 'Your personal spa experience—right down the hall.', + alt: 'Sophisticated guest bathroom with modern fixtures and clean lines.', + height: 450, + width: 300 + }, + { + type: 'image', + name: 'onsuite_1', + caption: 'Luxury meets practicality—your private ensuite awaits.', + alt: 'Private ensuite bathroom featuring contemporary design and premium finishes.', + height: 450, + width: 300, + loading: 'eager', + fetchpriority: 'high' + }, + { + type: 'image', + name: 'onsuite_2', + caption: 'Everyday luxury, right at home—your ensuite oasis.', + alt: 'Elegant ensuite with sleek fixtures and stylish decor.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'laundry', + caption: 'Laundry day reimagined—functional never looked so good.', + alt: 'Modern laundry room with washer, dryer, and organized storage.', + height: 450, + width: 300 + }, + { + type: 'image', + name: 'coat_closet', + caption: 'Organized and chic—your entryway\'s best friend.', + alt: 'Convenient coat closet with tidy storage solutions.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'deck_1', + caption: 'Outdoor comfort, just steps away—morning coffee optional.', + alt: 'Sunny deck with cozy seating and pleasant outdoor views.', + height: 450, + width: 300 + }, + { + type: 'image', + name: 'deck_2', + caption: 'Your fresh-air escape—ideal for relaxing evenings.', + alt: 'Comfortable deck area perfect for unwinding or entertaining.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'exterior', + caption: 'Curb appeal perfected—your new favorite place starts here.', + alt: 'Attractive home exterior with inviting architecture.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'backyard_parking', + caption: 'Convenience meets privacy—your personal backyard parking spot.', + alt: 'Private backyard parking area offering secure convenience.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'office_fitness_guest_1', + caption: 'Productivity zone meets fitness corner—multitasking done right.', + alt: 'Dual-purpose room featuring office setup and fitness equipment.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'office_fitness_guest_2', + caption: 'Work, workout, or unwind—the room of endless possibilities.', + alt: 'Versatile office and fitness area with modern amenities.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'office_fitness_guest_3', + caption: 'Stay focused or get fit—you decide.', + alt: 'Functional space combining a workspace and home fitness area.', + height: 200, + width: 300 + }, + { + type: 'image', + name: 'office_fitness_guest_4', + caption: 'Room for every routine—your workspace meets wellness.', + alt: 'Stylish office area seamlessly integrated with fitness features.', + height: 200, + width: 300 + }, + { + type: 'video', + name: 'tour', + caption: "Take the scenic route—explore your the home's highlights with a virtual walkthrough.", + alt: 'Video tour showcasing the property.', + height: 534, + width: 300 + } +]; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..f87b35e --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,5 @@ + + + diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 0000000..189f71e --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1 @@ +export const prerender = true; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..3ac0ada --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,68 @@ + + + + {title} + + + + + + + + + + + + + + + + + + + {@html ``} + + + +
+ +
+ + + diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 0000000..e2717c6 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1,5 @@ +import { mediaItems } from '$lib/media.js'; + +export function load() { + return { mediaItems }; +} diff --git a/src/assets/android-chrome-192x192.png b/static/assets/android-chrome-192x192.png similarity index 100% rename from src/assets/android-chrome-192x192.png rename to static/assets/android-chrome-192x192.png diff --git a/src/assets/android-chrome-512x512.png b/static/assets/android-chrome-512x512.png similarity index 100% rename from src/assets/android-chrome-512x512.png rename to static/assets/android-chrome-512x512.png diff --git a/src/assets/apple-touch-icon.png b/static/assets/apple-touch-icon.png similarity index 100% rename from src/assets/apple-touch-icon.png rename to static/assets/apple-touch-icon.png diff --git a/src/assets/favicon-16x16.png b/static/assets/favicon-16x16.png similarity index 100% rename from src/assets/favicon-16x16.png rename to static/assets/favicon-16x16.png diff --git a/src/assets/favicon-32x32.png b/static/assets/favicon-32x32.png similarity index 100% rename from src/assets/favicon-32x32.png rename to static/assets/favicon-32x32.png diff --git a/src/assets/favicon.ico b/static/assets/favicon.ico similarity index 100% rename from src/assets/favicon.ico rename to static/assets/favicon.ico diff --git a/src/assets/js/ga-init.js b/static/assets/js/ga-init.js similarity index 100% rename from src/assets/js/ga-init.js rename to static/assets/js/ga-init.js diff --git a/static/assets/js/script.js b/static/assets/js/script.js new file mode 100644 index 0000000..8924b60 --- /dev/null +++ b/static/assets/js/script.js @@ -0,0 +1,108 @@ +// --- theme toggle --- +const toggle = document.getElementById('theme-toggle'); +const root = document.documentElement; +const saved = window?.localStorage?.getItem('dark-mode'); +const sysDark = window.matchMedia('(prefers-color-scheme: dark)').matches; +if (saved === 'true') { + root.classList.add('dark'); + root.classList.remove('light'); +} else if (saved === 'false') { + root.classList.add('light'); + root.classList.remove('dark'); +} else { + if (sysDark) { + root.classList.add('dark'); + root.classList.remove('light'); + } else { + root.classList.add('light'); + root.classList.remove('dark'); + } +} +toggle?.addEventListener('click', () => { + const isDark = root.classList.contains('dark'); + root.classList.toggle('dark', !isDark); + root.classList.toggle('light', isDark); + window?.localStorage?.setItem('dark-mode', String(!isDark)); +}); + +const { body } = document; + +// --- lightbox base --- +const lb = document.getElementById('lightbox'); +const lbCnt = document.getElementById('lb-content'); +const lbCap = document.getElementById('lb-caption'); +document.getElementById('lb-close')?.addEventListener('click', () => { + lb?.setAttribute('aria-hidden', 'true'); + body.classList.remove('lightbox-open'); + if (lbCnt) lbCnt.innerHTML = ''; +}); + +// Build picture element for lightbox (name, type only) +function createPicture(name, type) { + const pic = document.createElement('picture'); + const breakpoints = [ + { bp: 'desktop', minWidth: 1024 }, + { bp: 'tablet', minWidth: 768 }, + { bp: 'mobile', minWidth: 0 } + ]; + for (const { bp, minWidth } of breakpoints) { + const src = document.createElement('source'); + src.media = `(min-width:${minWidth}px)`; + if (type === 'image') { + src.srcset = + `/assets/media/${bp}/${name}@1x.webp 1x, /assets/media/${bp}/${name}.webp 2x`; + } else { + src.srcset = + `/assets/media/${bp}/${name}_still@1x.webp 1x, /assets/media/${bp}/${name}_still.webp 2x`; + } + pic.appendChild(src); + } + const img = document.createElement('img'); + img.src = `/assets/media/thumbnail/${name}.webp`; + img.alt = ''; + pic.appendChild(img); + return pic; +} + +function openLightbox(item) { + if (!lbCnt || !lbCap || !lb) return; + lbCnt.innerHTML = ''; + if (item.type === 'video') { + const v = document.createElement('video'); + v.src = `/assets/media/videos/${item.name}.mp4`; + v.controls = true; + v.autoplay = true; + lbCnt.appendChild(v); + } else { + lbCnt.appendChild(createPicture(item.name, item.type)); + } + lbCap.textContent = item.caption; + body.classList.add('lightbox-open'); + lb.setAttribute('aria-hidden', 'false'); +} + +// --- bind to pre-rendered gallery --- +document.querySelectorAll('.gallery-item').forEach((fig) => { + const name = fig.getAttribute('data-name'); + const type = fig.getAttribute('data-type'); + const caption = fig.getAttribute('data-caption'); + if (!name || !type || !caption) return; + const item = { name, type, caption }; + fig.addEventListener('click', () => openLightbox(item)); + fig.addEventListener('keydown', (e) => { + if (e.key === 'Enter') openLightbox(item); + }); +}); + +// --- video toggle --- +const videoTgl = document.getElementById('show_video'); +videoTgl?.addEventListener('click', () => { + const videoFig = document.querySelector('.gallery-item.video'); + if (videoFig) { + openLightbox({ + name: videoFig.getAttribute('data-name'), + type: videoFig.getAttribute('data-type'), + caption: videoFig.getAttribute('data-caption') + }); + } +}); diff --git a/src/assets/media/desktop/backyard_parking.webp b/static/assets/media/desktop/backyard_parking.webp similarity index 100% rename from src/assets/media/desktop/backyard_parking.webp rename to static/assets/media/desktop/backyard_parking.webp diff --git a/src/assets/media/desktop/backyard_parking@1x.webp b/static/assets/media/desktop/backyard_parking@1x.webp similarity index 100% rename from src/assets/media/desktop/backyard_parking@1x.webp rename to static/assets/media/desktop/backyard_parking@1x.webp diff --git a/src/assets/media/desktop/bedroom_suite_1.webp b/static/assets/media/desktop/bedroom_suite_1.webp similarity index 100% rename from src/assets/media/desktop/bedroom_suite_1.webp rename to static/assets/media/desktop/bedroom_suite_1.webp diff --git a/src/assets/media/desktop/bedroom_suite_1@1x.webp b/static/assets/media/desktop/bedroom_suite_1@1x.webp similarity index 100% rename from src/assets/media/desktop/bedroom_suite_1@1x.webp rename to static/assets/media/desktop/bedroom_suite_1@1x.webp diff --git a/src/assets/media/desktop/bedroom_suite_2.webp b/static/assets/media/desktop/bedroom_suite_2.webp similarity index 100% rename from src/assets/media/desktop/bedroom_suite_2.webp rename to static/assets/media/desktop/bedroom_suite_2.webp diff --git a/src/assets/media/desktop/bedroom_suite_2@1x.webp b/static/assets/media/desktop/bedroom_suite_2@1x.webp similarity index 100% rename from src/assets/media/desktop/bedroom_suite_2@1x.webp rename to static/assets/media/desktop/bedroom_suite_2@1x.webp diff --git a/src/assets/media/desktop/bedroom_suite_3.webp b/static/assets/media/desktop/bedroom_suite_3.webp similarity index 100% rename from src/assets/media/desktop/bedroom_suite_3.webp rename to static/assets/media/desktop/bedroom_suite_3.webp diff --git a/src/assets/media/desktop/bedroom_suite_3@1x.webp b/static/assets/media/desktop/bedroom_suite_3@1x.webp similarity index 100% rename from src/assets/media/desktop/bedroom_suite_3@1x.webp rename to static/assets/media/desktop/bedroom_suite_3@1x.webp diff --git a/src/assets/media/desktop/coat_closet.webp b/static/assets/media/desktop/coat_closet.webp similarity index 100% rename from src/assets/media/desktop/coat_closet.webp rename to static/assets/media/desktop/coat_closet.webp diff --git a/src/assets/media/desktop/coat_closet@1x.webp b/static/assets/media/desktop/coat_closet@1x.webp similarity index 100% rename from src/assets/media/desktop/coat_closet@1x.webp rename to static/assets/media/desktop/coat_closet@1x.webp diff --git a/src/assets/media/desktop/deck_1.webp b/static/assets/media/desktop/deck_1.webp similarity index 100% rename from src/assets/media/desktop/deck_1.webp rename to static/assets/media/desktop/deck_1.webp diff --git a/src/assets/media/desktop/deck_1@1x.webp b/static/assets/media/desktop/deck_1@1x.webp similarity index 100% rename from src/assets/media/desktop/deck_1@1x.webp rename to static/assets/media/desktop/deck_1@1x.webp diff --git a/src/assets/media/desktop/deck_2.webp b/static/assets/media/desktop/deck_2.webp similarity index 100% rename from src/assets/media/desktop/deck_2.webp rename to static/assets/media/desktop/deck_2.webp diff --git a/src/assets/media/desktop/deck_2@1x.webp b/static/assets/media/desktop/deck_2@1x.webp similarity index 100% rename from src/assets/media/desktop/deck_2@1x.webp rename to static/assets/media/desktop/deck_2@1x.webp diff --git a/src/assets/media/desktop/exterior.webp b/static/assets/media/desktop/exterior.webp similarity index 100% rename from src/assets/media/desktop/exterior.webp rename to static/assets/media/desktop/exterior.webp diff --git a/src/assets/media/desktop/exterior@1x.webp b/static/assets/media/desktop/exterior@1x.webp similarity index 100% rename from src/assets/media/desktop/exterior@1x.webp rename to static/assets/media/desktop/exterior@1x.webp diff --git a/src/assets/media/desktop/guest_bath.webp b/static/assets/media/desktop/guest_bath.webp similarity index 100% rename from src/assets/media/desktop/guest_bath.webp rename to static/assets/media/desktop/guest_bath.webp diff --git a/src/assets/media/desktop/guest_bath@1x.webp b/static/assets/media/desktop/guest_bath@1x.webp similarity index 100% rename from src/assets/media/desktop/guest_bath@1x.webp rename to static/assets/media/desktop/guest_bath@1x.webp diff --git a/src/assets/media/desktop/kitchen.webp b/static/assets/media/desktop/kitchen.webp similarity index 100% rename from src/assets/media/desktop/kitchen.webp rename to static/assets/media/desktop/kitchen.webp diff --git a/src/assets/media/desktop/kitchen@1x.webp b/static/assets/media/desktop/kitchen@1x.webp similarity index 100% rename from src/assets/media/desktop/kitchen@1x.webp rename to static/assets/media/desktop/kitchen@1x.webp diff --git a/src/assets/media/desktop/laundry.webp b/static/assets/media/desktop/laundry.webp similarity index 100% rename from src/assets/media/desktop/laundry.webp rename to static/assets/media/desktop/laundry.webp diff --git a/src/assets/media/desktop/laundry@1x.webp b/static/assets/media/desktop/laundry@1x.webp similarity index 100% rename from src/assets/media/desktop/laundry@1x.webp rename to static/assets/media/desktop/laundry@1x.webp diff --git a/src/assets/media/desktop/living_room_1.webp b/static/assets/media/desktop/living_room_1.webp similarity index 100% rename from src/assets/media/desktop/living_room_1.webp rename to static/assets/media/desktop/living_room_1.webp diff --git a/src/assets/media/desktop/living_room_1@1x.webp b/static/assets/media/desktop/living_room_1@1x.webp similarity index 100% rename from src/assets/media/desktop/living_room_1@1x.webp rename to static/assets/media/desktop/living_room_1@1x.webp diff --git a/src/assets/media/desktop/living_room_2.webp b/static/assets/media/desktop/living_room_2.webp similarity index 100% rename from src/assets/media/desktop/living_room_2.webp rename to static/assets/media/desktop/living_room_2.webp diff --git a/src/assets/media/desktop/living_room_2@1x.webp b/static/assets/media/desktop/living_room_2@1x.webp similarity index 100% rename from src/assets/media/desktop/living_room_2@1x.webp rename to static/assets/media/desktop/living_room_2@1x.webp diff --git a/src/assets/media/desktop/office_fitness_guest_1.webp b/static/assets/media/desktop/office_fitness_guest_1.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_1.webp rename to static/assets/media/desktop/office_fitness_guest_1.webp diff --git a/src/assets/media/desktop/office_fitness_guest_1@1x.webp b/static/assets/media/desktop/office_fitness_guest_1@1x.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_1@1x.webp rename to static/assets/media/desktop/office_fitness_guest_1@1x.webp diff --git a/src/assets/media/desktop/office_fitness_guest_2.webp b/static/assets/media/desktop/office_fitness_guest_2.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_2.webp rename to static/assets/media/desktop/office_fitness_guest_2.webp diff --git a/src/assets/media/desktop/office_fitness_guest_2@1x.webp b/static/assets/media/desktop/office_fitness_guest_2@1x.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_2@1x.webp rename to static/assets/media/desktop/office_fitness_guest_2@1x.webp diff --git a/src/assets/media/desktop/office_fitness_guest_3.webp b/static/assets/media/desktop/office_fitness_guest_3.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_3.webp rename to static/assets/media/desktop/office_fitness_guest_3.webp diff --git a/src/assets/media/desktop/office_fitness_guest_3@1x.webp b/static/assets/media/desktop/office_fitness_guest_3@1x.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_3@1x.webp rename to static/assets/media/desktop/office_fitness_guest_3@1x.webp diff --git a/src/assets/media/desktop/office_fitness_guest_4.webp b/static/assets/media/desktop/office_fitness_guest_4.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_4.webp rename to static/assets/media/desktop/office_fitness_guest_4.webp diff --git a/src/assets/media/desktop/office_fitness_guest_4@1x.webp b/static/assets/media/desktop/office_fitness_guest_4@1x.webp similarity index 100% rename from src/assets/media/desktop/office_fitness_guest_4@1x.webp rename to static/assets/media/desktop/office_fitness_guest_4@1x.webp diff --git a/src/assets/media/desktop/onsuite_1.webp b/static/assets/media/desktop/onsuite_1.webp similarity index 100% rename from src/assets/media/desktop/onsuite_1.webp rename to static/assets/media/desktop/onsuite_1.webp diff --git a/src/assets/media/desktop/onsuite_1@1x.webp b/static/assets/media/desktop/onsuite_1@1x.webp similarity index 100% rename from src/assets/media/desktop/onsuite_1@1x.webp rename to static/assets/media/desktop/onsuite_1@1x.webp diff --git a/src/assets/media/desktop/onsuite_2.webp b/static/assets/media/desktop/onsuite_2.webp similarity index 100% rename from src/assets/media/desktop/onsuite_2.webp rename to static/assets/media/desktop/onsuite_2.webp diff --git a/src/assets/media/desktop/onsuite_2@1x.webp b/static/assets/media/desktop/onsuite_2@1x.webp similarity index 100% rename from src/assets/media/desktop/onsuite_2@1x.webp rename to static/assets/media/desktop/onsuite_2@1x.webp diff --git a/src/assets/media/desktop/tour_still.webp b/static/assets/media/desktop/tour_still.webp similarity index 100% rename from src/assets/media/desktop/tour_still.webp rename to static/assets/media/desktop/tour_still.webp diff --git a/src/assets/media/desktop/tour_still@1x.webp b/static/assets/media/desktop/tour_still@1x.webp similarity index 100% rename from src/assets/media/desktop/tour_still@1x.webp rename to static/assets/media/desktop/tour_still@1x.webp diff --git a/src/assets/media/mobile/backyard_parking.webp b/static/assets/media/mobile/backyard_parking.webp similarity index 100% rename from src/assets/media/mobile/backyard_parking.webp rename to static/assets/media/mobile/backyard_parking.webp diff --git a/src/assets/media/mobile/backyard_parking@1x.webp b/static/assets/media/mobile/backyard_parking@1x.webp similarity index 100% rename from src/assets/media/mobile/backyard_parking@1x.webp rename to static/assets/media/mobile/backyard_parking@1x.webp diff --git a/src/assets/media/mobile/backyard_parking_mobile.webp b/static/assets/media/mobile/backyard_parking_mobile.webp similarity index 100% rename from src/assets/media/mobile/backyard_parking_mobile.webp rename to static/assets/media/mobile/backyard_parking_mobile.webp diff --git a/src/assets/media/mobile/bedroom_suite_1.webp b/static/assets/media/mobile/bedroom_suite_1.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_1.webp rename to static/assets/media/mobile/bedroom_suite_1.webp diff --git a/src/assets/media/mobile/bedroom_suite_1@1x.webp b/static/assets/media/mobile/bedroom_suite_1@1x.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_1@1x.webp rename to static/assets/media/mobile/bedroom_suite_1@1x.webp diff --git a/src/assets/media/mobile/bedroom_suite_1_mobile.webp b/static/assets/media/mobile/bedroom_suite_1_mobile.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_1_mobile.webp rename to static/assets/media/mobile/bedroom_suite_1_mobile.webp diff --git a/src/assets/media/mobile/bedroom_suite_2.webp b/static/assets/media/mobile/bedroom_suite_2.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_2.webp rename to static/assets/media/mobile/bedroom_suite_2.webp diff --git a/src/assets/media/mobile/bedroom_suite_2@1x.webp b/static/assets/media/mobile/bedroom_suite_2@1x.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_2@1x.webp rename to static/assets/media/mobile/bedroom_suite_2@1x.webp diff --git a/src/assets/media/mobile/bedroom_suite_2_mobile.webp b/static/assets/media/mobile/bedroom_suite_2_mobile.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_2_mobile.webp rename to static/assets/media/mobile/bedroom_suite_2_mobile.webp diff --git a/src/assets/media/mobile/bedroom_suite_3.webp b/static/assets/media/mobile/bedroom_suite_3.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_3.webp rename to static/assets/media/mobile/bedroom_suite_3.webp diff --git a/src/assets/media/mobile/bedroom_suite_3@1x.webp b/static/assets/media/mobile/bedroom_suite_3@1x.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_3@1x.webp rename to static/assets/media/mobile/bedroom_suite_3@1x.webp diff --git a/src/assets/media/mobile/bedroom_suite_3_mobile.webp b/static/assets/media/mobile/bedroom_suite_3_mobile.webp similarity index 100% rename from src/assets/media/mobile/bedroom_suite_3_mobile.webp rename to static/assets/media/mobile/bedroom_suite_3_mobile.webp diff --git a/src/assets/media/mobile/coat_closet.webp b/static/assets/media/mobile/coat_closet.webp similarity index 100% rename from src/assets/media/mobile/coat_closet.webp rename to static/assets/media/mobile/coat_closet.webp diff --git a/src/assets/media/mobile/coat_closet@1x.webp b/static/assets/media/mobile/coat_closet@1x.webp similarity index 100% rename from src/assets/media/mobile/coat_closet@1x.webp rename to static/assets/media/mobile/coat_closet@1x.webp diff --git a/src/assets/media/mobile/coat_closet_mobile.webp b/static/assets/media/mobile/coat_closet_mobile.webp similarity index 100% rename from src/assets/media/mobile/coat_closet_mobile.webp rename to static/assets/media/mobile/coat_closet_mobile.webp diff --git a/src/assets/media/mobile/deck_1.webp b/static/assets/media/mobile/deck_1.webp similarity index 100% rename from src/assets/media/mobile/deck_1.webp rename to static/assets/media/mobile/deck_1.webp diff --git a/src/assets/media/mobile/deck_1@1x.webp b/static/assets/media/mobile/deck_1@1x.webp similarity index 100% rename from src/assets/media/mobile/deck_1@1x.webp rename to static/assets/media/mobile/deck_1@1x.webp diff --git a/src/assets/media/mobile/deck_1_mobile.webp b/static/assets/media/mobile/deck_1_mobile.webp similarity index 100% rename from src/assets/media/mobile/deck_1_mobile.webp rename to static/assets/media/mobile/deck_1_mobile.webp diff --git a/src/assets/media/mobile/deck_2.webp b/static/assets/media/mobile/deck_2.webp similarity index 100% rename from src/assets/media/mobile/deck_2.webp rename to static/assets/media/mobile/deck_2.webp diff --git a/src/assets/media/mobile/deck_2@1x.webp b/static/assets/media/mobile/deck_2@1x.webp similarity index 100% rename from src/assets/media/mobile/deck_2@1x.webp rename to static/assets/media/mobile/deck_2@1x.webp diff --git a/src/assets/media/mobile/deck_2_mobile.webp b/static/assets/media/mobile/deck_2_mobile.webp similarity index 100% rename from src/assets/media/mobile/deck_2_mobile.webp rename to static/assets/media/mobile/deck_2_mobile.webp diff --git a/src/assets/media/mobile/exterior.webp b/static/assets/media/mobile/exterior.webp similarity index 100% rename from src/assets/media/mobile/exterior.webp rename to static/assets/media/mobile/exterior.webp diff --git a/src/assets/media/mobile/exterior@1x.webp b/static/assets/media/mobile/exterior@1x.webp similarity index 100% rename from src/assets/media/mobile/exterior@1x.webp rename to static/assets/media/mobile/exterior@1x.webp diff --git a/src/assets/media/mobile/exterior_mobile.webp b/static/assets/media/mobile/exterior_mobile.webp similarity index 100% rename from src/assets/media/mobile/exterior_mobile.webp rename to static/assets/media/mobile/exterior_mobile.webp diff --git a/src/assets/media/mobile/guest_bath.webp b/static/assets/media/mobile/guest_bath.webp similarity index 100% rename from src/assets/media/mobile/guest_bath.webp rename to static/assets/media/mobile/guest_bath.webp diff --git a/src/assets/media/mobile/guest_bath@1x.webp b/static/assets/media/mobile/guest_bath@1x.webp similarity index 100% rename from src/assets/media/mobile/guest_bath@1x.webp rename to static/assets/media/mobile/guest_bath@1x.webp diff --git a/src/assets/media/mobile/guest_bath_mobile.webp b/static/assets/media/mobile/guest_bath_mobile.webp similarity index 100% rename from src/assets/media/mobile/guest_bath_mobile.webp rename to static/assets/media/mobile/guest_bath_mobile.webp diff --git a/src/assets/media/mobile/kitchen.webp b/static/assets/media/mobile/kitchen.webp similarity index 100% rename from src/assets/media/mobile/kitchen.webp rename to static/assets/media/mobile/kitchen.webp diff --git a/src/assets/media/mobile/kitchen@1x.webp b/static/assets/media/mobile/kitchen@1x.webp similarity index 100% rename from src/assets/media/mobile/kitchen@1x.webp rename to static/assets/media/mobile/kitchen@1x.webp diff --git a/src/assets/media/mobile/kitchen_mobile.webp b/static/assets/media/mobile/kitchen_mobile.webp similarity index 100% rename from src/assets/media/mobile/kitchen_mobile.webp rename to static/assets/media/mobile/kitchen_mobile.webp diff --git a/src/assets/media/mobile/laundry.webp b/static/assets/media/mobile/laundry.webp similarity index 100% rename from src/assets/media/mobile/laundry.webp rename to static/assets/media/mobile/laundry.webp diff --git a/src/assets/media/mobile/laundry@1x.webp b/static/assets/media/mobile/laundry@1x.webp similarity index 100% rename from src/assets/media/mobile/laundry@1x.webp rename to static/assets/media/mobile/laundry@1x.webp diff --git a/src/assets/media/mobile/laundry_mobile.webp b/static/assets/media/mobile/laundry_mobile.webp similarity index 100% rename from src/assets/media/mobile/laundry_mobile.webp rename to static/assets/media/mobile/laundry_mobile.webp diff --git a/src/assets/media/mobile/living_room_1.webp b/static/assets/media/mobile/living_room_1.webp similarity index 100% rename from src/assets/media/mobile/living_room_1.webp rename to static/assets/media/mobile/living_room_1.webp diff --git a/src/assets/media/mobile/living_room_1@1x.webp b/static/assets/media/mobile/living_room_1@1x.webp similarity index 100% rename from src/assets/media/mobile/living_room_1@1x.webp rename to static/assets/media/mobile/living_room_1@1x.webp diff --git a/src/assets/media/mobile/living_room_1_mobile.webp b/static/assets/media/mobile/living_room_1_mobile.webp similarity index 100% rename from src/assets/media/mobile/living_room_1_mobile.webp rename to static/assets/media/mobile/living_room_1_mobile.webp diff --git a/src/assets/media/mobile/living_room_2.webp b/static/assets/media/mobile/living_room_2.webp similarity index 100% rename from src/assets/media/mobile/living_room_2.webp rename to static/assets/media/mobile/living_room_2.webp diff --git a/src/assets/media/mobile/living_room_2@1x.webp b/static/assets/media/mobile/living_room_2@1x.webp similarity index 100% rename from src/assets/media/mobile/living_room_2@1x.webp rename to static/assets/media/mobile/living_room_2@1x.webp diff --git a/src/assets/media/mobile/living_room_2_mobile.webp b/static/assets/media/mobile/living_room_2_mobile.webp similarity index 100% rename from src/assets/media/mobile/living_room_2_mobile.webp rename to static/assets/media/mobile/living_room_2_mobile.webp diff --git a/src/assets/media/mobile/office_fitness_guest_1.webp b/static/assets/media/mobile/office_fitness_guest_1.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_1.webp rename to static/assets/media/mobile/office_fitness_guest_1.webp diff --git a/src/assets/media/mobile/office_fitness_guest_1@1x.webp b/static/assets/media/mobile/office_fitness_guest_1@1x.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_1@1x.webp rename to static/assets/media/mobile/office_fitness_guest_1@1x.webp diff --git a/src/assets/media/mobile/office_fitness_guest_1_mobile.webp b/static/assets/media/mobile/office_fitness_guest_1_mobile.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_1_mobile.webp rename to static/assets/media/mobile/office_fitness_guest_1_mobile.webp diff --git a/src/assets/media/mobile/office_fitness_guest_2.webp b/static/assets/media/mobile/office_fitness_guest_2.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_2.webp rename to static/assets/media/mobile/office_fitness_guest_2.webp diff --git a/src/assets/media/mobile/office_fitness_guest_2@1x.webp b/static/assets/media/mobile/office_fitness_guest_2@1x.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_2@1x.webp rename to static/assets/media/mobile/office_fitness_guest_2@1x.webp diff --git a/src/assets/media/mobile/office_fitness_guest_2_mobile.webp b/static/assets/media/mobile/office_fitness_guest_2_mobile.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_2_mobile.webp rename to static/assets/media/mobile/office_fitness_guest_2_mobile.webp diff --git a/src/assets/media/mobile/office_fitness_guest_3.webp b/static/assets/media/mobile/office_fitness_guest_3.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_3.webp rename to static/assets/media/mobile/office_fitness_guest_3.webp diff --git a/src/assets/media/mobile/office_fitness_guest_3@1x.webp b/static/assets/media/mobile/office_fitness_guest_3@1x.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_3@1x.webp rename to static/assets/media/mobile/office_fitness_guest_3@1x.webp diff --git a/src/assets/media/mobile/office_fitness_guest_3_mobile.webp b/static/assets/media/mobile/office_fitness_guest_3_mobile.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_3_mobile.webp rename to static/assets/media/mobile/office_fitness_guest_3_mobile.webp diff --git a/src/assets/media/mobile/office_fitness_guest_4.webp b/static/assets/media/mobile/office_fitness_guest_4.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_4.webp rename to static/assets/media/mobile/office_fitness_guest_4.webp diff --git a/src/assets/media/mobile/office_fitness_guest_4@1x.webp b/static/assets/media/mobile/office_fitness_guest_4@1x.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_4@1x.webp rename to static/assets/media/mobile/office_fitness_guest_4@1x.webp diff --git a/src/assets/media/mobile/office_fitness_guest_4_mobile.webp b/static/assets/media/mobile/office_fitness_guest_4_mobile.webp similarity index 100% rename from src/assets/media/mobile/office_fitness_guest_4_mobile.webp rename to static/assets/media/mobile/office_fitness_guest_4_mobile.webp diff --git a/src/assets/media/mobile/onsuite_1.webp b/static/assets/media/mobile/onsuite_1.webp similarity index 100% rename from src/assets/media/mobile/onsuite_1.webp rename to static/assets/media/mobile/onsuite_1.webp diff --git a/src/assets/media/mobile/onsuite_1@1x.webp b/static/assets/media/mobile/onsuite_1@1x.webp similarity index 100% rename from src/assets/media/mobile/onsuite_1@1x.webp rename to static/assets/media/mobile/onsuite_1@1x.webp diff --git a/src/assets/media/mobile/onsuite_1_mobile.webp b/static/assets/media/mobile/onsuite_1_mobile.webp similarity index 100% rename from src/assets/media/mobile/onsuite_1_mobile.webp rename to static/assets/media/mobile/onsuite_1_mobile.webp diff --git a/src/assets/media/mobile/onsuite_2.webp b/static/assets/media/mobile/onsuite_2.webp similarity index 100% rename from src/assets/media/mobile/onsuite_2.webp rename to static/assets/media/mobile/onsuite_2.webp diff --git a/src/assets/media/mobile/onsuite_2@1x.webp b/static/assets/media/mobile/onsuite_2@1x.webp similarity index 100% rename from src/assets/media/mobile/onsuite_2@1x.webp rename to static/assets/media/mobile/onsuite_2@1x.webp diff --git a/src/assets/media/mobile/onsuite_2_mobile.webp b/static/assets/media/mobile/onsuite_2_mobile.webp similarity index 100% rename from src/assets/media/mobile/onsuite_2_mobile.webp rename to static/assets/media/mobile/onsuite_2_mobile.webp diff --git a/src/assets/media/mobile/tour_still.webp b/static/assets/media/mobile/tour_still.webp similarity index 100% rename from src/assets/media/mobile/tour_still.webp rename to static/assets/media/mobile/tour_still.webp diff --git a/src/assets/media/mobile/tour_still@1x.webp b/static/assets/media/mobile/tour_still@1x.webp similarity index 100% rename from src/assets/media/mobile/tour_still@1x.webp rename to static/assets/media/mobile/tour_still@1x.webp diff --git a/src/assets/media/tablet/backyard_parking.webp b/static/assets/media/tablet/backyard_parking.webp similarity index 100% rename from src/assets/media/tablet/backyard_parking.webp rename to static/assets/media/tablet/backyard_parking.webp diff --git a/src/assets/media/tablet/backyard_parking@1x.webp b/static/assets/media/tablet/backyard_parking@1x.webp similarity index 100% rename from src/assets/media/tablet/backyard_parking@1x.webp rename to static/assets/media/tablet/backyard_parking@1x.webp diff --git a/src/assets/media/tablet/bedroom_suite_1.webp b/static/assets/media/tablet/bedroom_suite_1.webp similarity index 100% rename from src/assets/media/tablet/bedroom_suite_1.webp rename to static/assets/media/tablet/bedroom_suite_1.webp diff --git a/src/assets/media/tablet/bedroom_suite_1@1x.webp b/static/assets/media/tablet/bedroom_suite_1@1x.webp similarity index 100% rename from src/assets/media/tablet/bedroom_suite_1@1x.webp rename to static/assets/media/tablet/bedroom_suite_1@1x.webp diff --git a/src/assets/media/tablet/bedroom_suite_2.webp b/static/assets/media/tablet/bedroom_suite_2.webp similarity index 100% rename from src/assets/media/tablet/bedroom_suite_2.webp rename to static/assets/media/tablet/bedroom_suite_2.webp diff --git a/src/assets/media/tablet/bedroom_suite_2@1x.webp b/static/assets/media/tablet/bedroom_suite_2@1x.webp similarity index 100% rename from src/assets/media/tablet/bedroom_suite_2@1x.webp rename to static/assets/media/tablet/bedroom_suite_2@1x.webp diff --git a/src/assets/media/tablet/bedroom_suite_3.webp b/static/assets/media/tablet/bedroom_suite_3.webp similarity index 100% rename from src/assets/media/tablet/bedroom_suite_3.webp rename to static/assets/media/tablet/bedroom_suite_3.webp diff --git a/src/assets/media/tablet/bedroom_suite_3@1x.webp b/static/assets/media/tablet/bedroom_suite_3@1x.webp similarity index 100% rename from src/assets/media/tablet/bedroom_suite_3@1x.webp rename to static/assets/media/tablet/bedroom_suite_3@1x.webp diff --git a/src/assets/media/tablet/coat_closet.webp b/static/assets/media/tablet/coat_closet.webp similarity index 100% rename from src/assets/media/tablet/coat_closet.webp rename to static/assets/media/tablet/coat_closet.webp diff --git a/src/assets/media/tablet/coat_closet@1x.webp b/static/assets/media/tablet/coat_closet@1x.webp similarity index 100% rename from src/assets/media/tablet/coat_closet@1x.webp rename to static/assets/media/tablet/coat_closet@1x.webp diff --git a/src/assets/media/tablet/deck_1.webp b/static/assets/media/tablet/deck_1.webp similarity index 100% rename from src/assets/media/tablet/deck_1.webp rename to static/assets/media/tablet/deck_1.webp diff --git a/src/assets/media/tablet/deck_1@1x.webp b/static/assets/media/tablet/deck_1@1x.webp similarity index 100% rename from src/assets/media/tablet/deck_1@1x.webp rename to static/assets/media/tablet/deck_1@1x.webp diff --git a/src/assets/media/tablet/deck_2.webp b/static/assets/media/tablet/deck_2.webp similarity index 100% rename from src/assets/media/tablet/deck_2.webp rename to static/assets/media/tablet/deck_2.webp diff --git a/src/assets/media/tablet/deck_2@1x.webp b/static/assets/media/tablet/deck_2@1x.webp similarity index 100% rename from src/assets/media/tablet/deck_2@1x.webp rename to static/assets/media/tablet/deck_2@1x.webp diff --git a/src/assets/media/tablet/exterior.webp b/static/assets/media/tablet/exterior.webp similarity index 100% rename from src/assets/media/tablet/exterior.webp rename to static/assets/media/tablet/exterior.webp diff --git a/src/assets/media/tablet/exterior@1x.webp b/static/assets/media/tablet/exterior@1x.webp similarity index 100% rename from src/assets/media/tablet/exterior@1x.webp rename to static/assets/media/tablet/exterior@1x.webp diff --git a/src/assets/media/tablet/guest_bath.webp b/static/assets/media/tablet/guest_bath.webp similarity index 100% rename from src/assets/media/tablet/guest_bath.webp rename to static/assets/media/tablet/guest_bath.webp diff --git a/src/assets/media/tablet/guest_bath@1x.webp b/static/assets/media/tablet/guest_bath@1x.webp similarity index 100% rename from src/assets/media/tablet/guest_bath@1x.webp rename to static/assets/media/tablet/guest_bath@1x.webp diff --git a/src/assets/media/tablet/kitchen.webp b/static/assets/media/tablet/kitchen.webp similarity index 100% rename from src/assets/media/tablet/kitchen.webp rename to static/assets/media/tablet/kitchen.webp diff --git a/src/assets/media/tablet/kitchen@1x.webp b/static/assets/media/tablet/kitchen@1x.webp similarity index 100% rename from src/assets/media/tablet/kitchen@1x.webp rename to static/assets/media/tablet/kitchen@1x.webp diff --git a/src/assets/media/tablet/laundry.webp b/static/assets/media/tablet/laundry.webp similarity index 100% rename from src/assets/media/tablet/laundry.webp rename to static/assets/media/tablet/laundry.webp diff --git a/src/assets/media/tablet/laundry@1x.webp b/static/assets/media/tablet/laundry@1x.webp similarity index 100% rename from src/assets/media/tablet/laundry@1x.webp rename to static/assets/media/tablet/laundry@1x.webp diff --git a/src/assets/media/tablet/living_room_1.webp b/static/assets/media/tablet/living_room_1.webp similarity index 100% rename from src/assets/media/tablet/living_room_1.webp rename to static/assets/media/tablet/living_room_1.webp diff --git a/src/assets/media/tablet/living_room_1@1x.webp b/static/assets/media/tablet/living_room_1@1x.webp similarity index 100% rename from src/assets/media/tablet/living_room_1@1x.webp rename to static/assets/media/tablet/living_room_1@1x.webp diff --git a/src/assets/media/tablet/living_room_2.webp b/static/assets/media/tablet/living_room_2.webp similarity index 100% rename from src/assets/media/tablet/living_room_2.webp rename to static/assets/media/tablet/living_room_2.webp diff --git a/src/assets/media/tablet/living_room_2@1x.webp b/static/assets/media/tablet/living_room_2@1x.webp similarity index 100% rename from src/assets/media/tablet/living_room_2@1x.webp rename to static/assets/media/tablet/living_room_2@1x.webp diff --git a/src/assets/media/tablet/office_fitness_guest_1.webp b/static/assets/media/tablet/office_fitness_guest_1.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_1.webp rename to static/assets/media/tablet/office_fitness_guest_1.webp diff --git a/src/assets/media/tablet/office_fitness_guest_1@1x.webp b/static/assets/media/tablet/office_fitness_guest_1@1x.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_1@1x.webp rename to static/assets/media/tablet/office_fitness_guest_1@1x.webp diff --git a/src/assets/media/tablet/office_fitness_guest_2.webp b/static/assets/media/tablet/office_fitness_guest_2.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_2.webp rename to static/assets/media/tablet/office_fitness_guest_2.webp diff --git a/src/assets/media/tablet/office_fitness_guest_2@1x.webp b/static/assets/media/tablet/office_fitness_guest_2@1x.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_2@1x.webp rename to static/assets/media/tablet/office_fitness_guest_2@1x.webp diff --git a/src/assets/media/tablet/office_fitness_guest_3.webp b/static/assets/media/tablet/office_fitness_guest_3.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_3.webp rename to static/assets/media/tablet/office_fitness_guest_3.webp diff --git a/src/assets/media/tablet/office_fitness_guest_3@1x.webp b/static/assets/media/tablet/office_fitness_guest_3@1x.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_3@1x.webp rename to static/assets/media/tablet/office_fitness_guest_3@1x.webp diff --git a/src/assets/media/tablet/office_fitness_guest_4.webp b/static/assets/media/tablet/office_fitness_guest_4.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_4.webp rename to static/assets/media/tablet/office_fitness_guest_4.webp diff --git a/src/assets/media/tablet/office_fitness_guest_4@1x.webp b/static/assets/media/tablet/office_fitness_guest_4@1x.webp similarity index 100% rename from src/assets/media/tablet/office_fitness_guest_4@1x.webp rename to static/assets/media/tablet/office_fitness_guest_4@1x.webp diff --git a/src/assets/media/tablet/onsuite_1.webp b/static/assets/media/tablet/onsuite_1.webp similarity index 100% rename from src/assets/media/tablet/onsuite_1.webp rename to static/assets/media/tablet/onsuite_1.webp diff --git a/src/assets/media/tablet/onsuite_1@1x.webp b/static/assets/media/tablet/onsuite_1@1x.webp similarity index 100% rename from src/assets/media/tablet/onsuite_1@1x.webp rename to static/assets/media/tablet/onsuite_1@1x.webp diff --git a/src/assets/media/tablet/onsuite_2.webp b/static/assets/media/tablet/onsuite_2.webp similarity index 100% rename from src/assets/media/tablet/onsuite_2.webp rename to static/assets/media/tablet/onsuite_2.webp diff --git a/src/assets/media/tablet/onsuite_2@1x.webp b/static/assets/media/tablet/onsuite_2@1x.webp similarity index 100% rename from src/assets/media/tablet/onsuite_2@1x.webp rename to static/assets/media/tablet/onsuite_2@1x.webp diff --git a/src/assets/media/tablet/tour_still.webp b/static/assets/media/tablet/tour_still.webp similarity index 100% rename from src/assets/media/tablet/tour_still.webp rename to static/assets/media/tablet/tour_still.webp diff --git a/src/assets/media/tablet/tour_still@1x.webp b/static/assets/media/tablet/tour_still@1x.webp similarity index 100% rename from src/assets/media/tablet/tour_still@1x.webp rename to static/assets/media/tablet/tour_still@1x.webp diff --git a/src/assets/media/thumbnail/backyard_parking.webp b/static/assets/media/thumbnail/backyard_parking.webp similarity index 100% rename from src/assets/media/thumbnail/backyard_parking.webp rename to static/assets/media/thumbnail/backyard_parking.webp diff --git a/src/assets/media/thumbnail/bedroom_suite_1.webp b/static/assets/media/thumbnail/bedroom_suite_1.webp similarity index 100% rename from src/assets/media/thumbnail/bedroom_suite_1.webp rename to static/assets/media/thumbnail/bedroom_suite_1.webp diff --git a/src/assets/media/thumbnail/bedroom_suite_2.webp b/static/assets/media/thumbnail/bedroom_suite_2.webp similarity index 100% rename from src/assets/media/thumbnail/bedroom_suite_2.webp rename to static/assets/media/thumbnail/bedroom_suite_2.webp diff --git a/src/assets/media/thumbnail/bedroom_suite_3.webp b/static/assets/media/thumbnail/bedroom_suite_3.webp similarity index 100% rename from src/assets/media/thumbnail/bedroom_suite_3.webp rename to static/assets/media/thumbnail/bedroom_suite_3.webp diff --git a/src/assets/media/thumbnail/coat_closet.webp b/static/assets/media/thumbnail/coat_closet.webp similarity index 100% rename from src/assets/media/thumbnail/coat_closet.webp rename to static/assets/media/thumbnail/coat_closet.webp diff --git a/src/assets/media/thumbnail/deck_1.webp b/static/assets/media/thumbnail/deck_1.webp similarity index 100% rename from src/assets/media/thumbnail/deck_1.webp rename to static/assets/media/thumbnail/deck_1.webp diff --git a/src/assets/media/thumbnail/deck_2.webp b/static/assets/media/thumbnail/deck_2.webp similarity index 100% rename from src/assets/media/thumbnail/deck_2.webp rename to static/assets/media/thumbnail/deck_2.webp diff --git a/src/assets/media/thumbnail/exterior.webp b/static/assets/media/thumbnail/exterior.webp similarity index 100% rename from src/assets/media/thumbnail/exterior.webp rename to static/assets/media/thumbnail/exterior.webp diff --git a/src/assets/media/thumbnail/guest_bath.webp b/static/assets/media/thumbnail/guest_bath.webp similarity index 100% rename from src/assets/media/thumbnail/guest_bath.webp rename to static/assets/media/thumbnail/guest_bath.webp diff --git a/src/assets/media/thumbnail/kitchen.webp b/static/assets/media/thumbnail/kitchen.webp similarity index 100% rename from src/assets/media/thumbnail/kitchen.webp rename to static/assets/media/thumbnail/kitchen.webp diff --git a/src/assets/media/thumbnail/laundry.webp b/static/assets/media/thumbnail/laundry.webp similarity index 100% rename from src/assets/media/thumbnail/laundry.webp rename to static/assets/media/thumbnail/laundry.webp diff --git a/src/assets/media/thumbnail/living_room_1.webp b/static/assets/media/thumbnail/living_room_1.webp similarity index 100% rename from src/assets/media/thumbnail/living_room_1.webp rename to static/assets/media/thumbnail/living_room_1.webp diff --git a/src/assets/media/thumbnail/living_room_2.webp b/static/assets/media/thumbnail/living_room_2.webp similarity index 100% rename from src/assets/media/thumbnail/living_room_2.webp rename to static/assets/media/thumbnail/living_room_2.webp diff --git a/src/assets/media/thumbnail/office_fitness_guest_1.webp b/static/assets/media/thumbnail/office_fitness_guest_1.webp similarity index 100% rename from src/assets/media/thumbnail/office_fitness_guest_1.webp rename to static/assets/media/thumbnail/office_fitness_guest_1.webp diff --git a/src/assets/media/thumbnail/office_fitness_guest_2.webp b/static/assets/media/thumbnail/office_fitness_guest_2.webp similarity index 100% rename from src/assets/media/thumbnail/office_fitness_guest_2.webp rename to static/assets/media/thumbnail/office_fitness_guest_2.webp diff --git a/src/assets/media/thumbnail/office_fitness_guest_3.webp b/static/assets/media/thumbnail/office_fitness_guest_3.webp similarity index 100% rename from src/assets/media/thumbnail/office_fitness_guest_3.webp rename to static/assets/media/thumbnail/office_fitness_guest_3.webp diff --git a/src/assets/media/thumbnail/office_fitness_guest_4.webp b/static/assets/media/thumbnail/office_fitness_guest_4.webp similarity index 100% rename from src/assets/media/thumbnail/office_fitness_guest_4.webp rename to static/assets/media/thumbnail/office_fitness_guest_4.webp diff --git a/src/assets/media/thumbnail/onsuite_1.webp b/static/assets/media/thumbnail/onsuite_1.webp similarity index 100% rename from src/assets/media/thumbnail/onsuite_1.webp rename to static/assets/media/thumbnail/onsuite_1.webp diff --git a/src/assets/media/thumbnail/onsuite_2.webp b/static/assets/media/thumbnail/onsuite_2.webp similarity index 100% rename from src/assets/media/thumbnail/onsuite_2.webp rename to static/assets/media/thumbnail/onsuite_2.webp diff --git a/src/assets/media/thumbnail/tour.webp b/static/assets/media/thumbnail/tour.webp similarity index 100% rename from src/assets/media/thumbnail/tour.webp rename to static/assets/media/thumbnail/tour.webp diff --git a/src/assets/media/videos/tour.mp4 b/static/assets/media/videos/tour.mp4 similarity index 100% rename from src/assets/media/videos/tour.mp4 rename to static/assets/media/videos/tour.mp4 diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000..c2a49f4 --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..f2fff2b --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,27 @@ +import adapter from '@sveltejs/adapter-static'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + preprocess: vitePreprocess(), + kit: { + prerender: { + handleHttpError: ({ status }) => { + if (status === 404) return; + throw new Error('Prerender failed'); + } + }, + adapter: adapter({ + pages: 'build', + assets: 'build', + fallback: undefined, + precompress: false, + strict: true + }), + alias: { + $lib: 'src/lib' + } + } +}; + +export default config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a8f10c8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..bbf8c7d --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,6 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [sveltekit()] +});