Components
GuruCard
File:components/molecules/guru-card.tsxUsed in:
GuruCarousel organism
Displays a single guru portrait in a styled card with a gradient border and a name overlay at the bottom. Images are loaded from Cloudflare Images using getCloudflareImage(imageId).
grayscale filter. On desktop, a gradient overlay animates in on hover via group-hover:opacity-100.
CountdownTimer
File:components/molecules/countdown-timer.tsxUsed in:
TitleSection (landing page), TitleSectionMobile
Live countdown to a target ISO date string. Updates every second via setInterval. Each time unit animates independently using framer-motion AnimatePresence with a vertical slide.
TimeUnit sub-components with responsive sizing from text-4xl on mobile up to text-8xl at 2xl.
PhoneInput
File:components/molecules/phone-input.tsxUsed in:
SevaSubmissionForm, registration forms
International phone number input built on react-phone-number-input. Composes a custom CountrySelect popover (with search) and a styled InputComponent.
Popover from @/components/atoms/popover with a searchable list of country options including flag icons and calling codes.
The project also exports
LazyPhoneInput from components/molecules/lazy-phone-input.tsx, which wraps PhoneInput in a dynamic import for code splitting. Use LazyPhoneInput in forms to reduce the initial bundle size.EventsDatePicker
File:components/molecules/events-date-picker.tsxUsed in: Events filter bar on the
/latest-events page
Date range picker built with react-aria-components (DateRangePicker) and the internal RangeCalendar organism. Converts between native Date objects and @internationalized/date CalendarDate values.
Popover with orange focus ring styling consistent with the registration theme.
RegistrationDatePicker
File:components/molecules/registration-date-picker.tsxUsed in: Event registration form Single-date picker variant using
react-aria-components. Styled identically to EventsDatePicker but accepts a single Date value rather than a range.
LazyDatePicker
File:components/molecules/lazy-date-picker.tsx
Dynamic-import wrapper around RegistrationDatePicker for code splitting. Use this in pages that don’t always render the date picker.
ProgressCounter
File:components/molecules/progress-counter.tsxUsed in: Community Seva page stats section Animated stat card with a framer-motion number counter and a progress bar. The counter counts up from 0 to
current on scroll entry. Requires an inView flag from useIntersectionObserver.
TimelineGridTile
File:components/molecules/TimelineGridTile.tsxUsed in:
MobileTimeline organism, desktop timeline page
Renders a single timeline entry with a year badge, title, and image. Supports two layout variants.
- mobile
- desktop
Stacked layout: year badge + title on one row, full-width image with description overlay below.
VideoCarouselButtons
File:components/molecules/video-carousel-buttons.tsxUsed in:
VideoSection organism
Prev/Next navigation buttons for the Embla carousel. Exports PrevButton, NextButton, and a usePrevNextButtons hook that wires up the Embla API.
VideoCarouselDots
File:components/molecules/video-carousel-dots.tsxUsed in:
VideoSection organism
Dot indicators for the Embla carousel. Exports DotButton and a useDotButton hook.
Other molecules
IphoneMock — components/molecules/iphone-mock.tsx
IphoneMock — components/molecules/iphone-mock.tsx
iPhone frame mockup wrapper. Place content inside to display it inside a device frame.
Carousel — components/molecules/carousel.tsx
Carousel — components/molecules/carousel.tsx
Generic shadcn/ui carousel primitive used as a base.
Command — components/molecules/command.tsx
Command — components/molecules/command.tsx
shadcn/ui command palette. Used by
PhoneInput for the searchable country list.Dialog — components/molecules/dialog.tsx
Dialog — components/molecules/dialog.tsx
shadcn/ui dialog. Used by
ImageCarouselModal and PhotoAlbumModal organisms.CountrySelector — components/molecules/country-selector.tsx
CountrySelector — components/molecules/country-selector.tsx
Project-specific country select used in
SevaSubmissionForm.EventCard — components/molecules/event-card.tsx
EventCard — components/molecules/event-card.tsx
Card for displaying a single event entry on the
/latest-events page.ScheduleCard — components/molecules/schedule-card.tsx
ScheduleCard — components/molecules/schedule-card.tsx
Card for displaying a scheduled event on the
/schedule page.TransportCard — components/molecules/transport-card.tsx
TransportCard — components/molecules/transport-card.tsx
Card for transport/accommodation options on the Guest Services page.
3DPin — components/molecules/3d-pin.tsx
3DPin — components/molecules/3d-pin.tsx
Aceternity 3D pin component for interactive visual elements.
Toaster — components/molecules/toaster.tsx
Toaster — components/molecules/toaster.tsx
Toast container rendered in the root layout. Works with
useToast() hook.