Inspiration
Canadians are spending money they don't have on clothes they'll wear once. At the same time, closets across the country are packed with beautiful pieces collecting dust.
We wanted to build something that brought Canadians closer together while tackling a real financial pain point. Why buy a $400 dress for one night when your neighbour already owns it? Wear/abouts is our answer to that question. A peer-to-peer clothing rental and resale marketplace that turns every closet into a storefront and every neighbourhood into a shared wardrobe.
What It Does
Wear/abouts is a full-stack peer-to-peer marketplace where users can rent out or resell clothes they own, and browse pieces available nearby. Listings show real-time distance from your location and both a buy price and a daily rental rate.
Beyond the marketplace, it features an AI-powered style search. Upload photos of your aesthetic and our system analyzes them using Google Gemini to find listings that actually match your vibe. There's also an AI outfit generator that builds complete looks from the live catalog based on a prompt, a Cloudinary-powered image transformation suite for sellers to beautify their listing photos, and an interactive map showing rentable pieces around you.
How We Built It
We built Wear/abouts as a monorepo with a clear separation between frontend and backend.
The frontend is built with React 19, Vite 7, and TypeScript, hosted on Cloudflare Pages. We used React-Leaflet and Leaflet for the interactive map, with Nominatim and Photon handling address geocoding and autocomplete. Authentication is handled by Auth0. Animations are powered by Framer Motion and GSAP. Cloudinary's URL transformation API lets us do real-time background removal, smart cropping, and badge overlays on listing images, all without any extra server calls.
The backend is an Express 4 + TypeScript API running on Railway, connected to a MongoDB Atlas database via Mongoose. Image uploads go through Cloudinary, where Google Gemini 2.5 Flash automatically extracts aesthetic tags (things like "coastal grandmother" or "linen minimalist") to power search. Style recommendations are ranked using Backboard.io's vector search API. The Backboard SDK is ESM-only, so we integrated it via direct REST fetch calls with API key headers instead of the SDK wrapper.
We used separate models for listings (UserItemSell), purchases (UserItemBuy), and user profiles, keeping the data layer clean and purpose-built.
Challenges We Ran Into
Getting the AI pipeline to feel seamless was harder than expected. Gemini's style analysis and Backboard's vector ranking are two separate async operations that needed to compose gracefully. We had to build fallback logic at every step so the app never hard-fails if a service is slow or unavailable.
The Backboard SDK being ESM-only in a CommonJS Express environment was a fun surprise. We ended up bypassing the SDK entirely and calling the Backboard REST API directly, which actually gave us more control over the request structure.
Cross-origin issues between Cloudflare Pages and Railway required careful CORS configuration, and making sure environment variables were correctly scoped between Vite's client-side build and the Node backend took some MAJOR untangling.
Coordinating across four people on a shared codebase under time pressure also meant we had to be disciplined about not stepping on each other, which brought us closer and fostered good communication.
Accomplishments That We're Proud Of
We're really proud of how complete the product feels, from the landing page, to the sleek overall design. The map feature in particular came together beautifully. Seeing real listings plotted geographically around you makes the "local" concept tangible.
The AI style search is something we genuinely haven't seen done this way before. Upload a photo of an outfit you love, and the app finds real listings in the marketplace that match that aesthetic.
We're also proud of the name. Wear_abouts. Simple and clean.
What We Learned
We got deep hands-on experience with Cloudinary's transformation API, leveraging Backboard on a recommender system, and modern UI practices.
On the infrastructure side, wiring together Cloudflare Pages, Railway, MongoDB Atlas, Auth0, Cloudinary, and two AI services into a coherent deployment taught us a lot about environment management, secrets scoping, and the multi-service architectures.
What's Next for Wear_abouts
Here's where we can take Wear_abouts next:
- Rental booking calendar: Right now availability is shown as a label, but the next step is a real calendar system where renters can lock in dates and sellers can manage their schedule.
- Buyer–seller messaging: Peer-to-peer rentals need coordination. An in-app inbox is the next big UX piece.
- Payment processing: We have the Stripe integration stubbed out and ready to wire up. Secure checkout for both purchases and rental deposits is the clearest path to a real business.
- Reviews and ratings: Trust is everything in a peer-to-peer marketplace. A review system after completed rentals/purchases would meaningfully increase confidence for new users.
- Expanding across Canada: Wear/abouts is built to be local-first, but the infrastructure scales nationally. The dream is a shared Canadian wardrobe from Victoria to St. John's.
Built With
- ai
- animations
- auth
- auth0
- backboard.io
- backend
- cloudinary-v2-sdk
- database
- express-4
- framer-motion
- frontend
- google-gemini-2.5-flash
- gsap
- image-hosting
- jwt-validation
- leaflet.js
- maps
- mongodb-atlas-via-mongoose-8
- node-18+
- nominatim/photon
- react-19
- react-leaflet
- typescript
- vector-search
- vite-7
Log in or sign up for Devpost to join the conversation.