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 ``}
+
+
+
+
+
+ {#each data.mediaItems as item}
+
+ {/each}
+
+
+
+
+
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()]
+});