Skip to content

DinnaCo/dinnafind

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DinnaFind (pronunciation: /ˈdɪnəˌfaɪnd/) - Because ‘Yelp’ is what you do after eating bad sushi.

DinnaFind is your foodie wingman, using Touch Grass™️ Precision Geofencing Technology to nudge you toward epic eats and away from the same old takeout. Discover restaurants, save favorites, and get sassy reminders to try that dumpling spot you keep ignoring.

How It Works

  • Reverse Foodie Shaming: Get roasted for defaulting to fast food when a gem is nearby. Example: “POV: You’re at McDonald’s, but that artisanal taco truck is right there.”
  • Carb Respect Mode: Our Bread-Pilled Discovery Engine™️ prioritizes carb-heavy spots—because gluten’s a vibe, not a villain.
  • Grandma’s Guilt Trip API: Location-based reminders of family-recommended spots, with a side of “Nonna’s disappointed” if you skip them.
  • Smart Geofencing: Walk near a saved pizza joint? Get a ping. Drive past that legendary arepa truck? We’ll let you know.

🎪 Shameless Engagement Hacks

  • 🔔 Enable "Hangry Mode" for alerts that escalate from polite to your grandmother's guilt in 15min 📍 "POV: You're geotagged at McDonald's but saved 17 artisanal toast spots" 🍔 "Like a food wingman, but with 200% more tough love" 🕵️♂️ "Catfish-Free Check-In" Uses AI, satellite imagery, and vibes to confirm that "quaint café" isn't just a gas station hot dog stand with VSCO filters.

📲 Off-App Engagement Boosters

  • "Lived Experience Points (LEP)" "Bread-Pilled Discovery Engine" - Prioritizes carb-forward establishments because gluten is not the enemy, blandness is. "Forklift Certified" Badge Unlocked after visiting 5 saved spots. Proof you're not a foodie NPC.

Testimonials

Thanks to DinnaFind, I found a meatball sub so good it ended my family's 47-year feud over Sunday gravy. We're all friends now—even Uncle Tony apologized for Christmas '03! — Maria, 41, Peacemaker of the Tri-State Area

DinnaFind's omnichannel approach revolutionized my lunch game. I'm eating like a unicorn startup founder with next-level taste buds. — Brittany, 29, Marketing Manager

Got a notification while doomscrolling in an Uber. Now I’m emotionally attached to a falafel stand. — Aisha, 28, Former Smoothie Bowl Enthusiast

DinnaFind swapped my 20-piece McNugget session for a poke bowl alert. My inner child wept, but my cholesterol threw a party. — Mike, 32, Professional Sadboi

Woke up to 'THE CHURROS ARE NEAR' at 2 a.m. Zero regrets. — Diego, 24, Chaos Goblin

Named 'Best App That’s Not Your Notes App Full of Forgotten Ramen Places' —TechCrunch, Probably

Features

  • 🍔 Discover - Find restaurants near you powered by Foursquare Places API
  • 📍 Location-based - Search restaurants in your area or any location
  • 💾 Save Favorites - Build your personal restaurant bucket list
  • Track Visits - Mark restaurants as visited
  • 🏷️ Organize - Add notes, tags, and priorities to your saved places
  • 📱 Cross-platform - Works on iOS and Android
Tech Stack
  • Framework: React Native with Expo (Managed Workflow)
  • Language: TypeScript
  • Package Manager: Bun
  • Navigation: Expo Router (file-based routing)
  • Location Services:
    • Expo Location (Geolocation & Geofencing)
    • Background location tracking
  • State Management: Redux Toolkit with Redux Saga
  • Storage: Expo SecureStore & AsyncStorage
  • APIs:
    • Restaurant discovery API (TBD - Foursquare)
    • Custom backend for social features

Getting Started

Prerequisites
  • Node.js 18+
  • Bun (latest version)
  • Expo Go app on your phone
  • iOS Simulator (Mac) or Android Emulator (optional)

Installation

Clone the repository:

git clone https://github.com/DinnaCo/dinnafind.git
cd dinnafind && bun install

Running the App

# Start Expo development server
bun start

