Back to projects

confx

Chrome extension for extracting Confluence pages, Jira issues, and page trees to Markdown. Supports tree export with nested pages, block picker, content subscriptions, and rule-based formatting.

Brief

Chrome extension for Confluence and Jira content extraction to Markdown

Demonstrates: Chrome Extension API, content script injection, dual-browser build pipeline

Key Features

  • Exports Confluence pages, Jira issues, and page trees to Markdown with rule-based formatting
  • Provides a block picker for extracting arbitrary content sections from any page
  • Ships dual browser builds for Chrome and Yandex with automated CI/CD releases

Problem

Extract structured content from Confluence pages and Jira issues without copy-paste or manual formatting.

Architecture

Content scripts inject into Confluence and Jira pages to extract structured data. A sidebar popup provides the UI for selecting export mode, rule set, and triggering extraction. Background service worker handles cross-tab coordination and file downloads. Vite builds separate bundles for Chrome and Yandex targets.

Key decisions

  • Use content script injection instead of external API calls to avoid authentication complexity and work with any Confluence/Jira instance.
  • Build dual browser targets (Chrome zip + Yandex crx) from a single codebase through Vite configuration.
  • Generate releases via GitHub Actions on tag push with SHA256 checksums for distribution integrity.

Tech stack

TypeScriptViteChrome Extension APIVitest
Chrome extension for extracting Confluence pages, Jira issues, and page trees to Markdown. Supports three export modes (Page, Space, Tree) with rule-based formatting presets and attachment handling. The extension includes a block picker for extracting arbitrary content sections, content subscriptions for change tracking, and a dark-themed sidebar UI. Built with TypeScript strict mode, Vite, and 319 Vitest tests. Ships dual browser targets (Chrome and Yandex) with automated GitHub Actions releases on tag push.