Skip to content

Welcome to our birthday wish website repository! Designed with love, this platform allows you to send heartfelt wishes to your favorite people seamlessly and from anywhere. Packed with a plethora of animations, the site is not just visually stunning but also well-organized and responsive across all devices. Celebrate special moments with us.

Notifications You must be signed in to change notification settings

shawkath646/birthday-wish

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ‚ Birthday Wish - Personalized Birthday Celebration Platform

Create Magical Birthday Experiences with Countdown Timers, Custom Cards & Celebrations

Next.js React TypeScript Tailwind CSS Framer Motion

Birthday Wish Platform

πŸ“‹ Table of Contents


🎯 About

Birthday Wish is a modern, fully-featured web application designed to create personalized birthday experiences for your loved ones. Built with Next.js 16, React 19, and cutting-edge web technologies, this platform offers countdown timers, custom birthday cards, interactive celebrations, and fun games - all wrapped in a beautiful, responsive interface with stunning animations.

Designed with love and attention to detail, Birthday Wish allows you to send heartfelt wishes seamlessly from anywhere in the world. Whether it's a countdown to the big day, a personalized card with custom themes and messages, or an interactive celebration with confetti and balloons, this platform makes birthdays extra special.

Keywords: Birthday Wishes, Online Birthday Card, Birthday Countdown Timer, Personalized Birthday, Virtual Birthday Celebration, Birthday Animation, Custom Birthday Cards, Interactive Birthday Games, Next.js Birthday App


🎨 Purpose

Sometimes, the birthday of a beloved individual arrives, and it's important to extend heartfelt wishes from afar. As a web developer, given the physical distance of a thousand miles, I chose to convey my wishes remotely. Therefore, I created this application, adorned with captivating concepts and animations, to express heartfelt birthday wishes.

This platform serves multiple purposes:

  • Personal Connection: Bridge distances and make loved ones feel special on their birthday
  • Creative Expression: Customize cards with themes, fonts, colors, and personal messages
  • Interactive Experience: Engage with countdown timers, virtual cake, balloon games, and celebrations
  • Memory Preservation: Store and share custom birthday cards with unique links
  • Preview Mode: Test the entire experience before sharing with the birthday person
  • Modern Architecture: Demonstrates Next.js 16 best practices with server components and server actions

✨ Features

🎁 Core Features

  • βœ… Countdown Timer - Real-time countdown to birthday with beautiful digit animations
  • βœ… Custom Card Creator - Design personalized birthday cards with:
    • 6 unique themes (Modern, Classic, Playful, Elegant, Vibrant, Minimalist)
    • 6 font styles (Roboto, Playfair, Pacifico, Montserrat, Dancing Script, Courier)
    • Color picker for personalized styling
    • Custom image upload support
    • Personal message customization
  • βœ… Default Cards - 10 pre-designed birthday cards from curated collection
  • βœ… Interactive Celebration - Birthday animation with:
    • Full-screen confetti effects
    • Floating emoji particles
    • Animated birthday message
    • Background music with mute toggle
  • βœ… Virtual Cake - Interactive birthday cake with candles to blow out
  • βœ… Balloon Game - Fun balloon-popping mini-game
  • βœ… Goodbye Message - Beautiful farewell animation to end the experience

πŸ” Advanced Features

  • βœ… Preview Mode - Test the entire flow before sharing (uses cookies, no database)
  • βœ… Database Storage - Save cards and user data via CloudBurst Lab API
  • βœ… Shareable Links - Generate unique URLs for each birthday person
  • βœ… Cookie-based Sessions - Persistent user experience across pages
  • βœ… Route Handlers - API route for setting cookies and redirects
  • βœ… Server Actions - Server-side data fetching with getUserData action

🎨 User Experience

  • βœ… Responsive Design - Seamless experience on mobile, tablet, and desktop
  • βœ… Smooth Animations - Powered by Framer Motion for delightful interactions
  • βœ… Sound Effects - Background music and audio controls
  • βœ… Accessibility - WCAG 2.1 compliant with semantic HTML and ARIA labels
  • βœ… SEO Optimized - OpenGraph tags, Twitter Cards, and dynamic metadata
  • βœ… Fast Performance - Server-side rendering and optimized client components

