A modern web application designed to help users discover and capture tickets for events happening across Sydney. This platform aggregates events from multiple sources and provides a seamless user experience for event discovery and lead capture.
Sydney Events is a full-stack web application built as an assignment project that demonstrates:
- Event discovery and filtering capabilities
- Real-time email lead capture
- Backend integration with Supabase for data persistence
- Modern React architecture with TypeScript
- Responsive UI/UX design with Tailwind CSS
- Event Discovery: Browse and search events happening in Sydney
- Advanced Filtering: Filter events by date range and venue/location
- Event Details: View comprehensive event information including images, descriptions, and timing
- Lead Capture: Collect user emails for ticket notifications with optional newsletter opt-in
- Event Redirect: Direct users to original ticket booking pages
- Real-time event data from Supabase
- Email validation and capture
- Row-level security (RLS) policies for data protection
- Responsive design for mobile and desktop
- Type-safe TypeScript implementation
Frontend:
- React 18+ with TypeScript
- Vite (build tool)
- Tailwind CSS (styling)
- shadcn-ui (component library)
- React Query (data fetching and caching)
- React Hook Form (form management)
- Zod (schema validation)
Backend & Database:
- Supabase (PostgreSQL database with real-time capabilities)
- PostgreSQL (relational database)
- Row-level Security (RLS) for access control
Development Tools:
- Node.js & npm
- ESLint (code linting)
- Vitest (testing framework)
- PostCSS (CSS processing)
Stores all event information with the following fields:
id(UUID): Primary keytitle(TEXT): Event namedate_time(TIMESTAMP): Event date and timevenue(TEXT): Venue name/locationcity(TEXT): City (default: Sydney)description(TEXT): Event descriptionimage_url(TEXT): Event image URLsource_name(TEXT): Event source/provideroriginal_url(TEXT): Link to booking pagestatus(ENUM): Event status (new, updated, inactive, imported)created_at,updated_at,last_scraped_at: Timestamps
Captures user information for event ticket notifications:
id(UUID): Primary keyemail(TEXT): User email addressevent_id(UUID): Foreign key to eventsemail_opt_in(BOOLEAN): Newsletter subscription preferencecreated_at(TIMESTAMP): Submission timestamp
- Node.js (v16 or higher) - Install with nvm
- Git
- A Supabase project with configured database
# Step 1: Clone the repository
git clone https://github.com/TheTimeMachine01/SydneyEvents.git
# Step 2: Navigate to project directory
cd SydneyEvents
# Step 3: Install dependencies
npm install
# Step 4: Link to Supabase project
npx supabase link --project-ref <YOUR_PROJECT_REF>
# Step 5: Push database migrations
npx supabase db push
# Step 6: Create .env.local file with Supabase credentials
# Required environment variables:
# VITE_SUPABASE_URL=<your_supabase_url>
# VITE_SUPABASE_ANON_KEY=<your_anon_key>
# Step 7: Start development server
npm run devThe application will be available at http://localhost:5173
# Start development server with hot reload
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Run tests
npm run test
# Run linter
npm run lintsrc/
├── components/ # React components
│ ├── EventCard.tsx # Event display card
│ ├── Header.tsx # Navigation header
│ ├── LeadCaptureModal.tsx # Email capture modal
│ └── ui/ # shadcn-ui components
├── hooks/ # Custom React hooks
├── integrations/ # External service integrations
│ └── supabase/ # Supabase client setup
├── lib/ # Utility functions
├── pages/ # Page components
│ ├── Index.tsx # Home/events listing page
│ ├── Dashboard.tsx # Admin dashboard
│ ├── Login.tsx # Authentication
│ └── NotFound.tsx # 404 page
├── types/ # TypeScript type definitions
└── utils/ # Helper utilities
- User lands on home page
- Events are fetched from Supabase and displayed in grid layout
- User can search by title/venue or filter by date range
- User clicks "Get Tickets" button on an event
- Modal opens with email input form
- User enters email and optionally opts into newsletter
- Email is validated using Zod schema
- Data is inserted into leads table with event reference
- User is redirected to original event booking page
The application is configured for deployment on Vercel with the following setup:
# Build and deploy to Vercel
npm run buildConfiguration files:
vercel.json: Vercel deployment settingsvite.config.ts: Build and dev server configurationtsconfig.json: TypeScript configuration
- Row-Level Security (RLS): Policies ensure only authorized users can access sensitive data
- Email Validation: Client-side and schema validation prevents invalid submissions
- Type Safety: TypeScript ensures compile-time type checking
- Environment Variables: Sensitive credentials stored in
.env.local
- User authentication and saved events
- Advanced analytics dashboard
- Event recommendations based on user preferences
- Integration with calendar applications
- Mobile app development
- Multi-city support expansion
This project demonstrates: ✓ Full-stack web development capabilities ✓ Modern React patterns and hooks ✓ TypeScript for type safety ✓ Database design and management ✓ API integration ✓ Responsive UI/UX design ✓ Form handling and validation ✓ State management with React Query
For development contributions, ensure:
- Code follows ESLint standards
- Components use TypeScript for type safety
- Changes are tested before submission
- Commit messages are descriptive
This project is created as an assignment project.