@titas_mallick/wedding-site-gen 1.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 (141) hide show
  1. package/.eslintignore +20 -0
  2. package/.eslintrc.json +93 -0
  3. package/.recover +9 -0
  4. package/.vscode/settings.json +3 -0
  5. package/LICENSE +21 -0
  6. package/README.md +83 -0
  7. package/app/Neo-Lucentism/layout.tsx +7 -0
  8. package/app/Neo-Lucentism/page.tsx +259 -0
  9. package/app/couple/layout.tsx +7 -0
  10. package/app/couple/page.tsx +164 -0
  11. package/app/error.tsx +31 -0
  12. package/app/guestbook/page.tsx +470 -0
  13. package/app/invitation/[slug]/layout.tsx +36 -0
  14. package/app/invitation/[slug]/page.tsx +462 -0
  15. package/app/invitation/maker/auth.js +165 -0
  16. package/app/invitation/maker/dashboard.js +81 -0
  17. package/app/invitation/maker/guestAdder.js +204 -0
  18. package/app/invitation/maker/guestShower.js +287 -0
  19. package/app/invitation/maker/layout.tsx +11 -0
  20. package/app/invitation/maker/page.js +168 -0
  21. package/app/invitation/maker/rsvpViewer.js +122 -0
  22. package/app/layout.tsx +98 -0
  23. package/app/mark-the-dates/layout.tsx +7 -0
  24. package/app/mark-the-dates/page.tsx +196 -0
  25. package/app/memories/layout.tsx +7 -0
  26. package/app/memories/page.tsx +29 -0
  27. package/app/page.tsx +5 -0
  28. package/app/providers.tsx +33 -0
  29. package/app/sagun/layout.tsx +7 -0
  30. package/app/sagun/page.tsx +348 -0
  31. package/app/song-requests/page.tsx +354 -0
  32. package/app/sukanya/layout.tsx +7 -0
  33. package/app/sukanya/page.tsx +167 -0
  34. package/app/titas/layout.tsx +7 -0
  35. package/app/titas/page.tsx +175 -0
  36. package/app/travel-guide/page.tsx +400 -0
  37. package/app/updates/maker/page.js +323 -0
  38. package/app/updates/overlay/page.tsx +144 -0
  39. package/app/updates/page.js +207 -0
  40. package/cli.mjs +196 -0
  41. package/components/ConciergeBot.tsx +203 -0
  42. package/components/CountdownTimer.tsx +137 -0
  43. package/components/Gallery.tsx +372 -0
  44. package/components/LiveVideos.tsx +173 -0
  45. package/components/OurStory.tsx +160 -0
  46. package/components/certificate.jsx +300 -0
  47. package/components/counter.tsx +14 -0
  48. package/components/footer.tsx +89 -0
  49. package/components/hero.tsx +136 -0
  50. package/components/icons.tsx +283 -0
  51. package/components/importantNews.js +168 -0
  52. package/components/navbar.tsx +106 -0
  53. package/components/primitives.ts +53 -0
  54. package/components/sagun.js +22 -0
  55. package/components/theme-switch.tsx +81 -0
  56. package/components/updates.tsx +118 -0
  57. package/components/weddingcard.js +68 -0
  58. package/components/weddingcard2.js +58 -0
  59. package/config/firebase-admin.js +17 -0
  60. package/config/firebase.ts +36 -0
  61. package/config/fonts.ts +21 -0
  62. package/config/site.ts +74 -0
  63. package/next-env.d.ts +6 -0
  64. package/next.config.js +4 -0
  65. package/package.json +64 -0
  66. package/postcss.config.js +6 -0
  67. package/public/DCV.gif +0 -0
  68. package/public/DCV2.gif +0 -0
  69. package/public/DCV3.gif +0 -0
  70. package/public/Images/1.jpg +0 -0
  71. package/public/Images/11.jpg +0 -0
  72. package/public/Images/12.jpg +0 -0
  73. package/public/Images/13.jpg +0 -0
  74. package/public/Images/14.jpg +0 -0
  75. package/public/Images/15.jpg +0 -0
  76. package/public/Images/16.jpg +0 -0
  77. package/public/Images/17.jpg +0 -0
  78. package/public/Images/18.jpg +0 -0
  79. package/public/Images/19.jpg +0 -0
  80. package/public/Images/2.jpg +0 -0
  81. package/public/Images/20.jpg +0 -0
  82. package/public/Images/21.jpg +0 -0
  83. package/public/Images/22.jpg +0 -0
  84. package/public/Images/3.jpg +0 -0
  85. package/public/Images/4.jpg +0 -0
  86. package/public/Images/5.jpg +0 -0
  87. package/public/Images/6.jpg +0 -0
  88. package/public/Images/7.jpg +0 -0
  89. package/public/Images/8.jpg +0 -0
  90. package/public/Images/9.jpg +0 -0
  91. package/public/Images/9b.jpg +0 -0
  92. package/public/Images/Patipatra.jpeg +0 -0
  93. package/public/audio (1).mp3 +0 -0
  94. package/public/audio (2).mp3 +0 -0
  95. package/public/bride.jpg +0 -0
  96. package/public/corner1-01.svg +1 -0
  97. package/public/favicon.ico +0 -0
  98. package/public/groom.jpg +0 -0
  99. package/public/invite.png +0 -0
  100. package/public/love-birds.png +0 -0
  101. package/public/next.svg +1 -0
  102. package/public/pubqr.png +0 -0
  103. package/public/pw/001.jpg +0 -0
  104. package/public/pw/002.jpg +0 -0
  105. package/public/pw/003.jpg +0 -0
  106. package/public/pw/004.jpg +0 -0
  107. package/public/pw/005.jpg +0 -0
  108. package/public/pw/006.jpg +0 -0
  109. package/public/pw/007.jpg +0 -0
  110. package/public/pw/008.jpg +0 -0
  111. package/public/pw/009.jpg +0 -0
  112. package/public/pw/010.jpg +0 -0
  113. package/public/pw/011.jpg +0 -0
  114. package/public/pw/012.jpg +0 -0
  115. package/public/pw/013.jpg +0 -0
  116. package/public/pw/014.jpg +0 -0
  117. package/public/pw/015.jpg +0 -0
  118. package/public/pw/016.jpg +0 -0
  119. package/public/pw/017.jpg +0 -0
  120. package/public/pw/018.jpg +0 -0
  121. package/public/pw/019.jpg +0 -0
  122. package/public/pw/020.jpg +0 -0
  123. package/public/pw/021.jpg +0 -0
  124. package/public/pw/022.jpg +0 -0
  125. package/public/pw/023.jpg +0 -0
  126. package/public/pw/024.jpg +0 -0
  127. package/public/pw/025.jpg +0 -0
  128. package/public/pw/026.jpg +0 -0
  129. package/public/pw/027.jpg +0 -0
  130. package/public/pw/028.jpg +0 -0
  131. package/public/pw/029.jpg +0 -0
  132. package/public/pw/030.jpg +0 -0
  133. package/public/pw/031.jpg +0 -0
  134. package/public/pw/032.jpg +0 -0
  135. package/public/qr.png +0 -0
  136. package/public/vercel.svg +1 -0
  137. package/styles/globals.css +3 -0
  138. package/tailwind.config.js +51 -0
  139. package/tsconfig.json +45 -0
  140. package/tsconfig.tsbuildinfo +1 -0
  141. package/types/index.ts +5 -0
