Discover and support verified minority-owned and Howard University-affiliated businesses.
CommunityConnect (also branded as "Minority X-Change") is a web platform that connects users with verified minority-owned businesses and Howard University-affiliated entrepreneurs. The platform provides business discovery, authentication, verification workflows, and review capabilities.
The platform operates around three primary actors:
- Visitors – Can browse public business listings
- Authenticated Users – Can create and manage business profiles
- Administrators – Can approve or reject business verification requests
Core domain concepts:
- Business discovery
- Role-based access control
- Business verification lifecycle
- Secure authentication
- 🔍 Business Discovery: Browse and search minority-owned businesses by category, location, price level, and more
- ✅ Verification System: Verified business profiles with pending/verified/rejected status workflow
- 👤 User Authentication: Secure registration and login via Supabase Auth
- 📝 Business Profiles: Business owners can create and manage detailed profiles
- ⭐ Reviews: Users can leave reviews and ratings for businesses
- � Advanced Filtering: Filter by category, price level, languages, minority-owned status, and Howard affiliation
- Frontend: React 18.3.1 + TypeScript
- Build Tool: Vite 5.4.19
- Routing: React Router DOM 6.30.1
- UI Components: shadcn/ui (Radix UI primitives)
- Styling: Tailwind CSS 3.4.17
- State Management: TanStack React Query 5.83.0
- Backend: Supabase (PostgreSQL + Auth + Storage)
- Form Handling: React Hook Form + Zod validation
- Icons: Lucide React
- Node.js 18+ (recommended: use nvm for version management)
- npm or yarn
- A Supabase account and project
git clone <YOUR_REPO_URL>
cd CommunityConnectnpm installCreate a .env file in the project root:
VITE_SUPABASE_URL=https://your-project-id.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your-anon-public-key
VITE_SUPABASE_PROJECT_ID=your-project-idHow to get Supabase credentials:
- Go to Supabase Dashboard
- Create a new project or select an existing one
- Go to Project Settings > API
- Copy the Project URL →
VITE_SUPABASE_URL - Copy the
anonpublickey →VITE_SUPABASE_PUBLISHABLE_KEY - Copy the Project ID →
VITE_SUPABASE_PROJECT_ID
The project includes Supabase migrations in the supabase/ directory. Run these migrations in your Supabase project:
- Go to Supabase Dashboard > SQL Editor
- Run the migration files in order (check
supabase/migrations/)
Or use the Supabase CLI:
supabase db pushnpm run devThe application will be available at http://localhost:8080
npm run dev- Start development server with hot reloadnpm run build- Build for productionnpm run build:dev- Build in development modenpm run preview- Preview production build locallynpm run lint- Run ESLint
src/
├── components/ # Reusable UI components
│ ├── ui/ # shadcn/ui components
│ ├── AuthButton.tsx
│ ├── BusinessCard.tsx
│ ├── FilterSidebar.tsx
│ └── ReviewCard.tsx
├── pages/ # Route pages
│ ├── Index.tsx # Homepage
│ ├── Browse.tsx # Business listings
│ ├── BusinessDetail.tsx # Business detail page
│ ├── Auth.tsx # Authentication
│ └── NotFound.tsx
├── hooks/ # Custom React hooks
├── integrations/
│ └── supabase/ # Supabase client & types
├── lib/ # Utility functions
├── types/ # TypeScript type definitions
├── App.tsx # Main app component
├── main.tsx # Entry point
└── index.css # Global styles
- TypeScript strict mode enabled
- ESLint configured with React hooks rules
- Components use functional components with hooks
- Styling via Tailwind CSS utility classes
src/App.tsx- Main application component with routingsrc/integrations/supabase/client.ts- Supabase client configurationvite.config.ts- Vite build configurationtailwind.config.ts- Tailwind CSS configuration
npm run buildThe production build will be in the dist/ directory.
- Vercel: Connect your Git repository, set environment variables, deploy
- Netlify: Connect repository, set build command
npm run build, set publish directorydist - Supabase Hosting: Use Supabase's built-in hosting
- Any static host: Upload
dist/folder contents
Ensure your production environment has the same .env variables:
VITE_SUPABASE_URLVITE_SUPABASE_PUBLISHABLE_KEYVITE_SUPABASE_PROJECT_ID
The application uses the following Supabase tables:
- profiles: User profile information
- user_roles: Role-based access control (business_owner, customer)
- business_profiles: Business information and verification status
- reviews: User reviews for businesses
Row Level Security (RLS) policies are enabled for data protection.
profiles.id → references auth.users.id
user_roles.user_id → references profiles.id
business_profiles.owner_id → references profiles.id
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amezing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
[Add your license here]
For issues and questions, please open an issue in the repository.
Built with ❤️ using React, Vite, and Supabase