@titas_mallick/wedding-site-gen 2.0.1 → 2.0.3

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,51 +1,43 @@
1
1
  # 💍 Wedding Website Generator v2.0 (AI-Powered)
2
2
 
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.
3
+ > **The ultimate digital companion for your special day.** Scaffold, personalize, and deploy a feature-rich wedding application in minutes.
4
4
 
5
5
  ---
6
6
 
7
- ## 🚀 Phase 1: Generation (The A-B-C Guide)
7
+ ## 🚀 Phase 1: Rapid Generation
8
8
 
9
- ### Step A: Initialize Your Project
10
- Run the following command in your terminal to start the interactive setup:
9
+ ### Initialize Your Project
10
+ Run the command below to start the interactive CLI:
11
11
  ```bash
12
12
  npx @titas_mallick/wedding-site-gen
13
13
  ```
14
14
 
15
- ### Step B: CLI Prompt Reference
16
- The generator will ask you several questions. Here is how to answer them:
15
+ ### CLI Prompt Reference
16
+ Answer the prompts to pre-configure your site's identity:
17
17
 
18
18
  | Prompt | Example Input | Purpose |
19
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. |
20
+ | **Groom's Names** | `Titas`, `Titas Mallick` | Sets URLs and bios. |
21
+ | **Bride's Names** | `Sukanya`, `Sukanya Saha` | Sets URLs and bios. |
22
+ | **Wedding Dates** | `January 23, 2026`, `2026-01-23` | Powers UI text and countdown logic. |
23
+ | **Admin Email** | `admin@wedding.com` | **Vital**: Log in with this email for admin tools. |
24
+ | **UPI ID** | `wedding@okaxis` | Generates the gift QR code. |
25
+ | **Website URL** | `https://our-wedding.com` | Used for SEO and email links. |
26
+ | **Wedding Hashtag** | `#TitasWedsSukanya` | Branding across the site. |
27
+ | **Visual Theme** | `1` (Pink & Gold) | Sets initial primary colors. |
32
28
 
33
29
  ---
34
30
 
35
- ## 🛠️ Phase 2: Infrastructure Setup
31
+ ## 🛠️ Phase 2: System Infrastructure
36
32
 
37
33
  ### 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.