πŸš€ Technical Excellence

  • βœ… Next.js 16+ Architecture - Proper server/client component separation
  • βœ… Server-First Data Flow - All data processing on server, props-based client rendering
  • βœ… Zero Client-Side Storage Reads - No localStorage operations in client components
  • βœ… Component Co-location - Components organized within their route folders
  • βœ… Type Safety - Full TypeScript coverage with strict mode
  • βœ… Modern React 19 - Latest React features and patterns

πŸ› οΈ Technology Stack

Frontend

Next.js React TypeScript Tailwind CSS Framer Motion

  • Next.js 16.0.7 - React framework with App Router and Server Components
  • React 19.2.1 - Latest React with enhanced performance
  • TypeScript 5.x - Type-safe development
  • Tailwind CSS 3.4 - Utility-first CSS framework
  • Framer Motion 12.x - Production-ready animations
  • React Hook Form 7.68 - Performant form validation
  • React Confetti 6.4 - Celebration confetti effects
  • Digital Digit 2.0 - Animated countdown digits

Backend & Services

Vercel CloudBurst Lab

  • CloudBurst Lab API - Custom birthday data storage and management
  • Server Actions - Next.js server-side data fetching
  • Route Handlers - API endpoints for cookie management and redirects
  • Vercel Analytics - Real-time performance monitoring

DevOps & Tools

  • Turbopack - Fast development builds
  • PostCSS - CSS processing and optimization
  • Vercel - Deployment platform with edge functions
  • Git - Version control

πŸ“ Project Structure

birthday-wish/
β”œβ”€β”€ πŸ“‚ src/
β”‚   β”œβ”€β”€ πŸ“‚ actions/              # Server actions
β”‚   β”‚   β”œβ”€β”€ cloudburstStorage.ts # CloudBurst API integration
β”‚   β”‚   └── getUserData.ts       # Fetch user data server action
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ app/                  # Next.js App Router
β”‚   β”‚   β”œβ”€β”€ page.tsx             # Home page (server component)
β”‚   β”‚   β”œβ”€β”€ HomeClient.tsx       # Home page client wrapper
β”‚   β”‚   β”œβ”€β”€ layout.tsx           # Root layout
β”‚   β”‚   β”œβ”€β”€ robots.ts            # Robots.txt config
β”‚   β”‚   β”œβ”€β”€ sitemap.ts           # Dynamic sitemap
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ timer/            # Countdown timer route
β”‚   β”‚   β”‚   β”œβ”€β”€ page.tsx         # Server component
β”‚   β”‚   β”‚   β”œβ”€β”€ TimerClient.tsx  # Client wrapper
β”‚   β”‚   β”‚   └── Timer.tsx        # Timer component
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ celebrate/        # Birthday celebration route
β”‚   β”‚   β”‚   β”œβ”€β”€ page.tsx         # Server component
β”‚   β”‚   β”‚   β”œβ”€β”€ CelebrateClient.tsx # Client wrapper
β”‚   β”‚   β”‚   └── HappyBirthday.tsx   # Celebration animation
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ messages/         # Birthday cards route
β”‚   β”‚   β”‚   β”œβ”€β”€ page.tsx         # Server component
β”‚   β”‚   β”‚   β”œβ”€β”€ MessagesClient.tsx  # Client wrapper
β”‚   β”‚   β”‚   β”œβ”€β”€ Message.tsx      # Cards display
β”‚   β”‚   β”‚   β”œβ”€β”€ VirtualCake.tsx  # Interactive cake
β”‚   β”‚   β”‚   β”œβ”€β”€ BalloonGame.tsx  # Balloon game
β”‚   β”‚   β”‚   └── CardCreator.tsx  # Card creation form
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ goodbye/          # Farewell route
β”‚   β”‚   β”‚   β”œβ”€β”€ page.tsx         # Server component
β”‚   β”‚   β”‚   β”œβ”€β”€ GoodbyeClient.tsx # Client wrapper
β”‚   β”‚   β”‚   └── GoodBye.tsx      # Goodbye animation
β”‚   β”‚   β”‚
β”‚   β”‚   └── πŸ“‚ r/                # Redirect route
β”‚   β”‚       └── route.ts         # Cookie setter and redirect handler
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ components/           # Shared components
β”‚   β”‚   └── BirthdayBox.tsx      # Birthday card component
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ JsonData/             # Static data
β”‚   β”‚   └── WishMessages.json    # Default birthday messages
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ lib/                  # Third-party configs
β”‚   β”‚   └── cloudburstApi.ts     # CloudBurst API client
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ utils/                # Utility functions
β”‚   β”‚   β”œβ”€β”€ cookies.ts           # Cookie helpers
β”‚   β”‚   └── useWindowSize.ts     # Window size hook
β”‚   β”‚
β”‚   └── πŸ“‚ assets/               # Images and static files
β”‚
β”œβ”€β”€ πŸ“‚ public/                   # Public static files
β”‚   └── googlec35dc04930fdb16e.html # Google verification
β”‚
β”œβ”€β”€ πŸ“„ next.config.js            # Next.js configuration
β”œβ”€β”€ πŸ“„ tailwind.config.ts        # Tailwind CSS config
β”œβ”€β”€ πŸ“„ tsconfig.json             # TypeScript config
└── πŸ“„ package.json              # Dependencies

