A gamified, on-chain messaging app where gossip meets Web3
Chat, tip friends, join exclusive rooms, and level up—all with near-zero gas fees on BNB, Celo, and Base.
🌐 Live App: www.gaslessgossip.com
📚 Docs: [Coming Soon]
💬 Discord: [Join Community]
- 💬 Chat & Earn: Send messages and earn XP
- 💰 Tip in Chats: Reward users with tokens (2% platform fee)
- 🔐 Token-Gated Rooms: Create paid or invite-only rooms
- 🎁 P2P Transfers: Send tokens to friends (no fees!)
- 🏆 Level Up: Complete quests, earn badges, climb leaderboards
- ⏱️ Timed Rooms: Ephemeral chats that auto-delete
- Node.js 18+
- Docker Desktop (Download) OR PostgreSQL 14+
- Flutter 3.x (for mobile, optional)
- EVM-compatible wallet (MetaMask, Celo Wallet, etc.)
Fastest way to get started! Docker handles PostgreSQL and Redis automatically.
# 1. Clone & navigate
git clone https://github.com/Rub-a-Dab-Dub/gasless_gossip.git
cd gasless_gossip
# 2. Install dependencies and setup environment files
npm run setup
# 3. Update environment variables
# Edit api/.env with your chain credentials
# - EVM_RPC_URL
# - EVM_ACCOUNT_ADDRESS
# - EVM_PRIVATE_KEY
# - EVM_CONTRACT_ADDRESS
# - JWT_SECRET (generate a secure random string)
# 4. Start Docker services (PostgreSQL + Redis)
npm run docker:start
# 5. Start development servers (API + Web)
npm run devDone! 🎉
- API runs on
http://localhost:3001 - Web runs on
http://localhost:3000 - PostgreSQL on
localhost:5432 - Redis on
localhost:6379
See DOCKER_SETUP.md for detailed Docker documentation.
If you prefer installing PostgreSQL manually:
git clone https://github.com/Rub-a-Dab-Dub/gasless_gossip.git
cd gasless_gossip# Install PostgreSQL (macOS)
brew install postgresql@14
brew services start postgresql@14
# Create database
psql -U postgres << EOF
CREATE DATABASE gasless;
CREATE USER gasless_user WITH PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE gasless TO gasless_user;
\q
EOFcd api
npm install
# Create .env file
cat > .env << EOF
# Database
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=gasless_user
DATABASE_PASS=your_secure_password
DATABASE_NAME=gasless
# EVM Chain (BNB, Celo, Base)
EVM_RPC_URL=https://rpc-url-for-your-chain
EVM_ACCOUNT_ADDRESS=your_account_address
EVM_PRIVATE_KEY=your_private_key
EVM_CONTRACT_ADDRESS=your_deployed_contract
EVM_NETWORK=base # or bnb, celo
# Auth
JWT_SECRET=your_jwt_secret_minimum_32_chars
JWT_EXPIRES_IN=7d
# Server
PORT=3001
NODE_ENV=development
EOF
# Start backend
npm run start:devBackend runs on http://localhost:3001
cd ../web
npm install
# Create .env.local
cat > .env.local << EOF
NEXT_PUBLIC_API_URL=http://localhost:3001
NEXT_PUBLIC_EVM_NETWORK=base # or bnb, celo
EOF
# Start web app
npm run devWeb app runs on http://localhost:3000
cd ../mobile
flutter pub get
# Install Stacked CLI
dart pub global activate stacked_cli
# Run on iOS/Android
flutter runnpm run dev # Start both API and Web (concurrent)
npm run docker:start # Start PostgreSQL & Redis containersnpm run docker:start # Start Docker services
npm run docker:stop # Stop Docker services (keeps data)
npm run docker:restart # Restart Docker services
npm run docker:logs # View live container logs
npm run docker:clean # Stop and remove all data (fresh start)npm run dev:api # Start only API server
npm run dev:web # Start only Web servernpm run build # Build both API and Web
npm run build:api # Build only API
npm run build:web # Build only Webnpm run test # Run all tests
npm run test:api # Run API tests
npm run test:web # Run Web tests
npm run test:e2e # Run E2E testsnpm run lint # Lint all code
npm run lint:api # Lint API only
npm run lint:web # Lint Web onlynpm run setup # Setup environment files
npm run db:clear # Clear database (destructive!)
npm run clean # Remove node_modules and builds
npm run fresh # Clean + reinstall everything┌─────────────────────────────────────────────────┐
│ Frontend │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Next.js │ │ Flutter │ │ Telegram │ │
│ │ Web │ │ Mobile │ │ Bot │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────────┼────────────┘
│ │ │
└─────────────┼─────────────┘
│
┌─────────────────────▼─────────────────────────┐
│ NestJS Backend (3001) │
│ • REST API • WebSockets • Bull Queues │
│ • PostgreSQL • JWT Auth • IPFS/Arweave │
└─────────────────────┬─────────────────────────┘
│
┌─────────────────────▼─────────────────────────┐
│ EVM Chains: BNB, Celo, Base │
│ • GGPay Contract (payments) │
│ • Account Abstraction (gasless) │
│ • Session Keys (auto-approve) │
└───────────────────────────────────────────────┘
gasless_gossip/
├── api/ # NestJS backend
│ ├── src/
│ │ ├── auth/ # JWT authentication
│ │ ├── users/ # User management
│ │ ├── rooms/ # Room logic
│ │ ├── contracts/ # EVM integration
│ │ └── wallets/ # Wallet creation queue
│ └── package.json
│
├── web/ # Next.js web app
│ ├── app/ # App router pages
│ ├── components/ # React components
│ └── lib/ # Utilities
│
├── mobile/ # Flutter mobile app
│ ├── lib/
│ │ ├── ui/ # Stacked views
│ │ ├── services/ # Business logic
│ │ └── models/ # Data models
│ └── pubspec.yaml
│
└── contract/ # Smart contracts
├── evm/ # Solidity contracts for BNB, Celo, Base
│ ├── GGPay.sol
│ └── tests/
cd api
npm run test # Unit tests
npm run test:e2e # E2E tests
npm run test:cov # Coveragecd contract/evm
npx hardhat test # Run all tests
npx hardhat test test_tip_user.js # Run specific testcd web
npm run test # Jest tests
npm run test:e2e # Playwright E2EWe welcome contributions! Here's how to get started:
# Fork on GitHub, then:
git clone https://github.com/YOUR_USERNAME/gasless_gossip.git
cd gasless_gossip
git remote add upstream https://github.com/Rub-a-Dab-Dub/gasless_gossip.gitgit checkout -b feature/your-feature-name
# Examples:
# - feature/add-room-reactions
# - fix/tip-calculation-bug
# - docs/improve-setup-guide- Follow existing code style (ESLint/Prettier for TS, Solidity formatting for contracts)
- Write tests for new features
- Update documentation if needed
# Backend
cd api && npm run test && npm run lint
# Web
cd web && npm run build && npm run lint
# Contracts
cd contract/evm && npx hardhat testgit add .
git commit -m "feat: add room reaction feature"
# Commit message format: type(scope): description
# Types: feat, fix, docs, style, refactor, test, chore
git push origin feature/your-feature-name- Go to GitHub and open a PR from your fork
- Fill in the PR template (describe changes, link issues)
- Wait for review from maintainers
- Code Style: Run
npm run lintbefore committing - Commits: Use Conventional Commits
- Testing: Aim for 80%+ coverage on new code
- Documentation: Update README/docs for user-facing changes
Look for issues tagged good-first-issue or help-wanted:
Users never pay gas fees. The backend's paymaster account sponsors all transactions using session keys.
Send tokens in chats with a 2% platform fee. Tips are instant and on-chain.
Creators can set token-gated rooms. Platform takes 2%, creator gets 98%.
- Send message: +10 XP
- Create room: +50 XP
- Tip user: +20 XP
- Level up every 1000 XP
| Layer | Technology | Purpose |
|---|---|---|
| Frontend Web | Next.js 14, TypeScript, TailwindCSS | Responsive web interface |
| Frontend Mobile | Flutter 3.x, web3dart | iOS/Android apps |
| Backend | NestJS, TypeORM, Bull | REST API, WebSockets, queues |
| Database | PostgreSQL 14+ | User data, messages, rooms |
| Blockchain | BNB, Celo, Base (Solidity) | Payment contracts |
| Storage | IPFS/Arweave | Media files (hashed on-chain) |
| Auth | JWT, session keys | Gasless transactions |
# Required
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=gasless_user
DATABASE_PASS=your_password
DATABASE_NAME=gasless
EVM_RPC_URL=https://rpc-url-for-your-chain
EVM_ACCOUNT_ADDRESS=0x...
EVM_PRIVATE_KEY=0x...
EVM_CONTRACT_ADDRESS=0x...
JWT_SECRET=minimum_32_character_secret
# Optional
PORT=3001
NODE_ENV=development
MAX_RETRIES=3
RETRY_DELAY_MS=2000NEXT_PUBLIC_API_URL=http://localhost:3001
NEXT_PUBLIC_EVM_NETWORK=base # or bnb, celoPort 5432 already in use:
# Stop local PostgreSQL
brew services stop postgresql@14 # macOS
sudo systemctl stop postgresql # LinuxContainers won't start:
npm run docker:logs # Check logs
npm run docker:clean # Reset everything
npm run docker:start # Start freshDatabase connection refused:
# Wait for PostgreSQL to be ready
npm run docker:logs # Look for "database system is ready"- Check PostgreSQL is running:
brew services list - Verify database exists:
psql -U postgres -l - Check
.envfile has all required variables
- Check contract address is correct
- Verify RPC URL is responsive
- Run
flutter doctorto check dependencies - Clear build cache:
flutter clean && flutter pub get - For iOS:
cd ios && pod install
- Check backend is running on port 3001
- Verify
NEXT_PUBLIC_API_URLmatches backend URL
MIT License - see LICENSE file for details
- BNB Chain, Celo, and Base for blockchain infrastructure
- OpenZeppelin for secure contract libraries
- NestJS team for excellent backend framework
- Website: www.gaslessgossip.com
- GitHub: Rub-a-Dab-Dub/gasless_gossip
- Twitter: @gaslessgossip
- Telegram: Join Group
- Discord: Join Server
Built with ❤️ by the Gasless Gossip team