34
+ 1. Create a project at [Firebase Console](https://console.firebase.google.com/).
35
+ 2. **Authentication**: Enable "Email/Password".
36
+ 3. **Firestore**: Create a database in "Production Mode".
37
+ 4. **Admin SDK**: Go to **Project Settings** > **Service Accounts** > **Generate New Private Key**. Use these values for `FIREBASE_ADMIN` env vars.
45
38
 
46
39
  ### 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
-
40
+ Deploy these rules in the Firebase console to ensure data integrity:
49
41
  ```javascript
50
42
  rules_version = '2';
51
43
  service cloud.firestore {
@@ -54,93 +46,95 @@ service cloud.firestore {
54
46
  match /song_requests/{requestId} { allow read, write: if true; }
55
47
  match /guestbook/{entryId} { allow read, write: if true; }
56
48
  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;
49
+ match /email-reminders/{reminderId} { allow read: if true; allow write: if request.auth != null; }
50
+ match /{document=**} { allow read: if true; allow write: if request.auth != null; }
51
+ }
52
+ }
53
+ ```
54
+
55
+ ### 3. Media & Automation
56
+ - **Cloudinary**: Create an "Unsigned" upload preset named `wedding`.
57
+ - **Resend**: Generate an API key for automated email reminders.
58
+ - **Google Gemini**: Get an API key from [Google AI Studio](https://aistudio.google.com/).
59
+
60
+ ---
61
+
62
+ ## 🎨 Phase 3: Theming & Personalization
63
+
64
+ ### 1. Visual Theming (Tailwind)
65
+ The site's colors are centralized in `tailwind.config.js`. You can change the primary wedding palette here:
66
+ ```javascript
67
+ // tailwind.config.js
68
+ colors: {
69
+ wedding: {
70
+ pink: {
71
+ 500: '#ec4899', // Change this to your primary color
72
+ },
73
+ gold: {
74
+ 400: '#d99e43', // Change this to your accent color
64
75
  }
65
76
  }
66
77
  }
67
78
  ```
68
79
 
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.
80
+ ### 2. Asset Mapping (`/public/`)
81
+ Replace placeholders with your own media. **Maintain exact filenames.**
73
82
 
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`.
83
+ | File | Context |
84
+ | :--- | :--- |
85
+ | `bride.jpg` | Main Bride portrait (used in /couple). |
86
+ | `groom.jpg` | Main Groom portrait (used in /couple). |
87
+ | `qr.png` | Your UPI QR code. |
88
+ | `/Images/19.jpg` - `22.jpg` | Specific timeline milestones. |
89
+ | `/Images/Patipatra.jpeg` | Date-fixing ceremony photo. |
90
+ | `/Images/*.jpg` | **Bulk Upload**: Any extra images here auto-populate the masonry gallery. |
77
91
 
78
92
  ---
79
93
 
80
- ## 🔐 Phase 3: Environment Configuration
94
+ ## 💻 Phase 4: Code-Level Customization
81
95
 
82
- Create a `.env.local` file in your generated project root and populate it:
96
+ ### 1. Modifying the "Our Story" Section
97
+ The narrative is located in `components/OurStory.tsx`. It uses standard React/Tailwind. Edit the `<p>` tags to write your own journey.
83
98
 
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
- ```
99
+ ### 2. Adding/Removing Navigation Items
100
+ Update `config/site.ts` to add new routes or hide existing ones from the navbar and mobile menu.
101
+
102
+ ### 3. Tweaking AI Bot Behavior
103
+ Go to `components/ConciergeBot.tsx` and find the `systemInstruction` variable. You can change the bot's "personality" or add more specific wedding facts.
111
104
 
112
105
  ---
113
106
 
114
- ## 🎨 Phase 4: Asset Personalization
107
+ ## 🎮 Phase 5: Admin & Management
115
108
 
116
- Replace the files in `/public/` keeping the exact filenames:
109
+ ### Guest Management Dashboard (`/invitation/maker`)
110
+ Log in with your **Admin Email** to access:
111
+ - **Guest List**: Create unique invitation IDs.
112
+ - **Personalized Links**: Give every family a unique URL: `yoursite.com/invitation/[guest-id]`.
113
+ - **RSVP Tracking**: Live view of attendance and meal choices.
117
114
 
118
- | Location | Filename | Purpose |
119
- | :--- | :--- | :--- |
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. |
115
+ ### OBS Live Overlay (`/updates/overlay`)
116
+ Use this route as a "Browser Source" in OBS for your venue screens:
117
+ - **Real-time News**: Scroling updates posted via `/updates/maker`.
118
+ - **Clock**: Synchronized event time.
119
+ - **Background**: Chroma-key green for transparency.
126
120
 
127
121
  ---
128
122
 
129
- ## 🚀 Phase 5: Deployment & Automation
123
+ ## 🚀 Phase 6: Deployment
130
124
 
131
- ### Vercel Deployment
132
- 1. Push your code to **GitHub**.
133
- 2. Connect your repository to [Vercel](https://vercel.com/).
134
- 3. **Important**: Add all your `.env.local` variables into the Vercel **Environment Variables** settings.
125
+ ### Vercel (Recommended)
126
+ 1. Push your code to GitHub.
127
+ 2. Import project to Vercel.
128
+ 3. Add all variables from `.env.local` to Vercel **Environment Variables**.
135
129
 
136
- ### Automated Reminders (Cron Job)
137
- To send daily reminders to guests (e.g., from Jan 10th to Jan 26th):
138
- 1. In Vercel, go to the **Cron** tab (or use GitHub Actions).
139
- 2. Set up a job to call: `GET /api/email-reminders`
140
- 3. Header: `Authorization: Bearer YOUR_CRON_SECRET`
141
- 4. Schedule: `0 10 10-26 1 *` (10 AM daily).
130
+ ### Automated Guest Reminders
131
+ Set up a Cron Job (Vercel or GitHub Actions) to trigger:
132
+ - **URL**: `YOUR_SITE/api/email-reminders`
133
+ - **Method**: `GET`
134
+ - **Header**: `Authorization: Bearer YOUR_CRON_SECRET`
135
+ - **Cron**: `0 10 10-26 1 *` (10 AM daily during Jan).
142
136
 
143
137
  ---
144
138
 
145
139
  ## 📜 License
146
- MIT License. Created with ❤️ for your special day.
140
+ MIT License. Built with ❤️ for the community.
@@ -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.1",
3
+ "version": "2.0.3",
4
4
  "description": "A comprehensive AI-powered wedding website generator based on Next.js, Firebase, and Gemini AI.",
5
5
  "keywords": [
6
6
  "wedding",