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..702f8d8 100644 --- a/.woodpecker/ci.yaml +++ b/.woodpecker/ci.yaml @@ -12,34 +12,6 @@ steps: - corepack prepare pnpm@10.29.2 --activate - pnpm install --frozen-lockfile - - name: lint - image: node:22-alpine - commands: - - corepack enable - - corepack prepare pnpm@10.29.2 --activate - - pnpm install --frozen-lockfile - - pnpm lint - depends_on: - - install - - - name: Send Lint Status Notification (failure) - image: curlimages/curl - environment: - MATTERMOST_BOT_ACCESS_TOKEN: - from_secret: mattermost_bot_access_token - MATTERMOST_CHANNEL_ID: - from_secret: mattermost_tests_channel_id - MATTERMOST_POST_API_URL: - from_secret: mattermost_post_api_url - commands: - - | - BODY=$(printf '{"channel_id":"%s","message":"[%s - Build #%s] Lint failure 💩"}' "$MATTERMOST_CHANNEL_ID" "$CI_REPO" "$CI_PIPELINE_NUMBER") - curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL - depends_on: - - lint - when: - - status: [failure] - - name: format check image: node:22-alpine commands: @@ -68,6 +40,90 @@ steps: when: - status: [failure] + - name: lint + image: node:22-alpine + commands: + - corepack enable + - corepack prepare pnpm@10.29.2 --activate + - pnpm install --frozen-lockfile + - pnpm lint + depends_on: + - format check + + - name: Send Lint Status Notification (failure) + image: curlimages/curl + environment: + MATTERMOST_BOT_ACCESS_TOKEN: + from_secret: mattermost_bot_access_token + MATTERMOST_CHANNEL_ID: + from_secret: mattermost_tests_channel_id + MATTERMOST_POST_API_URL: + from_secret: mattermost_post_api_url + commands: + - | + BODY=$(printf '{"channel_id":"%s","message":"[%s - Build #%s] Lint failure 💩"}' "$MATTERMOST_CHANNEL_ID" "$CI_REPO" "$CI_PIPELINE_NUMBER") + curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL + depends_on: + - lint + when: + - status: [failure] + + - name: check + image: node:22-alpine + commands: + - corepack enable + - corepack prepare pnpm@10.29.2 --activate + - pnpm install --frozen-lockfile + - pnpm check + depends_on: + - lint + + - name: Send Svelte Check Status Notification (failure) + image: curlimages/curl + environment: + MATTERMOST_BOT_ACCESS_TOKEN: + from_secret: mattermost_bot_access_token + MATTERMOST_CHANNEL_ID: + from_secret: mattermost_tests_channel_id + MATTERMOST_POST_API_URL: + from_secret: mattermost_post_api_url + commands: + - | + BODY=$(printf '{"channel_id":"%s","message":"[%s - Build #%s] Svelte check failure 💩"}' "$MATTERMOST_CHANNEL_ID" "$CI_REPO" "$CI_PIPELINE_NUMBER") + curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL + depends_on: + - check + when: + - status: [failure] + + - name: build + image: node:22-alpine + commands: + - corepack enable + - corepack prepare pnpm@10.29.2 --activate + - pnpm install --frozen-lockfile + - pnpm build + depends_on: + - check + + - name: Send Build Status Notification (failure) + image: curlimages/curl + environment: + MATTERMOST_BOT_ACCESS_TOKEN: + from_secret: mattermost_bot_access_token + MATTERMOST_CHANNEL_ID: + from_secret: mattermost_tests_channel_id + MATTERMOST_POST_API_URL: + from_secret: mattermost_post_api_url + commands: + - | + BODY=$(printf '{"channel_id":"%s","message":"[%s - Build #%s] Build failure 💩"}' "$MATTERMOST_CHANNEL_ID" "$CI_REPO" "$CI_PIPELINE_NUMBER") + curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL + depends_on: + - build + when: + - status: [failure] + - name: Send CI Pipeline Status Notification (success) image: curlimages/curl environment: @@ -83,7 +139,9 @@ steps: curl -sS -X POST -H "Content-Type: application/json" -d "$BODY" -H "Authorization: Bearer $MATTERMOST_BOT_ACCESS_TOKEN" $MATTERMOST_POST_API_URL depends_on: - install - - lint - format check + - lint + - check + - build 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/Lightbox.svelte b/src/lib/components/Lightbox.svelte new file mode 100644 index 0000000..f132351 --- /dev/null +++ b/src/lib/components/Lightbox.svelte @@ -0,0 +1,140 @@ + + + + + diff --git a/src/lib/components/SiteHeader.svelte b/src/lib/components/SiteHeader.svelte new file mode 100644 index 0000000..3ef2a70 --- /dev/null +++ b/src/lib/components/SiteHeader.svelte @@ -0,0 +1,47 @@ + + + + + diff --git a/src/lib/media.ts b/src/lib/media.ts new file mode 100644 index 0000000..7d41b3d --- /dev/null +++ b/src/lib/media.ts @@ -0,0 +1,182 @@ +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, + 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/lib/stores/theme.svelte.ts b/src/lib/stores/theme.svelte.ts new file mode 100644 index 0000000..3de7dfc --- /dev/null +++ b/src/lib/stores/theme.svelte.ts @@ -0,0 +1,10 @@ +let mode = $state<'light' | 'dark'>('light'); + +export const theme = { + get: () => mode, + set: (value: 'light' | 'dark') => { + mode = value; + document.documentElement.setAttribute('data-theme', value); + localStorage.setItem('theme', value); + }, +}; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..8921562 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,7 @@ + + +{@render children()} diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 0000000..0df44ad --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1,2 @@ +export const prerender = true; +export const ssr = true; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..2a7967e --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,88 @@ + + + + {title} + + + + + + + + + + + + + + + + + + + {@html ``} + + + +
+ +
+ diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 0000000..074d678 --- /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/static/.well-known/appspecific/com.chrome.devtools.json b/static/.well-known/appspecific/com.chrome.devtools.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/static/.well-known/appspecific/com.chrome.devtools.json @@ -0,0 +1 @@ +{} \ No newline at end of file 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..fac19d1 --- /dev/null +++ b/static/assets/js/script.js @@ -0,0 +1,13 @@ +const root = document.documentElement; +const saved = window?.localStorage?.getItem('theme'); +const sysDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + +if (saved) { + root.setAttribute('data-theme', saved); +} else { + if (sysDark) { + root.setAttribute('data-theme', 'dark'); + } else { + root.setAttribute('data-theme', 'light'); + } +} 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/static/assets/media/videos/tour-captions.vtt b/static/assets/media/videos/tour-captions.vtt new file mode 100644 index 0000000..0e770e0 --- /dev/null +++ b/static/assets/media/videos/tour-captions.vtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:02.000 +No audio. Silent video tour. 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()] +});