Discover trending Hacker News stories, transform them into engaging LinkedIn posts with AI, review them in Telegram, and publish with a single tap.
Features β’ Workflow β’ Getting Started β’ Deployment β’ FAQ
Stop writing LinkedIn posts manually. Let AI do the boring part. You just approve and publish.
Every day, Hacker News surfaces some of the best discussions in tech.
You read an article, think "I should post about this on LinkedIn," then spend the next 20 minutes:
- Writing a hook
- Rewriting paragraphs
- Finding hashtags
- Looking for an image
- Editing the formatting
- Wondering whether it's good enough
Eventually you either publish something average...
...or don't publish anything at all.
HNLINK automates everything except the final decision.
You stay in control while AI handles the repetitive work.
- π₯ Fetch trending Hacker News stories
- π Extract complete article content
- πΌ Automatically download the featured image
- π€ Generate high-quality LinkedIn posts with AI
- π± Review posts inside Telegram
- β One-tap approval workflow
- πΌ Publish directly to LinkedIn
- π« Prevent duplicate posts with SQLite history
- β‘ Powered by OpenRouter
- π³ Docker ready
- βοΈ Free deployment on Hugging Face Spaces
1. Fetch Hacker News
β
βΌ
2. Extract Article + Image
β
βΌ
3. AI Writes LinkedIn Post
β
βΌ
4. Send to Telegram
β
ββββββ΄βββββ
β β
Approve Skip
β β
βΌ βΌ
LinkedIn Archive
flowchart LR
A[Hacker News API]
--> B[Article Extractor]
B --> C[Image Extractor]
C --> D[OpenRouter AI]
D --> E[Telegram Bot]
E -->|Approve| F[LinkedIn API]
E -->|Skip| G[Discard]
HNLINK isn't just summarizing articles.
It follows a repeatable structure designed for professional social media.
Every generated post includes:
- π£ Attention-grabbing opening hook
- π Short readable paragraphs
- π§ Key insights instead of article summaries
- π Three-level hashtag strategy
- π¬ Conversation-starting ending
- π« No Markdown
- π« No URLs
- πΈ Original article image
The result is content that's ready to paste directly onto LinkedIn.
Most developers are optimizing the wrong thing.
A Hacker News discussion today highlighted a startup that
reduced infrastructure costs by nearly 80%.
Not by switching cloud providers.
Not by adding more engineers.
They simply questioned one assumption everyone else accepted.
Sometimes the biggest improvements come from deleting,
not adding.
What's one engineering decision you've changed your mind about recently?
#SoftwareEngineering
#Programming
#Startups
#HackerNews
| Technology | Purpose |
|---|---|
| Python | Core application |
| OpenRouter | AI generation |
| Telegram Bot API | Review workflow |
| LinkedIn API | Publishing |
| Hacker News API | Story source |
| BeautifulSoup | Article extraction |
| Requests | Networking |
| SQLite | History tracking |
| Docker | Deployment |
- Python 3.10+
- OpenRouter API Key
- LinkedIn Developer App
- Telegram Bot
- LinkedIn Access Token
git clone https://github.com/Lumacodes/HNLINK.git
cd HNLINK
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtcp .env.example .envFill the environment variables.
OPENROUTER_API_KEY=sk-or-...
LINKEDIN_ACCESS_TOKEN=your_token
LINKEDIN_PERSON_URN=urn:li:person:xxxxxxxx
TELEGRAM_BOT_TOKEN=xxxxxxxx
TELEGRAM_CHAT_ID=xxxxxxxx| Variable | Required | Description |
|---|---|---|
| OPENROUTER_API_KEY | β | OpenRouter API key |
| LINKEDIN_ACCESS_TOKEN | β | LinkedIn OAuth token |
| LINKEDIN_PERSON_URN | β | LinkedIn profile URN |
| TELEGRAM_BOT_TOKEN | β | Telegram Bot token |
| TELEGRAM_CHAT_ID | β | Chat ID for approvals |
python src/telegram_bot.pyOpen Telegram.
/fetch
Within a few seconds you'll receive generated posts with:
β Approve
β Skip
Approve publishes immediately.
Skip permanently ignores the story.
| Command | Description |
|---|---|
/start |
Display available commands |
/fetch |
Generate 3 LinkedIn posts |
/fetch 5 |
Generate 5 posts |
/status |
Check APIs and bot health |
/history |
View posting statistics |
/help |
Show command reference |
HNLINK/
β
βββ src/
β βββ telegram_bot.py
β βββ hn_fetcher.py
β βββ content_extractor.py
β βββ post_generator.py
β βββ linkedin_poster.py
β βββ history_tracker.py
β
βββ config/
β βββ settings.py
β
βββ scripts/
β βββ run_pipeline.py
β
βββ assets/
β βββ demo.gif
β
βββ Dockerfile
βββ requirements.txt
βββ README.md
- Fork this repository
- Create a Docker Space
- Add environment variables as Secrets
- Push your code
Your bot stays online 24/7 for free.
docker build -t hnlink .
docker run --env-file .env hnlink- Software Engineers
- Indie Hackers
- Startup Founders
- DevRel Teams
- Technical Writers
- AI Content Creators
- Open Source Maintainers
- Reddit support
- Product Hunt support
- RSS feeds
- Multi-language generation
- Multiple LinkedIn accounts
- Scheduled publishing
- Analytics dashboard
- Custom AI prompts
- Team collaboration
- Web dashboard
Contributions are welcome.
If you have an idea, bug fix, or feature request:
- Fork the repository
- Create a feature branch
- Commit your changes
- Open a Pull Request
Every contribution is appreciated.
Yes.
The free tier is enough for testing and light usage.
No.
Every generated post must be approved inside Telegram.
Yes.
Any model available through OpenRouter can be used.
Absolutely.
Simply edit the prompt inside post_generator.py.
No.
Published stories are stored in SQLite to prevent duplicates.
Released under the MIT License.
Use it for personal or commercial projects.
If HNLINK saves you time or helps you stay consistent on LinkedIn, consider giving the repository a star.
It helps more developers discover the project.
Made by Luma