@@ -0,0 +1,160 @@
1
+ import { fontCursive, fontSans } from "@/config/fonts";
2
+ import { HeartFilledIcon } from "@/components/icons";
3
+
4
+ export default function OurStorySection() {
5
+ return (
6
+ <section className="px-4 py-16 md:py-24 max-w-4xl mx-auto">
7
+ <div className="flex flex-col items-center mb-10">
8
+ <HeartFilledIcon className="text-wedding-pink-500 w-8 h-8 mb-4 animate-pulse" />
9
+ <h2
10
+ className={`${fontCursive.className} text-5xl md:text-6xl text-center bg-gradient-to-r from-wedding-pink-600 to-wedding-gold-600 bg-clip-text text-transparent py-4 leading-normal`}
11
+ >
12
+ Our Love Story
13
+ </h2>
14
+ </div>
15
+
16
+ <div
17
+ className={`${fontSans.className} text-lg md:text-xl leading-relaxed space-y-8 text-gray-800 dark:text-gray-100 text-justify md:text-left`}
18
+ >
19
+ <p>
20
+ It all began on a regular summer day in college—nothing extraordinary,
21
+ just the usual buzz of campus life. I had seen her before, maybe more
22
+ than once, and felt a faint curiosity about her. We weren&apos;t in
23
+ the same class at first. But looking back, I must have felt something,
24
+ even if I didn&apos;t realize it then.
25
+ </p>
26
+
27
+ <p>
28
+ She later told me she noticed me before too—when I was helping a
29
+ professor with the wall magazine. I was wearing a white shirt and
30
+ cargo pants, a bit out of fashion, but that was my look back then:
31
+ curly hair, nerdy glasses. She says I didn&apos;t strike her as
32
+ particularly attractive at first, but I was known among the girls, so
33
+ I must&apos;ve caught her attention eventually.
34
+ </p>
35
+
36
+ <p className="font-semibold text-wedding-pink-600 dark:text-wedding-pink-400 italic text-center text-xl md:text-2xl my-8">
37
+ &quot;Fate, as always, had other plans.&quot;
38
+ </p>
39
+
40
+ <p>
41
+ Soon she was in our class in the second year. I&apos;ll admit—I had a
42
+ bit of interest in her, but it wasn&apos;t love or even a crush.
43
+ Just... curiosity. At that time, both of us were going through what
44
+ you could call “leftover heartbreaks” and the general messiness of
45
+ life.
46
+ </p>
47
+
48
+ <p>
49
+ The real turning point came during our college excursion to Lataguri.
50
+ </p>
51
+
52
+ <p>
53
+ It feels magical now in retrospect, like a story written by chance,
54
+ but back then, we were simply going with the flow. The boys&apos; and
55
+ girls&apos; stays were in separate areas. That night, our room was
56
+ alive with music, dance, gossip—and yes, a little alcohol, even though
57
+ it was against the excursion rules. We were young, wild, and free.
58
+ Around 9:00 p.m., the room was thick with cigarette smoke, and the
59
+ floor was slick with sweat from all the dancing.
60
+ </p>
61
+
62
+ <p>Then came a knock at the door. We all froze.</p>
63
+
64
+ <p>
65
+ She had been sitting on the bed with the other girls, gossiping.
66
+ Startled, she tried to rush to the bathroom and slipped—on my sweat,
67
+ of all things. Her ankle was swollen and, as we found out later,
68
+ broken. It was our sir at the door. Somehow, we managed to calm the
69
+ situation.
70
+ </p>
71
+
72
+ <p>
73
+ But that night became unforgettable—not just because of her injury,
74
+ but because of everything that followed.
75
+ </p>
76
+
77
+ <p>
78
+ I carried her to the girls&apos; quarters. Later that night, I was
79
+ called back because the girls suspected a hidden camera in the
80
+ bathroom. I had to climb an outside wall to inspect it—turned out to
81
+ be just a pipe outlet. A junior got terrified by a spider, and then
82
+ the drunk travel agent began telling me ghostly elephant tales at 2
83
+ a.m. It was chaos, laughter, and a touch of madness.
84
+ </p>
85
+
86
+ <p>
87
+ Next, we headed to Kolakham—with her injured foot and me beside her.
88
+ And that&apos;s where something shifted between us. Something clicked.
89
+ It felt... right.
90
+ </p>
91
+
92
+ <p>
93
+ On the last night, all of us were huddled together in a single room.
94
+ Under the shared warmth of a blanket, our hands found each other. We
95
+ didn&apos;t plan it, we didn&apos;t talk about it. It just happened.
96
+ That room—its energy, that feeling—is still etched vividly in our
97
+ minds.
98
+ </p>
99
+
100
+ <p>
101
+ Back in the city, I began dropping her off at college on my scooter.
102
+ Still, we didn&apos;t label it love. It felt like love, but we never
103
+ talked about it. She told me later that she once noticed a mark on my
104
+ neck while riding pillion—and felt something stir within her. Things
105
+ began to spiral beautifully out of control. We were falling, slowly
106
+ and deeply.
107
+ </p>
108
+
109
+ <p>There were challenges—many—but those are stories for another day.</p>
110
+
111
+ <p>Then, one day in the college lift, I kissed her.</p>
112
+
113
+ <p>
114
+ That&apos;s when we truly realized: we were in love. We never formally
115
+ proposed to each other; we just were. We tried to mark a date—maybe
116
+ 7th January—but even that felt blurry. We weren&apos;t keeping track.
117
+ We were simply living it.
118
+ </p>
119
+
120
+ <p>
121
+ College ended, and we chose universities close by so we could still
122
+ meet. She used to wait for me every day at Ballygunge Phari, and from
123
+ there, we&apos;d go home together. Our bond only deepened in
124
+ Kolkata&apos;s chaos and charm.
125
+ </p>
126
+
127
+ <p>
128
+ We promised to stay together always. We didn&apos;t have much—but we
129
+ had each other. We studied for government jobs side by side, survived
130
+ lockdowns together, and eventually found the jobs we&apos;re in now.
131
+ </p>
132
+
133
+ <p>
134
+ After the lockdown, a new phase began—our shared love for the
135
+ mountains. And I believe that&apos;s when our love truly blossomed.
136
+ From the serene silence of Chandu to the biting cold of Bumla, from
137
+ standing alone on the peak at Rimbik to all the small moments in
138
+ between—we discovered who we really were.
139
+ </p>
140
+
141
+ <p>
142
+ Now, we&apos;re about to start writing the next chapter of our lives.
143
+ We don&apos;t know where the road leads. We aren&apos;t rich in
144
+ possessions, but we are rich in love. We&apos;re wanderers, dreamers,
145
+ companions—hand in hand, seeking nothing more than the journey itself.
146
+ </p>
147
+
148
+ <p>Because in the end, we may not have everything.</p>
149
+
150
+ <p className="font-bold text-2xl mt-8 text-center text-wedding-gold-600 dark:text-wedding-gold-400">
151
+ But we have each other.
152
+ </p>
153
+
154
+ <p className={`${fontCursive.className} text-right text-3xl mt-4`}>
155
+ -- Titas
156
+ </p>
157
+ </div>
158
+ </section>
159
+ );
160
+ }
@@ -0,0 +1,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
+ console.log("CertificatePage imports:", {
15
+ motion,
16
+ Card,
17
+ CardBody,
18
+ CardFooter,
19
+ Divider,
20
+ Button,
21
+ Link,
22
+ });
23
+
24
+ const certificateData = {
25
+ documentHeader: {
26
+ government: "Government of West Bengal",
27
+ department: "Law Department",
28
+ office: "Office of the Registrar General of Marriages",
29
+ certificateTitle: "Certificate of Marriage",
30
+ legalAct: "Under Section 13 of Act XLIII of 1954",
31
+ certificateNumber: "WB33800200010100002125-2025-141480",
32
+ issueDate: "23-11-2025",
33
+ declarationText:
34
+ "The following is the extract of SOLEMNISATION OF MARRIAGE between the parties who made declaration u/s 11 of the Act.",
35
+ },
36
+ parties: {
37
+ groom: {
38
+ name: "Titas Mallick",
39
+ fatherName: "Hasir Mallick",
40
+ motherName: "Rumana Begum",
41
+ dateOfBirth: "02-04-1996",
42
+ aadhaarNo: "********7664",
43
+ presentAddress:
44
+ "56/D S.C. DEB STREET, KONNAGAR, DIST HOOGHLY, PO- KONNAGAR, PS- UTTARPARA, WEST BENGAL, INDIA, PIN-712235",
45
+ permanentAddress:
46
+ "56/D S.C. DEB STREET, KONNAGAR, DIST-HOOGHLY PO-KONNAGAR, PS- UTTARPARA, WEST BENGAL, INDIA, PIN-712235",
47
+ signatureDate: "23-11-25",
48
+ },
49
+ bride: {
50
+ name: "Sukanya Saha",
51
+ fatherName: "Subhasis Saha",
52
+ motherName: "Nupur Saha",
53
+ dateOfBirth: "23-02-1995",
54
+ aadhaarNo: "********9148",
55
+ presentAddress:
56
+ "45/H BARABAGAN LANE, MALLICKPARA, DIST-HOOGHLY, PO-MALLICK PARA, PS-SERAMPORE, WEST BENGAL, INDIA, PIN-712203",
57
+ permanentAddress:
58
+ "45/H BARABAGAN LANE, MALLICKPARA, DIST- HOOGHLY, PO-MALLICK PARA, PS- SERAMPORE, WEST BENGAL, INDIA, PIN- 712203",
59
+ signatureDate: "23.11.25",
60
+ },
61
+ },
62
+ solemnizationDetails: {
63
+ date: "23-11-2025",
64
+ actualPlace:
65
+ "MOHAN JYOTI BANQUET HALL, 54A, G.T. ROAD, SERAMPORE, PS-SERAMPORE, PO-SERAMPORE, PIN-712201, DIST- HOOGHLY, WEST BENGAL",
66
+ noticeDetails: {
67
+ serialNumber: "2025-141480",
68
+ date: "16-09-2025",
69
+ section: "U/S-5",
70
+ },
71
+ },
72
+ marriageOfficer: {
73
+ name: "Srimonta Prosad Mondal",
74
+ id: "WB33800200010100002125",
75
+ officeAddress:
76
+ "154, S.C CHATTERJEE STREET RAJRAJESWARITALA, SERAMPORE, HOOGHLY, WEST BENGAL, INDIA, PIN- 712235",
77
+ contact: {
78
+ phone: "9051920765",
79
+ email: "spmondal1961@gmail.com",
80
+ },
81
+ },
82
+ witnesses: [
83
+ {
84
+ name: "Subhasis Saha",
85
+ relationshipDetails: "S/O Subodh Saha",
86
+ address:
87
+ "45/H, Barabagan Lane, P.O- Mallickpara, Pin-712203, Dist-Hooghly, W.B, India, P.S- Serampore",
88
+ signatureDate: "23-11.2025",
89
+ },
90
+ {
91
+ name: "Hasir Mallick",
92
+ relationshipDetails: "S/O Golam Mallick",
93
+ address:
94
+ "56/D, S.C.Deb Street, P.O- Konnagar, Pin-712235, Dist-Hooghly, W.B, India, P.S- Uttarpara",
95
+ signatureDate: "23.11.2025",
96
+ },
97
+ {
98
+ name: "Nupur Saha",
99
+ relationshipDetails: "W/O Subhasis Saha",
100
+ address:
101
+ "45/H, Barabagan Lane, P.O- Mallickpara, Pin-712203, Dist-Hooghly, W.B, India, P.S- Serampore",
102
+ signatureDate: "23.11.2025",
103
+ },
104
+ ],
105
+ verificationAndAuthority: {
106
+ issueStatement:
107
+ "Issued under Seal of Authority on this 24th day of, November (month), 2025 (year).",
108
+ verificationStatement:
109
+ "All the LTIs and Signatures are captured infront of me and those are duly verified by me.",
110
+ systemNote: "System generated certificate & does not require signature.",
111
+ contactEmails: ["rgm-wb@nic.in", "support.rgm-wb@gov.in"],
112
+ verificationLink: "https://bit.ly/sukanya-titas-mar-reg",
113
+ },
114
+ };
115
+
116
+ export default function CertificatePage() {
117
+ return (
118
+ <div className="min-h-screen p-4 sm:p-8 flex items-center justify-center font-sans">
119
+ <motion.div
120
+ className="w-full"
121
+ initial={{ opacity: 0, scale: 0.95 }}
122
+ animate={{ opacity: 1, scale: 1 }}
123
+ transition={{ duration: 0.5 }}
124
+ >
125
+ <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">
126
+ {/* Verification Badge */}
127
+ <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">
128
+ <svg
129
+ xmlns="http://www.w3.org/2000/svg"
130
+ fill="none"
131
+ viewBox="0 0 24 24"
132
+ strokeWidth={1.5}
133
+ stroke="currentColor"
134
+ className="size-6"
135
+ >
136
+ <path
137
+ strokeLinecap="round"
138
+ strokeLinejoin="round"
139
+ 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"
140
+ />
141
+ </svg>
142
+
143
+ <span className="text-xs font-bold text-blue-600 dark:text-blue-300 tracking-wide">
144
+ VERIFIED
145
+ </span>
146
+ </div>
147
+
148
+ <CardBody className="p-8 md:p-12">
149
+ {/* Header */}
150
+ <div className="text-center mb-8">
151
+ <p className="text-sm font-semibold tracking-widest text-blue-500 uppercase">
152
+ {certificateData.documentHeader.government}
153
+ </p>
154
+ <h1 className="text-2xl md:text-3xl font-bold font-serif text-gray-800 dark:text-gray-200 mt-2">
155
+ {certificateData.documentHeader.certificateTitle}
156
+ </h1>
157
+ <p className="text-xs text-gray-500 mt-1">
158
+ {certificateData.documentHeader.legalAct}
159
+ </p>
160
+ <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">
161
+ "{certificateData.documentHeader.declarationText}"
162
+ </p>
163
+ </div>
164
+
165
+ {/* Parties */}
166
+ <div className="grid md:grid-cols-2 gap-8 my-8 border-t border-b border-gray-100 dark:border-gray-800 py-8">
167
+ <div className="text-center md:text-left">
168
+ <p className="text-xs text-gray-500 uppercase font-bold tracking-widest mb-2">
169
+ Groom
170
+ </p>
171
+ <h2 className="text-xl font-serif font-bold text-gray-800 dark:text-gray-200 break-words">
172
+ {certificateData.parties.groom.name}
173
+ </h2>
174
+ <div className="text-xs text-gray-500/80 mt-2 space-y-1">
175
+ <p>S/O {certificateData.parties.groom.fatherName}</p>
176
+ <p>& {certificateData.parties.groom.motherName}</p>
177
+ <p>Born: {certificateData.parties.groom.dateOfBirth}</p>
178
+ <p>Aadhaar: {certificateData.parties.groom.aadhaarNo}</p>
179
+ </div>
180
+ <p className="text-xs text-gray-500/80 mt-2">
181
+ <strong className="font-semibold">Address:</strong>{" "}
182
+ {certificateData.parties.groom.presentAddress}
183
+ </p>
184
+ </div>
185
+ <div className="text-center md:text-right">
186
+ <p className="text-xs text-gray-500 uppercase font-bold tracking-widest mb-2">
187
+ Bride
188
+ </p>
189
+ <h2 className="text-xl font-serif font-bold text-gray-800 dark:text-gray-200 break-words">
190
+ {certificateData.parties.bride.name}
191
+ </h2>
192
+ <div className="text-xs text-gray-500/80 mt-2 space-y-1">
193
+ <p>D/O {certificateData.parties.bride.fatherName}</p>
194
+ <p>& {certificateData.parties.bride.motherName}</p>
195
+ <p>Born: {certificateData.parties.bride.dateOfBirth}</p>
196
+ <p>Aadhaar: {certificateData.parties.bride.aadhaarNo}</p>
197
+ </div>
198
+ <p className="text-xs text-gray-500/80 mt-2">
199
+ <strong className="font-semibold">Address:</strong>{" "}
200
+ {certificateData.parties.bride.presentAddress}
201
+ </p>
202
+ </div>
203
+ </div>
204
+
205
+ {/* Details Grid */}
206
+ <div className="grid md:grid-cols-3 gap-8 text-sm text-default-600 dark:text-default-300">
207
+ {/* Solemnization Details */}
208
+ <div className="space-y-2">
209
+ <h3 className="font-bold text-gray-800 dark:text-gray-100 tracking-wider uppercase">
210
+ Solemnization
211
+ </h3>
212
+ <p>
213
+ <strong className="text-gray-900 dark:text-gray-100">Date:</strong>{" "}
214
+ {certificateData.solemnizationDetails.date}
215
+ </p>
216
+ <p>
217
+ <strong className="text-gray-900 dark:text-gray-100">Place:</strong>{" "}
218
+ {certificateData.solemnizationDetails.actualPlace}
219
+ </p>
220
+ <div className="mt-2 pt-2 border-t border-dashed border-gray-200 dark:border-gray-700">
221
+ <p className="text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase">Notice Details</p>
222
+ <p className="text-xs">No: {certificateData.solemnizationDetails.noticeDetails.serialNumber}</p>
223
+ <p className="text-xs">Date: {certificateData.solemnizationDetails.noticeDetails.date}</p>
224
+ <p className="text-xs">Sec: {certificateData.solemnizationDetails.noticeDetails.section}</p>
225
+ </div>
226
+
227
+ <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">
228
+ Marriage Officer
229
+ </h3>
230
+ <p>
231
+ <strong className="text-gray-900 dark:text-gray-100">Name:</strong> {certificateData.marriageOfficer.name}
232
+ </p>
233
+ <p>
234
+ <strong className="text-gray-900 dark:text-gray-100">ID:</strong> {certificateData.marriageOfficer.id}
235
+ </p>
236
+ <p className="text-xs text-gray-600 dark:text-default-400 mt-1">
237
+ {certificateData.marriageOfficer.officeAddress}
238
+ </p>
239
+ <div className="mt-1 text-xs text-gray-500 dark:text-default-500">
240
+ <p>Ph: {certificateData.marriageOfficer.contact.phone}</p>
241
+ <p>Email: {certificateData.marriageOfficer.contact.email}</p>
242
+ </div>
243
+ </div>
244
+
245
+ {/* Witnesses */}
246
+ <div className="space-y-4 md:col-span-2">
247
+ <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">
248
+ Witnesses
249
+ </h3>
250
+ <div className="grid sm:grid-cols-1 lg:grid-cols-3 gap-6">
251
+ {certificateData.witnesses.map((witness, index) => (
252
+ <div key={index} className="space-y-1">
253
+ <p className="font-bold text-gray-800 dark:text-gray-100">
254
+ {witness.name}
255
+ </p>
256
+ <p className="text-[10px] text-gray-500 dark:text-default-500 italic">
257
+ {witness.relationshipDetails}
258
+ </p>
259
+ <p className="text-[10px] leading-relaxed text-gray-600 dark:text-default-400">
260
+ {witness.address}
261
+ </p>
262
+ <p className="text-[10px] font-mono text-blue-500/70 dark:text-blue-400/80">
263
+ Signed: {witness.signatureDate}
264
+ </p>
265
+ </div>
266
+ ))}
267
+ </div>
268
+ </div>
269
+ </div>
270
+ </CardBody>
271
+
272
+ <Divider className="my-0" />
273
+
274
+ <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">
275
+ <div className="text-center md:text-left">
276
+ <p className="font-mono text-gray-500/80">
277
+ {certificateData.documentHeader.certificateNumber}
278
+ </p>
279
+ <p className="text-gray-500 mt-1">
280
+ {certificateData.verificationAndAuthority.issueStatement}
281
+ </p>
282
+ </div>
283
+ <div className="flex gap-2 mt-4 md:mt-0">
284
+ <Button
285
+ as={Link}
286
+ href={certificateData.verificationAndAuthority.verificationLink}
287
+ isExternal
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
+ }
@@ -0,0 +1,14 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import { Button } from "@heroui/button";
5
+
6
+ export const Counter = () => {
7
+ const [count, setCount] = useState(0);
8
+
9
+ return (
10
+ <Button radius="full" onPress={() => setCount(count + 1)}>
11
+ Count is {count}
12
+ </Button>
13
+ );
14
+ };
@@ -0,0 +1,89 @@
1
+ import { Link } from "@heroui/link";
2
+ import { Divider } from "@heroui/divider";
3
+
4
+ import { fontCursive } from "@/config/fonts";
5
+ import { HeartFilledIcon } from "@/components/icons";
6
+
7
+ export const Footer = () => {
8
+ const currentYear = new Date().getFullYear();
9
+
10
+ return (
11
+ <footer className="w-full bg-wedding-cream dark:bg-black/40 border-t border-wedding-pink-100 dark:border-white/10 pt-12 pb-8">
12
+ <div className="container mx-auto px-6 max-w-7xl">
13
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-12 text-center md:text-left">
14
+ {/* Column 1: Brand/Names */}
15
+ <div className="flex flex-col items-center md:items-start space-y-4">
16
+ <h2
17
+ className={`${fontCursive.className} text-4xl text-wedding-pink-600 dark:text-wedding-pink-400`}
18
+ >
19
+ Titas & Sukanya
20
+ </h2>
21
+ <p className="text-default-500 text-sm max-w-xs leading-relaxed">
22
+ We can&apos;t wait to celebrate our special day with you. Thank
23
+ you for being part of our journey.
24
+ </p>
25
+ </div>
26
+
27
+ {/* Column 2: Quick Links */}
28
+ <div className="flex flex-col items-center space-y-4">
29
+ <h3 className="uppercase tracking-widest text-xs font-bold text-default-400 mb-2">
30
+ Explore
31
+ </h3>
32
+ <div className="flex flex-col space-y-2">
33
+ <Link
34
+ className="hover:text-wedding-pink-500 transition-colors"
35
+ color="foreground"
36
+ href="/"
37
+ >
38
+ Home
39
+ </Link>
40
+ <Link
41
+ className="hover:text-wedding-pink-500 transition-colors"
42
+ color="foreground"
43
+ href="/couple"
44
+ >
45
+ Our Story
46
+ </Link>
47
+ <Link
48
+ className="hover:text-wedding-pink-500 transition-colors"
49
+ color="foreground"
50
+ href="/memories"
51
+ >
52
+ Gallery
53
+ </Link>
54
+ </div>
55
+ </div>
56
+
57
+ {/* Column 3: Contact/Action */}
58
+ <div className="flex flex-col items-center md:items-end space-y-4">
59
+ <h3 className="uppercase tracking-widest text-xs font-bold text-default-400 mb-2">
60
+ Wedding Hashtag
61
+ </h3>
62
+ <p className="font-serif text-xl italic text-default-600">
63
+ #TitasWedsSukanya
64
+ </p>
65
+ <div className="flex gap-4 mt-2">
66
+ {/* Social placeholders or contact icons could go here */}
67
+ </div>
68
+ </div>
69
+ </div>
70
+
71
+ <Divider className="my-8 opacity-50" />
72
+
73
+ <div className="flex flex-col md:flex-row justify-between items-center gap-4 text-xs text-default-400">
74
+ <div className="flex items-center gap-1">
75
+ <span>&copy; {currentYear} Made with</span>
76
+ <HeartFilledIcon className="text-wedding-pink-500 w-3 h-3 animate-pulse" />
77
+ <span>by Titas Mallick</span>
78
+ </div>
79
+
80
+ <div className="flex gap-6">
81
+ <span className="text-default-400 italic">
82
+ Celebrate Love & Happiness
83
+ </span>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </footer>
88
+ );
89
+ };