Back to home

Savanna Properties

A Kenyan marketplace for selling everything from land and houses to vehicles and bikes — with a Python AI service that writes listing descriptions, parses natural-language searches, and suggests prices, plus an admin panel for managing inventory and leads.

Visit live site

Architecture

Frontend

Next.js 16React 19TypeScriptApp RouterTailwind CSS 4lucide-reactVercel
Next.js App Router storefront in TypeScript — home page, per-category routes, and dynamic listing detail pages.
Hero slider, category showcase, featured and filtered listing sections, testimonials, and CTA banner composed from reusable components.
Filter bar covering category, price, and location, with a detail modal and full detail view for each listing.
Responsive interface styled with Tailwind CSS 4 and lucide-react icons.

Backend & AI

FastAPIPythonREST /api/v1SQLAlchemy 2.0AlembicMySQLRedisJWTslowapiOpenRouter (GPT-4o-mini)Swagger / OpenAPI
Python FastAPI REST API versioned under /api/v1 with a separate /admin namespace and auto-generated Swagger / OpenAPI docs.
AI endpoints backed by OpenRouter: generate-description writes marketing copy from listing fields, parse-search converts natural-language queries ("3 bedroom in Kiambu under 8M") into structured filters, suggest-price recommends a listing price, and a chatbot answers buyer questions grounded in real listings.
SQLAlchemy 2.0 models with Alembic migrations over MySQL — listings, images, admins, leads, price history, and search logs — covering both property and vehicle attributes in one schema.
Public endpoints for browsing, featured listings, slug lookup, similar listings, price history, and geo "nearby" search built on a geocoding service.
JWT-authenticated admin surface: listing CRUD, status changes, image upload/reorder/cover selection, lead inbox, and a dashboard aggregating listings, views, leads, and sales.
Redis caching with slowapi rate limiting, and centralised error handling with structured logging.

Deployment

VercelCloudflare R2boto3 / S3 APIPillow (WebP)MySQL
Frontend deployed on Vercel; the FastAPI service runs separately against a managed MySQL database.
Listing images uploaded to Cloudflare R2 through the S3-compatible API, converted to WebP and resized with Pillow before storage.
The AI backend is maintained in a private repository — only the live application is linked.