A chaotic, ephemeral, and totally unhinged chat experience with a biohazard theme.
☣️ Digital Petri Dish - Where germs, viruses, and chaos meet in real-time conversation
- 💬 Real-time messaging via WebSocket (Ably)
- 🦠 Auto-generated pathogen names (Prion-Alpha, Bacilo-X99, etc.)
- ✏️ Editable usernames - mutate your identity anytime
- 📝 250 message history persisted in Redis
- ⚡ Smart rate limiting - prevents spam and abuse
- 🚫 Configurable content filtering - block harmful terms
- 🎨 Biohazard aesthetic - toxic green theme with particle effects
- 📱 Mobile responsive - works on all devices
- 🔒 Security hardened - CSP headers, XSS protection, rate limits
- 💯 100% FREE - runs on free tiers of Vercel + Ably + Upstash
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Client │◄───────►│ Ably │◄───────►│ Client │
│ (Browser) │ WebSocket│ (WebSocket) │ WebSocket│ (Browser) │
└─────────────┘ └──────────────┘ └─────────────┘
│
▼
┌──────────────┐
│ Next.js API │
│ Routes │
└──────────────┘
│
▼
┌──────────────┐
│ Upstash │
│ Redis │
└──────────────┘
- Frontend: Next.js 15 + React 18 + TypeScript
- Styling: CSS Modules + Google Fonts (Rubik Glitch, VT323, JetBrains Mono)
- Realtime: Ably (WebSocket pub/sub)
- Storage: Upstash Redis (message persistence)
- Deploy: Vercel (serverless edge functions)
- Node.js 18+
- npm 9+ or yarn/pnpm
- Git
# Clone the repository
git clone https://github.com/aencyorganization/amolestados.git
cd amolestados
# Install dependencies
npm install
# Configure environment variables
cp .env.example .env.local
# Edit .env.local with your API keys (see Configuration section)
nano .env.local
# Run development server
npm run devOpen http://localhost:3000 in your browser.
Ably provides the real-time WebSocket infrastructure.
- Sign up for a free account at ably.com
- Create a new application
- Navigate to Settings → API Keys
- Copy your root API key (format:
APP_ID.KEY_ID:KEY_SECRET)
Upstash provides serverless Redis for message persistence.
- Sign up for a free account at upstash.com
- Create a new Redis database
- In the database details, copy:
- UPSTASH_REDIS_REST_URL (e.g.,
https://apt-abc123.upstash.io) - UPSTASH_REDIS_REST_TOKEN
- UPSTASH_REDIS_REST_URL (e.g.,
Create a .env.local file in the project root:
# Required: Ably API Key for WebSocket
ABLY_API_KEY=your_ably_api_key_here
# Required: Upstash Redis credentials
UPSTASH_REDIS_REST_URL=https://your-db.upstash.io
UPSTASH_REDIS_REST_TOKEN=your_upstash_token_here
# Optional: Custom blocked terms (comma-separated)
# Default: cp,csam,pedo
BLOCKED_TERMS=cp,csam,pedo,spam.env.local to git! It's already in .gitignore.
# Install Vercel CLI globally
npm install -g vercel
# Login to Vercel
vercel login
# Deploy to production
vercel --prod- Push your code to GitHub
- Import the repository on vercel.com
- Add your environment variables in the Vercel dashboard
- Auto-deploy on every push to
mainbranch!
To use your own domain (e.g., amolestados.fun):
- In Vercel dashboard → Settings → Domains
- Add your domain
- Update DNS at your registrar:
- Type: CNAME
- Name:
@(or subdomain likechat) - Value:
cname.vercel-dns.com
- SSL certificate is provisioned automatically
This project implements multiple security layers:
- Content Security Policy (CSP) - Prevents XSS attacks
- Rate Limiting - IP-based and client-based limits
- Input Sanitization - All user input is escaped
- XSS Headers - X-XSS-Protection, X-Frame-Options
- Configurable Blocklist - Block harmful terms via env vars
See SECURITY.md for detailed security documentation.
We've gamified the entire experience with biological terms:
| Traditional | Amolestados |
|---|---|
| Chat Room | Petri Dish |
| Users | Hosts / Pathogens |
| Join Chat | Infect |
| Leave Chat | Neutralized |
| Change Username | Mutate |
| Online Users | Spreading |
| Moderation | Immune System |
| Messages | Viral Load |
| Rate Limit | Incubation Period |
| Color | Hex | Usage |
|---|---|---|
| Absolute Void | #050705 |
Background |
| Mutation Green | #39FF14 |
Primary, buttons, links |
| Necrotic Moss | #153A15 |
Cards, secondary backgrounds |
| Biohazard Orange | #FF4500 |
Alerts, errors, warnings |
| Prion Purple | #8B00FF |
Accents, highlights |
| Spore White | #D4E8D4 |
Text, content |
- Rubik Glitch - Logo and dramatic headings
- VT323 - UI elements, buttons, labels
- JetBrains Mono - Body text, chat messages
Main chat operations endpoint.
Request Body:
{
"type": "sendMessage", // or "getHistory", "rename"
"clientId": "unique-client-id",
"data": {
"content": "Hello World!",
"authorName": "Prion-Alpha-1234"
}
}Response:
{
"success": true,
"message": {
"id": "1234567890-client-id",
"authorId": "client-id",
"authorName": "Prion-Alpha-1234",
"content": "Hello World!",
"timestamp": 1234567890,
"type": "text"
}
}Generates an Ably token for WebSocket authentication.
Response:
{
"keyName": "...",
"timestamp": 1234567890,
"nonce": "...",
"mac": "..."
}We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Commit with clear messages (
git commit -m 'Add amazing feature') - Push to your fork (
git push origin feature/amazing-feature) - Open a Pull Request
- TypeScript: Strict mode enabled
- ESLint: Follows Next.js recommended rules
- Formatting: Use Prettier with default config
- Commits: Follow conventional commits format
Build fails with "Cannot find module"
rm -rf node_modules package-lock.json
npm installWebSocket connection fails
- Check if
ABLY_API_KEYis set correctly - Ensure your Ably app is active
- Check browser console for CORS errors
Messages not persisting
- Verify
UPSTASH_REDIS_REST_URLandUPSTASH_REDIS_REST_TOKEN - Check Upstash dashboard for database status
- Ensure Redis commands are within free tier limits
Rate limit errors
- Normal behavior - wait 3 seconds between messages
- IP-based limit: max 20 messages/minute
Track your usage:
- Vercel: Dashboard → Analytics
- Ably: Dashboard → App → Stats
- Upstash: Database → Metrics
This project is licensed under the GNU General Public License v3.0
See LICENSE for the full license text.
- Ably - For the excellent WebSocket infrastructure
- Upstash - For serverless Redis
- Vercel - For the seamless deployment platform
- Google Fonts - Rubik Glitch, VT323, JetBrains Mono
This is an experimental project created for educational and entertainment purposes:
- Messages are ephemeral (only last 250 kept)
- No user accounts or persistent identity
- No guarantee of message delivery
- Use at your own risk
- Not responsible for content posted by users
- Report bugs: GitHub Issues
- Discussions: GitHub Discussions
☣️ Zero Containment Laboratory ☣️
No germs were preserved in the making of this chat
Made with 💚 and radioactivity by the Amolestados team