πŸ—ΊοΈ Routes & Pages

Public Routes

Route Description Features Type
/ Home page Card creator, preview mode, database save Server Component
/timer Countdown timer Real-time countdown to birthday Server Component
/celebrate Birthday celebration Confetti, animations, music, floating particles Server Component
/messages Birthday cards Custom cards, default cards, virtual cake, balloon game Server Component
/goodbye Farewell message Beautiful goodbye animation Server Component
/r?t=[id] Redirect handler Sets cookie and redirects to timer Route Handler (GET)

Data Flow Architecture

User Entry β†’ Home Page (Server)
    ↓
Preview Mode:
    β†’ Cookies (is_preview, preview_name, preview_dob)
    β†’ Timer β†’ Celebrate β†’ Messages β†’ Goodbye
    
Database Mode:
    β†’ CloudBurst API (save data)
    β†’ Generate shareable link (/r?t=[id])
    β†’ Share link with birthday person
    β†’ /r route sets cookie (birthday_db_id)
    β†’ Timer β†’ Celebrate β†’ Messages β†’ Goodbye
    
Each Route:
    β†’ Server Component fetches data (getUserData action)
    β†’ Passes data as props to Client Component
    β†’ Client Component handles UI interactions only
    β†’ Zero localStorage operations

SEO Features

  • Dynamic Sitemap: /sitemap.xml - All routes with appropriate priorities
  • Robots.txt: /robots.txt - Disallows /r route (redirect only)
  • Metadata: Every page has OpenGraph and Twitter Card metadata
  • Semantic HTML: Proper HTML5 structure (main, header, section, article)
  • Accessibility: WCAG 2.1 compliant with ARIA labels

πŸš€ Getting Started

Prerequisites

  • Node.js 18.x or higher
  • npm, yarn, pnpm, or bun package manager
  • CloudBurst Lab Account (for database storage - optional)

Installation

# Clone the repository
git clone https://github.com/shawkath646/birthday-wish.git
cd birthday-wish

# Install dependencies
npm install
# or
yarn install
# or
pnpm install

Development

# Run development server
npm run dev

# Open http://localhost:3000 in your browser

Build & Production

# Create production build
npm run build

# Start production server
npm run start

Linting

# Run ESLint
npm run lint

πŸ” Environment Variables

Create a .env.local file in the root directory:

# Application Configuration
NEXT_PUBLIC_APP_BASE_URL=https://yourdomain.com
NEXT_PUBLIC_DATE_OF_BIRTH=2006-12-25
NEXT_PUBLIC_PERSON_NAME=Birthday Person Name

# CloudBurst Lab API Configuration (Optional - for database storage)
CLOUDBURST_API_URL=https://cloudburstlab.vercel.app
APP_ID=birthday-wish
APP_SECRET=your_app_secret_here

Configuration Details

  • NEXT_PUBLIC_APP_BASE_URL: Your deployed application URL (for shareable links)
  • NEXT_PUBLIC_DATE_OF_BIRTH: Birthday date in YYYY-MM-DD format (used for countdown)
  • NEXT_PUBLIC_PERSON_NAME: Name of the birthday person (displayed throughout)
  • CLOUDBURST_API_URL: CloudBurst Lab API endpoint (server-side only)
  • APP_ID: Your CloudBurst Lab application ID (server-side only)
  • APP_SECRET: Your CloudBurst Lab API secret key (server-side only, keep secure)

Preview Mode (No Database Required)

