Emmanuel Hernandez
One unedited take of the web app running locally: swiping through restaurants near Westwood.
All work

03 Feb 2026 → now

SwipeBite

Tinder for restaurants. Enter a city, get a stack of nearby places, and swipe right on what looks good. Every swipe trains a taste profile that makes the next batch smarter.

It runs against a real backend: Express and PostgreSQL through Prisma, JWT auth with refresh tokens, and restaurant data from the Google Places API.

Role
Solo, full stack
Stack
Next.js 16, TypeScript, Express, PostgreSQL, Prisma
Data
Google Places API
Status
Live

Screens

One unedited take of the web app running locally against a real PostgreSQL database.

  1. 01

    Sign up

    A name, an email and a password. The form checks each field as you type.

  2. 02

    Taste setup

    Set a location, pick the cuisines you like, then a price range. SwipeBite uses these to weight your first recommendations.

  3. 03

    Swipe feed

    One restaurant at a time, with its hours and a match score. Like or pass, and every swipe trains your taste profile.

  4. 04

    Saved

    Every restaurant you liked in one list. Mark a place as visited and leave a short review.

What it does

Swipe to discover
Tinder-style card swiping for restaurants. Right to save, left to pass. The gesture is fast and the UI gets out of the way.
Match score
Every card shows a percentage match based on your taste profile. The more you swipe, the more accurate it gets.
Location-based feed
Enter any city or neighborhood. Results pull from Google Places and filter by distance, price, and cuisine.
Real-time hours
Open/closed status shown on every card based on the current time. No more showing up to a closed restaurant.
Saved list
Liked restaurants stack up in a personal saved tab. Browse them anytime, no more forgetting that place you wanted to try.
Taste profile
Your preferences build up over time. Cuisine types, price range, and location radius all feed the recommendation engine.

How it's built

Frontend
Next.js 16 with Turbopack, TypeScript throughout, Framer Motion for swipe gesture animations.
Backend
Node.js + Express REST API. JWT access tokens (15 min) with refresh token rotation stored in PostgreSQL.
Database
PostgreSQL via Supabase. Prisma ORM with typed schemas for users, swipes, matches, and taste profiles.
Restaurants
Google Places API for real location data. Results cached per-query and filtered server-side by distance, price, and cuisine.
Personalization
Taste profile built from swipe history. Match scores computed per-restaurant by weighting cuisine, price, and distance against your preferences.

What I'm building next

  1. 01Group mode: swipe with friends and match on places everyone liked
  2. 02Visit log to track restaurants you have actually been to
  3. 03Photo strip from Google Places for richer cards
  4. 04Push notifications for deals at saved restaurants
  5. 05Filter by dietary restrictions (vegetarian, halal, gluten-free)