An automated system that discovers AI/ML related content from the web, generates concise LinkedIn posts using a local LLM (Ollama + Qwen3:4b), and manages approval/scheduling via a Streamlit dashboard.
- Scrapes AI/ML news and discussions from multiple sources
- Generates exactly 3-sentence LinkedIn posts with an educative, conversational tone
- Human-in-the-loop approval (approve/reject/edit before posting)
- Post scheduling with Celery + Redis
- Streamlit-based dashboard for easy management
- Python 3.11
- FastAPI – backend services
- Celery + Redis – task queue & scheduling
- Streamlit – dashboard UI
- Ollama + Qwen3:4b – local LLM for generating posts
- Docker & Docker Compose – containerized setup
linkedin_autopost/
│── app/ # Core backend services
│ ├── database/ # DB connection & models
│ ├── services/ # LLM, scraping, publishing
│ ├── tasks/ # Celery tasks
│ └── utils/ # Helpers & logging
│── dashboard/ # Streamlit dashboard
│── logs/ # Log files
│── .env # Environment variables (not committed)
│── docker-compose.yml # Multi-container setup
│── requirements.txt # Python dependencies-
Clone the repo
git clone https://github.com/chussboi96/linkedin_autopost.git cd linkedin_autopost -
Set up environment variables
Create a.envfile (use.env.exampleas a reference).
Example:DATABASE_URL=postgresql+psycopg2://user:password@db:5432/linkedin REDIS_URL=redis://redis:6379/0 OLLAMA_BASE_URL=http://host.docker.internal:11434 OLLAMA_MODEL=qwen3:4b
-
Run with Docker Compose
docker compose up --build
-
Access the dashboard
- Streamlit Dashboard → http://localhost:8501
- API (FastAPI) → http://localhost:8000/docs
- Scraper finds new content automatically.
- LLM generates draft LinkedIn posts.
- Review drafts in the dashboard → approve/edit/reject.
- Celery schedules & posts to LinkedIn.
.envis not committed to Git (contains secrets).- Use
.env.examplefor reference.
- Multi-account support
- Richer analytics on post engagement
- Custom LLM fine-tuning
Maintained by @chussboi96