If you don't configure CloudBurst Lab credentials, the app works perfectly in preview mode:

  • All features available
  • Data stored in cookies only
  • No shareable links
  • Perfect for testing and personal use

Database Mode (With CloudBurst Lab)

Configure CloudBurst Lab credentials to enable:

  • Permanent card storage
  • Shareable birthday links
  • Data persistence across sessions

🌐 Deployment

Deploy to Vercel (Recommended)

Deploy with Vercel

  1. Push your code to GitHub
  2. Import project in Vercel
  3. Configure environment variables
  4. Deploy

Manual Deployment Steps

# Build the application
npm run build

# The build output is in .next folder
# Deploy to your preferred hosting platform

Compatible Platforms

  • Vercel - Optimal performance with edge functions
  • Netlify - Full Next.js support
  • AWS Amplify - Serverless deployment
  • Railway - Simple deployment with HTTPS
  • Google Cloud Run - Container-based deployment

πŸ—οΈ Architecture

Server-First Architecture

Birthday Wish follows Next.js 16+ best practices with a server-first approach:

// Pattern: Server Component β†’ Client Component β†’ Child Components

// 1. Server Component (page.tsx)
export default async function TimerPage() {
  const userData = await getUserData(); // Server action
  return <TimerClient {...userData} />; // Pass data as props
}

// 2. Client Component (TimerClient.tsx)
'use client';
export default function TimerClient({ personName, dateOfBirth, cards, isPreview }) {
  // Only UI interactions, no data fetching
  return <Timer dateOfBirth={dateOfBirth} isPreview={isPreview} />;
}

// 3. Child Component (Timer.tsx)
'use client';
export default function Timer({ dateOfBirth, isPreview }) {
  // Pure presentational, receives all data as props
  // No localStorage, no data fetching
}

Key Architectural Decisions

  1. Server Components: All route pages are server components
  2. Props-Based Flow: Data flows server β†’ client via props
  3. Zero Client Storage: No localStorage reads in client components
  4. Server Actions: Data fetching with 'use server' directive
  5. Route Handlers: Cookie management via route.ts API routes
  6. Component Co-location: Components live in their route folders

Data Flow Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        User Request                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚   Server Component   β”‚
                  β”‚     (page.tsx)       β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚   getUserData()      β”‚
                  β”‚   Server Action      β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚  Check Cookies       β”‚
                  β”‚  - is_preview        β”‚
                  β”‚  - birthday_db_id    β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β–Ό                             β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  Preview Mode   β”‚          β”‚  Database Mode  β”‚
    β”‚  (from cookies) β”‚          β”‚  (CloudBurst)   β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚                            β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚   Return Data        β”‚
              β”‚   as Props           β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚  Client Component    β”‚
              β”‚  (*Client.tsx)       β”‚
              β”‚  - Handles UI only   β”‚
              β”‚  - No data fetching  β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚  Child Components    β”‚
              β”‚  - Pure presentation β”‚
              β”‚  - Props-based       β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ‘¨β€πŸ’» Author

Shawkat Hossain Maruf

About Me: Full-stack developer passionate about creating beautiful, performant web applications. This Birthday Wish platform was built with love to make birthdays special for people I care about, demonstrating expertise in modern React, Next.js architecture, and thoughtful UX design.


🏒 Powered By

Cloudburst Lab

Cloudburst Lab is a digital innovation studio focused on creating exceptional web and mobile applications. We specialize in modern JavaScript frameworks, cloud technologies, and user-centric design principles.

πŸ“„ License

This project is proprietary and Β© 2023-2025 Shawkat Hossain Maruf. All rights reserved.

The source code is available for viewing and learning purposes. For commercial use, collaboration, or inquiries, please contact the author.


πŸ™ Acknowledgments

  • Next.js Team - For the amazing React framework
  • Vercel - For excellent hosting and analytics
  • Framer Motion - For smooth animations
  • React Confetti - For celebration effects
  • Open Source Community - For incredible tools and libraries

πŸ“Š Project Stats

Next.js TypeScript Performance SEO Accessibility Mobile


⭐ Star this repository if you find it helpful!

About

Welcome to our birthday wish website repository! Designed with love, this platform allows you to send heartfelt wishes to your favorite people seamlessly and from anywhere. Packed with a plethora of animations, the site is not just visually stunning but also well-organized and responsive across all devices. Celebrate special moments with us.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages