@titas_mallick/wedding-site-gen 2.0.1 → 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 +45 -1
- package/app/invitation/[slug]/layout.tsx +9 -9
- package/app/layout.tsx +11 -13
- package/cli.mjs +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -126,7 +126,51 @@ Replace the files in `/public/` keeping the exact filenames:
|
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
129
|
-
##
|
|
129
|
+
## 🤖 Phase 5: Advanced AI Features
|
|
130
|
+
|
|
131
|
+
### 1. The Wedding Concierge (Gemini 2.5)
|
|
132
|
+
Guests can chat with an AI assistant trained on your wedding data.
|
|
133
|
+
- **Setup**: Provide your `NEXT_PUBLIC_GEMINI_API_KEY` in `.env.local`.
|
|
134
|
+
- **Knowledge**: The bot automatically knows your venues, dates, and story based on the info you provided during Phase 1.
|
|
135
|
+
|
|
136
|
+
### 2. Automated Email Reminders
|
|
137
|
+
Send beautiful, automated reminders to your guest list.
|
|
138
|
+
- **Endpoint**: `YOUR_SITE_URL/api/email-reminders`
|
|
139
|
+
- **Auth**: Requires `Authorization: Bearer [YOUR_CRON_SECRET]`.
|
|
140
|
+
- **Cron Suggestion**: `0 10 10-26 1 *` (Runs daily at 10 AM during the wedding month).
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
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)
|
|
165
|
+
|
|
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.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 🚀 Phase 7: Deployment & Automation
|
|
130
174
|
|
|
131
175
|
### Vercel Deployment
|
|
132
176
|
1. Push your code to **GitHub**.
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { Metadata } from "next";
|
|
2
2
|
|
|
3
3
|
export const metadata: Metadata = {
|
|
4
|
-
title: "Wedding Invitation |
|
|
4
|
+
title: "Wedding Invitation | Groom & Bride",
|
|
5
5
|
description:
|
|
6
|
-
"We cordially invite you to celebrate the wedding of
|
|
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! |
|
|
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: "
|
|
12
|
-
siteName: "
|
|
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: "
|
|
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: "
|
|
20
|
+
alt: "Wedding Invitation",
|
|
21
21
|
},
|
|
22
22
|
],
|
|
23
23
|
},
|
|
24
24
|
twitter: {
|
|
25
25
|
card: "summary_large_image",
|
|
26
|
-
title: "Wedding Invitation |
|
|
26
|
+
title: "Wedding Invitation | Groom & Bride",
|
|
27
27
|
description: "Join us in celebrating our special day.",
|
|
28
|
-
images: ["
|
|
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("
|
|
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
|
-
"
|
|
26
|
-
"
|
|
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: "
|
|
36
|
-
url: "
|
|
33
|
+
name: "Groom Name",
|
|
34
|
+
url: "your-wedding-site.com",
|
|
37
35
|
},
|
|
38
36
|
],
|
|
39
|
-
creator: "
|
|
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: "
|
|
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: "
|
|
55
|
+
url: "your-wedding-site.com/invite.jpeg",
|
|
58
56
|
width: 1200,
|
|
59
57
|
height: 630,
|
|
60
|
-
alt: "
|
|
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: ["
|
|
69
|
-
creator: "@
|
|
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` },
|