Astal Creates / Work / Will You Go On A Date?
Live

Will You Go On A Date?

An animated, interactive proposal flow with a "No" button that refuses to be clicked.

Built withVanilla JS ·CSS3 ·No build step
Will You Go On A Date? — product screenshot
Introduction

A single-page site that walks a visitor through a playful decision flow, from “would you go on a date with me?” to picking an actual day on a calendar, ending in a confetti celebration screen. Built as a personal, shareable 'ask someone out' experience, with built-in WhatsApp and email share links so the sender can send it directly to the recipient.

Context & user problem

Why it needed to exist

A plain text message asking someone out is forgettable. This turns the ask into a small, memorable interactive experience, with a built-in path to actually share it.

What was built

Inside the product

Runaway “No” button

The No button relocates to a random position on hover, tap, and focus, so it can't be reliably clicked, showing a cheeky toast if you catch it.

Branching decision flow

Four screens (ask → love → day → final) toggle via an is-active class; choosing the wrong option nudges you with a toast instead of advancing.

Custom calendar widget

A hand-built month calendar (no library) renders day cells from scratch, disables past dates, marks today, and highlights the selected day.

Date confirmation flow

The 'it's a date!' button stays disabled until a day is picked, then hands the formatted date to the final screen's message.

Confetti / heart-rain finale

On reaching the final screen, 60 emoji hearts rain down with randomized position, size, duration, and delay, each cleaned up after 6 seconds.

Ambient floating hearts

A separate background layer continuously spawns floating emoji with randomized size, speed, and delay for passive motion behind the card.

WhatsApp click-to-chat sharing

A floating share button opens a modal that builds a wa.me link with a pre-filled message and the current page URL.

Email sharing via mailto

The same modal validates an email with regex and opens the visitor's mail client via a mailto: link with a pre-filled subject and body.

How the system works

End to end

01Ask screen
02Decision flow
03Calendar picker
04Confirmation
05Confetti finale
06Share (WhatsApp / email)
Hardest engineering decision

A genuinely unclickable button

The 'No' button had to be genuinely unclickable without breaking accessibility or layout. It's a normal in-flow button that gets promoted to position: fixed on first interaction, then repositioned via Math.random() bounded by the viewport minus its own measured width/height so it never renders off-screen or overlaps an edge. It also runs on a 1.1s interval gated by checking whether the ask screen is still active, so the interval stops firing (and DOM writes stop leaking) once the visitor moves to later screens, with a resize listener keeping it in-bounds if the viewport changes mid-dodge.

Result & current status

Where it stands

A focused single-page project with a linear commit history, deployed via Vercel. Built as a self-contained front-end experiment, no dependencies, no backend.

0
dependencies
Technology used

The full stack

  • HTML5
  • CSS3
  • Vanilla JavaScript (ES6)
  • No framework / no build step
  • Inline SVG illustrations
  • Google Fonts
  • Vercel
Next landmark

Continue along the river

Want something built like this?

This is one of several products shipped under Astal Creates. Tell me what you're building and I'll write back.