Skip to content

Built with VivekUI

This entire website is built with VivekUI, a free React component library with zero runtime dependencies.

No Tailwind, no shadcn, no MUI, no CSS-in-JS. 47 components and 2 charts, all from one package, styled through CSS custom properties in a single stylesheet of our own.

npm i @the_viveksingh/vivek-ui
The map

Every section, and the component behind it

Each name links to its documentation page, which carries a live example, the code in TypeScript and JavaScript, and a props table generated from the package's own type declarations.

Each part of NestFind and the VivekUI component that builds it.
ComponentWhere it does the work
NavbarSite header, with the mobile sheet and active-link state
ThemeToggleLight / dark / system switch in the header
ThemeProviderOwns the theme and persists it, no flash on load
Badge“For sale”, “New”, amenity chips, the header’s VivekUI badge
ComboboxLocality picker in the hero search card
SelectProperty type, bedrooms and the results sort order
ButtonGroupBuy / Rent segmented control, hero and filter rail
SliderHero budget, the filter rail price range, all three EMI inputs
ButtonEvery action, including the ones that are really links
IconButtonThe save heart on each listing card
CardListings, agents, the search card, the price and EMI panels
GridEvery results and agent grid, reflowing with no breakpoint props
RatingLocality and agent ratings, read-only
AnimatedCounterHomepage stats and the live EMI figure
StatsThe four headline figures on the homepage
Stepper“How it works”, four steps
AvatarAgent portraits on the homepage, /agents and each listing
TestimonialsReviews section on the homepage
FAQHomepage FAQ — native <details>, no JavaScript
CTA“List your property” at the foot of the homepage
FooterSite footer on every page
CheckboxAmenity filters in the /listings rail
TagInputKeyword filter in the /listings rail
Switch“Ready to move” toggle in the /listings rail
TabsGrid / Compare on /listings; the four tabs on a listing page
DataTableThe Compare view — sortable, paginated, stacks on narrow screens
PaginationBelow the results grid
EmptyStateWhen the filters match nothing
CarouselPhoto gallery at the top of each listing
LineChart chartLocality price trend — ₹/sq ft over five years
PieChart chartPrincipal-versus-interest split in the EMI calculator
MapEmbedLocation tab — OpenStreetMap, no consent gate needed
ModalContact-agent dialog on listings and /agents
FieldLabel, hint and error wiring on every form control
InputName and email in the contact form
TextareaMessage body in the contact form
Alert“Estimate only” notice under the EMI calculator
ToastSaved-listing and enquiry-sent confirmations
BreadcrumbTrail on /listings, each listing and /agents
TableThe section-to-component map on this very page
ProseListing description copy in the Overview tab
SectionEvery page band, with its own heading block
ContainerWidth cap on the closing note
StackNearly every vertical and horizontal rhythm on the site
HeadingEvery heading, with level and visual size set separately
TextBody copy throughout
DividerRules inside listing and agent cards
CodeThe install command in the footer and on this page
CopyButtonBeside every install command
The charts are not a separate install
The LineChart plotting five years of ₹/sq ft and the PieChart splitting your EMI into principal and interest ship in the same package as the sliders that drive them — imported from @the_viveksingh/vivek-ui/charts with one extra CSS import, so an app with no charts pays nothing for them. Pure inline SVG, no charting dependency, and each renders a visually hidden table of the real numbers underneath for screen readers.
Also worth knowing

What using one package actually bought

One install, one import

npm install, then a single CSS import in app/layout.tsx. No config file, no CLI, no code generation, no PostCSS plugin.

Server components by default

49 of the 91 components carry no "use client". The listing gallery, the price chart and the whole footer render on the server.

Accessibility that came with it

IconButton refuses to compile without an aria-label, the FAQ is native <details>, and the charts publish a real data table for screen readers.

Restyled from one file

Every library selector is wrapped in :where(), so a flat class of ours wins with no !important. The blue accent and the blueprint grid are token overrides in globals.css.

Fork it, replace data/listings.ts, change the copy, deploy. MIT licensed — the credit in the footer is removable.