@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.
- package/README.md +70 -184
- package/app/api/email-reminders/route.ts +240 -0
- package/app/couple/page.tsx +4 -4
- package/app/game/page.tsx +298 -0
- package/app/guestbook/page.tsx +270 -152
- package/app/invitation/[slug]/layout.tsx +4 -2
- package/app/invitation/[slug]/page.tsx +303 -84
- package/app/invitation/actions.ts +49 -0
- package/app/invitation/maker/auth.js +1 -1
- package/app/invitation/maker/guestAdder.js +4 -0
- package/app/invitation/maker/guestShower.js +39 -8
- package/app/invitation/maker/layout.tsx +1 -1
- package/app/invitation/maker/page.js +9 -7
- package/app/invitation/maker/rsvpViewer.js +90 -8
- package/app/layout.tsx +40 -14
- package/app/mark-the-dates/page.tsx +8 -2
- package/app/page.tsx +7 -1
- package/app/providers.tsx +1 -1
- package/app/sagun/page.tsx +224 -76
- package/app/song-requests/page.tsx +242 -105
- package/app/sukanya/page.tsx +9 -13
- package/app/titas/page.tsx +8 -24
- package/app/travel-guide/page.tsx +361 -120
- package/app/updates/maker/page.js +2 -2
- package/app/updates/overlay/page.tsx +65 -30
- package/app/updates/page.js +3 -3
- package/cli.mjs +26 -15
- package/components/AdminAuth.tsx +145 -0
- package/components/AdminLinks.tsx +120 -0
- package/components/ConciergeBot.tsx +104 -44
- package/components/CountdownTimer.tsx +37 -15
- package/components/Gallery.tsx +1 -1
- package/components/LiveVideos.tsx +27 -15
- package/components/OurStory.tsx +1 -1
- package/components/SchemaMarkup.tsx +74 -0
- package/components/certificate.jsx +287 -300
- package/components/footer.tsx +2 -0
- package/components/hero.tsx +47 -4
- package/components/icons.tsx +45 -0
- package/components/importantNews.js +168 -168
- package/components/navbar.tsx +113 -18
- package/components/updates.tsx +36 -26
- package/config/firebase-admin.js +14 -17
- package/config/firebase.ts +4 -2
- package/config/site.ts +10 -2
- package/firestore.rules +6 -1
- package/next-sitemap.config.js +21 -0
- package/package.json +4 -3
- package/public/corner1-01.svg +0 -0
- package/public/love-birds.png +0 -0
- package/public/next.svg +0 -0
- package/public/pubqr.png +0 -0
- package/public/pw/sample.jpg +0 -0
- package/public/qr.png +0 -0
- package/public/sample.jpg +0 -0
- package/public/vercel.svg +0 -0
- package/vercel.json +1 -0
- package/.recover +0 -9
- package/next-env.d.ts +0 -6
- package/public/DCV.gif +0 -0
- package/public/DCV2.gif +0 -0
- package/public/DCV3.gif +0 -0
- package/public/Images/1.jpg +0 -0
- package/public/Images/11.jpg +0 -0
- package/public/Images/12.jpg +0 -0
- package/public/Images/13.jpg +0 -0
- package/public/Images/14.jpg +0 -0
- package/public/Images/15.jpg +0 -0
- package/public/Images/16.jpg +0 -0
- package/public/Images/17.jpg +0 -0
- package/public/Images/18.jpg +0 -0
- package/public/Images/19.jpg +0 -0
- package/public/Images/2.jpg +0 -0
- package/public/Images/21.jpg +0 -0
- package/public/Images/22.jpg +0 -0
- package/public/Images/3.jpg +0 -0
- package/public/Images/4.jpg +0 -0
- package/public/Images/5.jpg +0 -0
- package/public/Images/6.jpg +0 -0
- package/public/Images/7.jpg +0 -0
- package/public/Images/8.jpg +0 -0
- package/public/Images/9.jpg +0 -0
- package/public/Images/9b.jpg +0 -0
- package/public/Images/Patipatra.jpeg +0 -0
- package/public/audio (1).mp3 +0 -0
- package/public/audio (2).mp3 +0 -0
- package/public/bride.jpg +0 -0
- package/public/groom.jpg +0 -0
- package/public/invite.png +0 -0
- package/public/pw/001.jpg +0 -0
- package/public/pw/002.jpg +0 -0
- package/public/pw/003.jpg +0 -0
- package/public/pw/004.jpg +0 -0
- package/public/pw/005.jpg +0 -0
- package/public/pw/006.jpg +0 -0
- package/public/pw/007.jpg +0 -0
- package/public/pw/008.jpg +0 -0
- package/public/pw/009.jpg +0 -0
- package/public/pw/010.jpg +0 -0
- package/public/pw/011.jpg +0 -0
- package/public/pw/012.jpg +0 -0
- package/public/pw/013.jpg +0 -0
- package/public/pw/014.jpg +0 -0
- package/public/pw/015.jpg +0 -0
- package/public/pw/016.jpg +0 -0
- package/public/pw/017.jpg +0 -0
- package/public/pw/018.jpg +0 -0
- package/public/pw/019.jpg +0 -0
- package/public/pw/020.jpg +0 -0
- package/public/pw/021.jpg +0 -0
- package/public/pw/022.jpg +0 -0
- package/public/pw/023.jpg +0 -0
- package/public/pw/024.jpg +0 -0
- package/public/pw/025.jpg +0 -0
- package/public/pw/026.jpg +0 -0
- package/public/pw/027.jpg +0 -0
- package/public/pw/028.jpg +0 -0
- package/public/pw/029.jpg +0 -0
- package/public/pw/030.jpg +0 -0
- package/public/pw/031.jpg +0 -0
- package/public/pw/032.jpg +0 -0
- package/tsconfig.tsbuildinfo +0 -1
- /package/public/Images/{20.jpg → sample.jpg} +0 -0
|
@@ -1,300 +1,287 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { motion } from "framer-motion";
|
|
4
|
-
import Image from "next/image";
|
|
5
|
-
import {
|
|
6
|
-
Card,
|
|
7
|
-
CardBody,
|
|
8
|
-
CardFooter,
|
|
9
|
-
Divider,
|
|
10
|
-
Button,
|
|
11
|
-
Link,
|
|
12
|
-
} from "@heroui/react";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
"
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
</p>
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
<
|
|
182
|
-
{certificateData.parties.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
</p>
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
{
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
{certificateData.
|
|
219
|
-
</p>
|
|
220
|
-
<
|
|
221
|
-
<
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
</
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
</
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
</
|
|
269
|
-
</div>
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
size="sm"
|
|
289
|
-
color="primary"
|
|
290
|
-
variant="flat"
|
|
291
|
-
>
|
|
292
|
-
Verify Certificate
|
|
293
|
-
</Button>
|
|
294
|
-
</div>
|
|
295
|
-
</CardFooter>
|
|
296
|
-
</Card>
|
|
297
|
-
</motion.div>
|
|
298
|
-
</div>
|
|
299
|
-
);
|
|
300
|
-
}
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { motion } from "framer-motion";
|
|
4
|
+
import Image from "next/image";
|
|
5
|
+
import {
|
|
6
|
+
Card,
|
|
7
|
+
CardBody,
|
|
8
|
+
CardFooter,
|
|
9
|
+
Divider,
|
|
10
|
+
Button,
|
|
11
|
+
Link,
|
|
12
|
+
} from "@heroui/react";
|
|
13
|
+
|
|
14
|
+
const certificateData = {
|
|
15
|
+
documentHeader: {
|
|
16
|
+
government: "Government of State",
|
|
17
|
+
department: "Law Department",
|
|
18
|
+
office: "Office of the Registrar General of Marriages",
|
|
19
|
+
certificateTitle: "Certificate of Marriage",
|
|
20
|
+
legalAct: "Under Section 13 of Act XLIII of 1954",
|
|
21
|
+
certificateNumber: "XX********************-2025-******",
|
|
22
|
+
issueDate: "01-01-2026",
|
|
23
|
+
declarationText:
|
|
24
|
+
"The following is the extract of SOLEMNISATION OF MARRIAGE between the parties who made declaration u/s 11 of the Act.",
|
|
25
|
+
},
|
|
26
|
+
parties: {
|
|
27
|
+
groom: {
|
|
28
|
+
name: "Groom Name",
|
|
29
|
+
fatherName: "Father Name",
|
|
30
|
+
motherName: "Mother Name",
|
|
31
|
+
dateOfBirth: "DD-MM-YYYY",
|
|
32
|
+
aadhaarNo: "********0000",
|
|
33
|
+
presentAddress:
|
|
34
|
+
"SAMPLE ADDRESS, CITY, DIST, STATE, INDIA, PIN-000000",
|
|
35
|
+
permanentAddress:
|
|
36
|
+
"SAMPLE ADDRESS, CITY, DIST, STATE, INDIA, PIN-000000",
|
|
37
|
+
signatureDate: "DD-MM-YY",
|
|
38
|
+
},
|
|
39
|
+
bride: {
|
|
40
|
+
name: "Bride Name",
|
|
41
|
+
fatherName: "Father Name",
|
|
42
|
+
motherName: "Mother Name",
|
|
43
|
+
dateOfBirth: "DD-MM-YYYY",
|
|
44
|
+
aadhaarNo: "********0000",
|
|
45
|
+
presentAddress:
|
|
46
|
+
"SAMPLE ADDRESS, CITY, DIST, STATE, INDIA, PIN-000000",
|
|
47
|
+
permanentAddress:
|
|
48
|
+
"SAMPLE ADDRESS, CITY, DIST, STATE, INDIA, PIN-000000",
|
|
49
|
+
signatureDate: "DD-MM-YY",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
solemnizationDetails: {
|
|
53
|
+
date: "DD-MM-YYYY",
|
|
54
|
+
actualPlace:
|
|
55
|
+
"SAMPLE VENUE NAME, ADDRESS, CITY, STATE, PIN-000000",
|
|
56
|
+
noticeDetails: {
|
|
57
|
+
serialNumber: "2025-******",
|
|
58
|
+
date: "DD-MM-YYYY",
|
|
59
|
+
section: "U/S-5",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
marriageOfficer: {
|
|
63
|
+
name: "Officer Name",
|
|
64
|
+
id: "XX********************",
|
|
65
|
+
officeAddress:
|
|
66
|
+
"SAMPLE OFFICE ADDRESS, CITY, STATE, PIN-000000",
|
|
67
|
+
contact: {
|
|
68
|
+
phone: "**********",
|
|
69
|
+
email: "**********@example.com",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
witnesses: [
|
|
73
|
+
{
|
|
74
|
+
name: "Witness 1",
|
|
75
|
+
relationshipDetails: "S/O Sample Name",
|
|
76
|
+
address: "Sample Address, City, Pin-000000",
|
|
77
|
+
signatureDate: "DD-MM-YYYY",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: "Witness 2",
|
|
81
|
+
relationshipDetails: "S/O Sample Name",
|
|
82
|
+
address: "Sample Address, City, Pin-000000",
|
|
83
|
+
signatureDate: "DD-MM-YYYY",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "Witness 3",
|
|
87
|
+
relationshipDetails: "W/O Sample Name",
|
|
88
|
+
address: "Sample Address, City, Pin-000000",
|
|
89
|
+
signatureDate: "DD-MM-YYYY",
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
verificationAndAuthority: {
|
|
93
|
+
issueStatement:
|
|
94
|
+
"Issued under Seal of Authority on this day.",
|
|
95
|
+
verificationStatement:
|
|
96
|
+
"All the LTIs and Signatures are captured infront of me and those are duly verified by me.",
|
|
97
|
+
systemNote: "System generated certificate & does not require signature.",
|
|
98
|
+
contactEmails: ["support@example.gov"],
|
|
99
|
+
verificationLink: "#",
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export default function CertificatePage() {
|
|
104
|
+
return (
|
|
105
|
+
<div className="min-h-screen p-4 sm:p-8 flex items-center justify-center font-sans">
|
|
106
|
+
<motion.div
|
|
107
|
+
className="w-full"
|
|
108
|
+
initial={{ opacity: 0, scale: 0.95 }}
|
|
109
|
+
animate={{ opacity: 1, scale: 1 }}
|
|
110
|
+
transition={{ duration: 0.5 }}
|
|
111
|
+
>
|
|
112
|
+
<Card className="relative w-full max-w-4xl mx-auto rounded-2xl overflow-hidden shadow-2xl border border-gray-100 dark:border-gray-800 bg-white dark:bg-black/80 font-sans print:shadow-none print:border-none">
|
|
113
|
+
{/* Verification Badge */}
|
|
114
|
+
<div className="relative md:absolute md:top-4 md:right-4 mx-auto md:mx-0 mt-6 md:mt-0 w-fit bg-blue-100 dark:bg-blue-900 px-3 py-1 rounded-full shadow-lg border border-blue-200/50 flex items-center gap-2 z-10 print:hidden">
|
|
115
|
+
<svg
|
|
116
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
117
|
+
fill="none"
|
|
118
|
+
viewBox="0 0 24 24"
|
|
119
|
+
strokeWidth={1.5}
|
|
120
|
+
stroke="currentColor"
|
|
121
|
+
className="size-6"
|
|
122
|
+
>
|
|
123
|
+
<path
|
|
124
|
+
strokeLinecap="round"
|
|
125
|
+
strokeLinejoin="round"
|
|
126
|
+
d="M9 12.75 11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 0 1-1.043 3.296 3.745 3.745 0 0 1-3.296 1.043A3.745 3.745 0 0 1 12 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 0 1-3.296-1.043 3.745 3.745 0 0 1-1.043-3.296A3.745 3.745 0 0 1 3 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 0 1 1.043-3.296 3.746 3.746 0 0 1 3.296-1.043A3.746 3.746 0 0 1 12 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 0 1 3.296 1.043 3.746 3.746 0 0 1 1.043 3.296A3.745 3.745 0 0 1 21 12Z"
|
|
127
|
+
/>
|
|
128
|
+
</svg>
|
|
129
|
+
|
|
130
|
+
<span className="text-xs font-bold text-blue-600 dark:text-blue-300 tracking-wide">
|
|
131
|
+
VERIFIED
|
|
132
|
+
</span>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<CardBody className="p-8 md:p-12">
|
|
136
|
+
{/* Header */}
|
|
137
|
+
<div className="text-center mb-8">
|
|
138
|
+
<p className="text-sm font-semibold tracking-widest text-blue-500 uppercase">
|
|
139
|
+
{certificateData.documentHeader.government}
|
|
140
|
+
</p>
|
|
141
|
+
<h1 className="text-2xl md:text-3xl font-bold font-serif text-gray-800 dark:text-gray-200 mt-2">
|
|
142
|
+
{certificateData.documentHeader.certificateTitle}
|
|
143
|
+
</h1>
|
|
144
|
+
<p className="text-xs text-gray-500 mt-1">
|
|
145
|
+
{certificateData.documentHeader.legalAct}
|
|
146
|
+
</p>
|
|
147
|
+
<p className="text-xs text-gray-400 mt-4 italic max-w-2xl mx-auto border-t border-b border-gray-100 dark:border-gray-800 py-2">
|
|
148
|
+
"{certificateData.documentHeader.declarationText}"
|
|
149
|
+
</p>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
{/* Parties */}
|
|
153
|
+
<div className="grid md:grid-cols-2 gap-8 my-8 border-t border-b border-gray-100 dark:border-gray-800 py-8">
|
|
154
|
+
<div className="text-center md:text-left">
|
|
155
|
+
<p className="text-xs text-gray-500 uppercase font-bold tracking-widest mb-2">
|
|
156
|
+
Groom
|
|
157
|
+
</p>
|
|
158
|
+
<h2 className="text-xl font-serif font-bold text-gray-800 dark:text-gray-200 break-words">
|
|
159
|
+
{certificateData.parties.groom.name}
|
|
160
|
+
</h2>
|
|
161
|
+
<div className="text-xs text-gray-500/80 mt-2 space-y-1">
|
|
162
|
+
<p>S/O {certificateData.parties.groom.fatherName}</p>
|
|
163
|
+
<p>& {certificateData.parties.groom.motherName}</p>
|
|
164
|
+
<p>Born: {certificateData.parties.groom.dateOfBirth}</p>
|
|
165
|
+
<p>Aadhaar: {certificateData.parties.groom.aadhaarNo}</p>
|
|
166
|
+
</div>
|
|
167
|
+
<p className="text-xs text-gray-500/80 mt-2">
|
|
168
|
+
<strong className="font-semibold">Address:</strong>{" "}
|
|
169
|
+
{certificateData.parties.groom.presentAddress}
|
|
170
|
+
</p>
|
|
171
|
+
</div>
|
|
172
|
+
<div className="text-center md:text-right">
|
|
173
|
+
<p className="text-xs text-gray-500 uppercase font-bold tracking-widest mb-2">
|
|
174
|
+
Bride
|
|
175
|
+
</p>
|
|
176
|
+
<h2 className="text-xl font-serif font-bold text-gray-800 dark:text-gray-200 break-words">
|
|
177
|
+
{certificateData.parties.bride.name}
|
|
178
|
+
</h2>
|
|
179
|
+
<div className="text-xs text-gray-500/80 mt-2 space-y-1">
|
|
180
|
+
<p>D/O {certificateData.parties.bride.fatherName}</p>
|
|
181
|
+
<p>& {certificateData.parties.bride.motherName}</p>
|
|
182
|
+
<p>Born: {certificateData.parties.bride.dateOfBirth}</p>
|
|
183
|
+
<p>Aadhaar: {certificateData.parties.bride.aadhaarNo}</p>
|
|
184
|
+
</div>
|
|
185
|
+
<p className="text-xs text-gray-500/80 mt-2">
|
|
186
|
+
<strong className="font-semibold">Address:</strong>{" "}
|
|
187
|
+
{certificateData.parties.bride.presentAddress}
|
|
188
|
+
</p>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
{/* Details Grid */}
|
|
193
|
+
<div className="grid md:grid-cols-3 gap-8 text-sm text-default-600 dark:text-default-300">
|
|
194
|
+
{/* Solemnization Details */}
|
|
195
|
+
<div className="space-y-2">
|
|
196
|
+
<h3 className="font-bold text-gray-800 dark:text-gray-100 tracking-wider uppercase">
|
|
197
|
+
Solemnization
|
|
198
|
+
</h3>
|
|
199
|
+
<p>
|
|
200
|
+
<strong className="text-gray-900 dark:text-gray-100">Date:</strong>{" "}
|
|
201
|
+
{certificateData.solemnizationDetails.date}
|
|
202
|
+
</p>
|
|
203
|
+
<p>
|
|
204
|
+
<strong className="text-gray-900 dark:text-gray-100">Place:</strong>{" "}
|
|
205
|
+
{certificateData.solemnizationDetails.actualPlace}
|
|
206
|
+
</p>
|
|
207
|
+
<div className="mt-2 pt-2 border-t border-dashed border-gray-200 dark:border-gray-700">
|
|
208
|
+
<p className="text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase">Notice Details</p>
|
|
209
|
+
<p className="text-xs">No: {certificateData.solemnizationDetails.noticeDetails.serialNumber}</p>
|
|
210
|
+
<p className="text-xs">Date: {certificateData.solemnizationDetails.noticeDetails.date}</p>
|
|
211
|
+
<p className="text-xs">Sec: {certificateData.solemnizationDetails.noticeDetails.section}</p>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<h3 className="font-bold text-gray-800 dark:text-gray-100 tracking-wider uppercase mt-6 pt-4 border-t border-gray-100 dark:border-gray-800">
|
|
215
|
+
Marriage Officer
|
|
216
|
+
</h3>
|
|
217
|
+
<p>
|
|
218
|
+
<strong className="text-gray-900 dark:text-gray-100">Name:</strong> {certificateData.marriageOfficer.name}
|
|
219
|
+
</p>
|
|
220
|
+
<p>
|
|
221
|
+
<strong className="text-gray-900 dark:text-gray-100">ID:</strong> {certificateData.marriageOfficer.id}
|
|
222
|
+
</p>
|
|
223
|
+
<p className="text-xs text-gray-600 dark:text-default-400 mt-1">
|
|
224
|
+
{certificateData.marriageOfficer.officeAddress}
|
|
225
|
+
</p>
|
|
226
|
+
<div className="mt-1 text-xs text-gray-500 dark:text-default-500">
|
|
227
|
+
<p>Ph: {certificateData.marriageOfficer.contact.phone}</p>
|
|
228
|
+
<p>Email: {certificateData.marriageOfficer.contact.email}</p>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
{/* Witnesses */}
|
|
233
|
+
<div className="space-y-4 md:col-span-2">
|
|
234
|
+
<h3 className="font-bold text-gray-800 dark:text-gray-100 tracking-wider uppercase border-b border-gray-100 dark:border-gray-800 pb-2">
|
|
235
|
+
Witnesses
|
|
236
|
+
</h3>
|
|
237
|
+
<div className="grid sm:grid-cols-1 lg:grid-cols-3 gap-6">
|
|
238
|
+
{certificateData.witnesses.map((witness, index) => (
|
|
239
|
+
<div key={index} className="space-y-1">
|
|
240
|
+
<p className="font-bold text-gray-800 dark:text-gray-100">
|
|
241
|
+
{witness.name}
|
|
242
|
+
</p>
|
|
243
|
+
<p className="text-[10px] text-gray-500 dark:text-default-500 italic">
|
|
244
|
+
{witness.relationshipDetails}
|
|
245
|
+
</p>
|
|
246
|
+
<p className="text-[10px] leading-relaxed text-gray-600 dark:text-default-400">
|
|
247
|
+
{witness.address}
|
|
248
|
+
</p>
|
|
249
|
+
<p className="text-[10px] font-mono text-blue-500/70 dark:text-blue-400/80">
|
|
250
|
+
Signed: {witness.signatureDate}
|
|
251
|
+
</p>
|
|
252
|
+
</div>
|
|
253
|
+
))}
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
</CardBody>
|
|
258
|
+
|
|
259
|
+
<Divider className="my-0" />
|
|
260
|
+
|
|
261
|
+
<CardFooter className="bg-gray-50 dark:bg-black/50 p-6 flex flex-col md:flex-row justify-between items-center gap-4 text-xs print:hidden">
|
|
262
|
+
<div className="text-center md:text-left">
|
|
263
|
+
<p className="font-mono text-gray-500/80">
|
|
264
|
+
{certificateData.documentHeader.certificateNumber}
|
|
265
|
+
</p>
|
|
266
|
+
<p className="text-gray-500 mt-1">
|
|
267
|
+
{certificateData.verificationAndAuthority.issueStatement}
|
|
268
|
+
</p>
|
|
269
|
+
</div>
|
|
270
|
+
<div className="flex gap-2 mt-4 md:mt-0">
|
|
271
|
+
<Button
|
|
272
|
+
as={Link}
|
|
273
|
+
href={certificateData.verificationAndAuthority.verificationLink}
|
|
274
|
+
isExternal
|
|
275
|
+
size="sm"
|
|
276
|
+
color="primary"
|
|
277
|
+
variant="flat"
|
|
278
|
+
>
|
|
279
|
+
Verify Certificate
|
|
280
|
+
</Button>
|
|
281
|
+
</div>
|
|
282
|
+
</CardFooter>
|
|
283
|
+
</Card>
|
|
284
|
+
</motion.div>
|
|
285
|
+
</div>
|
|
286
|
+
);
|
|
287
|
+
}
|
package/components/footer.tsx
CHANGED
|
@@ -3,6 +3,7 @@ import { Divider } from "@heroui/divider";
|
|
|
3
3
|
|
|
4
4
|
import { fontCursive } from "@/config/fonts";
|
|
5
5
|
import { HeartFilledIcon } from "@/components/icons";
|
|
6
|
+
import { AdminAuth } from "./AdminAuth";
|
|
6
7
|
|
|
7
8
|
export const Footer = () => {
|
|
8
9
|
const currentYear = new Date().getFullYear();
|
|
@@ -75,6 +76,7 @@ export const Footer = () => {
|
|
|
75
76
|
<span>© {currentYear} Made with</span>
|
|
76
77
|
<HeartFilledIcon className="text-wedding-pink-500 w-3 h-3 animate-pulse" />
|
|
77
78
|
<span>by Titas Mallick</span>
|
|
79
|
+
<AdminAuth />
|
|
78
80
|
</div>
|
|
79
81
|
|
|
80
82
|
<div className="flex gap-6">
|