Addis Laptop is a Python-based Telegram bot and web app that aggregates laptop listings from Ethiopian Telegram tech channels, extracts specs using LLMs, and provides intelligent search and recommendations.
- Browse latest laptop listings (pagination)
- Filter by brand, price, RAM, screen size
- AI-powered recommendations by use case and budget
- Natural language search (English & አማርኛ)
- "Dell laptop under 100k"
- "Leonovo laptop 16GB RAM"
- "ለቢሮ ሥራ የሚሆኑ ላፕቶፖች፣ ከ50ሺ በታች"
- Voice search (English & አማርኛ)
- Telegram Bot: @AddisLaptopBot
- Web App: https://laptops.balewgize.app/
video_1.mp4
- Python 3.11+
- Telegram API credentials (my.telegram.org)
- Telegram Bot token (@BotFather)
- OpenRouter API key (openrouter.ai)
- Docker
git clone https://github.com/balewgize/addis-laptop.git
cd addis-laptop
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your credentials# .env
TELEGRAM_API_ID=your_api_id
TELEGRAM_API_HASH=your_api_hash
TELEGRAM_BOT_TOKEN=your_bot_token
OPENROUTER_API_KEY=your_openrouter_key
# Optional (for voice search)
ELEVENLABS_API_KEY=your_elevenlabs_key# Option 1: From Telegram exports (recommended)
# Scrape manually from exported JSON (to avoid account ban)
# Export messages from Telegram Desktop (JSON format)
# Place the JSON file in the data/exports directory
# Filename must be channel username without @ symbol
# e.g. data/exports/channel_username.json
python -m scripts.sync_json
# Sync specific channel
python -m scripts.sync_json data/exports/channel_username.json
# Option 2: Using Telethong Sync channels (scrape laptop listings)
# Note: It will require you to login to your Telegram account
# WARNING: This may get your account banned if used frequently
python -m scripts.sync_channelsdocker compose -f docker-compose-local.yml up --builddocker compose up -d --build# Start the bot
# python -m bot.core
# # Run Streamlit user app
# streamlit run web/user.py
# # Run Streamlit admin app
# streamlit run web/admin.py- Telegram Bot: @your_bot_user_name
- Web User: http://localhost:8501/
- Web Admin: http://localhost:8502/
Project Structure
addis-laptop/
├── bot/ # Telegram bot (handlers, parsing, voice)
├── core/ # Business logic (scraping, extraction, recommendations)
├── web/ # Streamlit apps (user + admin)
├── scripts/ # CLI utilities for syncing data
├── data/ # SQLite database
└── tests/ # Test suite
- Language: Python 3.11+
- Bot: python-telegram-bot
- Web: Streamlit
- Scraping: Telethon (Telegram API)
- Database: SQLite + SQLModel
- LLM: OpenRouter API (Claude/Gemini)
- Deployment: Docker + Caddy
MIT