@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.
- package/.eslintignore +20 -0
- package/.eslintrc.json +93 -0
- package/.recover +9 -0
- package/.vscode/settings.json +3 -0
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/app/Neo-Lucentism/layout.tsx +7 -0
- package/app/Neo-Lucentism/page.tsx +259 -0
- package/app/couple/layout.tsx +7 -0
- package/app/couple/page.tsx +164 -0
- package/app/error.tsx +31 -0
- package/app/guestbook/page.tsx +470 -0
- package/app/invitation/[slug]/layout.tsx +36 -0
- package/app/invitation/[slug]/page.tsx +462 -0
- package/app/invitation/maker/auth.js +165 -0
- package/app/invitation/maker/dashboard.js +81 -0
- package/app/invitation/maker/guestAdder.js +204 -0
- package/app/invitation/maker/guestShower.js +287 -0
- package/app/invitation/maker/layout.tsx +11 -0
- package/app/invitation/maker/page.js +168 -0
- package/app/invitation/maker/rsvpViewer.js +122 -0
- package/app/layout.tsx +98 -0
- package/app/mark-the-dates/layout.tsx +7 -0
- package/app/mark-the-dates/page.tsx +196 -0
- package/app/memories/layout.tsx +7 -0
- package/app/memories/page.tsx +29 -0
- package/app/page.tsx +5 -0
- package/app/providers.tsx +33 -0
- package/app/sagun/layout.tsx +7 -0
- package/app/sagun/page.tsx +348 -0
- package/app/song-requests/page.tsx +354 -0
- package/app/sukanya/layout.tsx +7 -0
- package/app/sukanya/page.tsx +167 -0
- package/app/titas/layout.tsx +7 -0
- package/app/titas/page.tsx +175 -0
- package/app/travel-guide/page.tsx +400 -0
- package/app/updates/maker/page.js +323 -0
- package/app/updates/overlay/page.tsx +144 -0
- package/app/updates/page.js +207 -0
- package/cli.mjs +196 -0
- package/components/ConciergeBot.tsx +203 -0
- package/components/CountdownTimer.tsx +137 -0
- package/components/Gallery.tsx +372 -0
- package/components/LiveVideos.tsx +173 -0
- package/components/OurStory.tsx +160 -0
- package/components/certificate.jsx +300 -0
- package/components/counter.tsx +14 -0
- package/components/footer.tsx +89 -0
- package/components/hero.tsx +136 -0
- package/components/icons.tsx +283 -0
- package/components/importantNews.js +168 -0
- package/components/navbar.tsx +106 -0
- package/components/primitives.ts +53 -0
- package/components/sagun.js +22 -0
- package/components/theme-switch.tsx +81 -0
- package/components/updates.tsx +118 -0
- package/components/weddingcard.js +68 -0
- package/components/weddingcard2.js +58 -0
- package/config/firebase-admin.js +17 -0
- package/config/firebase.ts +36 -0
- package/config/fonts.ts +21 -0
- package/config/site.ts +74 -0
- package/next-env.d.ts +6 -0
- package/next.config.js +4 -0
- package/package.json +64 -0
- package/postcss.config.js +6 -0
- 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/20.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/corner1-01.svg +1 -0
- package/public/favicon.ico +0 -0
- package/public/groom.jpg +0 -0
- package/public/invite.png +0 -0
- package/public/love-birds.png +0 -0
- package/public/next.svg +1 -0
- package/public/pubqr.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/public/qr.png +0 -0
- package/public/vercel.svg +1 -0
- package/styles/globals.css +3 -0
- package/tailwind.config.js +51 -0
- package/tsconfig.json +45 -0
- package/tsconfig.tsbuildinfo +1 -0
- 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't in
|
|
23
|
+
the same class at first. But looking back, I must have felt something,
|
|
24
|
+
even if I didn'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't strike her as
|
|
32
|
+
particularly attractive at first, but I was known among the girls, so
|
|
33
|
+
I must'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
|
+
"Fate, as always, had other plans."
|
|
38
|
+
</p>
|
|
39
|
+
|
|
40
|
+
<p>
|
|
41
|
+
Soon she was in our class in the second year. I'll admit—I had a
|
|
42
|
+
bit of interest in her, but it wasn'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' and
|
|
55
|
+
girls' 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' 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'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't plan it, we didn'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'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'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'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'd go home together. Our bond only deepened in
|
|
124
|
+
Kolkata's chaos and charm.
|
|
125
|
+
</p>
|
|
126
|
+
|
|
127
|
+
<p>
|
|
128
|
+
We promised to stay together always. We didn'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'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'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're about to start writing the next chapter of our lives.
|
|
143
|
+
We don't know where the road leads. We aren't rich in
|
|
144
|
+
possessions, but we are rich in love. We'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'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>© {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
|
+
};
|