Skip to content

jmarks/LSDN

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Local Singles Date Night

Local Singles Date Night Node.js React TypeScript PostgreSQL

Local Singles Date Night is a dating platform that flips the traditional model on its head: instead of paying for memberships or endless boosts, users pre-purchase a 1, 3, 5, or 10-dinner package from participating local restaurants and businesses.

🎯 Value Proposition

For Singles:

  • Curated first-date experiences with local restaurants
  • No endless swiping or chat fatigue
  • Budget clarity with prepaid packages
  • Safety features and verified profiles
  • Real-world meetings with compatible matches

For Restaurants:

  • Predictable prepaid revenue
  • Demand smoothing on lower-traffic nights
  • Turnkey co-marketing opportunities
  • Reduced no-shows with prepaid bookings

πŸš€ Quick Start

Prerequisites

  • Docker and Docker Compose
  • Git

Local Development with Docker (Recommended)

  1. Clone and setup:

    git clone <repository-url>
    cd LSDN
  2. Start all services with Docker Compose:

    docker compose up -d

    This will start:

    • PostgreSQL with PostGIS (port 5432)
    • Redis (port 6379)
    • Backend API (port 3000)
    • Frontend (port 5173)
  3. Seed the database with Santa Cruz demo data:

    docker compose exec backend npm run seed
  4. Access the applications:

  5. Test credentials:

    • Email: sc.tester@example.com
    • Password: Password123!

Viewing Logs

# All services
docker compose logs -f

# Specific service
docker compose logs -f backend
docker compose logs -f frontend

Stopping Services

# Stop all containers
docker compose down

# Stop and remove volumes (fresh start)
docker compose down -v

πŸ—οΈ Architecture

Tech Stack

Backend:

  • Node.js with Express.js
  • TypeScript
  • PostgreSQL with PostGIS
  • Redis for caching
  • Stripe for payments
  • Cloudinary for image processing

Frontend:

  • React 18 with TypeScript
  • Vite for build tooling
  • Tailwind CSS for styling
  • React Query for state management
  • React Hook Form for forms

Infrastructure:

  • Docker for containerization
  • Docker Compose for local development
  • Render.com for easy deployment
  • GitHub Actions for CI/CD

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   React App     β”‚    β”‚   Restaurant    β”‚    β”‚   Admin Portal  β”‚
β”‚   (Frontend)    β”‚    β”‚   Partner Portalβ”‚    β”‚   (Management)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚                      β”‚                      β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚    Express.js API       β”‚
                    β”‚    (Backend Server)     β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚     PostgreSQL DB       β”‚
                    β”‚    (Primary Storage)    β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚        Redis            β”‚
                    β”‚    (Caching/Session)    β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚            β”‚            β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”  β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
          β”‚   Stripe   β”‚  β”‚ Cloudinary  β”‚  β”‚ SendGrid β”‚
          β”‚  Payments  β”‚  β”‚  Images     β”‚  β”‚  Email   β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“– Documentation

🎯 Key Features (Implemented)

User Experience

  • βœ… Email/Password Registration - Simple account creation
  • βœ… Profile Completion - Name, age, bio, interests, goals (interests/goals optional)
  • βœ… Preferences Setup - Age range, distance radius, interests
  • βœ… Discover Restaurants - Browse local partner restaurants
  • βœ… Proximity-Based Matching - PostGIS-powered location matching
  • βœ… Real Bookings - Create bookings with voucher codes and QR codes
  • βœ… Voucher System - 8-character unique codes per booking
  • βœ… QR Code Generation - Scannable codes for restaurant validation
  • βœ… State Persistence - Onboarding progress saved to localStorage

Restaurant Partner Experience (Data Seeded)

  • βœ… Restaurant Profiles - Name, description, location, cuisine type
  • βœ… Package Management - Date night packages with pricing
  • βœ… Availability Slots - Time-based booking slots
  • βœ… Capacity Management - Track current bookings vs capacity
  • 🚧 Partner Portal - Planned for future release

Technical Features

  • βœ… JWT Authentication - Secure token-based auth
  • βœ… PostGIS Integration - Geo-spatial queries for proximity matching
  • βœ… Joi Validation - Schema-based input validation
  • βœ… Docker Deployment - Full containerization
  • βœ… TypeScript - Type-safe backend and frontend
  • βœ… Context-Based State - Global auth and onboarding contexts

Features In Progress

  • 🚧 Email Verification - Currently bypassed (auto-verified)
  • 🚧 Stripe Payments - Integration stubbed
  • 🚧 Real-time Messaging - Basic messaging structure in place
  • 🚧 Image Uploads - Currently base64, plan to use Cloudinary

πŸ“š Documentation

πŸ”§ Development

Project Structure

LSDN/
β”œβ”€β”€ backend/              # Node.js + Express API
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ entities/     # TypeORM entities
β”‚   β”‚   β”œβ”€β”€ routes/       # API route handlers
β”‚   β”‚   β”œβ”€β”€ services/     # Business logic
β”‚   β”‚   β”œβ”€β”€ middleware/   # Auth, validation, etc.
β”‚   β”‚   └── scripts/      # Migration and seed scripts
β”‚   └── dist/             # Compiled TypeScript
β”œβ”€β”€ frontend/             # React + Vite frontend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/   # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ contexts/     # React contexts (Auth, Onboarding)
β”‚   β”‚   β”œβ”€β”€ hooks/        # Custom React hooks
β”‚   β”‚   └── pages/        # Page components
β”‚   └── dist/             # Production build
β”œβ”€β”€ docker-compose.yml    # Docker services configuration
└── docs/                 # Additional documentation

Environment Setup

The application uses environment variables for configuration. Key variables:

Backend:

  • DATABASE_URL - PostgreSQL connection string
  • REDIS_URL - Redis connection string
  • JWT_SECRET - JWT signing secret
  • FRONTEND_URL - CORS allowed origin

Frontend:

  • VITE_API_URL - Backend API URL (handled by Vite proxy)

Testing

# Backend tests (when implemented)
cd backend
npm run test

# Manual API testing
curl http://localhost:3000/api/restaurants

πŸ“Š Metrics and Monitoring

Key Performance Indicators

  • Completed first dates per active user per month
  • Restaurant partner NPS
  • GMV and take rate
  • Sign-up to package purchase conversion
  • Ask to accept rate
  • Show rate and no-show rate
  • Slot utilization per venue

Monitoring Setup

  • Application logs
  • Database performance
  • API response times
  • Error tracking
  • User analytics

πŸ›‘οΈ Security

Authentication

  • JWT with refresh tokens
  • Password hashing with bcrypt
  • Email verification required

Authorization

  • Role-based access control
  • API rate limiting
  • Input validation and sanitization

Data Protection

  • HTTPS only
  • Encrypted database connections
  • Secure file uploads
  • Regular security audits

🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

  1. Fork the repository
  2. Clone your fork
  3. Create a feature branch
  4. Make your changes
  5. Add tests
  6. Submit a pull request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

πŸ“ž Support

For support and questions:

  • Create an issue in this repository
  • Join our community discussions
  • Contact the development team

Local Singles Date Night - Making dating local, meaningful, and community-focused. ❀️

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published