@titas_mallick/wedding-site-gen 1.1.0 → 2.0.0

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.
Files changed (123) hide show
  1. package/README.md +70 -184
  2. package/app/api/email-reminders/route.ts +240 -0
  3. package/app/couple/page.tsx +4 -4
  4. package/app/game/page.tsx +298 -0
  5. package/app/guestbook/page.tsx +270 -152
  6. package/app/invitation/[slug]/layout.tsx +4 -2
  7. package/app/invitation/[slug]/page.tsx +303 -84
  8. package/app/invitation/actions.ts +49 -0
  9. package/app/invitation/maker/auth.js +1 -1
  10. package/app/invitation/maker/guestAdder.js +4 -0
  11. package/app/invitation/maker/guestShower.js +39 -8
  12. package/app/invitation/maker/layout.tsx +1 -1
  13. package/app/invitation/maker/page.js +9 -7
  14. package/app/invitation/maker/rsvpViewer.js +90 -8
  15. package/app/layout.tsx +40 -14
  16. package/app/mark-the-dates/page.tsx +8 -2
  17. package/app/page.tsx +7 -1
  18. package/app/providers.tsx +1 -1
  19. package/app/sagun/page.tsx +224 -76
  20. package/app/song-requests/page.tsx +242 -105
  21. package/app/sukanya/page.tsx +9 -13
  22. package/app/titas/page.tsx +8 -24
  23. package/app/travel-guide/page.tsx +361 -120
  24. package/app/updates/maker/page.js +2 -2
  25. package/app/updates/overlay/page.tsx +65 -30
  26. package/app/updates/page.js +3 -3
  27. package/cli.mjs +26 -15
  28. package/components/AdminAuth.tsx +145 -0
  29. package/components/AdminLinks.tsx +120 -0
  30. package/components/ConciergeBot.tsx +104 -44
  31. package/components/CountdownTimer.tsx +37 -15
  32. package/components/Gallery.tsx +1 -1
  33. package/components/LiveVideos.tsx +27 -15
  34. package/components/OurStory.tsx +1 -1
  35. package/components/SchemaMarkup.tsx +74 -0
  36. package/components/certificate.jsx +287 -300
  37. package/components/footer.tsx +2 -0
  38. package/components/hero.tsx +47 -4
  39. package/components/icons.tsx +45 -0
  40. package/components/importantNews.js +168 -168
  41. package/components/navbar.tsx +113 -18
  42. package/components/updates.tsx +36 -26
  43. package/config/firebase-admin.js +14 -17
  44. package/config/firebase.ts +4 -2
  45. package/config/site.ts +10 -2
  46. package/firestore.rules +6 -1
  47. package/next-sitemap.config.js +21 -0
  48. package/package.json +4 -3
  49. package/public/corner1-01.svg +0 -0
  50. package/public/love-birds.png +0 -0
  51. package/public/next.svg +0 -0
  52. package/public/pubqr.png +0 -0
  53. package/public/pw/sample.jpg +0 -0
  54. package/public/qr.png +0 -0
  55. package/public/sample.jpg +0 -0
  56. package/public/vercel.svg +0 -0
  57. package/vercel.json +1 -0
  58. package/.recover +0 -9
  59. package/next-env.d.ts +0 -6
  60. package/public/DCV.gif +0 -0
  61. package/public/DCV2.gif +0 -0
  62. package/public/DCV3.gif +0 -0
  63. package/public/Images/1.jpg +0 -0
  64. package/public/Images/11.jpg +0 -0
  65. package/public/Images/12.jpg +0 -0
  66. package/public/Images/13.jpg +0 -0
  67. package/public/Images/14.jpg +0 -0
  68. package/public/Images/15.jpg +0 -0
  69. package/public/Images/16.jpg +0 -0
  70. package/public/Images/17.jpg +0 -0
  71. package/public/Images/18.jpg +0 -0
  72. package/public/Images/19.jpg +0 -0
  73. package/public/Images/2.jpg +0 -0
  74. package/public/Images/21.jpg +0 -0
  75. package/public/Images/22.jpg +0 -0
  76. package/public/Images/3.jpg +0 -0
  77. package/public/Images/4.jpg +0 -0
  78. package/public/Images/5.jpg +0 -0
  79. package/public/Images/6.jpg +0 -0
  80. package/public/Images/7.jpg +0 -0
  81. package/public/Images/8.jpg +0 -0
  82. package/public/Images/9.jpg +0 -0
  83. package/public/Images/9b.jpg +0 -0
  84. package/public/Images/Patipatra.jpeg +0 -0
  85. package/public/audio (1).mp3 +0 -0
  86. package/public/audio (2).mp3 +0 -0
  87. package/public/bride.jpg +0 -0
  88. package/public/groom.jpg +0 -0
  89. package/public/invite.png +0 -0
  90. package/public/pw/001.jpg +0 -0
  91. package/public/pw/002.jpg +0 -0
  92. package/public/pw/003.jpg +0 -0
  93. package/public/pw/004.jpg +0 -0
  94. package/public/pw/005.jpg +0 -0
  95. package/public/pw/006.jpg +0 -0
  96. package/public/pw/007.jpg +0 -0
  97. package/public/pw/008.jpg +0 -0
  98. package/public/pw/009.jpg +0 -0
  99. package/public/pw/010.jpg +0 -0
  100. package/public/pw/011.jpg +0 -0
  101. package/public/pw/012.jpg +0 -0
  102. package/public/pw/013.jpg +0 -0
  103. package/public/pw/014.jpg +0 -0
  104. package/public/pw/015.jpg +0 -0
  105. package/public/pw/016.jpg +0 -0
  106. package/public/pw/017.jpg +0 -0
  107. package/public/pw/018.jpg +0 -0
  108. package/public/pw/019.jpg +0 -0
  109. package/public/pw/020.jpg +0 -0
  110. package/public/pw/021.jpg +0 -0
  111. package/public/pw/022.jpg +0 -0
  112. package/public/pw/023.jpg +0 -0
  113. package/public/pw/024.jpg +0 -0
  114. package/public/pw/025.jpg +0 -0
  115. package/public/pw/026.jpg +0 -0
  116. package/public/pw/027.jpg +0 -0
  117. package/public/pw/028.jpg +0 -0
  118. package/public/pw/029.jpg +0 -0
  119. package/public/pw/030.jpg +0 -0
  120. package/public/pw/031.jpg +0 -0
  121. package/public/pw/032.jpg +0 -0
  122. package/tsconfig.tsbuildinfo +0 -1
  123. /package/public/Images/{20.jpg → sample.jpg} +0 -0
