Live Application: redis.saish.tech
A community-driven platform providing free, instant Redis instances for developers, students, and innovators. Spin up a production-grade Redis instance in <2 seconds with zero setup overhead. Perfect for prototyping, hackathons, testing, and learning.
The Challenge: Setting up Redis infrastructure is tediousβit requires Docker knowledge, DevOps expertise, and cloud account setup. This creates friction for developers who just want to test ideas fast.
Our Solution: A zero-friction platform that provisions isolated Docker-containerized Redis instances on-demand with:
- No credit card required
- Instant provisioning (200ms)
- 24-hour lifecycle (auto-cleanup)
- Dedicated ports with real-time allocation
- Encryption & isolation for data security
- One-click Redis instance creation
- Automatic port allocation from dedicated range (7000-7012)
- TLS encryption for data in transit
- 24-hour auto-expiration to prevent resource waste
- Docker-based containerization ensures complete isolation
- Redis ACL (Access Control List) with restricted permissions
- Generated credentials (username + password) for each instance
- No root access exposure to end users
- Rate limiting and per-user instance cap
- Memory limit: 12MB per instance (ideal for testing)
- LRU eviction policy prevents OOM errors
- CPU throttling: 100m per container
- Process limit: 20 PIDs max
- Automatic cleanup via cron jobs
- 99.9% uptime SLA
- Automatic health verification
- Container sync with database state
- Graceful degradation on failures
- Live port availability tracking
- Instance status dashboard
- 24-hour countdown timers
- Performance metrics & memory usage
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (redis-front) β
β Next.js 16 + React 19 β
β TypeScript | Tailwind CSS | Monaco Editor β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β REST API
ββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββ
β Backend (redis-back) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Business Layer (@redis/business) β β
β β Express.js | PostgreSQL | JWT Auth | Zod β β
β β β’ User Management (Sign up/In) β β
β β β’ Instance Lifecycle Management β β
β β β’ Resource Allocation & Port Management β β
β βββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββΌβββββββββββββββββββββββββββ β
β β Service Layer (@redis/service) β β
β β Node-Cron | Dockerode | Redis CLI β β
β β β’ Docker Container Orchestration β β
β β β’ Automated Cleanup (30-min intervals) β β
β β β’ Redis Command Execution β β
β β β’ ACL User Management β β
β ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ
β Docker API
βββββββββββββββββΌββββββββββββββββ
β β β
βββββββΌββββββ βββββββΌββββββ βββββββΌββββββ
β Redis:7 β β Redis:7 β β Redis:7 β
β Alpine β β Alpine β β Alpine β
β (Port: β β (Port: β β (Port: β
β 7000) β β 7001) β β 7002) β
βββββββββββββ βββββββββββββ βββββββββββββ
β²
β
βββββββΌβββββββ
β PostgreSQL β
β Database β
βββββββ¬βββββββ
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Next.js 16, React 19, TypeScript | Modern UI with server-side rendering |
| Frontend Extras | Tailwind CSS, Monaco Editor, Lucide Icons | Beautiful, functional interfaces |
| Backend | Express.js, Node.js, TypeScript | RESTful API server |
| Validation | Zod | Runtime schema validation |
| Security | bcrypt, JWT, CORS | Authentication & authorization |
| Database | PostgreSQL, pg driver | Persistent data storage |
| Orchestration | Docker, Dockerode | Container lifecycle management |
| Automation | node-cron | Scheduled cleanup jobs |
| Authentication | JSON Web Tokens | Stateless auth |
redis-back/
βββ business-layer/ # Application Logic
β βββ src/
β β βββ api.ts # Express routes & middleware
β β βββ db.ts # Database pool setup
β β βββ cleaner.ts # Auto-cleanup scheduler
β β βββ mail.ts # Email verification
β β βββ utils.ts # Utility functions
β β βββ libs.ts # External dependencies
β β βββ db/
β β β βββ index.ts # Pool connection
β β β βββ queries.ts # SQL queries
β β β βββ table.js # Schema definitions
β β βββ html/
β β β βββ mail.html # Email template
β β βββ types/
β β βββ express.d.ts # Express type extensions
β βββ package.json
β
βββ service-layer/ # Infrastructure & Orchestration
β βββ root/
β βββ manager.ts # Docker & Redis management
β
βββ package.json
redis-front/
βββ app/
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
β βββ page.tsx # Landing page
β βββ actions/ # Server actions
β β βββ login.ts
β β βββ signup.ts
β β βββ fetchprofile.ts
β β βββ deleteInstance.ts
β β βββ fetchinstance.ts
β β βββ custominstance.ts
β β βββ randomInstace.ts
β βββ auth/
β β βββ login/page.tsx
β β βββ signup/page.tsx
β βββ dashboard/page.tsx # Main dashboard
β βββ dashboard/instance/[port]/page.tsx # Instance details
β βββ live/page.tsx # Live monitoring
β
βββ components/
β βββ customPopup.tsx # Reusable popup component
β
βββ tailwind.config.mjs
βββ next.config.ts
βββ package.json
redis-test/
βββ index.js # Test client example
βββ package.json
- POST
/signup- Send verification email - POST
/verify-signup- Create account with verification code - POST
/login- User authentication - POST
/logout- Session termination
- POST
/instance- Create new Redis instance - GET
/instance/:port- Fetch instance details - GET
/instances- List all user instances - DELETE
/instance/:port- Stop instance - GET
/active- Fetch all active instances - POST
/command- Execute Redis commands
- GET
/user- Fetch user profile - GET
/user-instances- User's instance history
- GET
/health- System status check
// JWT-based stateless authentication
- Token issued on login/signup
- Verified via middleware on protected routes
- Payload includes: userId, email, firstName// Bcrypt password hashing (12 salt rounds)
- Passwords never stored in plain text
- Timing-safe comparison prevents brute force// Per-instance ACL setup
- Root admin password: Generated securely
- User credentials: Restricted permissions
- Blocked operations: ADMIN, DANGEROUS, SCRIPTING
- Allowed: Data manipulation + System management// Resource limits per container
Memory: 32MB
CPU: 100m
PIDs: 20 max
Log rotation: 3 files, 9MB each- Node.js 18+ (LTS recommended)
- PostgreSQL 14+
- Docker & Docker Daemon running
- npm or yarn
cd redis-back
npm install
# Install workspace dependencies
cd business-layer && npm install
cd ../service-layer && npm install
cd ../..
cd redis-front
npm installCreate .env.local in redis-back/:
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/redis_service
# JWT
SECRET=your_jwt_secret_key_min_32_chars
SHIFT=12 # bcrypt salt rounds
# Redis Admin
ADMIN_PASS=your_secure_admin_password
# Email Service (if using)
MAIL_SERVICE_KEY=your_mail_service_api_key
# Server
PORT=8000Create .env.local in redis-front/:
NEXT_PUBLIC_API_URL=http://localhost:8000# Create database
createdb redis_service
# Create tables (using table.js schema)
psql redis_service < redis-back/business-layer/src/db/table.jscd redis-back
npm run buildTerminal 1 - Backend:
cd redis-back/business-layer
npm startTerminal 2 - Frontend:
cd redis-front
npm run devAccess:
- Frontend: http://localhost:3000
- API: http://localhost:8000
- Dashboard: http://localhost:3000/dashboard
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
firstName VARCHAR(100),
lastName VARCHAR(100),
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);CREATE TABLE instances (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
containerId VARCHAR(255) UNIQUE NOT NULL,
port INTEGER NOT NULL,
password VARCHAR(255) NOT NULL,
instanceUSER VARCHAR(100) NOT NULL,
instanceUser UUID REFERENCES users(id),
status VARCHAR(50) DEFAULT 'RUNNING',
overhead FLOAT,
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);User clicks "Create Instance"
β
Frontend sends POST /instance
β
Backend validates JWT token
β
Check user hasn't exceeded quota (1 per user)
β
Get available port from pool (7000-7012)
β
Generate secure password (16-byte hex)
β
Create Docker container with:
- Redis 7 Alpine image
- 12MB memory limit
- Port binding
- ACL user setup
β
Wait 3s for container startup
β
Setup ACL user with restricted permissions
β
Store instance metadata in PostgreSQL
β
Return port + credentials to frontend
β
Frontend displays connection details
β
User connects via redis-cli or SDK
β
Auto-cleanup scheduled in 24 hours
Cron job triggered
β
Fetch all running containers from Docker
β
Fetch all running instances from database
β
Sync state: Delete orphaned containers
β
Check age of each container (labels)
β
Containers older than 24h:
- Docker: STOP + REMOVE
- Database: Mark as STOPPED
β
Log cleanup actions
β
Handle errors gracefully
| Metric | Value | Notes |
|---|---|---|
| Provisioning Time | ~200ms | Sub-second experience |
| Startup Time | <2s | Docker + ACL setup |
| Memory per Instance | 12MB limit | Prevents resource hogging |
| CPU per Instance | 100m | 0.1 cores (~10% of typical CPU) |
| Concurrent Instances | 13 supported | Port range: 7000-7012 |
| Uptime SLA | 99.9% | High availability target |
| Instance Lifetime | 24 hours | Auto-cleanup |
# Using provided test client
node redis-test/index.js
# Using redis-cli
redis-cli -h instances.saish.tech -p 7000 -u redisuser -a <password>
# Commands
PING
SET mykey "Hello"
GET mykey
INCR counter# Example: Create multiple connections
for i in {1..100}; do
redis-cli -h instances.saish.tech -p 700$((i % 10)) PING &
done- β Monorepo architecture with workspace separation
- β Clear business logic vs. infrastructure separation
- β Scalable database schema with proper indexing
- β Microservices-ready structure
- β JWT-based stateless authentication
- β Bcrypt with configurable salt rounds
- β Docker-based containerization & isolation
- β Redis ACL with principle of least privilege
- β CORS properly configured
- β Input validation via Zod
- β Automated cleanup scheduling (node-cron)
- β State synchronization between Docker & database
- β Resource limits at all levels (memory, CPU, PIDs)
- β Logging & error handling
- β Type-safe throughout (TypeScript)
- β Modern frontend (Next.js 16, React 19)
- β RESTful backend (Express.js)
- β Database design (PostgreSQL)
- β Infrastructure orchestration (Docker)
- β DevOps thinking (cron, monitoring)
- β No friction (no signup requiredβ¦ wait, we have signup!)
- β Beautiful UI with Tailwind CSS
- β Real-time monitoring
- β Helpful error messages (see the witty descriptions!)
- β Responsive design
- β Type safety (TypeScript everywhere)
- β Input validation (Zod + Express types)
- β Error handling (try-catch, middleware)
- β Environment configuration (12-factor app)
- β Clean separation of concerns
This is a community project! Here's how you can contribute:
- Kubernetes deployment manifests
- Prometheus metrics & Grafana dashboards
- Redis Cluster support
- WebSocket real-time updates
- GraphQL API layer
- Mobile app (React Native)
- Multi-region deployment
- Redis modules support
- Backup & snapshot features
- Advanced analytics
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
- Use TypeScript for all new code
- Follow existing code style
- Add tests for new features
- Update README for significant changes
- Keep commits atomic and well-documented
- Author: Saish
- Live Demo: redis.saish.tech
- Issues & Feedback: GitHub Issues (Coming soon)
- Email: [contact@saish.tech]
ISC License β See LICENSE file for details
- Redis community for the amazing database
- Docker for containerization excellence
- Next.js team for modern React tooling
- Express.js for simplicity in web frameworks
- All open-source contributors
- Q1 2026: Redis Cluster support
- Q2 2026: WebSocket subscriptions
- Q3 2026: Multi-region deployments
- Q4 2026: Analytics & ML-powered resource forecasting
Last Updated: February 2026 | Version: 1.0.0 | Status: π’ Production Ready
Made with β€οΈ for the developer community