A production-ready classified advertising platform built with Laravel 11, supporting a full three-sided marketplace: advertisers post and promote listings, publishers monetise their sites by embedding ad zones, and an admin team moderates everything through a real-time dashboard.
The platform covers the complete ad lifecycle — submission, admin approval or rejection, payment via Paystack and Flutterwave dual gateway, plan selection across Regular, Featured, and Premium tiers, automatic expiration tracking, impression/click/conversion analytics, and PDF/CSV campaign reporting. A custom-built publisher ad network lets third-party site owners create embeddable ad zones, earn configurable commissions, and request payouts — backed by a fraud detection layer that blocks click fraud, payment manipulation, and bot traffic.
Beyond advertising, the platform ships a full social layer: user profiles, follow system, community groups, direct messaging, group chat, a social feed, and video hosting — all driven by real-time WebSockets via Laravel Reverb and Pusher. An AI-powered assistant chatbot with four switchable personalities handles user queries, guides advertisers step-by-step through ad posting, and escalates to a live admin support agent when needed. Security is multi-layered: Google Authenticator 2FA, KYC/NIN identity verification with admin approval, bot detection across 150+ signature patterns, geographic anomaly detection, IP blacklisting, and payment velocity checks.
57 features built into this project
Technical problems encountered during development and how each was resolved.
Building a dual payment gateway that felt seamless to users required a unified payment controller with separate webhook handlers for Paystack and Flutterwave. The hardest part was reliable plan activation — if a user paid but the browser callback failed, their ad would stay unpublished indefinitely. I solved this by making plan activation driven entirely by server-side webhooks, not front-end callbacks, so every confirmed charge triggers activation regardless of what happens on the client.
The publisher ad network introduced a serious click fraud problem: automated scripts were inflating impression and click counts to inflate publisher earnings. I built a FraudDetectionService that checks click velocity per IP per ad per minute, matches user-agent strings against 150+ blocked bot signatures, and flags geographic anomalies where the same account makes payments from different countries within an hour. Legitimate search engine crawlers (Googlebot, Bingbot, DuckDuckGo) are whitelisted explicitly so SEO crawling continues unaffected.
The AI chatbot had to serve two very different needs simultaneously — guiding new advertisers step-by-step through ad posting, and handling real support questions — without becoming confusing. I built a keyword and intent detection layer that routes each message to either the structured FAQ knowledge base, the step-by-step ad guide generator, or an escalation trigger that opens a live WebSocket support channel to an online admin agent when the AI cannot resolve the issue. Four switchable personalities let users adjust the interaction tone to their preference.
Supporting real-time direct messaging, group chat, live admin notifications, and ad impression tracking simultaneously required careful WebSocket channel design. I used Laravel Reverb as the primary WebSocket server with Pusher as a cloud fallback, organised channels by conversation ID and group ID to avoid cross-talk, and routed all impression and click events through a dedicated AdTrackingService that writes batched daily stat aggregates — avoiding per-request database writes on high-traffic ad zones.
Other work in the PHP category
An institutional-grade academic integrity platform that detects plagiarism and AI-generated content in student…
A fully-featured Learning Management System (LMS) built with CodeIgniter 4 and deployed at training.teamodigit…
TeamO Ranch is a sustainable farm e-commerce and service-booking website for an agricultural business based in…