RESTful API for NoukatTN — a Full Stack project for the Tunisian jokes' culture.
# Tunisian Jokes API (Noukat.tn)
> **Academic Project** - REST API for managing and serving Tunisian jokes in Tunisian dialect (Darija) with AI-powered translation and semantic search capabilities.
## 📋 Table of Contents
- Overview
- Features
- Tech Stack
- Prerequisites
- Quick Start
- Running Guide
- API Endpoints
- AI Features
- Project Structure
- Environment Variables
- Database Schema
- Testing
- Troubleshooting
- Documentation
## 🎯 Overview
Noukat.tn is a comprehensive REST API designed to preserve and share Tunisian humor in the Tunisian dialect (Darija). The platform features modern AI capabilities for intelligent search and culturally-aware translation, making Tunisian jokes accessible to a global audience while maintaining their cultural context and humor.
**Course**: API Development
**Technology Focus**: RESTful APIs, JWT Authentication, AI Integration, Microservices Architecture
## ✨ Features
### Core Features
- 🔐 **JWT Authentication** - Secure user registration and login
- 📝 **Joke Management** - Submit, approve, and moderate jokes
- ⭐ **Rating System** - Like/dislike functionality with engagement tracking
- 🎯 **Daily Joke** - Automatic joke rotation for featured content
- 🔍 **Advanced Filtering** - Search by category, length, and popularity
- 👨💼 **Admin Panel** - Complete content moderation dashboard
- 📚 **Auto-generated OpenAPI** - Interactive Swagger UI documentation
### AI-Powered Features
- 🤖 **Semantic Search** - Natural language search in English, French, Arabic, or Tunisian dialect
- 🌍 **Smart Translation** - AI translates jokes with cultural context and humor explanations
- 💰 **Cost-Efficient Design** - Only queries are sent to LLM, not the entire database
- 🎭 **Cultural Preservation** - Maintains humor context across languages
## 🛠️ Tech Stack
| Component | Technology |
|-----------|------------|
| **Backend** | Python 3.11+, Flask 3.0, Flask-SMOREST |
| **Database** | PostgreSQL 15 / SQLite (dev) |
| **ORM** | SQLAlchemy with Fl …