Skip to content

adavidryu/bytez

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍜 Bytez

Find what to order — not just where to eat.

Bytez is a dish-first food review app for iOS. Most apps tell you where to go. Bytez answers the question people actually ask at the table: "What dish should I get?"


✨ Features

  • Explore nearby restaurants — Map + scrollable list, with restaurants that have Bytez reviews surfaced at the top
  • Dish-level reviews — Rate individual dishes with tags, photos, and detailed notes
  • Dish Summary — Search a dish within a restaurant and see an aggregated "quick verdict" (avg rating, top tags, latest photo) before diving into individual reviews
  • Dish suggestions — When writing a review, see previously reviewed dishes at that restaurant to keep naming consistent
  • Favorites — Save reviews from other users to revisit later
  • Profiles — Avatar upload, display name, bio, and light/dark/system appearance toggle

🛠 Tech Stack

Layer Tech
UI SwiftUI (iOS 17+)
Maps MapKit (MKLocalSearch, annotations, detail views)
Backend Supabase — Auth, Postgres, Storage
Auth Email/password, Sign in with Apple, Google OAuth
Images PhotosPicker, Supabase Storage, in-memory caching

🚀 Getting Started

Prerequisites

  • Xcode 15+
  • iOS 17+ Simulator or device
  • A Supabase project (free tier works)

1. Clone the repo

git clone https://github.com/YOUR_USERNAME/bytez.git
cd bytez

2. Configure Supabase credentials

Create a file at th26/Secrets.swift:

import Foundation

enum Secrets {
    static let supabaseURL = "https://YOUR_PROJECT_REF.supabase.co"
    static let supabaseAnonKey = "YOUR_ANON_KEY"
}

⚠️ Do not commit this file. It's already in .gitignore.

3. Set up Supabase tables

Run the following in your Supabase SQL Editor:

-- Profiles
create table profiles (
  id uuid primary key references auth.users(id),
  username text unique,
  display_name text,
  bio text,
  avatar_url text,
  settings jsonb,
  created_at timestamptz default now()
);

-- Restaurants
create table restaurants (
  id uuid primary key default gen_random_uuid(),
  name text not null,
  address text,
  city text,
  latitude double precision,
  longitude double precision,
  mapkit_id text unique,
  created_at timestamptz default now()
);

-- Reviews
create table reviews (
  id uuid primary key default gen_random_uuid(),
  user_id uuid references profiles(id) not null,
  restaurant_id uuid references restaurants(id) not null,
  dish_name text not null,
  rating int not null check (rating between 1 and 5),
  review_text text,
  photos text[],
  tags text[],
  created_at timestamptz default now(),
  updated_at timestamptz
);

-- Saved Reviews
create table saved_reviews (
  user_id uuid references profiles(id) not null,
  review_id uuid references reviews(id) not null,
  saved_at timestamptz default now(),
  primary key (user_id, review_id)
);

Also create two Storage buckets: avatars and foods (both public).

4. Build and run

Open th26.xcodeproj in Xcode, select a simulator, and hit Run.


📁 Project Structure

th26/
├── th26App.swift           # App entry point, auth state routing
├── ContentView.swift       # Explore tab, map, bottom sheet, tab bar
├── Auth/
│   ├── AuthManager.swift   # Supabase Auth wrapper
│   └── LoginView.swift     # Sign in / sign up UI
├── Models/
│   ├── DataModels.swift    # Codable structs (Profile, Restaurant, Review, etc.)
│   └── DataManager.swift   # Supabase CRUD operations
├── Views/
│   ├── RestaurantDetailView.swift   # Restaurant page + dish search + reviews
│   ├── NewReviewView.swift          # Create review form with dish suggestions
│   ├── Components/
│   │   ├── ReviewCard.swift         # Review display with photos, tags, actions
│   │   ├── AvatarView.swift         # Cached avatar component
│   │   └── BrandMark.swift          # Bytez logo
│   └── Tabs/
│       ├── FavoritesView.swift
│       ├── MyReviewsView.swift
│       └── ProfileView.swift
├── StorageManager.swift    # Image uploads to Supabase Storage
├── LocationManager.swift   # CoreLocation wrapper
└── SupabaseClient.swift    # Shared Supabase client instance

🗺 Roadmap

  • Smarter dish matching (aliases, synonyms, fuzzy search)
  • "What should I order?" ranking per restaurant
  • Tag-based filters (spicy, healthy, late-night)
  • Shareable dish cards
  • Real-time location onboarding (beyond demo mode)
  • Social features (follow users, activity feed)

🧠 Why Bytez?

People don't want "more reviews" — they want faster confidence. Yelp and Google tell you a restaurant is 4.2 stars, but that doesn't help when you're staring at a 40-item menu. Bytez flips the model: search by dish, see what others actually ordered, and make a decision in seconds.


📄 License

MIT — do what you want, just don't blame us if you order the wrong thing.


Built with ☕ and 🍜 @ TAMU.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages