@titas_mallick/wedding-site-gen 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,70 +1,137 @@
1
- # 💍 Wedding Website Generator v2.0
1
+ # 💍 Wedding Website Generator v2.0 (AI-Powered)
2
2
 
3
- > **Empower your wedding with AI.** Transform your special day into a digital masterpiece with an interactive invitation, AI-powered concierge, and real-time guest engagement.
3
+ Transform your wedding journey with a sophisticated, AI-driven digital experience. This generator scaffolds a production-ready Next.js application featuring an AI concierge, digital guestbook, real-time song requests, and automated guest reminders.
4
4
 
5
5
  ---
6
6
 
7
- ## 🚀 The A-B-C Quick Start
7
+ ## 🚀 Phase 1: Generation (The A-B-C Guide)
8
8
 
9
- ### Step A: Generate Your Codebase
10
- Open your terminal and run the following command to scaffold your project:
9
+ ### Step A: Initialize Your Project
10
+ Run the following command in your terminal to start the interactive setup:
11
11
  ```bash
12
12
  npx @titas_mallick/wedding-site-gen
13
13
  ```
14
- *The CLI will guide you through couple names, wedding dates, and theme selection.*
15
-
16
- ### Step B: Infrastructure & Environment
17
- 1. **Navigate & Install**:
18
- ```bash
19
- cd your-wedding-folder
20
- npm install
21
- ```
22
- 2. **Firebase Setup**:
23
- - Create a project at [Firebase Console](https://console.firebase.google.com/).
24
- - Enable **Firestore** and **Authentication** (Email/Password).
25
- - Copy the `firestore.rules` file content from your project into the Firebase console.
26
- 3. **Configuration**:
27
- - Rename `.env.example` to `.env.local` (or create a new one).
28
- - Fill in your Firebase keys, Gemini API key, and Cloudinary credentials.
29
-
30
- ### Step C: Asset Personalization
31
- This is where the magic happens. Replace the placeholders in the `public/` directory with your own files.
14
+
15
+ ### Step B: CLI Prompt Reference
16
+ The generator will ask you several questions. Here is how to answer them:
17
+
18
+ | Prompt | Example Input | Purpose |
19
+ | :--- | :--- | :--- |
20
+ | **Groom's First Name** | `Titas` | Used for URLs and short mentions. |
21
+ | **Groom's Full Name** | `Titas Mallick` | Used in official bio and certificate pages. |
22
+ | **Bride's First Name** | `Sukanya` | Used for URLs and short mentions. |
23
+ | **Bride's Full Name** | `Sukanya Saha` | Used in official bio and certificate pages. |
24
+ | **Wedding Date** | `January 23, 2026` | Displayed text on the countdown and hero. |
25
+ | **Wedding Date ISO** | `2026-01-23` | Powers the technical countdown logic. |
26
+ | **Admin Email** | `admin@wedding.com` | **CRITICAL**: Log in with this email to manage content. |
27
+ | **UPI ID** | `wedding@okaxis` | Used for the "Sagun" (Gift) QR code generator. |
28
+ | **Website URL** | `https://our-wedding.com` | Used for email links and SEO. |
29
+ | **Wedding Hashtag** | `#TitasWedsSukanya` | Displayed across the site. |
30
+ | **Visual Theme** | `1` (Pink & Gold) | Sets the primary color palette (Pink, Blue, Green, or Red). |
31
+ | **Target Directory** | `my-wedding` | The name of the folder where code will be saved. |
32
+
33
+ ---
34
+
35
+ ## 🛠️ Phase 2: Infrastructure Setup
36
+
37
+ ### 1. Firebase (Database & Auth)
38
+ 1. Go to the [Firebase Console](https://console.firebase.google.com/).
39
+ 2. **Create a Project**: Give it a name (e.g., `wedding-project`).
40
+ 3. **Authentication**: Enable "Email/Password" provider in the Auth tab.
41
+ 4. **Firestore**: Create a Database in "Production Mode".
42
+ 5. **Project Settings**:
43
+ - Click the **Web Icon (</>)** to register a web app. Copy the `firebaseConfig` keys for your `.env.local`.
44
+ - Go to **Service Accounts** > **Generate New Private Key**. This downloads a JSON file. Use these values for the `FIREBASE_ADMIN` variables.
45
+
46
+ ### 2. Firestore Security Rules
47
+ Copy the following into the **Rules** tab of your Firestore console to allow guests to post wishes/songs while keeping admin functions secure:
48
+
49
+ ```javascript
50
+ rules_version = '2';
51
+ service cloud.firestore {
52
+ match /databases/{database}/documents {
53
+ match /wishes/{wishId} { allow read, write: if true; }
54
+ match /song_requests/{requestId} { allow read, write: if true; }
55
+ match /guestbook/{entryId} { allow read, write: if true; }
56
+ match /rsvps/{rsvpId} { allow read, write: if true; }
57
+ match /email-reminders/{reminderId} {
58
+ allow read: if true;
59
+ allow write: if request.auth != null;
60
+ }
61
+ match /{document=**} {
62
+ allow read: if true;
63
+ allow write: if request.auth != null;
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### 3. Cloudinary (Guestbook Uploads)
70
+ 1. Sign up at [Cloudinary](https://cloudinary.com/).
71
+ 2. In the **Dashboard**, copy your `Cloud Name`.
72
+ 3. Go to **Settings** > **Upload** > **Upload Presets** and create a new preset named `wedding` with "Unsigned" signing mode.
73
+
74
+ ### 4. Resend (Email Automation)
75
+ 1. Sign up at [Resend.com](https://resend.com/).
76
+ 2. Generate an **API Key** and add it to `.env.local`.
77
+
78
+ ---
79
+
80
+ ## 🔐 Phase 3: Environment Configuration
81
+
82
+ Create a `.env.local` file in your generated project root and populate it:
83
+
84
+ ```bash
85
+ # --- Firebase Client ---
86
+ NEXT_PUBLIC_APIKEY=AIza...
87
+ NEXT_PUBLIC_AUTHDOMAIN=your-project.firebaseapp.com
88
+ NEXT_PUBLIC_PROJECTID=your-project
89
+ NEXT_PUBLIC_STORAGEBUCKET=your-project.firebasestorage.app
90
+ NEXT_PUBLIC_SENDERID=...
91
+ NEXT_PUBLIC_APPID=...
92
+ NEXT_PUBLIC_RECAPTCHA_SITE_KEY=...
93
+
94
+ # --- Firebase Admin (Secrets) ---
95
+ FIREBASE_ADMIN_PROJECT_ID=your-project
96
+ FIREBASE_ADMIN_PRIVATE_KEY_ID=...
97
+ FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
98
+ FIREBASE_ADMIN_CLIENT_EMAIL=firebase-adminsdk-...
99
+ FIREBASE_ADMIN_CLIENT_ID=...
100
+
101
+ # --- AI & Content ---
102
+ NEXT_PUBLIC_GEMINI_API_KEY=AIza... # Get from Google AI Studio
103
+ NEXT_PUBLIC_ADMIN_EMAIL=your-email@gmail.com # Must match login for admin powers
104
+
105
+ # --- Media & Email ---
106
+ NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=...
107
+ NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=wedding
108
+ RESEND_API_KEY=re_...
109
+ CRON_SECRET=a-secure-random-string
110
+ ```
32
111
 
33
112
  ---
34
113
 
35
- ## 🎨 Asset Mapping (Photo & Media Guide)
114
+ ## 🎨 Phase 4: Asset Personalization
36
115
 
37
- To ensure the site looks perfect, replace these files but **keep the filenames exactly the same**.
116
+ Replace the files in `/public/` keeping the exact filenames:
38
117
 
39
- ### 📸 Core Portraits (`/public/`)
40
- | Filename | Purpose | Recommended Aspect Ratio |
118
+ | Location | Filename | Purpose |
41
119
  | :--- | :--- | :--- |
42
- | `bride.jpg` | Main profile photo of the Bride. | 3:4 (Portrait) |
43
- | `groom.jpg` | Main profile photo of the Groom. | 3:4 (Portrait) |
44
- | `love-birds.png` | Avatar for the AI Chatbot. | 1:1 (Square) |
45
- | `qr.png` | UPI Payment QR code for gifts. | 1:1 (Square) |
46
-
47
- ### 🗓️ Milestone Timeline (`/public/Images/`)
48
- These images appear on the **"Mark the Dates"** timeline.
49
- - `19.jpg`: The Proposal Milestone.
50
- - `Patipatra.jpeg`: The Date-Fixing/Traditional Ceremony.
51
- - `22.jpg`: The Engagement Milestone.
52
- - `21.jpg`: The Wedding Day Milestone.
53
- - `20.jpg`: The Reception Milestone.
54
-
55
- ### 🏔️ Pre-Wedding & Memories Gallery
56
- The **"Memories"** page is designed to showcase your journey.
57
- - **Bulk Uploads**: Place all your pre-wedding shoot photos in `/public/Images/`.
58
- - **Naming**: Use descriptive names or simply number them. The gallery will automatically generate a beautiful masonry layout for all images found in this directory.
120
+ | `/public/` | `bride.jpg` | Main portrait of the Bride (3:4 ratio). |
121
+ | `/public/` | `groom.jpg` | Main portrait of the Groom (3:4 ratio). |
122
+ | `/public/` | `qr.png` | Your UPI QR code for the Sagun page. |
123
+ | `/public/Images/` | `19.jpg` - `22.jpg` | Milestone images for the "Mark the Dates" timeline. |
124
+ | `/public/Images/` | `Patipatra.jpeg` | Image for the traditional date-fixing milestone. |
125
+ | `/public/Images/` | `* (any name)` | All other images in this folder automatically populate the **Memories** gallery. |
59
126
 
60
127
  ---
61
128
 
62
- ## 🤖 Advanced AI Features
129
+ ## 🤖 Phase 5: Advanced AI Features
63
130
 
64
131
  ### 1. The Wedding Concierge (Gemini 2.5)
65
132
  Guests can chat with an AI assistant trained on your wedding data.
66
133
  - **Setup**: Provide your `NEXT_PUBLIC_GEMINI_API_KEY` in `.env.local`.
67
- - **Knowledge**: The bot automatically knows your venues, dates, and story based on the info you provided during Step A.
134
+ - **Knowledge**: The bot automatically knows your venues, dates, and story based on the info you provided during Phase 1.
68
135
 
69
136
  ### 2. Automated Email Reminders
70
137
  Send beautiful, automated reminders to your guest list.
@@ -74,25 +141,50 @@ Send beautiful, automated reminders to your guest list.
74
141
 
75
142
  ---
76
143
 
77
- ## ⚙️ Environment Variables Checklist
144
+ ## 🎮 Phase 6: Management & Broadcast
145
+
146
+ ### 1. Guest Management Dashboard (`/invitation/maker`)
147
+ Log in with your **Admin Email** to access the ultimate control center:
148
+ - **Add/Edit Guests**: Create personalized links for every family.
149
+ - **RSVP Tracking**: See who is attending and their food preferences in real-time.
150
+ - **Bulk WhatsApp**: Generate pre-filled invitation messages for easy sharing.
151
+
152
+ ### 2. Moderation (Guestbook & Songs)
153
+ - **Moderation**: Admins logged into the site can delete any guest-uploaded photo or song request directly from the live feed.
154
+ - **Song Queue**: Mark songs as "Played" or delete them as the night progresses at `/song-requests`.
155
+
156
+ ### 3. OBS Broadcast Overlay (`/updates/overlay`)
157
+ Perfect for venue video walls or live streams:
158
+ - **Real-time News**: Display the latest announcements scrolling at the bottom.
159
+ - **Live Clock**: Shows current event time.
160
+ - **Chroma Key**: Uses a standard green background for easy transparency in OBS.
161
+
162
+ ---
163
+
164
+ ## ✉️ Guest Personalization (How it works)
78
165
 
79
- | Key | Description |
80
- | :--- | :--- |
81
- | `NEXT_PUBLIC_ADMIN_EMAIL` | The email that has "Super User" powers (delete photos/songs). |
82
- | `NEXT_PUBLIC_GEMINI_API_KEY` | Powers the Concierge and the AI Wish Summarizer. |
83
- | `RESEND_API_KEY` | Used to send the actual emails for reminders. |
84
- | `NEXT_PUBLIC_CLOUDINARY_URL` | Enables guests to upload photos to your live guestbook. |
166
+ When you add a guest in the dashboard, they get a unique ID. Their link becomes: `your-site.com/invitation/[guest-id]`.
167
+ - **Custom Welcome**: The site greets them by name.
168
+ - **Smart Filters**: They only see the events they are specifically invited to (e.g., just Reception, or all events).
169
+ - **One-Click RSVP**: Their identity is linked, making RSVP a single-click process.
85
170
 
86
171
  ---
87
172
 
88
- ## 📁 Key Project Routes
89
- - `/` - The Home Hero & Countdown.
90
- - `/couple` - Your love story & individual bios.
91
- - `/invitation/[guest-id]` - Personalized landing pages for guests.
92
- - `/guestbook` - The real-time masonry photo wall.
93
- - `/song-requests` - Interactive guest playlist.
173
+ ## 🚀 Phase 7: Deployment & Automation
174
+
175
+ ### Vercel Deployment
176
+ 1. Push your code to **GitHub**.
177
+ 2. Connect your repository to [Vercel](https://vercel.com/).
178
+ 3. **Important**: Add all your `.env.local` variables into the Vercel **Environment Variables** settings.
179
+
180
+ ### Automated Reminders (Cron Job)
181
+ To send daily reminders to guests (e.g., from Jan 10th to Jan 26th):
182
+ 1. In Vercel, go to the **Cron** tab (or use GitHub Actions).
183
+ 2. Set up a job to call: `GET /api/email-reminders`
184
+ 3. Header: `Authorization: Bearer YOUR_CRON_SECRET`
185
+ 4. Schedule: `0 10 10-26 1 *` (10 AM daily).
94
186
 
95
187
  ---
96
188
 
97
189
  ## 📜 License
98
- MIT License. Built with ❤️ for the open-source wedding community.
190
+ MIT License. Created with ❤️ for your special day.
@@ -1,31 +1,31 @@
1
1
  import { Metadata } from "next";
2
2
 
3
3
  export const metadata: Metadata = {
4
- title: "Wedding Invitation | Titas & Sukanya",
4
+ title: "Wedding Invitation | Groom & Bride",
5
5
  description:
6
- "We cordially invite you to celebrate the wedding of Titas and Sukanya. Click to view your personalized invitation and event details.",
6
+ "We cordially invite you to celebrate the wedding of the couple. Click to view your personalized invitation and event details.",
7
7
  openGraph: {
8
- title: "You're Invited! | Titas & Sukanya Wedding",
8
+ title: "You're Invited! | Wedding",
9
9
  description:
10
10
  "We would be honored to have you join us as we celebrate our wedding. View details for the ceremony and reception.",
11
- url: "https://www.titas-sukanya-for.life/invitation",
12
- siteName: "Titas & Sukanya",
11
+ url: "your-wedding-site.com/invitation",
12
+ siteName: "Groom & Bride",
13
13
  locale: "en_US",
14
14
  type: "website",
15
15
  images: [
16
16
  {
17
- url: "https://www.titas-sukanya-for.life/invite.jpeg", // Updated to use absolute URL for WhatsApp
17
+ url: "your-wedding-site.com/invite.jpeg", // Updated to use absolute URL for WhatsApp
18
18
  width: 1200,
19
19
  height: 630,
20
- alt: "Titas & Sukanya Wedding Invitation",
20
+ alt: "Wedding Invitation",
21
21
  },
22
22
  ],
23
23
  },
24
24
  twitter: {
25
25
  card: "summary_large_image",
26
- title: "Wedding Invitation | Titas & Sukanya",
26
+ title: "Wedding Invitation | Groom & Bride",
27
27
  description: "Join us in celebrating our special day.",
28
- images: ["https://www.titas-sukanya-for.life/invite.jpeg"], // Updated to use absolute URL for WhatsApp
28
+ images: ["your-wedding-site.com/invite.jpeg"], // Updated to use absolute URL for WhatsApp
29
29
  },
30
30
  };
31
31
 
package/app/layout.tsx CHANGED
@@ -13,7 +13,7 @@ import ConciergeBot from "@/components/ConciergeBot";
13
13
  import { SchemaMarkup } from "@/components/SchemaMarkup";
14
14
 
15
15
  export const metadata: Metadata = {
16
- metadataBase: new URL("https://www.titas-sukanya-for.life"),
16
+ metadataBase: new URL("your-wedding-site.com"),
17
17
 
18
18
  title: {
19
19
  default: siteConfig.name,
@@ -22,21 +22,19 @@ export const metadata: Metadata = {
22
22
  description: siteConfig.description,
23
23
  keywords: [
24
24
  "Wedding",
25
- "Titas",
26
- "Sukanya",
25
+ "Groom",
26
+ "Bride",
27
27
  "Marriage",
28
28
  "Celebration",
29
29
  "Event",
30
- "Serampore Wedding",
31
- "Titas and Sukanya Wedding",
32
30
  ],
33
31
  authors: [
34
32
  {
35
- name: "Titas Mallick",
36
- url: "https://www.titas-sukanya-for.life",
33
+ name: "Groom Name",
34
+ url: "your-wedding-site.com",
37
35
  },
38
36
  ],
39
- creator: "Titas Mallick",
37
+ creator: "Groom Name",
40
38
  icons: {
41
39
  icon: "/love-birds.png",
42
40
  shortcut: "/love-birds.png",
@@ -48,16 +46,16 @@ export const metadata: Metadata = {
48
46
  openGraph: {
49
47
  type: "website",
50
48
  locale: "en_US",
51
- url: "https://www.titas-sukanya-for.life/",
49
+ url: "your-wedding-site.com",
52
50
  title: siteConfig.name,
53
51
  description: siteConfig.description,
54
52
  siteName: siteConfig.name,
55
53
  images: [
56
54
  {
57
- url: "https://www.titas-sukanya-for.life/invite.jpeg",
55
+ url: "your-wedding-site.com/invite.jpeg",
58
56
  width: 1200,
59
57
  height: 630,
60
- alt: "Titas & Sukanya Wedding Invitation",
58
+ alt: "Wedding Invitation",
61
59
  },
62
60
  ],
63
61
  },
@@ -65,8 +63,8 @@ export const metadata: Metadata = {
65
63
  card: "summary_large_image",
66
64
  title: siteConfig.name,
67
65
  description: siteConfig.description,
68
- images: ["https://www.titas-sukanya-for.life/invite.jpeg"],
69
- creator: "@titas",
66
+ images: ["your-wedding-site.com/invite.jpeg"],
67
+ creator: "@wedding",
70
68
  },
71
69
  robots: {
72
70
  index: true,
package/cli.mjs CHANGED
@@ -98,6 +98,12 @@ async function main() {
98
98
  { search: /2026-01-23/g, replace: config.weddingDateISO },
99
99
  { search: /admin@example.com/g, replace: config.adminEmail },
100
100
  { search: /your-upi-id@upi/g, replace: config.upiId },
101
+ { search: /https:\/\/www.titas-sukanya-for.life/g, replace: config.siteUrl },
102
+ { search: /your-wedding-site.com/g, replace: config.siteUrl.replace(/^https?:\/\//, '') },
103
+ { search: /Wedding Invitation \| Groom & Bride/g, replace: `Wedding Invitation | ${config.groomName} & ${config.brideName}` },
104
+ { search: /celebrate the wedding of the couple/g, replace: `celebrate the wedding of ${config.groomName} and ${config.brideName}` },
105
+ { search: /Titas and Sukanya Wedding/g, replace: `${config.groomName} and ${config.brideName} Wedding` },
106
+ { search: /Titas & Sukanya Wedding/g, replace: `${config.groomName} & ${config.brideName} Wedding` },
101
107
  // Code-level replacements for exported components/functions
102
108
  { search: /TitasLayout/g, replace: `${config.groomName}Layout` },
103
109
  { search: /SukanyaLayout/g, replace: `${config.brideName}Layout` },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@titas_mallick/wedding-site-gen",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "A comprehensive AI-powered wedding website generator based on Next.js, Firebase, and Gemini AI.",
5
5
  "keywords": [
6
6
  "wedding",