This is an interactive Valentine's Day web experience. Your partner explores a real map with rose pins at meaningful locations. Each pin reveals a memory (photos or video). After viewing all memories, a proposal question appears.
Drop your photos and videos into the assets/memories/ folders:
assets/memories/
memory_1/ ← video.mp4 or photo1.jpg, photo2.jpg, etc.
memory_2/
memory_3/
...
Create a new folder for each memory. Supported formats: .jpg, .jpeg, .png, .mp4
Tip: Compress images to <200KB each for fast loading (use https://squoosh.app/)
data.js is the only file you need to edit. Open it and customize:
- Landing screen - The greeting text your partner sees first
- Memories - Title, caption, media paths, and GPS coordinates for each pin
- Final message - The proposal question and response text
- Map center - Set to the middle of your memory locations
Each section has inline instructions explaining what to do.
Getting GPS coordinates:
- Open the app with
?dev=truein the URL (e.g.,http://localhost:8000?dev=true) - Click anywhere on the map to see coordinates
- Copy them into your memory's
positionfield
Adding/removing memories:
- You can have any number of memories (minimum 2)
- Copy an existing memory block and change the
id,title,media, etc. - The last memory should always be the
specialType: "proposal"entry - Unlock order is automatic (1 → 2 → 3 → ... → N)
Run locally:
python -m http.server 8000
# Then open http://localhost:8000Or on Windows, double-click START_SERVER.bat.
Test the flow:
- Landing screen → click button → map with pins
- Click unlocked pin → modal with your photos/video
- Close modal → next pin unlocks
- Complete all → proposal screen appears
Reset progress (for re-testing):
// Open browser console (F12) and run:
window.RoseGarden.reset()Deploy:
- Netlify: Drag the whole folder to https://app.netlify.com/drop
- GitHub Pages: Push to repo, enable Pages in Settings
- Vercel: Import from GitHub
├── data.js ← EDIT THIS (your content goes here)
├── index.html ← Main page (no editing needed)
├── css/ ← Styles (no editing needed)
├── js/ ← App logic (no editing needed)
├── assets/
│ ├── memories/ ← DROP YOUR MEDIA HERE
│ │ ├── memory_1/
│ │ ├── memory_2/
│ │ └── ...
│ ├── sad_hamster.png ← Proposal screen image (replaceable)
│ └── hamster_jumping.gif ← Success screen image (replaceable)
└── QUICK_START.md ← You are here
Images/videos not loading?
→ Make sure file paths in data.js match your actual filenames exactly (case-sensitive on Linux/Mac).
Map not showing?
→ You need a local server. Opening index.html directly won't load map tiles.
Want to reset and start over?
→ Browser console: window.RoseGarden.reset()
Want different colors/fonts?
→ Edit css/variables.css