Relio is an uptime monitoring platform that keeps an eye on your websites from multiple regions worldwide. Get instant alerts when your site goes down, track response times, and view detailed ping history.
- Global Monitoring - Workers from different regions (countries) ping your sites
- Real-time Alerts - Instant notifications via Email, Slack, SMS (comming soon)
- Interactive Charts - Visualize ping history and response times
- Live Updates - See status changes as they happen
- Responsive Dashboard - Monitor from any device
- Next.js 15 - App Router
- TypeScript
- Tailwind CSS
- Shadcn/ui
- Bun
- Prisma
- PostgreSQL
- Redis
- Turborepo - Monorepo build system
- Docker - Containerization (for workers)
relio/
├── apps/
│ ├── frontend/ # Next.js dashboard & landing page
│ │ ├── app/ # App router pages
│ │ │ ├── (main)/ # Protected dashboard routes
│ │ │ │ ├── home/ # Dashboard home
│ │ │ │ ├── [websiteID]/ # Website details page
│ │ │ │ ├── logs/ # Activity logs
│ │ │ │ ├── notifications/
│ │ │ │ └── websites/ # Website management
│ │ │ ├── login/ # Authentication
│ │ │ └── page.tsx # Landing page
│ │ ├── components/ # UI components
│ │ │ ├── ui/ # Shadcn components
│ │ │ └── ... # Custom components
│ │ └── lib/ # Utilities & actions
│ │
│ ├── api/ # Hono REST API server
│ ├── worker/ # Ping workers (multi-region)
│ └── pusher/ # Real-time event publisher
│
├── packages/
│ ├── store/ # Prisma schema & database client
│ │ └── prisma/
│ │ └── schema.prisma
│ ├── redis-stream/ # Redis pub/sub utilities
│ ├── eslint-config/ # Shared ESLint config
│ └── typescript-config/ # Shared TypeScript config
│
├── turbo.json # Turborepo configuration
└── package.json # Root dependencies
model User {
id String @id @default(uuid())
username String
password String
createdAt DateTime @default(now())
websites websites[]
}
model websites {
id String @id @default(uuid())
url String
user_id String
ticks ticks[]
user User @relation(fields: [user_id], references: [id])
}
model region {
id String @id @default(uuid())
name String
ticks ticks[]
}
model ticks {
id String @id @default(uuid())
response_ms String
status Status // Up | Down | Unknown
region_id String
website_id String
created_at DateTime @default(now())
}- Start Redis container
docker run -d --name relio-redis -p 6379:6379 redis:latest- Create Redis Stream and Consumer Group
# Create the stream with an initial entry (required before creating consumer group)
docker exec relio-redis redis-cli XADD relio:website "*" init init
# Create consumer group for workers
docker exec relio-redis redis-cli XGROUP CREATE relio:website workers 0 MKSTREAM
# (Optional) Verify stream was created
docker exec relio-redis redis-cli XINFO STREAM relio:websiteNote: The consumer group
workersis used by the worker instances. Each worker uses a unique consumer ID within this group.
- Clone the repository
git clone https://github.com/abheeee03/Relio.git
cd Relio- Install dependencies
bun install- Set up environment variables
# apps/frontend/.env
NEXT_PUBLIC_API_URL=http://localhost:3001
# apps/api/.env
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
JWT_SECRET=your-secret- Generate Prisma client
cd packages/store
bunx prisma generate
bunx prisma db push- Start development servers
# From root directory
bun run devOr run individually:
# API server
cd apps/api && bun run dev
# Frontend
cd apps/frontend && bun run dev
# Worker (optional)
cd apps/worker && bun run dev- More here: abhee.dev
- Want to know more? shoot a DM here: @_AbhayHere