← BACK TO HOME
CASE STUDYDEPLOYED

WanderLust

PlatformROLE — FULL-STACK BUILD

An Airbnb-style stays marketplace with listings, reviews, image uploads and maps — the project where the full Node and MongoDB stack was learned, and then pushed past the course it started as.

NODEEXPRESSMONGODBEJS
wanderlust.raja-dev.me
WanderLust — live preview

THE PROBLEM

WHAT NEEDED SOLVING

This one is honest about its origins: it began as the capstone of a MERN course, and the course's version stops at create, read, update and delete over a listings collection. That is enough to demonstrate a stack and not enough to be a usable site. A stays marketplace whose only route into the data is a scroll of every listing has no way for a traveller to answer the one question they actually arrive with — what is available where I am going, under what I can spend. The interesting work started at the point the tutorial ended, and the aim was to close the distance between a finished exercise and something a stranger could use.

THE APPROACH

HOW IT WAS BUILT

The discovery layer was the main addition, and it was built server-side rather than as client-side filtering over an already-downloaded list, so it keeps working as the collection grows. A dedicated search route and controller compose a MongoDB query from whichever parameters arrive: a case-insensitive regular expression on location, an exact match on country, and an upper bound on price, with results capped so a broad query cannot pull the whole collection. Around that sit the parts a tutorial skips because they are not teachable moments — a search bar partial reused across pages, the informational and static pages on their own route, and a reworked interface across the whole site. Authentication, Cloudinary uploads and MapBox come from the course spine; the discovery, the static pages and the front end as it now looks do not.

FIELD NOTES

PROBLEMS HIT — AND RESOLVED
  1. 01

    WHERE THE TUTORIAL STOPPED

    The hardest part of a course project is recognising that finishing it is not the same as finishing anything. Following along produces working CRUD and the false impression of a product. Deciding what was missing — search, filters, the pages that explain the site, an interface that did not look like a lecture exercise — meant reading the build as a stranger would rather than as its author, and then doing the parts with no video to follow.

  2. 02

    FILTERS THAT COMPOSE INSTEAD OF MULTIPLYING

    Three filters that can each be present or absent are eight combinations, and writing a branch per combination is how that kind of code rots. The controller instead builds one query object incrementally, adding a clause only for the parameters that arrived, so location, country and price compose without any of them knowing about the others and a fourth filter is one more clause rather than a rewrite.

  3. 03

    A SEARCH THAT FINDS NOTHING

    An empty result set is the state a listings site is most likely to reach and the one a tutorial never covers, because the seeded data always matches. Rather than rendering a blank page that looks broken, a search with no matches routes to a page that explains the situation — including that this is a learning clone rather than a live inventory, which is a thing the project says about itself instead of leaving a visitor to work it out.

CAPABILITIES

WHAT IT ACTUALLY DOES
  • Server-side search composing location, country and price into one MongoDB query
  • Case-insensitive location matching with an exact country match and a price ceiling
  • Result caps so a broad query cannot pull the entire collection
  • Reusable search-bar partial shared across pages
  • Informational and static pages on their own route, absent from the original build
  • Listings with reviews, Cloudinary image uploads and MapBox maps