
AI Chat Export
A multi-browser extension that exports AI chatbot conversations to clean, structured Markdown - supporting 8 platforms, published on Chrome Web Store, with 20 releases delivered in 2 months.
Source Lines
20,734
TypeScript + React
Platforms
8
AI chatbots supported
Releases
20
In 2 months
Commits
84
By a single contributor
Project Overview
What AI Chat Export is and why it exists
AI Chat Export is a browser extension (Chrome, Firefox, Edge, Brave, Opera) that exports conversations from the major AI chatbots to clean, well-structured Markdown. It addresses a concrète, widespread frustration: the native copy and export buttons built into ChatGPT, Gemini, Claude, and other AI interfaces systematically lose formatting, strip hyperlinks, omit citations, and offer no control over the exported content.
The extension sits at the intersection of developer productivity tools and the AI assistant ecosystem. It targets the rapidly growing population of regular AI chatbot users - developers, researchers, students, technical writers - who need to archive, share, or reuse their conversations outside the chatbot interface. It is distributed through the Chrome Web Store and GitHub Releases.
ChatGPT
Deep Research, Canvas, React Fiber
Gemini
Deep Research, iframes, charts
Claude
Artifacts, async extraction
Perplexity
Citations, docs, Python scripts
Grok
DeepSearch, citation expansion
Mistral
HTML to Markdown
Copilot
Planned
DeepSeek
Planned
Objectives, Context & Risks
The strategic vision behind the project
The project was driven by five clear, measurable goals:
Export Fidelity
100%
Capture all content including dynamic links, citations, artifacts
Platform Coverage
6+ chatbots
Major AI platforms on the market
Browser Support
5 browsers
Chrome, Firefox, Edge, Brave, Opera
UX Goal
1 click
Copy or download in a single action
CI/CD
Automated
Full pipeline to Chrome Web Store
Context
This was a personal side-project initiated in January 2026 and developed entirely by Jose DA COSTA as sole developer. The repository is private on GitHub with a proprietary license and production code obfuscation. The market for AI chatbot export tools is emerging but already competitive, making speed-to-market and extraction quality the key differentiators.
Stakes
Beyond a technical exercise, the project carried real business stakes: rapid market positioning in an emerging niche, Chrome Web Store compliance (the extension was already rejected once for keyword stuffing), and continuous maintenance against constantly evolving chatbot DOM structures. The proprietary nature of the code also demanded robust intellectual property protection through multi-layer obfuscation.
DOM Changes by AI Platforms
Chatbots frequently update their UI, breaking extractors. Mitigated by modular architecture and E2E tests.
Chrome Web Store Rejection
Strict Google guidelines already caused one rejection. Documented compliance rules integrated into dev process.
Anti-Bot Protection (Cloudflare)
ChatGPT uses aggressive bot protection, preventing automated Playwright tests on this platform.
Single Developer Dependency
Sole maintainer creates bus factor risk. Mitigated by exhaustive documentation (23K-word CLAUDE.md).
Code Reverse Engineering
Browser extensions expose source code. Protected with Terser + javascript-obfuscator multi-pass.
Implementation Phases
A chronological walkthrough of what was built and how
- Set up the full Manifest V3 extension architecture (popup, background service worker, content scripts)
- Implemented extractors for ChatGPT, Gemini, and Grok using Strategy pattern with AbstractExtractor
- Built complete CI/CD pipeline with GitHub Actions (5 parallel jobs: lint, typecheck, test, security, build)
- Configured automated release pipeline with release-it, conventional commits, and SemVer
- Published first version to Chrome Web Store on day one
- Added Terser + javascript-obfuscator for code protection (3-pass minification)
- Added Grok support with DeepSearch link expansion and HTML-to-Markdown conversion
- Added Claude platform support with async content extraction
- Strengthened type safety throughout codebase (strict TypeScript, no explicit any)
- Improved error handling and recovery for unreliable DOM structures
- Implemented Markdown link format with automatic page title fetching
- Built split download system for conversations exceeding browser limits
- Enhanced Perplexity extractor: grouped citations, generated docs, Python script extraction
- UI improvements and bug fixes across all supported platforms
- Claude Artifacts extraction with async content loading
- ChatGPT Canvas/Textdoc extraction via clipboard API
- Multi-tab batch export: select multiple tabs for simultaneous export with compare, merge, fact-check actions
- Deep Research citations resolved as inline Markdown links (ChatGPT + Gemini)
- Open-and-paste cross-referencing between different AI chatbots (council prompt pattern)
- Hot-reload Vite plugin for faster development iteration
Actors & Interactions
The human and technical ecosystem around the project
As a solo project, AI Chat Export was developed entirely by Jose DA COSTA, who held all roles simultaneously: product owner, architect, developer, designer, DevOps engineer, and publisher. This required a disciplined approach to self-organization and decision-making.
Starting from March 2026, Claude Code (Claude Opus 4.6) was introduced as a pair-programming assistant to accelerate development of advanced features. The collaboration was structured and deliberate - Claude Code operated within strict documented guidelines (23K-word CLAUDE.md) and all architectural decisions remained with Jose DA COSTA.
| Metric | Jose DA COSTA (solo) | + Claude Code | Total |
|---|---|---|---|
| Commits | 67 (79.8%) | 17 (20.2%) | 84 |
| Lines Added | 47,281 (89.2%) | 5,732 (10.8%) | 53,013 |
| Lines Deleted | 4,367 (56.5%) | 3,357 (43.5%) | 7,724 |
| Total Lines Modified | 51,648 (85.0%) | 9,089 (15.0%) | 60,737 |
External Dependencies
The project interacted with several external services: Chrome Web Store (primary distribution), GitHub Actions (CI/CD), GitHub Releases (artifact hosting), Firefox Add-ons (AMO), Edge Add-ons, and Google Cloud Console (OAuth for Chrome Web Store API). Each store has its own review process, policies, and submission constraints that needed to be navigated carefully.
Results
Measurable outcomes for myself and the product
For the Product
Releases
20
v1.0.0 to v1.13.1
Test Assertions
403
14 test files
Dependencies (prod)
9
Lean production bundle
Active Platforms
6
+ 2 planned
CI/CD Jobs
5 parallel
lint, type, test, security, build
Artifacts/Release
7
Chrome, Firefox, Edge, Brave, Opera
For Me
This project significantly deepened expertise across several areas:
- Browser Extension Architecture (Manifest V3) - mastered the full lifecycle: content scripts, background service workers, popup UI, Chrome Storage API, inter-process messaging, and cross-origin iframe handling
- DOM Parsing at Scale - developed robust extraction strategies using CSS selectors, MutationObserver, React Fiber tree traversal, and async content loading patterns
- Multi-Store Publishing - navigated the submission, review, and compliance processes of Chrome Web Store, Firefox AMO, and Edge Add-ons
- Code Protection - implemented production-grade obfuscation pipeline combining Terser (3-pass) and javascript-obfuscator with string array shuffling
- AI-Assisted Development - established a structured methodology for pair-programming with Claude Code, including 23K-word guidelines documentation that serves as both AI and human reference
- Rapid Iteration - validated that investing in CI/CD from day one enables sustainable velocity (20 releases in 2 months without friction)
What Came After
The project beyond initial delivery
Immediate Aftermath
After the v1.13.1 release in March 2026, the extension was live on the Chrome Web Store and available for direct installation via GitHub Releases for Firefox, Edge, Brave, and Opera. The automated release pipeline ensured that every tagged version automatically built, packaged, and published to all supported channels.
Ongoing Maintenance
AI chatbot interfaces are inherently unstable targets. ChatGPT, Gemini, Claude, and others regularly update their DOM structure without notice. Each update potentially breaks the corresponding extractor. The modular architecture (one extractor per platform, inheriting from AbstractExtractor) was explicitly designed to minimize the blast radius of such changes - when Gemini changes its DOM, only the Gemini extractor needs updating.
Current State
The project is in active production on the Chrome Web Store and continues to be developed. Two additional platforms (Copilot, DeepSeek) are planned. The codebase remains under private license with full source code protection. The documentation infrastructure - including the 23K-word CLAUDE.md - serves as a blueprint for AI-assisted development workflows that has been reused across other projects.
Critical Reflection
Honest retrospective on decisions and lessons learned
- Exceptional velocity: 20 releases in 2 months with a functional product on the Chrome Web Store from day one. The immediate CI/CD investment paid off massively.
- Modular architecture: the Strategy pattern with AbstractExtractor makes adding a new platform a matter of writing a single extractor class without touching existing code.
- Code quality discipline: TypeScript strict mode, ESLint strictTypeChecked, conventional commits, 403 test assertions, zero TODO/FIXME in production code.
- AI-first documentation: the 23K-word CLAUDE.md pioneered a documentation approach that simultaneously serves human developers and AI assistants.
- Complete CI/CD pipeline: from commit to Chrome Web Store - fully automated. Store rejections documented and integrated into the process.
- DOM fragility: extraction relies on parsing chatbot DOMs, which can change without notice. An automated monitoring system for structure changes would reduce reaction time.
- Limited E2E coverage: ChatGPT's Cloudflare protection blocks automated browsers, making comprehensive end-to-end testing impossible for the most critical platform.
- Single point of failure: despite 23K words of documentation, the project depends on a single developer for all decisions and maintenance.
- Gemini extractor complexity: 4,821 lines across 12 files handling iframes, charts, Deep Research, and source carousels. This module would benefit from further decomposition.
- Generic HTML-to-Markdown engine: rather than platform-specific extractors, a configurable HTML-to-Markdown converter adapted to chatbot contexts could reduce code duplication.
Lasting Lessons
- Automation pays from day one - setting up CI/CD, conventional commits, and automated releases immediately enabled 20 frictionless releases in 2 months.
- Documenting for AI is documenting for humans - the 23K-word Claude Code guidelines double as comprehensive architectural documentation.
- SaaS DOMs are unstable contracts - building a product on third-party DOM parsing requires modular design and rapid adaptation capability.
- IP protection requires deliberate effort - in the browser extension ecosystem, code is inherently exposed. Obfuscation, minification, and no source maps are necessary but imperfect defenses.
Architecture
Related journey
Professional experience linked to this achievement
Skills applied
Technical and soft skills applied
Image gallery
Project screenshots and visuals