# Run on iOS Simulator
bun ios

# Run on Android Emulator
bun android

# Run on Expo Go (scan QR code)
bun start --tunnel

Project Structure

dinnafind/
├── __mocks__/          # Mock files for testing
├── __tests__/          # Test files
├── api/                # API integration layer
├── app/                # Expo Router screens
│   ├── (tabs)/         # Tab navigation screens
│   └── auth/           # Authentication flow
├── assets/             # Static assets (fonts, images)
├── components/         # Reusable UI components
│   ├── common/         # Shared components
│   └── screens/        # Screen-specific components
├── constants/          # App constants
├── contexts/           # React contexts
├── hooks/              # Custom React hooks
├── models/             # TypeScript models/interfaces
├── providers/          # App providers
├── services/           # Business logic services
├── store/              # Redux store configuration
│   ├── slices/         # Redux Toolkit slices
│   ├── sagas/          # Redux Sagas
│   └── reducers/       # Redux reducers
├── theme/              # Theme configuration
├── types/              # TypeScript type definitions
└── utils/              # Utility functions

Core Features Implementation

Geolocation & Geofencing
// Real-time location tracking for nearby restaurants
import * as Location from "expo-location";
import * as TaskManager from "expo-task-manager";

// Geofencing for restaurant notifications
const GEOFENCE_TASK = "restaurant-geofence";
Restaurant Discovery
  • User location-based search
  • Friend recommendations
  • Curated lists from trusted sources
  • Smart notifications based on proximity
Development
# Type checking
bun typecheck

# Linting
bun lint

# Run tests
bun test

# Build for preview
bun expo export
Building for Production
# Configure EAS
bun eas build:configure

# Build for iOS
bun eas build --platform ios

# Build for Android
bun eas build --platform android

Environment Variables

Local Development Setup

  1. Copy the example file:

    cp .env.example .env.local
  2. Fill in your API keys in .env.local:

    # Public variables (safe to expose)
    API_URL=https://api.foursquare.com/v3
    EXPO_ROUTER_APP_ROOT=./app
    APP_VARIANT=development
    # EXPO_PUBLIC_<ANY_ENV_SETTING>
    
    # Private variables (sensitive - only for local development)
    # These should be set as EAS environment variables for production builds
    FOURSQUARE_API_KEY=your_foursquare_api_key_here
    SUPABASE_URL=https://your-project-ref.supabase.co
    SUPABASE_ANON_KEY=your_supabase_anon_key_here
    BRANCH_KEY=your_branch_key_here
    BRANCH_KEY_TEST=your_branch_test_key_here
    SENTRY_AUTH_TOKEN=your_sentry_auth_token_here

Production Builds (EAS)

For production builds, sensitive environment variables are loaded from EAS environment variables, not from .env files.

Setting EAS Environment Variables

# Create a new environment variable
eas env:create --scope project --name FOURSQUARE_API_KEY --value "your_api_key" --type string

# Create Sentry auth token
eas env:create --scope project --name SENTRY_AUTH_TOKEN --value "your_auth_token" --type string

# List all environment variables
eas env:list

# Delete an environment variable
eas env:delete --name VARIABLE_NAME

Updating Environment Variables

# Update environment variables for a specific branch
eas update:env --branch production

# Update environment variables for a specific environment
eas update:env --environment production

Best Practices

  • Never commit .env.local files to version control
  • Use EAS environment variables for production builds
  • Keep sensitive keys private - they should never be exposed in client-side code
  • Use EXPO_PUBLIC_ prefix only for truly public variables

Required API Keys

  • Foursquare API: Get your API key from Foursquare Developers
  • Supabase: Create a project and get your keys from Supabase
  • Sentry: Get your auth token from Sentry for crash reporting

Documentation Links

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Guidelines

  • Follow the existing code style
  • Write meaningful commit messages
  • Add tests for new features
  • Update documentation as needed

License

This project is licensed under the MIT License.


About

DinnaFind - (pronunciation: /ˈdɪnəˌfaɪnd/) - Because ‘Yelp’ is what you do after eating bad sushi

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published