Skip to content

marabu-daaz/Granular-Feedback

Repository files navigation

Granular Feedback

A web app for collecting dish-level feedback in restaurants. Instead of one overall rating for a venue, guests rate each individual item they ordered — turning vague "it was fine" reviews into granular, product-specific data.

Guests scan a QR code at their table, rate every dish on one screen, and unlock tiered rewards. No app download, no login required.

Why dish-level

Google and review platforms tell you the best restaurant, not the best dish and why. This app captures which specific items land well or poorly, giving venues data they can actually act on and building a foundation for public "best dish in the city" rankings.

Getting started

npm install
npm run dev

Runs at http://localhost:5173

Build (for hosting)

npm run build      # outputs to /dist
npm run preview    # preview the build locally

The contents of dist/ deploy to any static host (Netlify, Vercel, etc.).

Table number from QR code

The app reads the table number from the URL:

  • your-domain.com/t/7 → table 7
  • for local testing: localhost:5173/#t=7

Note: the /t/7 form needs SPA redirect config on your host (e.g. a _redirects file for Netlify with /* /index.html 200). The #t=7 form works everywhere without extra setup.

Flow

  1. Rating screen — all ordered dishes on one screen, 5 stars each, "verified from order" badge
  2. Success screen — points, tiered rewards, swipe-to-redeem, city-explorer progress, account CTA

Points

stars × 5 per dish.

Structure

src/
  main.tsx                Entry point
  app/
    App.tsx               State + flow (the core)
    TableRatingScreen.tsx Rating screen (all dishes on one screen)
    SuccessScreen.tsx     Success screen + rewards
    types.ts
  components/
    StarRating.tsx
    SwipeToRedeem.tsx
    ImageWithFallback.tsx
  styles/index.css

Tech

Vite · React 18 · TypeScript · Tailwind CSS 4 · motion · lucide-react

Not done yet

  • Persist ratings to a backend (see the // later: comment in App.tsx)
  • Load dishes automatically from the order / POS instead of the hardcoded list
  • Account / login flow behind the "create account" button

The sample data (dish names, rewards) is placeholder — swap it for real venue data.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages