A minimal app for live Q&A. Hosts create a queue, share the link, and audiences submit anonymous questions. Features upvoting and allows the host to sort questions by votes or time. Perfect for streamers and voice chats.
- Anonymous Q&A: No sign-up required for participants
- Real-time updates: Live question submission and voting via Server-Sent Events
- Upvoting system: Audiences can vote for their favorite questions
- Host controls: Sort by votes or time, mark questions as read, moderate content
- Auto-cleanup: Queues automatically expire after 24 hours
- Multi-tenant: Multiple isolated queues can run simultaneously
- Internationalization: Multi-language support with i18n
| Category | Technology |
|---|---|
| Frontend | React 19, Vite, React Router, i18next |
| Backend | Python, Flask, Flask-SQLAlchemy, Flasgger |
| Development Database | SQLite |
| Production Database | PostgreSQL |
| Deployment | Railway / Render |
filap/
├── filap-app/ # React frontend application
│ ├── src/
│ ├── package.json
│ └── ...
├── filap-api/ # Flask backend API
│ ├── models/ # SQLAlchemy models
│ ├── routes/ # API route handlers
│ ├── services/ # Business logic layer
│ ├── tests/ # Test suites
│ ├── app.py # Flask application entry point
│ ├── requirements.txt
│ └── ...
├── dev-support.md # Backend architecture documentation
└── dev-support-frontend.md # Frontend design guidelines
- Node.js 18+ (for frontend)
- Python 3.8+ (for backend)
- SQLite (development) or PostgreSQL (production)
- Navigate to the API directory:
cd filap-api- Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Run the Flask application:
python app.pyThe API will be available at http://localhost:5000 with Swagger documentation at http://localhost:5000/api/docs/.
- Navigate to the app directory:
cd filap-app- Install dependencies:
npm install- Start the development server:
npm run devThe frontend will be available at http://localhost:5173.
npm run dev- Start development servernpm run build- Build for productionnpm run lint- Run ESLintnpm run preview- Preview production buildnpm run generate-api- Generate API client from OpenAPI spec
- Routes (
filap-api/routes/): HTTP endpoint handlers that parse requests, validate auth, and return responses - Services (
filap-api/services/): Business logic layer containing all rules and orchestrating model interactions - Models (
filap-api/models/): Data layer with SQLAlchemy models handling schema and relationships
- Flask Application: Main API server with CORS and Swagger documentation
- Database Models: Queue, Message, and MessageUpvote models with proper relationships
- Real-time Events: Server-Sent Events for live updates
- Authentication: Host secret tokens and user fingerprinting
- React 19: Modern React with hooks and context
- Vite: Fast build tool and development server
- React Router: Client-side routing
- i18next: Internationalization support
- Responsive Design: Mobile-first approach with clean, minimal UI
- Multi-tenancy with unique queue IDs
- Host session persistence via localStorage tokens
- Automatic 24-hour session expiry with cleanup
- Server-Sent Events (SSE) for live updates
- Instant synchronization for new questions, votes, and status changes
- Real-time sorting and moderation
- One vote per user (anonymous fingerprinting)
- Sort by most votes or newest first
- Atomic vote count updates
id(UUID) - Public queue identifiername- Optional queue namehost_secret(UUID) - Private host tokencreated_at&expires_at- Automatic 24h expirydefault_sort_order- Queue settings
id(UUID) - Message identifierqueue_id- Foreign key to queuetext&author_name- Message contentvote_count- Denormalized vote counteris_read- Boolean status flag
id(UUID) - Upvote identifiermessage_id&user_token- Voting relationship- Unique constraint preventing duplicate votes
The API provides comprehensive Swagger documentation available at /api/docs/ when running the backend server.
- Queue Management: Create, retrieve, and update queues
- Message Management: Submit, retrieve, update, and delete messages
- Voting: Cast and manage upvotes
- Real-Time Events: SSE endpoint for live updates
Authentication uses header-based tokens:
X-Queue-Secret: Host authenticationX-User-Token: User identification for voting
Backend tests:
cd filap-api
python -m pytestGenerate TypeScript API client from OpenAPI spec:
cd filap-app
npm run generate-apiBackend configuration is handled through environment variables and config.py.
The frontend follows a modern, minimalistic design approach:
- Clean, lightweight interface optimized for live sessions
- Mobile-first responsive design
- Accessibility compliance (WCAG AA)
- Real-time updates with smooth animations
- Intuitive host controls and audience participation
- Fork the repository
- Create a feature branch
- Make your changes following the existing architecture
- Add tests for new functionality
- Update documentation as needed
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.