โ 011Content & mediaLive
Medium Content Archival System
Save any Medium article as Markdown from a browser button, a Telegram message or a dashboard.
Archives Medium articles through a browser extension, Telegram bot and web dashboard. The project includes article-to-Markdown conversion, storage and document backup workflows.
- Chrome extension
- Express
- Convex
- Telegram
- Markdown


The problem
Saved articles disappear behind paywalls and dead links.
Who it is for
A client who reads and keeps a lot of articles.
What it does

Admin: users, products enabled, and access. Sample data.
01
Three ways in
A browser extension, a Telegram bot, and a bulk queue in the dashboard.

Admin: users, products enabled, and access. Sample data. 02
Reader
A library and a clean Markdown reader.

An article, converted and stored. 03
API and admin
A documented API and an admin for users and keys.
How it works
The extension and the bot call an Express API. Convex stores the articles. A Next.js dashboard reads them.
- Chrome extension
- Express
- Convex
- Telegram
- Markdown
- Role
- Built by Vas.
- Status
- Live. One deployment is a client's.
The Challenge
The problem
Valuable Medium articles frequently disappear behind paywalls, get deleted by authors, or become inaccessible. Manual copy-paste loses formatting, images, and metadata. Reading lists become cluttered with articles that can no longer be accessed.
Why existing solutions failed
Browser bookmarks just save URLs that break when content moves or gets deleted. Pocket and similar services often fail to capture full formatting. Evernote web clipper strips important metadata. No existing tool preserves the original reading experience while making content searchable and organized.
Business impact
Hours spent re-finding articles or discovering they no longer exist. Lost insights from valuable technical content. No centralized searchable library of saved knowledge. Inability to reference previously read material.
The workflow
From first interaction to final output, step by step.
- STEP 01
Find Article
Browse Medium and find an article worth saving
- STEP 02
Click Extension
One-click popup shows article metadata instantly
- STEP 03
Scrape Content
GraphQL API extracts full article with formatting
- STEP 04
Convert Format
Transform to clean Markdown with images preserved
- STEP 05
Cloud Storage
Save to Convex database and Google Docs
- STEP 06
Celebrate
Confetti animation confirms successful save
Our Solution
Approach
Built a full-stack system with three access methods: Chrome extension for one-click saving while browsing, Telegram bot for sharing links on mobile, and web dashboard for library management. Uses Medium's GraphQL API for clean extraction with HTML fallback. Stores in Convex cloud database for search and syncs to Google Docs for offline access.
Workflow
User clicks extension or sends Telegram link โ Server fetches article via GraphQL API โ Cheerio parses HTML fallback if needed โ Turndown converts to Markdown โ Images uploaded to Google Drive โ Article saved to Convex database โ Google Doc created with full formatting โ Confetti celebration in UI
Key features
- One-click browser extension with instant preview
- Telegram bot for mobile article saving
- Web dashboard with search and filtering
- GraphQL-based scraping for clean extraction
- Full Markdown conversion with preserved formatting
- Automatic Google Docs backup
- Image preservation and cloud storage
- Bulk scraping queue (up to 20 articles)
- Author following and tag watching
- Spring physics animations throughout
- Confetti celebrations for successful saves
Results
Before
Manual copy-paste losing formatting, bookmarks to URLs that break, scattered saves across multiple apps, no search capability, lost articles behind paywalls
After
One-click saving with full formatting, permanent cloud backup, searchable library, Google Docs for offline access, never lose an article again
What changed for the business
Personal knowledge management transformed. Every valuable article instantly archived with full formatting. Searchable library accessible from any device. Google Docs backup ensures content survives any platform changes. Time spent re-finding or recreating lost content reduced to zero.
Technical Details
Architecture
Multi-platform architecture with three client interfaces (Chrome extension, Telegram bot, Next.js dashboard) connecting to a central Express.js API. Convex provides serverless database with real-time sync. Google APIs handle OAuth and Docs/Drive integration. Scraping uses Medium GraphQL API primarily with Cheerio HTML parsing as fallback.
Integrations
- Medium GraphQL API for article extraction
- Cheerio for HTML parsing fallback
- Turndown for HTML to Markdown conversion
- Google Drive API for file storage
- Google Docs API for document creation
- Convex for serverless database
- Telegram Bot API for mobile access
- Chrome Extension APIs for browser integration
- Framer Motion for animations
Security and compliance
- OAuth 2.0 for Google authentication
- Per-user API keys for Telegram
- Secure cookie handling for Medium auth
- HTTPS for all communications
- User data isolation in Convex
- No storage of Medium credentials
- Rate limiting to respect platform limits
Technologies
- Next.js
- React
- TypeScript
- Express.js
- Convex
- Google APIs
- Telegram Bot API
- Chrome Extensions
- Cheerio
- Turndown
- Framer Motion
- Tailwind CSS
Related
- โ 028Proof-of-concept deploymentScreens coming
Skool2Course
Course-generation work built on the Onnex reference application. Includes a browser extension, processing pipeline and protected screens for course conversion and generated output.
- Next.js
- TypeScript
- Browser extension
- Content pipelines
โ 029In use locallySocial Content Production Workflows
A set of reusable workflows for turning source material into social posts, slides, short-form content and ebooks. Includes brand context, research tools and content quality checks.
- AI skills
- Content automation
- YouTube
- Slides
Next project
Instagram Lead Generation SystemFinds Instagram prospects, scores them with AI and drafts a personal message for each.