A lightweight, mobile-friendly web application designed to facilitate networking during AI Portland events.
This app helps attendees connect during the pre-event mingling period through:
- 📱 QR code entry (no login required)
- 🤖 Emoji-based matching
- 💬 AI-focused conversation prompts
- ⚡ Lightning-fast performance
- ♿ WCAG AA accessible design
- Zero friction: No accounts, no PII collection
- Mobile-first: Optimized for smartphones
- Accessible: WCAG AA compliant, screen reader friendly
- Lightweight: <150kb bundle size
- Real-time: Admin controls update all users instantly
- Offline-ready: Works on spotty event WiFi
- Frontend: Vanilla JavaScript + Vite
- Backend: Supabase (real-time database)
- Styling: Pure CSS (no frameworks)
- Deployment: Ready for Vercel/Netlify
npm install-
Copy the example environment file:
cp .env.example .env
-
Create a new project at supabase.com
-
Update
.envwith your Supabase credentials and admin password:VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-here VITE_ADMIN_PASSWORD=your-secure-password -
Set up the database:
- Go to Supabase SQL Editor
- Run the SQL commands to create the
event_statetable and policies
npm run devOpen http://localhost:3000 to see the app.
npm run buildThe production build will be in the dist/ folder.
- Scan QR code at event entrance
- Tap "Start" to get your emoji token
- Find someone with the same emoji
- Tap "I found them!" to get a conversation prompt
- Enjoy your conversation!
- Tap "New Match" to connect with someone else
- Navigate to
/admin.html - Click "Start Event" when ready to begin networking
- Click "End Event" when it's time to start the main event
- All attendees will see the update in real-time
├── index.html # Main app entry
├── admin.html # Admin controls
├── src/
│ ├── main.js # App initialization
│ ├── config.js # Configuration
│ ├── state.js # State management
│ ├── ui.js # UI rendering
│ ├── tokens.js # Emoji tokens
│ ├── prompts.js # Conversation prompts
│ ├── supabase.js # Database client
│ └── style.css # Styling
├── database-setup.sql # Supabase schema
└── package.json # Dependencies
Edit src/prompts.js and add to the PROMPTS array.
Edit src/tokens.js and modify the TOKENS array.
Edit CSS custom properties in src/style.css under :root.
npm install -g vercel
vercelnpm install -g netlify-cli
netlify deploy --prod- Bundle size: ~45kb (gzipped)
- Load time: <1s on 3G
- Lighthouse score: 95+
- WCAG AA color contrast
- Keyboard navigable
- Screen reader compatible
- 44px minimum touch targets
- Respects reduced motion preferences
- iOS Safari (latest 2 versions)
- Chrome on Android (latest)
- Chrome & Safari on desktop
MIT
Built with ❤️ for the AI Portland community