This project was completed as a team. I worked primarily on the scheduling reminder API, implementing backend logic for creating and tracking scheduled tasks, with a focus on ensuring reliable status updates using FastAPI.
AI-Powered Content Toolkit for Ethiopian SMEs & Creators
Mobile-First (Flutter) + Web (Next.js) • Thin GenAI Wrapper • Ethiopia-Focused
- Overview
- Problem Statement
- Solution
- Features
- Tech Stack
- Installation & Setup
- Usage
- Contributing
- License
- Contact
SocialSpark V1 is a lightweight AI assistant that transforms simple ideas into ready-to-publish Instagram and TikTok content. It generates captions, hashtags, and media assets (images or short videos), supports bilingual content (Amharic/English), and respects platform policies.
Designed for Ethiopian SMEs and content creators, SocialSpark helps produce content quickly, locally relevant, and cost-effectively.
SMEs and creators face challenges creating consistent, high-quality content:
- Limited time and skills
- High costs for agencies
- Complex existing tools
- Publishing in Amharic with local context is particularly challenging
Goal: Provide a simple assistant that converts ideas into polished social media posts.
SocialSpark V1 allows users to:
- Input a natural-language idea (EN/Amharic).
- Generate captions, hashtags, and either:
- A single image, or
- A 15–30s short video (clips with text overlays).
- Apply brand style presets: tone, colors, emoji usage, and hashtags.
- Publish directly via AryShare (Instagram & Pinterest) or export.
- Natural Language Idea Box: Input ideas → caption, hashtags, media plan.
- One-Tap Variations: Change tone, shorten, or toggle Amharic/English.
- Brand Presets: Tone, colors, default hashtags.
- Media Generation:
- Image: single panel with optional overlay.
- Video: 3–5 shot storyboard → async MP4 with text + music.
- Caption Helper: Auto CTA, ETB formatting, bilingual toggle.
- Export & Posting:
- Direct publishing via AryShare (Instagram & Pinterest)
- Fallback: export
- Offline Drafts: Cache drafts/assets locally; resume uploads when online.
- Framework: Flutter
- Local Storage: sqflite for caching drafts and assets
- UI: Custom widgets for content creation, editing, and scheduling
- API Framework: FastAPI (Python)
- AI Services:
- Caption & Hashtag Generation
- Image Generation (DALL·E-style)
- Video Rendering (short clips with text overlays and royalty-free music)
- Social Media Posting:
- AryShare integration for Instagram and Pinterest posting
- Storage: S3-compatible object storage for media assets
- Authentication: OAuth via AryShare for Instagram/Pinterest
- Framework: Next.js 14+ (App Router, TypeScript)
- Language: TypeScript
- Styling: Tailwind CSS for utility-first design
- UI Components: shadcn/ui (Radix + Tailwind components) + custom reusable components
- State Management: Redux Toolkit with RTK Query for API calls
- Flutter SDK (for mobile)
- Python 3.10+ (for backend)
- Node.js 18+ and npm (for web)
git clone https://github.com/A2SV/g6-socialspark.git
cd g6-socialspark/mobile/socialspark_app
flutter pub get
flutter runcd g6-socialspark/backend
python -m venv venv
# Activate virtual environment
# Windows
./venv/Scripts/activate
# macOS/Linux
source venv/bin/activate
pip install -r requirements.txt
# Run FastAPI (module path matches repo structure)
uvicorn delivery.main:app --reloadOptional: using Docker Compose (dev)
cd g6-socialspark/backend
docker compose up --buildIf environment variables are required, copy .env.example to .env and configure as needed.
cd g6-socialspark/web
npm install
npm run devThis launches the Next.js app on the default development port.
- Open SocialSpark (Mobile or Web) → Composer Screen.
- Enter your idea (EN/Amharic).
- Select media type: image or video.
- Choose brand preset (tone/colors/logo).
- Generate draft → variations available.
- Edit overlays/caption if needed.
- Publish via AryShare or export.
PRs and issues are welcome. Please open an issue first to discuss major changes.
MIT License. See LICENSE for details.
For inquiries or contributions, please use the repository Issues section.