A cheeky, single-page date-invitation flow packed with drifting blossoms, jittery buttons, and way too many hearts. Built for browsers, not bravery; bravery is on you.
- Starts with the classic question and a skittish "No" button that sprints like it saw a commit without tests.
- Walks the yes-path through cards: success screen, pick-a-place, pick-a-time (Flatpickr), pick-food, pick-drinks, leave-a-note, and a final summary.
- Lets you add custom options with word counters and gentle validations instead of modal rage.
- Plays background music with play/pause and volume controls; heart particles float everywhere because restraint was not a design goal.
- Sends a tidy invitation email via EmailJS with the chosen times, locations, food, drinks, and note.
- Light/dark toggle plus cherry blossom and cursor heart effects for maximum romantic energy.
- Clone or download this repo.
- Serve the folder (module scripts prefer a server). Example:
python -m http.server 4173from the project root, then visithttp://localhost:4173. - Open the page. Click "Yes". Watch the "No" button panic. Proceed through the cards.
- Create an EmailJS account and a service/template.
- In
index.html, replacePUBLIC_KEYwith your EmailJS public key. - Update the service and template IDs in
src/js/email.js(currentlywill-you-date-me). - Deploy or serve again; the completion card form will send the invitation email with the collected data.
index.html– all cards, music widget, and script/style wiringsrc/js/– logic split into modules (main.js,flows.js,effects.js,dom.js,state.js,theme.js,email.js)src/css/– styles, animations, themes, responsivenessassets/– images for places/food/drinks, background music trackbackup/– older CSS/JS snapshots
- The "No" button repositions on hover with escalating snarky text.
- Custom inputs for location/food/drinks support up to 10 words with live counters; the note field allows 150 words.
- Date/time rows can be duplicated; validation highlights missing fields before letting you continue.
- Buttons spawn heart bursts; sections sprinkle hearts and cherry blossoms over time.
- Dark mode toggle flips body classes; background music defaults to 50% volume with adjustable steps.
- Keep assets relative to
index.html; the page is fully static and fine on any static host. - If you swap the music file, keep the MP3 path at
assets/music/or update the<audio>source. - Flatpickr is loaded from CDN; if you need offline use, bundle it locally.
- Want fewer hearts? Tweak counts in
src/js/effects.jsandsrc/js/flows.js.
- Persist selections across refreshes (localStorage).
- Add a printable summary card.
- Offer multiple music tracks with a tiny playlist.
GPL-3.0. Ship it, remix it, and surprise someone.
