✨ More Palais README.md
Live at mollybeach.app
- Four seasons on an 80-second year. Spring, summer, autumn and winter photographs crossfade on a CSS animation timeline. Skip jumps ahead by driving the animations directly through the Web Animations API (
currentTime,playbackRate), and Pause freezes the whole year, every room at once. - Weather that follows the photographs. Snow in winter, falling leaves in autumn and cottonwood fluff in summer come from a canvas particle system. It reads how far each season's photo has faded in, so the weather thickens as a season arrives and thins as it leaves.
- Visitors. Hummingbirds and dragonflies fly through now and then on a small requestAnimationFrame flight engine.
- Moving parts. Honeysuckle's tricycle wheels spin, and her sewing machine's needle goes up and down while the fabric feeds through. Each sticker is cut into layers and animated separately.
- Phone layout. Phones get their own portrait photographs and layout rather than a squashed desktop.
- Drag anything anywhere. Pick-up hit-testing checks the image's own transparency, so you grab the cat and not the empty corner of its picture. The item you're holding comes to the front, and a corner handle resizes it.
- Positions that survive resizing. Moves are stored as fractions of the stage (container query units,
cqw/cqh), so an arrangement holds at any window size. The scene is mapped onto whichever background photo is showing: taller, wider or phone. - A dress-up-game catalogue. Every sticker sits on a shelf (Furniture, House plants, Cats, Dogs, Goats, Artwork, Hanging lights, Teacups, Trinkets…). Heart them in or out of the room, one at a time or a whole shelf at once.
- A layout for each season. Each season has its own default arrangement: the autumn table only in autumn, the dogs in the pool in spring and summer. The room glides into the new layout when the season turns.
A cute, video-game-style level select. Honeysuckle hops along a dotted path between stops on an island inside a shimmering rainbow wall. Each stop is a region blended from real trips, and many of them are rooms you can walk into:
| Room | |
|---|---|
| 🏛 The Palais | home, the terrace |
| 🍰 The Kitchen | the whole kitchen behind the terrace's marble bar |
| 🛁 The Bathroom | the blush bathroom through the terrace's right arch |
| 🌿 The Glasshouse | an iron-and-glass garden conservatory |
| 🏠 The Lakehouse | a glass lake house with a red bridge and a boathouse, in four seasons |
| 👗 The Wardrobe Wing | a pink closet with lemon wallpaper and a waterfall, in four seasons |
| ♨️ The Lagoon | a blue lagoon under the northern lights, in four seasons |
| 🌲 The Rainwood | a fern-covered conservatory in a rainforest |
| 🎵 The Amphitheatre | a festival stage on a canyon rim at sunset |
| 🕌 The Riviera | a marble bath above domes, trams and gondolas |
| 💜 The Jacaranda Quarter | a balcony over a purple jacaranda street at dusk |
| 🐢 The Glass Reef | a seashell pavilion half under the sea |
Rooms keep their place in the address (mollybeach.app/#lagoon), so a refresh or a shared link opens the same room. All rooms turn through the seasons together.
Signed in, I can save the room as a named look, file it under a season, make it that season's default, and keep older looks to go back to. Everyone can read looks, but only editors can change them, and row-level security enforces that in the database, not in the UI.
public/
├── palais_assets/ the Palais
│ ├── rooms_web_bgs_social_prevs/<room>/
│ │ each room, named as on the map
│ │ ├── desktop/ the computer's wide backgrounds, by season
│ │ ├── mobile/ the phone's tall ones
│ │ ├── sky-water-masks/ where the clouds drift and the water ripples
│ │ ├── social-preview/ the picture a shared link shows
│ │ └── stop_card/ the picture on its card on the world map
│ ├── catalogue_stickers/<shelf>/ every sticker, a folder per catalogue shelf
│ │ (stickerFolders.json says which)
│ ├── closet_clothes/<kind>/ the Wardrobe Wing, a folder per kind of thing
│ │ (wardrobeFolders.json says which)
│ ├── favicons/ the tab, home-screen and app icons
│ ├── loading-screen/ the Brat Code loading screen
│ ├── share-links/<room>/ the pages behind mollybeach.app/<room>
│ │ (vercel.json points the short links here)
│ ├── cast_characters/ the Characters catalogue
│ ├── world_map_imgs/ the map: globe_islands, flat_world_maps,
│ │ globe, scenery
│ ├── modal_content/ what the modals open onto
│ │ ├── imac_desktop/ the iMac's app icons, previews and README
│ │ ├── pool_table_sounds/ the Billiards Master Sequencer's samples
│ │ ├── jewelry_box/ the jewelry box and the pieces in it
│ │ ├── flower_decorations/ the flowers round the map's frame (and the
│ │ résumé side's headings)
│ │ ├── kitchen_cookbook_art/ the cookbook, open
│ │ ├── brat_sticker_maker_art/ the sticker maker's title
│ │ ├── island_maker/ the island maker: its globe, the empty
│ │ island the rooms go on, and room_templates/,
│ │ the empty rooms made rooms are painted on
│ │ (IslandMaker.tsx, palais-rooms)
│ │ ├── boudoir_pictures_art/ the dresser's crest
│ │ ├── closet_dress_up_art/ Clueless cheetah paper and arrows
│ │ └── modal_buttons/ what you press in a room to open one: the
│ │ pool table, the spellbook, the iMac, the
│ │ mannequin, the professor… (modalButtons.ts)
│ └── ui_elems_floral_gucci_bgs/
│ the Gucci floral papers the sidebar, footer
│ and buttons wear, turning through the day
└── portfolio_assets/ the résumé side
├── resumes/ Beach_Molly_Resume.pdf
└── images/ gifs, icons (companies, schools, hackathons),
avatar, project_previews, linkedin_headers
- Experience: an expandable timeline of roles, with project details
- Projects: project cards with live preview screenshots (Microlink)
- Skills, Education, Awards, Certifications
- Résumé: a printable résumé page
- Link previews: social media previews and meta tags (react-helmet-async)
- React 18 + TypeScript (Create React App), react-router
- Tailwind CSS for the résumé pages; hand-written, scoped CSS for the Palais (container queries, CSS animations, custom properties)
- Web Animations API, Canvas 2D, requestAnimationFrame, ResizeObserver
- Supabase (Postgres, row-level security, auth, SQL functions), loaded lazily so the room never waits on it
- Image pipeline: background removal (rembg), OpenCV feature matching (SIFT and homography) to align the season photographs, WebP export
- Hosting: Vercel








































