https://bagel-memory-29143195.figma.site
Making it easy to meet each other.
AI-powered calendar and community platform that eliminates scheduling friction and enables like-minded connections through intelligent matching.
- 🤖 AI-Powered Event Creation — Natural language event scheduling
- ⚡ Quick Gather — Spontaneous meetups with nearby aligned people
- 🎯 Like-Minded Matching — Growth-based and skill-based connections
- 📅 Smart Scheduling — Automatic time zone and availability coordination
- 🔄 Self-Healing Intelligence — Learns from behavior patterns
- 🔒 Privacy-First — No event storage, Google Calendar integration only
- React 19.2.0 — Latest React with concurrent features
- Tailwind CSS — Utility-first styling
- Mobile-First Design — Optimized for mobile devices
- ICP (Internet Computer Protocol) — Decentralized blockchain infrastructure
- Juno — Serverless platform on ICP
- PocketIC — Backend canister testing
- Playwright — End-to-end frontend testing
- Node.js 18+ and npm/yarn
- dfx (DFINITY Canister SDK)
- Google Calendar API credentials
# Clone repository
git clone https://github.com/yourusername/vibevent.git
cd vibevent
# Install dependencies
npm install
# Install dfx (if not already installed)
sh -ci "$(curl -fsSL https://internetcomputer.org/install.sh)"# Start dfx in background
dfx start --background --clean
# Deploy canisters locally
dfx deploy# Development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewCreate .env file:
VITE_GOOGLE_CLIENT_ID=your_google_client_id
VITE_GOOGLE_API_KEY=your_google_api_key
VITE_CANISTER_ID_BACKEND=your_backend_canister_id# Run all backend tests
npm run test:backend
# Run specific test suite
npm run test:backend -- --grep "matching"
# Watch mode
npm run test:backend:watch# Install Playwright browsers
npx playwright install
# Run all e2e tests
npm run test:e2e
# Run tests in UI mode
npm run test:e2e:ui
# Run specific test file
npx playwright test tests/auth.spec.ts
# Generate test report
npx playwright show-reportvibevent/
├── src/
│ ├── components/ # React components
│ │ ├── Profile/
│ │ ├── Events/
│ │ ├── Availability/
│ │ └── QuickGather/
│ ├── hooks/ # Custom React hooks
│ ├── utils/ # Helper functions
│ ├── services/ # API services
│ │ ├── googleCalendar.ts
│ │ ├── matching.ts
│ │ └── ai.ts
│ ├── types/ # TypeScript types
│ └── App.tsx # Root component
├── backend/
│ ├── canisters/ # ICP canisters
│ │ ├── matching/
│ │ ├── profile/
│ │ └── availability/
│ └── tests/ # PocketIC tests
├── tests/ # Playwright e2e tests
│ ├── auth.spec.ts
│ ├── events.spec.ts
│ ├── matching.spec.ts
│ └── quick-gather.spec.ts
├── dfx.json # DFX configuration
├── playwright.config.ts # Playwright configuration
└── tailwind.config.js # Tailwind configuration
- Mobile-First: All components optimized for mobile viewports first
- Component-Based: Reusable React components with Tailwind styling
- State Management: React 19 Context API + hooks
- Routing: React Router v6
- ICP Canisters: Decentralized smart contracts on Internet Computer
- Juno Integration: Serverless functions and storage
- Inverted Index: Dual indexes for growth levels and skills matching
- Google Calendar API: OAuth 2.0 integration for calendar operations
- Location filtering (for in-person events)
- Growth level index query
- Skills index query
- Composite scoring: Location 40% + Growth 40% + Skills 20%
- Return top 5 matches
# Add mainnet identity
dfx identity new mainnet
dfx identity use mainnet
# Deploy to mainnet
dfx deploy --network ic
# Get canister IDs
dfx canister --network ic id backend
dfx canister --network ic id frontend# Build
npm run build
# Deploy (example with Vercel)
vercel --prodMatching API
POST /api/matching/find
Body: { userId, eventType, location?, limit: 5 }
Returns: Array<MatchedUser>Schedule API
POST /api/schedule/suggest
Body: { attendees[], duration, preferredRange? }
Returns: Array<TimeSlot>Profile API
GET /api/profile/:userId
PUT /api/profile/:userId
Body: { growthLevel, skills, availability }Quick Gather API
POST /api/quick-gather/activate
Body: { duration, radius?, type: 'online' | 'in-person' }
Returns: Array<ActiveUser>- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
- Use Prettier for formatting
- Follow React hooks best practices
- Write tests for new features
- Mobile-first responsive design
All components follow mobile-first principles:
// Example: Mobile-first Tailwind classes
<div className="w-full p-4 md:w-1/2 md:p-6 lg:w-1/3 lg:p-8">
{/* Mobile: full width, 1rem padding */}
{/* Tablet: half width, 1.5rem padding */}
{/* Desktop: third width, 2rem padding */}
</div>- Minimum touch target: 44x44px
- Bottom navigation for thumb reach
- Swipe gestures for common actions
- Optimized for one-handed use
- Lighthouse Score Target: 90+ on mobile
- First Contentful Paint: < 1.5s
- Time to Interactive: < 3.5s
- Bundle Size: < 200KB (gzipped)
- No event data stored in backend
- OAuth 2.0 for Google Calendar access
- Location data anonymized (proximity only)
- User controls all data through Google settings
- ICP blockchain security guarantees
MIT License - see LICENSE file for details
- Documentation: docs.vibevent.ai
- Issues: GitHub Issues
- Email: contact@vibevent.ai
- Google Calendar integration
- Quick Gather feature
- Core matching algorithm
- Self-healing intelligence
- Weighted matching preferences (Q1 2026)
- Mobile apps (iOS/Android) (Q3 2026)
- Team features (Q3 2026)
- Outlook/Apple Calendar integration (Q3 2026)
Made with ❤️ by the Vibevent team