- #web
- #discord
- #bots
- #realtime
- #roblox
Arise Crossover Tools
Live dungeon and event timers for the Roblox game Arise Crossover, fed in real time by a multi-server Discord bot that reads the official announcements and relays them to the site over WebSockets.
- Role
- Solo developer of the website and the bot, plus partnerships with content creators and guild leaders.
- Outcome
- 1,000+ dungeons and events tracked live, 60+ players at a time during peak events. When bigger tools crowded the space, I joined the RankBreakers server as one of its developers.
- Year
- 2025
- Status
- retired
- Stack
- React
- TypeScript
- Node.js
- WebSockets
- Discord.js v14
- Tailwind
- Vercel
Discord: the game’s announcement
# dungeon-alerts
Waiting for the next spawn…
My bot: parsed and relayed
{ "type": "dungeon"}
The website: live card
Current Event
Dungeon Gate
- Rank
- Unknown
- Location
- Unknown
- Map
- Unknown
- Rooms
- Unknown
Next Events
- Dungeon GateStarts at --:--
- Dedu Island RaidStarts at --:--
A recreation with sample spawns based on a real announcement. The 15-minute schedule is real, shown in your time.
The start
A game run by the clock
Arise Crossover is a Roblox game by CL Games built around timed content. A dungeon gate opens every 15 minutes, raids and world bosses keep their own schedules, and every gate rolls a rank, an island, a map and modifiers such as Red Gates and Double Dungeons. The details were announced by the game's own bot in its Discord, as text, and buried by the next message minutes later. Planning a run meant watching the channel.
The goal
A page you could simply leave open
I wanted the community to stay informed and plan ahead without babysitting Discord: live timers for every dungeon and event, cards that fill in the moment an announcement lands, and tools for the in-game economy. On a phone first, because that's where players check things mid-game.
The adventure
From a Discord message to a live card
I built two halves that work as one. A Discord bot sits in the official server, parses each announcement into structured data and relays it over WebSockets. A React and TypeScript site receives it and renders live event cards, timers and a weapon price calculator. Guild servers wanted the alerts too, so the bot became multi-server, with ping roles and announcement channels per server. Along the way I partnered with content creators and guild leaders, who brought players and shaped what I built next.
Desktop: a helpful header and the whole schedule at a glance. The difficulties
Free text, live traffic, many servers
The announcements were free text with emoji, and their format varied, so parsing had to be robust and fail loudly instead of showing a wrong card. Every open browser had to get updates instantly, even during peak events, and stay current after hours open. And running in many servers meant different configurations and permissions everywhere, plus Discord's strict rate limits when creating hundreds of roles.
The end
Knowing when to pivot
The platform tracked more than 1,000 dungeons and events live and served more than 60 players at once at peak, and it became a hub for the community. Then bigger, better-funded tools arrived and the space got crowded. Rather than compete in a saturated market, I joined the RankBreakers server and became one of its developers. It was my first multi-server bot and my first real-time pipeline, and it taught me as much about choosing when to pivot or collaborate as about WebSockets.
- Dungeons and events tracked while it ran
- 1,000+
- Dungeons and events tracked while it ran
- Players at once at its peak
- 60+
- Players at once at its peak
- Visitors using the site at launch
- 100+
- Visitors using the site at launch
Live event tracking
Timers for every dungeon and event, with details that arrive over WebSockets the moment they're announced.
Straight from the official announcements
The bot reads the game's own Discord announcements and relays them to the site in real time.
Weapon price calculator
Works out what weapons are worth and how many you need to upgrade.
Phone first
Designed for the phone you check mid-game, and just as complete on a desktop.
Alerts in your own server
Guild servers pick a channel for dungeon alerts and get ping roles by rank, island and special gate.
Built with the community
Partnerships with content creators and guild leaders, and other bot developers in servers with 1,000+ players.
The site
React and TypeScript on Vercel, styled with Tailwind and built mobile first: one column on phones, two on tablets, the full multi-column layout on desktops, and roomier spacing on large screens.
Special gates had to stand out at a glance, so each modifier changes the card's colour and badges:
The weapon price calculator
The calculator helped players price their weapons and plan upgrades: it estimates a weapon's value, works out how many weapons an upgrade needs, and warns when you have more than you need. Inputs are validated and results update instantly.
The bot in other servers
Guild servers wanted the alerts in their own channels, so the bot runs in many servers, each with its own configuration.
/announce-dungeon
Admins
Picks the text channel where dungeon alerts are posted.
/deannounce-dungeon
Admins
Removes it, and the alerts stop for that server.
/create-dungeon-roles
Admins
Creates every ping role in one go, by rank, by island and for special gates, with names and colours you can change.
/delete-dungeon-roles
Admins
Removes them all, for a clean reset.
Every command answers with a private summary of what was created or removed, and what failed, so admins always know where they stand.
From a Discord message to a live card
Listen
The bot sits in the official server and watches the announcement channel.Parse
Regular expressions, with fallbacks, pull the rank, island, map, boss and the Red and Double flags out of free text with emoji.Relay
The structured event goes to a WebSocket server, which pushes it to every open browser.Render
The card already exists, since the site knows when each gate opens; its "Unknown" fields fill in the moment the data arrives.
The room count arrives in a separate message and is matched to its gate. Anything that doesn't parse raises an alert to me instead of producing a wrong card.
Architecture
Discord bot
Node.js, discord.js v14, TypeScript
Monitors the official channels, turns unstructured announcements into structured events, handles edge cases and message variations, and relays everything in real time.
WebSocket server
Node.js, ws
Keeps a persistent connection with every client and pushes new events and timer updates instantly, with no manual refresh.
Frontend
React, TypeScript, Tailwind
State management and conditional rendering for the live cards, the timers and the calculator, on a responsive design system.
Deployment
Vercel
Fast global delivery, with automated deploys for quick iteration.
The bot, server by server
Multi-server architecture
Modular design
Slash commands are registered for each server, and each server keeps its own configuration in JSON.
Role management
Rate limits
Discord allows 250 role creations every 48 hours, so creation is rate-limited, retried with exponential backoff, and skips roles that already exist. Separator, rank and island roles keep the list organised.
Real-time link
WebSockets
Messages to the site are parsed, errors handled, and the connection re-established automatically.
Logging
Winston
Every server gets its own log directory, with colour-coded console output and separate error logs, which made debugging other people's setups bearable.
Challenges
Problem
Parsing unstructured data
Official announcements varied in format and content, which made reliable parsing hard.
Solution
Regex-based parsing with fallbacks for each variation, error handling, and an admin alert for edge cases instead of a wrong card.
Problem
Real-time reliability
Every user had to get updates instantly, even during high-traffic events.
Solution
Persistent WebSocket connections, heartbeats and automatic client reconnection, with messages queued while a connection is down.
Problem
Many servers, many setups
Each server had its own configuration and permission structure.
Solution
Per-server configuration files, per-server command registration and permission checks that adapt to each server.
Problem
A fast-growing community
The platform had to keep up with the needs of a rapidly growing player base.
Solution
Feedback channels, quick iterations, and partnerships with guild leaders and content creators for outreach.
Skills I gained
React and TypeScript
Web app architecture
A maintainable real-time front end with type-safe code throughout.
Node.js and WebSockets
Real-time backend
Live event delivery with persistent connections, heartbeats and reconnection.
Discord bots at scale
discord.js v14
Multi-server design, slash commands, event handling and role management within Discord's rate limits.
Data transformation
Parsing and mapping
Turning unstructured Discord messages into reliable structured events.
Algorithm design
Price calculation
The logic behind weapon values and upgrade costs.
Community and collaboration
Partnerships
Working with creators, guild leaders and other bot developers, and knowing when to join forces.
What is Arise Crossover?
A Roblox game by CL Games built around timed content: dungeon gates every 15 minutes, raids, world bosses, and a system of weapons, shadows and relics. Its constantly changing schedule is what made tracking tools so useful.
Where did the event data come from?
From the game's official Discord announcements. My bot read them as they were posted, turned them into structured events and pushed them to the site over WebSockets.
Why WebSockets?
Because a dungeon announcement is only useful for a few minutes. With a persistent connection the server pushes each event the moment it's parsed, so every open page updates instantly without anyone refreshing.
Could other servers use the bot?
Yes. It ran in many servers, each with its own announcement channel, ping roles and configuration, set up with a few admin commands.
Is the project still active?
No. When bigger tools crowded the space, I chose to collaborate instead of compete: I joined the RankBreakers server as one of its developers.
Need something like this?
Tell me what it should do, where it runs and when you need it.
More work

- #discord
- #bots
- #api-integration
LegitBot
A Discord bot that announced every diamond donation to the LEGIT clan, with an updated leaderboard.

- #discord
- #bots
- #api-integration
BotFire
A Discord bot for my streaming community: game suggestions and my Twitch schedule, synced to Google Calendar.

- #web
- #design-system
- #webgl
leafranger.dev
This site: a bilingual portfolio with its own design system and a dragon drawn in particles.