@@ -11,21 +11,22 @@ import {
11
11
  } from "firebase/firestore";
12
12
  import { motion, AnimatePresence } from "framer-motion";
13
13
  import Link from "next/link";
14
- import { Chip } from "@heroui/react";
15
14
 
16
- import firebaseApp from "@/config/firebase";
17
- import { fontMono } from "@/config/fonts";
18
15
  import { ClockIcon } from "./icons";
19
16
 
17
+ import firebaseApp from "@/config/firebase";
18
+
20
19
  const db = getFirestore(firebaseApp());
21
20
 
22
21
  const timeAgo = (timestamp: any) => {
23
22
  if (!timestamp?.toDate) return "Just now";
24
23
  const now = new Date();
25
24
  const diff = (now.getTime() - timestamp.toDate().getTime()) / 1000;
25
+
26
26
  if (diff < 60) return `${Math.floor(diff)}s ago`;
27
27
  if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;
28
28
  if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`;
29
+
29
30
  return `${Math.floor(diff / 86400)}d ago`;
30
31
  };
31
32
 
@@ -37,9 +38,9 @@ const Updates = () => {
37
38
  const q = query(
38
39
  collection(db, "updates"),
39
40
  orderBy("createdAt", "desc"),
40
- limit(1)
41
+ limit(1),
41
42
  );
42
-
43
+
43
44
  const unsubscribe = onSnapshot(q, (snapshot) => {
44
45
  if (!snapshot.empty) {
45
46
  setLatestUpdate({
@@ -58,55 +59,64 @@ const Updates = () => {
58
59
  return (
59
60
  <AnimatePresence>
60
61
  <motion.div
61
- initial={{ opacity: 0, y: -20 }}
62
62
  animate={{ opacity: 1, y: 0 }}
63
- exit={{ opacity: 0, y: -20 }}
64
63
  className="w-full max-w-3xl mx-auto px-4 z-50"
64
+ exit={{ opacity: 0, y: -20 }}
65
+ initial={{ opacity: 0, y: -20 }}
65
66
  >
66
67
  <div className="relative group">
67
68
  {/* Animated Background Glow */}
68
- <div className="absolute -inset-0.5 bg-gradient-to-r from-wedding-pink-500 to-wedding-gold-500 rounded-full blur opacity-20 group-hover:opacity-40 transition duration-1000 group-hover:duration-200"></div>
69
-
70
- <Link
71
- href="/updates"
69
+ <div className="absolute -inset-0.5 bg-gradient-to-r from-wedding-pink-500 to-wedding-gold-500 rounded-full blur opacity-20 group-hover:opacity-40 transition duration-1000 group-hover:duration-200" />
70
+
71
+ <Link
72
72
  className="relative flex items-center gap-2 sm:gap-3 bg-white/90 dark:bg-zinc-900/90 backdrop-blur-xl border border-wedding-gold-200/50 dark:border-wedding-gold-800/50 p-1 sm:p-1.5 pr-4 sm:pr-6 rounded-full shadow-xl transition-all duration-300 group-hover:border-wedding-pink-400"
73
+ href="/updates"
73
74
  >
74
75
  <div className="flex items-center bg-wedding-pink-500 text-white px-2 sm:px-3 py-1 rounded-full text-[9px] sm:text-[10px] font-black tracking-widest shadow-lg shadow-wedding-pink-500/20">
75
76
  UPDATE
76
77
  </div>
77
-
78
+
78
79
  <p className="flex-1 text-xs sm:text-sm font-semibold text-zinc-800 dark:text-zinc-100 truncate">
79
80
  {latestUpdate.text}
80
81
  </p>
81
82
 
82
83
  <div className="hidden sm:flex items-center gap-4">
83
84
  <div className="flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-zinc-400 font-mono whitespace-nowrap border-x border-default-200 dark:border-default-800 px-4">
84
- <ClockIcon size={12} className="text-wedding-gold-500" />
85
+ <ClockIcon className="text-wedding-gold-500" size={12} />
85
86
  {timeAgo(latestUpdate.createdAt)}
86
87
  </div>
87
-
88
+
88
89
  <div className="flex items-center gap-1 text-xs font-bold text-wedding-pink-500 whitespace-nowrap group-hover:translate-x-1 transition-transform">
89
90
  View All
90
- <svg
91
- width="14"
92
- height="14"
93
- viewBox="0 0 24 24"
94
- fill="none"
95
- stroke="currentColor"
96
- strokeWidth="3"
97
- strokeLinecap="round"
91
+ <svg
92
+ fill="none"
93
+ height="14"
94
+ stroke="currentColor"
95
+ strokeLinecap="round"
98
96
  strokeLinejoin="round"
97
+ strokeWidth="3"
98
+ viewBox="0 0 24 24"
99
+ width="14"
99
100
  >
100
- <polyline points="9 18 15 12 9 6"></polyline>
101
+ <polyline points="9 18 15 12 9 6" />
101
102
  </svg>
102
103
  </div>
103
104
  </div>
104
105
 
105
106
  {/* Mobile Arrow */}
106
107
  <div className="sm:hidden text-wedding-pink-500 flex-shrink-0">
107
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round">
108
- <polyline points="9 18 15 12 9 6"></polyline>
109
- </svg>
108
+ <svg
109
+ fill="none"
110
+ height="16"
111
+ stroke="currentColor"
112
+ strokeLinecap="round"
113
+ strokeLinejoin="round"
114
+ strokeWidth="3"
115
+ viewBox="0 0 24 24"
116
+ width="16"
117
+ >
118
+ <polyline points="9 18 15 12 9 6" />
119
+ </svg>
110
120
  </div>
111
121
  </Link>
112
122
  </div>
@@ -1,17 +1,14 @@
1
- const adminCred = {
2
- type: "service_account",
3
- project_id: "wedding-forever-titas-sukanya",
4
- private_key_id: "6d71529b4b898a03b0534024eb58ddabdc76548d",
5
- private_key:
6
- "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5hjvkXTkczAT3\nkoLvJdxeXt/1V4rAp0xpNb9xoJDME74ciig1oUUusZ/l6v0KD9Li4RInS8evb55W\n9OsPUwz0N5TUnKmmJ3Kz22pG6Cz13M9kOnlpkbrD14aU9M34OWUpmKwMpqc1wHHJ\nTRX7VQ11HQ/OGX6SsJkX0JDaaRenH4IMz1c2+Ci+6p2LpzMaM5yiw7l34aeHWWjV\nFffeFmqHMKhIcS0Ib1yTv8cjhm731ouYXztDYApAdu4DHENrZm2ygyFoAQYnp2L3\n/GimwDKPGDsBLZEOyucvPzYvWW6d/jqWfgFaxSX2hrtJ8dNwD340Wz8H+Zc1VRkM\n8mUwU+ExAgMBAAECggEABZScwevD8gfOW8a+cC8gB9QBbJcrh0wA/REu0bOAvNgY\nhIdAr7b1e8gVWox3prvUc2/4ZHzfuXk5YWg7QdoVA6uVqyeN5X+Tmwa4larE33MQ\nPKA9qAfy1D1Ba8L0Bx7C2j4gvr4B6ENXqN8hZXlTeaMG0gOWTmydePKUc4gXEWHQ\nxwQtQN1e6shlhMfYT0KFT+B0l6C1J1ZvVKZmZsvgUE9EcJrPu5wOhIk8mGu54BYb\nTeeYjKCGgSe6l8THFR5O5fwNk80nXL12kZfzWqGKvrkeIeILtzWMi95pKrwSYFoQ\n3Zzk+Way0nAXW2DtGltc3K0MV4lpgEXcmpg5fyXxmQKBgQDno3XFzVI4mnCk3PN0\n5pjWmVoqrPJMtDUZma3tWSdDwYtbBXgz0o3zuJ8qGHog7vmiqVG7/cwp199Bmrrf\nzdpx5B2NUijp95cmBt5nlX09DYoRatubhfsmdBH6pDqvDmNbV1aYgKFypaODgLHi\n5W3BBQO/UN1XB8FfjS3iEcyD6wKBgQDNCTcTklf2h27v9W3ovTyBrZZXolYEVMwA\n6iXvWk24MU/Xn7RGue78NwO5T5K3VU9wrkPOi3oEYNtoQKNVsMJDc6FI9TKEAQhz\nFjCq7+aUKYbzx/2Z8vXglFqMsBl/AhXSj99Nt0rjvI3LuUiI1QZwj8wRmnx5GSRG\nup35jDRUUwKBgEinkK02NW/joSlU1Ff6bD4DY7C3BljgvTcGaPNlX1d1QYyPLqCy\njiu/4MyHWOczjcFjcmuQs5T8TN569dp06uuGLW7CMmsQaaxXwzKiROH9eSz1Y2Ro\npdnt1iXTlUSLMsbXoiW7Uuhu49a/awxMAhzkwcQkTQibOiAKXDXod0l5AoGACgVQ\nRsmZOPhHiLzDAWP2SBQ2y9OoRo/qZIUNE5SjRcRLNaudgPNnZbY+nVjxP7qQpl4t\n/DM+5GXjc0Xtdaus4uUM1eb98Auo4Q8Nk90jtMwOx21XzKVeNPqrLkMRC+8LJ/5W\nGJNDurulZnaIv/9BUFEG1TlqqfR7nGVUgTTD/fcCgYEAwSo1mr03BIGOENuhxv7C\naSYSUjVEH6kdNo2nrK899ez2OxXHdfrvCg/I6Vpz2qFDQ7ZrENYeoljQzlFwYSzK\n2H6jZnt/6uZ7mXENZgxUXscrlu7znn0eQ1xo+acqIK03YTzvh5UnoBpvfy12bEiV\nlBOrdL+oEYBSHrhq38XQG80=\n-----END PRIVATE KEY-----\n",
7
- client_email:
8
- "firebase-adminsdk-fbsvc@wedding-forever-titas-sukanya.iam.gserviceaccount.com",
9
- client_id: "108512120143007143022",
10
- auth_uri: "https://accounts.google.com/o/oauth2/auth",
11
- token_uri: "https://oauth2.googleapis.com/token",
12
- auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
13
- client_x509_cert_url:
14
- "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40wedding-forever-titas-sukanya.iam.gserviceaccount.com",
15
- universe_domain: "googleapis.com",
16
- };
17
- export default adminCred;
1
+ const adminCred = {
2
+ type: "service_account",
3
+ project_id: process.env.FIREBASE_ADMIN_PROJECT_ID,
4
+ private_key_id: process.env.FIREBASE_ADMIN_PRIVATE_KEY_ID,
5
+ private_key: process.env.FIREBASE_ADMIN_PRIVATE_KEY?.replace(/\\n/g, '\n'),
6
+ client_email: process.env.FIREBASE_ADMIN_CLIENT_EMAIL,
7
+ client_id: process.env.FIREBASE_ADMIN_CLIENT_ID,
8
+ auth_uri: "https://accounts.google.com/o/oauth2/auth",
9
+ token_uri: "https://oauth2.googleapis.com/token",
10
+ auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
11
+ client_x509_cert_url: process.env.FIREBASE_ADMIN_CLIENT_X509_CERT_URL,
12
+ universe_domain: "googleapis.com",
13
+ };
14
+ export default adminCred;
@@ -15,6 +15,7 @@ const firebaseConfig = {
15
15
 
16
16
  const firebaseApp = (): FirebaseApp => {
17
17
  let app: FirebaseApp;
18
+
18
19
  if (!getApps().length) {
19
20
  app = initializeApp(firebaseConfig);
20
21
 
@@ -22,7 +23,7 @@ const firebaseApp = (): FirebaseApp => {
22
23
  getAnalytics(app);
23
24
  initializeAppCheck(app, {
24
25
  provider: new ReCaptchaV3Provider(
25
- process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY as string
26
+ process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY as string,
26
27
  ),
27
28
  isTokenAutoRefreshEnabled: true,
28
29
  });
@@ -30,7 +31,8 @@ const firebaseApp = (): FirebaseApp => {
30
31
  } else {
31
32
  app = getApp();
32
33
  }
34
+
33
35
  return app;
34
36
  };
35
37
 
36
- export default firebaseApp;
38
+ export default firebaseApp;
package/config/site.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export type SiteConfig = typeof siteConfig;
2
2
 
3
3
  export const siteConfig = {
4
- name: "Titas & Sukanya",
4
+ name: "Groom & Bride",
5
5
  description:
6
- "Join us in celebrating the wedding of Titas and Sukanya. Save the date and be part of our journey.",
6
+ "Join us in celebrating the wedding of Groom and Bride. Save the date and be part of our journey.",
7
7
  navItems: [
8
8
  {
9
9
  label: "Home",
@@ -33,6 +33,10 @@ export const siteConfig = {
33
33
  label: "Gallery",
34
34
  href: "/memories",
35
35
  },
36
+ {
37
+ label: "Game",
38
+ href: "/game",
39
+ },
36
40
  ],
37
41
  navMenuItems: [
38
42
  {
@@ -51,6 +55,10 @@ export const siteConfig = {
51
55
  label: "Guestbook",
52
56
  href: "/guestbook",
53
57
  },
58
+ {
59
+ label: "Game",
60
+ href: "/game",
61
+ },
54
62
  {
55
63
  label: "Gallery",
56
64
  href: "/memories",
package/firestore.rules CHANGED
@@ -17,10 +17,15 @@ service cloud.firestore {
17
17
  match /rsvps/{rsvpId} {
18
18
  allow read, write: if true;
19
19
  }
20
+ // Email reminders collection - public read, authenticated write only
21
+ match /email-reminders/{reminderId} {
22
+ allow read: if true;
23
+ allow write: if request.auth != null;
24
+ }
20
25
  // All other documents - read public, write authenticated only
21
26
  match /{document=**} {
22
27
  allow read: if true;
23
28
  allow write: if request.auth != null;
24
29
  }
25
30
  }
26
- }
31
+ }
@@ -0,0 +1,21 @@
1
+ /** @type {import('next-sitemap').IConfig} */
2
+ module.exports = {
3
+ siteUrl: 'https://www.titas-sukanya-for.life',
4
+ generateRobotsTxt: true,
5
+ exclude: [
6
+ '/invitation/maker',
7
+ '/updates/maker',
8
+ '/invitation/maker/*',
9
+ '/updates/maker/*',
10
+ '/admin', // just in case
11
+ ],
12
+ robotsTxtOptions: {
13
+ policies: [
14
+ {
15
+ userAgent: '*',
16
+ allow: '/',
17
+ disallow: ['/invitation/maker', '/updates/maker'],
18
+ },
19
+ ],
20
+ },
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@titas_mallick/wedding-site-gen",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "A comprehensive AI-powered wedding website generator based on Next.js, Firebase, and Gemini AI.",
5
5
  "keywords": [
6
6
  "wedding",
@@ -50,7 +50,8 @@
50
50
  "next": "^16.0.1",
51
51
  "next-themes": "^0.4.4",
52
52
  "react": "^18.3.1",
53
- "react-dom": "^18.3.1"
53
+ "react-dom": "^18.3.1",
54
+ "resend": "^6.6.0"
54
55
  },
55
56
  "devDependencies": {
56
57
  "@next/eslint-plugin-next": "15.0.4",
@@ -77,4 +78,4 @@
77
78
  "tailwindcss": "3.4.16",
78
79
  "typescript": "5.6.3"
79
80
  }
80
- }
81
+ }
Binary file
Binary file
package/public/next.svg CHANGED
Binary file
package/public/pubqr.png CHANGED
Binary file
Binary file
package/public/qr.png CHANGED
Binary file
Binary file
package/public/vercel.svg CHANGED
Binary file
package/vercel.json ADDED
@@ -0,0 +1 @@
1
+ {}
package/.recover DELETED
@@ -1,9 +0,0 @@
1
- NEXT_PUBLIC_PROJECTID=wedding-forever-titas-sukanya
2
- NEXT_PUBLIC_STORAGEBUCKET=wedding-forever-titas-sukanya.firebasestorage.app
3
- NEXT_PUBLIC_SENDERID=167546706421
4
- NEXT_PUBLIC_APPID=1:167546706421:web:3d30acd2d93399e38a28bc
5
- NEXT_PUBLIC_MEASUREMENTID=G-85Y3N7H008
6
- NEXT_PUBLIC_RECAPTCHA_SITE_KEY=3030842520057Cg*
7
- NEXT_PUBLIC_APIKEY=AIzaSyBdy2511gv-oTpNdxgTj6KBWVwzHCLsMs8
8
- NEXT_PUBLIC_AUTHDOMAIN=wedding-forever-titas-sukanya.firebaseapp.com
9
- NEXT_PUBLIC_GEMINI_API_KEY=AIzaSyD07qoS5JyslAJLKZ0xKZKCiuj5H5d_oSw
package/next-env.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /// <reference types="next" />
2
- /// <reference types="next/image-types/global" />
3
- import "./.next/dev/types/routes.d.ts";
4
-
5
- // NOTE: This file should not be edited
6
- // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
package/public/DCV.gif DELETED
Binary file
package/public/DCV2.gif DELETED
Binary file
package/public/DCV3.gif DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/public/bride.jpg DELETED
Binary file
package/public/groom.jpg DELETED
Binary file
package/public/invite.png DELETED
Binary file
package/public/pw/001.jpg DELETED
Binary file
package/public/pw/002.jpg DELETED
Binary file
package/public/pw/003.jpg DELETED
Binary file
package/public/pw/004.jpg DELETED
Binary file
package/public/pw/005.jpg DELETED
Binary file
package/public/pw/006.jpg DELETED
Binary file
package/public/pw/007.jpg DELETED
Binary file
package/public/pw/008.jpg DELETED
Binary file
package/public/pw/009.jpg DELETED
Binary file
package/public/pw/010.jpg DELETED
Binary file
package/public/pw/011.jpg DELETED
Binary file
package/public/pw/012.jpg DELETED
Binary file
package/public/pw/013.jpg DELETED
Binary file
package/public/pw/014.jpg DELETED
Binary file
package/public/pw/015.jpg DELETED
Binary file
package/public/pw/016.jpg DELETED
Binary file
package/public/pw/017.jpg DELETED
Binary file
package/public/pw/018.jpg DELETED
Binary file
package/public/pw/019.jpg DELETED
Binary file
package/public/pw/020.jpg DELETED
Binary file
package/public/pw/021.jpg DELETED
Binary file
package/public/pw/022.jpg DELETED
Binary file
package/public/pw/023.jpg DELETED
Binary file
package/public/pw/024.jpg DELETED
Binary file
package/public/pw/025.jpg DELETED
Binary file
package/public/pw/026.jpg DELETED
Binary file
package/public/pw/027.jpg DELETED
Binary file
package/public/pw/028.jpg DELETED
Binary file
package/public/pw/029.jpg DELETED
Binary file
package/public/pw/030.jpg DELETED
Binary file
package/public/pw/031.jpg DELETED
Binary file
package/public/pw/032.jpg DELETED
Binary file