SayYes is an open-source cute question page builder for creating chaotic proposal links where the No button refuses to cooperate.
SayYes, kaçan Hayır butonlu viral teklif ve tatlı soru sayfaları oluşturmak için açık kaynaklı mini web uygulamasıdır.
Public demo: https://your-sayyes-demo.vercel.app
Demo flow:
- Open the landing page.
- Go to
/create. - Pick a Turkish template or customize the form.
- Generate a URL-safe SayYes link.
- Copy the link, open the preview, or download the QR PNG.
- Send the link.
- The recipient tries the No button, chaos happens, then Yes shows the final screen.
- Download a square or story PNG share card.
- Mobile-first viral landing page, builder, proposal page, and success flow.
- Client-only share links with URL-safe encoded payloads.
- Turkish-first templates for proposal, date, apology, coffee, movie night, and hug prompts.
- Five themes: Cute Pink, Dark Romance, Pixel Game, Terminal Love, and Error 404.
- Five No button modes: Runaway, Shrink, Fake Error, Boss Fight, and Chaos.
- Three final styles: Romantic, Meme, and Certificate.
- Real downloadable PNG share cards in square and story formats.
- QR code preview and QR PNG download on the generated-link screen.
- Local-only recent creations with open, copy, and delete actions.
- Dynamic proposal metadata and a default Open Graph image.
- Favicon, app icon, Apple touch icon, and web manifest.
- No authentication, database, paid API, camera access, or hidden analytics in the MVP.
SayYes does not need a backend for the MVP. The proposal configuration is encoded into the generated URL, decoded in the browser, and rendered as plain React text. Recent creations are stored only in the creator's localStorage.
This means:
- No account is required.
- No database is required.
- No server-side tracking is required.
- No environment variables are required.
- Generated links remain easy to deploy on Vercel.
SayYes is for fun, cute, consensual sharing. Do not use it to harass, pressure, spam, or manipulate people. Generated pages are encoded in the URL and no data is stored on a SayYes server in the MVP.
- Next.js App Router
- TypeScript
- React
- Tailwind CSS
- Lucide React icons
html-to-imagefor share-card PNG exportqrcodefor client-side QR generation
app/
page.tsx Landing page
create/page.tsx Builder page
p/[payload]/page.tsx Shareable proposal route
src/
components/ Reusable product UI
lib/ Payload helpers, defaults, templates, local types
public/
favicon.svg
icon.svg
apple-touch-icon.svg
Key files:
src/components/ProposalBuilder.tsxsrc/components/ProposalPage.tsxsrc/components/NoButton.tsxsrc/components/ShareCard.tsxsrc/components/QRCodePanel.tsxsrc/lib/payload.tssrc/lib/proposalDefaults.tssrc/lib/templates.ts
npm install
npm run devOpen http://localhost:3000.
npm run lint
npm run typecheck
npm run build
npm audit --omit=devOr run the combined release check:
npm run release:checkSayYes is Vercel-ready with no required environment variables.
Quick deploy:
- Push the repository to GitHub.
- Import it in Vercel.
- Keep the default Next.js build settings.
- Deploy.
Optional:
- Set
NEXT_PUBLIC_SITE_URLto your production URL for absolute metadata URLs. - See
DEPLOYMENT.mdfor the release checklist.
Add screenshots after public deployment:
- Landing page
- Builder with templates
- Generated link with QR code
- Proposal page
- Success screen
- Square share card
- Story share card
- Optional Supabase persistence
- Custom slugs
- Creator dashboard
- View count
- Yes accepted notification
- More themes
- More No button modes
- i18n support
- Public template gallery
- More share-card layouts
- QR design customization
- Add new templates in
src/lib/templates.ts. - Add new No button modes in
src/components/NoButton.tsx. - Add theme tokens in
src/lib/proposalDefaults.ts. - Improve PNG export fallbacks for older mobile browsers.
- Add accessibility checks around animated states.
- Add a lightweight Playwright smoke test if the project grows.
Add an open-source license before publishing. MIT is a good default for this kind of app.