Making connection as simple as showing up.
Activity Match is a modern platform that connects people through social activities. Users can discover local activities, create their own, and manage join requestsβall in one intuitive interface.
- Clean landing page with tagline and brand logo
- Feature cards highlighting Discover, Create, and Requests
- Quick navigation to core features
- Blue (#2e4ed2) design theme with pink (#ee9dd6) accent cards
- Browse activities created by other users
- Swipe view for quick activity browsing
- List view for detailed activity information
- Filter activities by category, gender preferences, age range, and distance
- Send join requests with personalized messages to activity hosts
- Real-time activity feed
- Host your own activities with detailed forms
- Upload activity images with preview
- Set category, date, time, and location
- Define maximum participant count (required field)
- Add optional filters:
- Gender preferences
- Age range requirements
- Distance radius
- Custom categories (if existing categories don't fit)
- Form validation with inline feedback
- Success notifications with redirect to Discover
- View and manage join requests for hosted activities
- Accept or decline participant requests
- See participant details and introduction messages
- Track pending and resolved requests
- Send and receive messages from activity participants
- Unread message tracking
- Real-time message notifications in header badge
- View and edit user profile information
- Track activities hosted and joined
- Manage account settings
- Change password
- Delete account option
- Google OAuth integration
- Outlook OAuth integration
- Traditional email/password signup & login
- Secure session management
- Account permissions management
- Frontend: Next.js 16+ with React 19, TypeScript
- Styling: Tailwind CSS + shadcn UI components
- Backend: Next.js API routes (server-side)
- Database & Storage: Supabase (PostgreSQL + Cloud Storage)
- Authentication: Supabase Auth (OAuth + Email/Password)
- Image Hosting: Supabase Storage
src/
βββ app/
β βββ page.tsx # Homepage
β βββ layout.tsx # Root layout
β βββ globals.css # Global styles & theme variables
β βββ discover/page.tsx # Discover activities
β βββ create/page.tsx # Create activity form
β βββ profile/page.tsx # User profile & settings
β βββ requests/page.tsx # Manage join requests
β βββ messages/page.tsx # Messages hub
β βββ login/page.tsx # Login page
β βββ signup/page.tsx # Signup page
β βββ auth/callback/page.tsx # OAuth callback
β βββ api/
β βββ posts/route.ts # Create & fetch activities
β βββ messages/route.ts # Message endpoints
β βββ join-requests/route.ts # Request management
β βββ requests/route.ts # Request list
β βββ user/
β β βββ profile/route.ts
β β βββ update-profile/route.ts
β β βββ change-password/route.ts
β β βββ delete-account/route.ts
β βββ ai/
β β βββ icebreakers/route.ts
β β βββ polish/route.ts
β βββ auth/
β βββ google/route.ts
β βββ outlook/route.ts
β βββ login/route.ts
β βββ signup/route.ts
β βββ permissions/route.ts
βββ components/
β βββ layout/Header.tsx # Navigation header with blue (#2e4ed2) styling
β βββ auth/
β β βββ LoginForm.tsx
β β βββ PermissionsForm.tsx
β βββ ui/ # shadcn UI components
βββ lib/
βββ utils.ts
βββ supabase/client.ts # Supabase client setup
- Node.js 18+ and npm
- Supabase account (for database & authentication)
- Clone the repository:
git clone <repository-url>
cd activities-match- Install dependencies:
npm install- Set up environment variables:
Create a
.env.localfile in the root directory with:
NEXT_PUBLIC_SUPABASE_URL=<your-supabase-url>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your-anon-key>
SUPABASE_SERVICE_ROLE_KEY=<your-service-role-key>
- Run the development server:
npm run dev- Open http://localhost:3000 in your browser to see the result.
- Primary Blue:
#2e4ed2(navigation links, user text, profile icon) - Secondary Pink:
#ee9dd6(feature cards on homepage) - Background:
#fdf8fa(light pink, main surface) - Homepage Background:
#2e4ed2(blue gradient background) - Dark Mode: Integrated dark theme support throughout
- Font Family: Geist (Vercel's design font)
- Headings: Semibold to Bold weights
- Body: Regular weight
- All main content areas use
#fdf8fabackground via CSS variable--background - White backgrounds automatically converted to
#fdf8favia CSS overrides - Consistent shadow and border styling across components
POST /api/posts- Create new activity (multipart/form-data with image)GET /api/posts- Fetch activities with paginationPOST /api/join-requests- Submit join requestGET /api/join-requests- Get requests for user's activitiesGET /api/requests- Get user's sent requests
GET/POST /api/user/profile- View/update profilePOST /api/user/change-password- Change passwordPOST /api/user/delete-account- Delete account
GET /api/messages- Fetch messagesPOST /api/messages- Send message
POST /api/auth/login- Email/password loginPOST /api/auth/signup- Create new accountGET /api/auth/google- Google OAuthGET /api/auth/outlook- Outlook OAuthGET /api/auth/callback- OAuth callback handler
npm run devServer runs on http://localhost:3000 with hot reload.
npm run build
npm startnpm run lintnpm testKey tables in Supabase PostgreSQL:
usersβ User profiles and authentication metadatapostsβ Activities/events created by users- Fields: title, description, category, date, time, location, max_participants, image_url, genders (JSON), age_min, age_max, distance, creator_email
join_requestsβ Requests to participate in activitiesmessagesβ Direct messages between users
- Activity images uploaded to Supabase Storage bucket:
activity-images - Images stored with public access URLs
- Preview shown on Create form before submission
- Fallback when Supabase not configured
Global CSS in src/app/globals.css:
.bg-whiteclasses override to usevar(--background)(#fdf8fa)- Maintains dark mode variants
- Ensures consistent color theme across all pages
β Created activity creation page with multipart form support β Implemented image upload with preview β Added optional filters (gender, age range, distance) β Created API endpoints for posts, join requests, and messages β Updated header with blue (#2e4ed2) navigation styling β Set global background to pink (#fdf8fa) β Redesigned homepage with logo, tagline, and feature cards β Added blue (#2e4ed2) homepage background β Styled feature cards with pink (#ee9dd6) backgrounds β Updated README with comprehensive documentation
- Real-time activity updates with WebSockets
- Advanced search and sorting
- User ratings and reviews system
- Activity analytics and insights
- Mobile app (React Native)
- Email notifications
- SMS reminders
- Google Maps integration for location
- Activity categories with icons
- Social sharing features
- Create a feature branch (
git checkout -b feature/your-feature) - Commit changes (
git commit -m 'Add feature') - Push to branch (
git push origin feature/your-feature) - Open a pull request
This project is licensed under the MIT License.
For issues or questions, please open an issue on the repository or contact the development team.