A text-first civic engagement platform for creating posts, voting on specific text passages, and thoughtful discussions. Built with React/GraphQL frontend and Node.js backend, featuring targeted voting, quotes, social features, and moderation tools for transparent public dialogue.
- Text-First Posts: Create and share detailed text-based content
- Targeted Voting: Vote on specific text passages within posts
- Quote System: Highlight and discuss specific quotes from content
- Social Features: User profiles, following, and activity feeds
- Moderation Tools: Admin panel for content moderation and user management
- Real-time Chat: Live discussions and reactions on posts
- Search & Discovery: Advanced search functionality with filters
- Responsive Design: Works seamlessly across desktop and mobile devices
- Material-UI Components: Modern, accessible interface components
- Real-time Updates: Live notifications and activity updates
- Dark/Light Themes: Customizable user interface themes
- Accessibility: WCAG compliant design with screen reader support
See Quote Vote in action! Watch our demonstration videos to get a quick overview of the platform's features and functionality:
Platform demonstration on Windows
Platform demonstration on Linux
These videos showcase:
- Creating and voting on posts
- Highlighting and discussing quotes
- Using the moderation tools
- Navigating the user interface
- React 17 - UI framework
- GraphQL - Data querying with Apollo Client
- Material-UI - Component library
- Redux Toolkit - State management
- Vite - Build tool and dev server
- Vitest - Testing framework
- Cypress - E2E testing
- Storybook - Component documentation
- Node.js - Runtime environment
- Express - Web framework
- Apollo Server - GraphQL server
- MongoDB - Database with Mongoose ODM
- JWT - Authentication
- WebSocket - Real-time subscriptions
- Stripe - Payment processing
- Nodemailer - Email functionality
monorepo/
βββ client/ # React frontend application
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ views/ # Page components
β β βββ layouts/ # Layout components
β β βββ graphql/ # GraphQL queries/mutations
β β βββ store/ # Redux store configuration
β β βββ utils/ # Utility functions
β βββ public/ # Static assets
β βββ cypress/ # E2E tests
β βββ docs/ # Documentation
βββ server/ # Node.js backend application
β βββ app/
β β βββ data/ # GraphQL schema and resolvers
β β βββ types/ # Type definitions
β β βββ utils/ # Utility functions
β βββ tests/ # Unit and integration tests
β βββ dev_db/ # Development database setup
βββ package.json # Monorepo configuration
βββ README.md
- Node.js >= 18
- npm >= 8
- MongoDB (local or cloud instance)
-
Clone the repository
git clone <repository-url> cd monorepo
-
Install all dependencies (Monorepo Setup)
# Install dependencies for both client and server npm run install:all # or npm install --legacy-peer-deps
Alternative: Install individual workspaces
# Install only client dependencies npm run install:client # Install only server dependencies npm run install:server
-
Environment Setup
Create
.envfiles in bothclient/andserver/directories:Server Environment Variables:
NODE_ENV=development PORT=4000 DATABASE_URL=mongodb://localhost:27017/quote-vote JWT_SECRET=your-jwt-secret STRIPE_SECRET_KEY=your-stripe-secret EMAIL_SERVICE=your-email-service EMAIL_USER=your-email-user EMAIL_PASS=your-email-password
Client Environment Variables:
REACT_APP_API_URL=http://localhost:4000/graphql REACT_APP_WS_URL=ws://localhost:4000/graphql
-
Start Development Database
npm run dev-db-start --workspace=server
-
Run the Application
Option 1: Run both client and server simultaneously
npm run dev
Option 2: Run individual services
# Terminal 1 - Backend npm run dev:server # Terminal 2 - Frontend npm run dev:client
-
Access the Application
- Frontend: http://localhost:3000
- GraphQL Playground: http://localhost:4000/graphql
npm run test# Frontend tests
npm run test:client
# Backend tests
npm run test:servernpm run cypress:open --workspace=client # E2E tests# Installation
npm run install:all # Install all dependencies
npm run install:client # Install client dependencies only
npm run install:server # Install server dependencies only
# Development
npm run dev # Run both client and server
npm run dev:client # Run client only
npm run dev:server # Run server only
# Building
npm run build # Build both client and server
npm run build:client # Build client only
npm run build:server # Build server only
# Testing
npm run test # Test both client and server
npm run test:client # Test client only
npm run test:server # Test server only
# Linting
npm run lint # Lint both client and server
npm run lint:client # Lint client only
npm run lint:server # Lint server only- Storybook: Component documentation and testing
npm run storybook --workspace=client
- API Documentation: Available at GraphQL Playground
- Component Documentation: See
client/docs/for detailed guides
# Build both applications
npm run build
# Or build individually
npm run build:client
npm run build:servernpm run build:client
# Deploy the client/dist/ folder to your hosting servicenpm run build:server
npm run start:server # Uses PM2 for production-
Peer dependency conflicts
# Use legacy peer deps flag npm install --legacy-peer-deps -
Babel installation issues
If you encounter Babel runtime installation errors, use:
npm install @babel/runtime --legacy-peer-deps
-
Port conflicts
- Frontend: Change port in
client/vite.config.js - Backend: Change
PORTin server.envfile
- Frontend: Change port in
-
Database connection issues
# Start development database npm run dev-db-start --workspace=server -
Workspace-specific issues
# Clear node_modules and reinstall rm -rf node_modules client/node_modules server/node_modules npm run install:all
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code style and conventions
- Write tests for new features
- Update documentation as needed
- Use conventional commit messages
- Test both client and server before submitting PRs
This project is licensed under the LGPL-3.0 license - see the LICENSE file for details.
- Louis Girifalco - Creator
- Oliver Molina - Lead Developer
- Neo Isaac Amao - Developer
- Jovan Cahiles - Developer
- Camila Riedel - Designer
- Micah Shute - Developer
- Sarah Naas - Developer
- Mike Nayyar - Product
- David Nicholson - AI Developer
- Kira Rose Wojack - Operations
- Robert Palmer - Operations
- John May - Blockchain Developer
- Rafael RodrΓguez - Developer
- Vishal Thukral - Developer
- Matt Polini - Developer
- Greddys Martinez - Designer
- Jason Ribble - Developer Operations
- Krishna Biradar - Backend Developer
- Brahmananda Reddy - AI Developer
- Akunna Nwosu - Developer
- Jay Evans - Mobile Developer
- Abed Gheith - Product
- Jon Kolman - Frontend Developer
If you encounter any issues, please:
- Check the existing issues in the repository
- Create a new issue with detailed information
- Include steps to reproduce the problem
- Repository: [GitHub Repository]
- Live Demo: [Demo URL]
- Documentation: [Documentation URL]
Built with β€οΈ for transparent civic engagement and thoughtful public dialogue.