
RajaRak App is an internal admin tool built for Raja Rak Indonesia's marketing team, routing WhatsApp inquiries from across the company's growing network of business websites to available marketing staff on a fair, round-robin basis, backed by a full analytics dashboard to track where every click comes from
A scrollable look at the finished site, exactly as a visitor would browse it

Desktop

Mobile
The tools and technologies that came together to bring this project to life










Each project draws on a mix of disciplines, here’s how they came together on this one
A closer look at what the finished product offers, the obstacles along the way, and what came out of it
Keeping Redirects Fair and Consistent
Rotating WhatsApp leads fairly across the marketing team, while making sure a customer who reloads the page always lands on the same contact, required careful state management with database-level locking to stay safe under concurrent traffic
Keeping Click Analytics Clean
Bot traffic, uptime monitors, and automated crawlers could easily pollute analytics with fake clicks, solved with layered filtering that keeps the dashboard's numbers trustworthy without needing manual cleanup
Serving Many Websites From One System
Each of the company's business websites needed its own redirect link, message template, and rotation pool, all managed from a single admin panel instead of duplicating logic per site
How this project changed things for the business and its users after launch
Fair lead distribution
Consistent contact per customer
Trustworthy click data
Centralized, scalable management
Images under 200KB
Consistent redirects under load
Built for continuous data growth
Full click analytics
Isolated, testable logic
One-step automated deploys
Self-service usage guide
Before
Without rotation, WhatsApp inquiries across the company's business websites could all funnel to the same marketing contact, leaving others idle and slowing response time
After
Leads now rotate fairly across the whole marketing team, keeping response times balanced and no one overloaded
Before
Without protection, a customer reloading the page could get redirected to a different marketing contact than before, turning one conversation into a confusing back-and-forth with two different people
After
Reload-safe redirect logic keeps a customer locked to the same contact, keeping every conversation consistent from click to close
Before
Bot traffic, crawlers, and automated monitors could inflate click numbers, making some websites or marketing contacts look more effective than they really were
After
Layered bot and suspicious-click filtering keeps analytics numbers trustworthy, so decisions based on this data reflect real customer interest
Before
Managing WhatsApp redirects and rotation by hand across a growing number of business websites would not scale as the company kept adding new ones
After
A single admin panel now manages every website, marketing contact, and rotation pool from one place, ready to grow with the business
Before
High-resolution images across the site, not just one section, risked slowing down every page
After
Every image across the site is compressed to WebP and kept under 200KB, keeping pages fast without a visible drop in quality
Before
Simultaneous clicks arriving from many websites at once risked race conditions when picking the next marketing contact, or a slow redirect under load
After
Database-level locking keeps rotation selection fast and consistent even under concurrent traffic, with redirects staying near-instant
Before
A click log that grows continuously from real-time traffic across many websites risked slowing down over time without the right query patterns and indexes
After
Query patterns and indexes were planned upfront for a table that keeps growing, keeping analytics queries fast as data accumulates
Before
There was no way to see which website or marketing contact was generating the most engagement
After
A full analytics dashboard now tracks click trends, top-performing websites, and marketing contacts, with CSV export for deeper reporting
Before
Rotation and click-filtering logic mixed directly into models or controllers would be difficult to test in isolation and reuse elsewhere
After
A dedicated service layer keeps this logic clean, testable, and reusable, verified with automated tests
Before
Deploying updates by hand across multiple steps, pulling code, installing dependencies, migrating, rebuilding cache, risked mistakes or skipped steps
After
A single deployment script automates the full process consistently every time
Before
Without documentation, the marketing team would need to ask for help every time they needed to use a feature
After
A built-in usage guide, grouped by feature area, lets the team learn the system on their own