SaaS — Live
PredictMonkey.online
Problem
Prediction content is only useful when it's fresh — hand-publishing picks doesn't scale and goes stale within hours. The client needed a platform where predictions are generated, curated, and published automatically, every minute, with zero manual intervention.
Solution
Built a Laravel + Inertia.js platform where a custom "MonkeyMind AI" cron engine generates and cycles new predictions every minute, with zero manual publishing.
Architecture
- Backend: Laravel 11 + Octane (Swoole) for persistent worker processes
- Frontend: Inertia.js + React + Tailwind CSS
- AI Engine: Custom "MonkeyMind" — fine-tuned model + rule-based filters
- Scheduler: Laravel Scheduler + Octane workers running every minute
- Database: SQLite (lightweight, zero-config, perfect for this scale)
- Infrastructure: AlmaLinux + Nginx + Octane (Swoole) + PM2 process management
The "MonkeyMind" AI Engine
Not just an LLM wrapper. The engine combines:
- Rule-based filters: Statistical models, injury reports, weather, venue factors
- ML scoring: LightGBM model trained on 5 years of historical data
- Confidence calibration: Temperature scaling for reliable probabilities
- Deduplication: Ensures no duplicate markets, balanced sport coverage
// Simplified cron job (runs every minute via Laravel Scheduler)
class GeneratePredictions implements ShouldQueue
{
public function handle(): void
{
$markets = Market::active()->get();
foreach ($markets as $market) {
$predictions = MonkeyMind::generate($market);
foreach ($predictions as $prediction) {
Prediction::create([
'market_id' => $market->id,
'selection' => $prediction->selection,
'confidence' => $prediction->confidence,
'odds' => $prediction->odds,
'reasoning' => $prediction->reasoning,
'published_at' => now(),
]);
}
}
}
}
Results
- Uptime: 99.9%+ since launch
- Predictions generated: 10,000+/month
- Manual interventions: Zero
- Lead pipeline: 100+ qualified leads staged for outreach
- Server cost: ~$25/month (single VPS)
Key Technical Decisions
- Octane over PHP-FPM: Persistent workers = no boot overhead, WebSocket-ready
- SQLite over MySQL/Postgres: Zero config, portable, fast enough for this scale
- Inertia over SPA: Laravel controllers return Vue/React components directly — no API layer to maintain
- Custom scheduler over Horizon: Simpler, no Redis dependency for scheduling
What's Next
- Multi-tenant architecture for white-label partners
- Affiliate dashboard with real-time conversion tracking
- Mobile app (React Native) sharing Inertia components
- Advanced ML: transformer-based ranking model
Live at: predictmonkey.online