• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
Oreo_22

Oreo_22

untitled-1619

Public
Like
untitled-1619
Home
Code
2
README.md
main.ts
Environment variables
Branches
1
Pull requests
Remixes
1
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
Code
/
Search
README.md

untitled-1619

Valentine Invitation body { box-sizing: border-box; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body, .container { height: 100%; width: 100%; } .container { background: linear-gradient(135deg, #FF1744 0%, #FF6B9D 50%, #FF1744 100%); display: flex; align-items: center; justify-content: center; font-family: 'Comic Sans MS', cursive, sans-serif; overflow: auto; position: relative; } .heart { position: absolute; font-size: 2rem; color: rgba(255, 255, 255, 0.3); animation: float 6s ease-in-out infinite; } .heart:nth-child(1) { left: 10%; top: 20%; animation-delay: 0s; } .heart:nth-child(2) { left: 85%; top: 15%; animation-delay: 1s; font-size: 2.5rem; } .heart:nth-child(3) { left: 20%; top: 70%; animation-delay: 2s; font-size: 1.5rem; } .heart:nth-child(4) { left: 75%; top: 75%; animation-delay: 3s; } .heart:nth-child(5) { left: 50%; top: 10%; animation-delay: 1.5s; font-size: 3rem; } .heart:nth-child(6) { left: 15%; top: 45%; animation-delay: 2.5s; font-size: 2rem; } .heart:nth-child(7) { left: 80%; top: 50%; animation-delay: 0.5s; font-size: 1.8rem; } @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-20px); } } .card { background: white; padding: 3rem 2.5rem; border-radius: 30px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); text-align: center; max-width: 500px; width: 90%; position: relative; z-index: 10; } .question-screen, .no-screen, .yes-screen, .second-no-screen, .third-no-screen, .final-chance-screen { display: none; } .question-screen.active, .no-screen.active, .yes-screen.active, .second-no-screen.active, .third-no-screen.active, .final-chance-screen.active { display: block; } h1 { color: #FF1744; font-size: 2.5rem; margin-bottom: 2rem; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1); line-height: 1.3; } .emoji { font-size: 4rem; margin-bottom: 1.5rem; display: block; } .buttons { display: flex; gap: 1.5rem; justify-content: center; margin-top: 2rem; } button { padding: 1rem 2.5rem; font-size: 1.3rem; border: none; border-radius: 50px; cursor: pointer; font-weight: bold; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); } .yes-btn { background: #FF1744; color: white; } .yes-btn:hover { background: #D50000; transform: scale(1.05); } .no-btn { background: #FFF; color: #FF1744; border: 3px solid #FF1744; } .no-btn:hover { background: #FFE5E5; transform: scale(1.05); } .no-screen p { color: #FF1744; font-size: 1.8rem; margin: 2rem 0; font-weight: bold; } .yes-screen p { color: #FF1744; font-size: 2rem; margin: 2rem 0; font-weight: bold; line-height: 1.4; } .pulse-heart { animation: pulse 1s ease infinite; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.2); } } .wiggle { animation: wiggle 0.3s ease-in-out; } @keyframes wiggle { 0%, 100% { transform: rotate(0deg); } 25% { transform: rotate(-10deg); } 75% { transform: rotate(10deg); } } .shrink-no { animation: shrink 0.5s ease forwards; } @keyframes shrink { to { transform: scale(0.7); } } .grow-yes { animation: grow 0.5s ease forwards; } @keyframes grow { to { transform: scale(1.3); } } .celebration-heart { position: fixed; font-size: 3rem; pointer-events: none; animation: celebrate 2s ease-out forwards; z-index: 1000; } @keyframes celebrate { 0% { transform: translateY(0) scale(0); opacity: 1; } 50% { transform: translateY(-100px) scale(1.5); opacity: 1; } 100% { transform: translateY(-200px) scale(0.5); opacity: 0; } } .shake-card { animation: shake 0.5s ease-in-out; } @keyframes shake { 0%, 100% { transform: translateX(0); } 10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); } 20%, 40%, 60%, 80% { transform: translateX(10px); } } .confetti { position: fixed; width: 10px; height: 10px; background: #FF1744; pointer-events: none; animation: confetti-fall 3s ease-out forwards; z-index: 1000; } @keyframes confetti-fall { 0% { transform: translateY(0) rotate(0deg); opacity: 1; } 100% { transform: translateY(100vh) rotate(720deg); opacity: 0; } } @view-transition { navigation: auto; }
❀️
πŸ’•
πŸ’–
❀️
πŸ’•
πŸ’–
❀️
πŸ’˜

AYO WILL YOU BE MY VAL

YES! πŸ’ No...
😀

iwo ke go and pick yes

YES! πŸ’ Still No
😠

You dey whine me? 😏
You know you want to say yes!

OKAY YES! πŸ’— Nope
πŸ₯Ί

Baby please na πŸ₯Ί
Why you doing me like this?

FINE, YES! πŸ’• No
😭

Ahn ahn! 😭
Last chance o!
Say yes or I go vex!

YES YES YES! πŸ’–
πŸ€—

Awwww! πŸ₯° I knew you couldn't resist me! Now come here make I squeeze you small πŸ˜˜πŸ’•

β€οΈπŸ’•β€οΈ
Code
README.mdmain.ts
FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
Β© 2026 Val Town, Inc.