EGreet - Free Personalized Greeting Card Maker banner

EGreet - Free Personalized Greeting Card Maker

4 devlogs
30h 51m 22s

Create and send beautiful personalized digital greeting cards for free. Play piano songs even if you’ve never played, build custom bouquets, and express love without paywalls. No ads, no login, just pure connection.

This project uses AI

Used AI occasionally for debugging and testing some features while developing the project.

Demo Repository

Loading README...

mayankkumar.inc

Shipped the guided piano feature after 6 hours of integration work.

Technical implementation:

Built a custom indexing script to make lookups fast — went from 3s search time to <100ms.

Piano playback engine uses Tone.js with Web Audio API. Each key press triggers a sampled piano sound, synced to visual highlighting. The hardest part was keeping audio/visual in sync on slower devices — solved with requestAnimationFrame + buffering.

Recording system stores performances as note arrays in Firebase (~2-5KB per card). User hits ‘send’ → data goes to Firestore → recipient gets shareable link with embedded player.

Also hit 500K page views this week. Real-time stats visible on site (Firebase Analytics + Google Analytics 4).

Still 100% free. No paywalls on core features.

Next: Building wish constellation system with Three.js + Firebase Realtime Database for live updates.

Attachment
0
mayankkumar.inc

Quick 2-hour session adding the bouquet maker and fixing performance issues.

What shipped:

Bouquet builder using custom flower images — users pick flowers, background, arrangement style. Each element is a layered inage that composites in real-time. Exports final bouquet as a greeting card. You can also add custom clugs and music and message as well.

Fixed mobile bugs:

  • Android image uploads timing out (added compression via Cloudinary API before upload, reduced payload from ~3MB to ~500KB)
  • WhatsApp preview cards not rendering

Set up Cloudflare for CDN + edge caching. Static assets now cached at edge nodes globally — reduced TTFB from 800ms to 120ms for international users.

Load time improvements: ~40% faster on 3G connections after enabling Brotli compression + lazy loading images.

Attachment
Attachment
Attachment
Attachment
0
mayankkumar.inc

Long testing session — 9 hours debugging edge cases and setting up search infrastructure.

Google Search Console setup:

Submitted sitemap.xml
Set up property verification via DNS TXT record
Configured Core Web Vitals monitoring (currently: LCP 1.2s, FID 8ms, CLS 0.02 — all green)
Indexed 47 pages so far, 12 in progress

Analytics infrastructure:

Integrated Google Analytics 4 with custom events (card_created, card_sent, category_selected)
Set up Firebase Analytics for real-time user tracking
Added performance monitoring (Firebase Performance SDK)

Early SEO results: 890 impressions, 450 clicks in first week (mostly branded queries).

Still iterating, but site’s now discoverable.

Attachment
Attachment
Attachment
0
mayankkumar.inc

Initial build took ~13 hours over a weekend. Wanted a free greeting card site, so I made one.

Tech stack:

Frontend: React 18 + Vite (fast dev server, HMR in <50ms)
Styling: Tailwind CSS 4 with custom design system
Animations: Framer Motion for page transitions, GSAP for complex card animations
Routing: React Router v7 with lazy loading for code splitting

Backend/Services:

Firebase:

  • Firestore for card data storage
  • Integrated with Cloudinary for optimization
  • Firebase Auth (optional for saving drafts, not required for sending cards)

Hosting: Netlify with automatic deployments from GitHub

  • Configured redirects for SPA routing
  • Environment variables for API keys
  • Build time: ~2min from push to live

Card rendering:

Built a template system with 30+ categories (birthdays, holidays, etc.)
Each card is a React component with customizable text, colors, images
Export system: generates shareable link

Core philosophy:

No ads, no tracking (beyond basic analytics), no login required to send cards
Receiver gets clean card with zero interruptions
All features free forever

Early version, but functional. Time to ship and iterate.

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0