DeryCode Ads — PPC Advertising Platform for East African Businesses. Sponsored search results, campaign management, and analytics.
# DeryCode Ads — PPC Advertising Platform
Uganda's first local pay-per-click advertising platform
Built for East African businesses. Powered by DeryCode Search Engine.
## Features
- **Sponsored Search Results** — Ads appear at the top of DeryCode Search results with a gold "Ad" badge
- **PPC Model** — Advertisers pay only when someone clicks their ad (UGX 500+ per click)
- **Campaign Management** — Full CRUD dashboard for creating, editing, pausing, and deleting campaigns
- **Keyword Targeting** — Advertisers choose which search keywords trigger their ads
- **Budget Control** — Monthly budgets with automatic spending caps
- **Real-time Analytics** — Clicks, impressions, CTR, spend tracking, and budget utilization
- **MoMo Payments** — MTN MoMo and Airtel Money integration for Ugandan advertisers
- **Ad Widget** — Embeddable JavaScript widget for third-party websites (publisher network)
- **Click Fraud Prevention** — Budget enforcement and click tracking per campaign
## Architecture
```
derycode-ads/
├── api/
│ └── ads.js # Ad serving, campaign CRUD, click tracking, analytics, payments
├── public/
│ ├── ads.html # Advertiser dashboard (campaign management, analytics, payments)
│ └── widget.js # Embeddable ad widget for publisher websites
├── package.json
├── vercel.json
└── README.md
```
## API Endpoints
| Method | Endpoint | Action |
|--------|----------|--------|
| GET | `/api/ads?q=keyword` | Serve ads matching a search query |
| GET | `/api/ads?action=click&id=X` | Track click and redirect to ad URL |
| GET | `/api/ads?action=list` | List all campaigns (admin) |
| GET | `/api/ads?action=analytics` | Get analytics (all or single campaign) |
| GET | `/api/ads?action=analytics&id=X` | Get analytics for specific campaign |
| POST | `/api/ads?action=create` | Create new campaign |
| PUT | `/api/ads?action=update&id=X` | Update campaign |
| DELETE | `/api/ads?action=delete&id=X` | Delete campaign |
| POST | `/api/ads?action=payment` …