AI-powered safari and travel planning platform for Kenya. Built with Django and Google Gemini AI.
# SafariSmart Kenya
**AI-Powered Safari and Travel Planning Platform**
---
## Project Overview
**SafariSmart Kenya** is a travel platform designed to modernize how users plan their Kenyan safaris. By integrating **Google's Gemini AI**, the system generates personalized, budget-conscious, and interest-based itineraries. The platform aims to promote domestic tourism by making travel planning accessible and transparent.
### Mission
To democratize travel planning in Kenya, enabling users to discover destinations and plan affordable trips through intelligent automation.
---
## System Architecture
The following diagram illustrates the high-level architecture of the SafariSmart Kenya platform, detailing the data flow between the user, the Django backend, and the external Gemini AI service.
```mermaid
graph TD
User[User Client] -->|HTTP Request| LoadBalancer[Load Balancer/Render]
LoadBalancer -->|Forward| Django[Django Backend]
subgraph "Application Layer"
Django -->|Route| Views[View Controllers]
Views -->|Validate| Forms[Form Validation]
Views -->|Query| ORM[Django ORM]
end
subgraph "AI Integration Layer"
Views -->|Prepare Prompt| GeminiService[Gemini Service]
GeminiService -->|API Call| GeminiAPI[Google Gemini API]
GeminiAPI -->|JSON Response| GeminiService
end
subgraph "Data Layer"
ORM -->|Read/Write| DB[(PostgreSQL Database)]
end
GeminiService -->|Parsed Data| Views
Views -->|Render| Templates[HTML Templates]
Templates -->|Response| User
```
---
## Database Schema
The application uses a relational database to manage users, destinations, and generated itineraries. The core relationships are depicted below.
```mermaid
erDiagram
User ||--o{ Itinerary : "creates"
User ||--o{ WizardSession : "has"
Destination ||--o{ Itinerary : "included_in"
Destination ||--o{ WizardSession : "selected_in"
User {
int id PK
string username
string email
}
Destination {
int id PK
string name
string destination_type
decimal average_cost_per_day
string popular_activitie …