The ultimate changelog tracking and notification system powered by AI.
Track changelogs from any source, get AI-powered summaries, listen to audio briefings, and receive email notifications when new versions drop.
Changelog Master monitors software changelogs (like Claude Code, VS Code, or any project with a markdown changelog) and transforms them into actionable insights:
- Fetches raw changelog markdown from any URL
- Parses version history into structured data
- Analyzes changes using Gemini 3 Flash AI to extract what actually matters
- Generates audio summaries using Gemini TTS so you can listen on the go
- Notifies you via email with audio attachments when new versions are released
- Chats with you about any changelog using an AI-powered assistant
Track multiple changelog sources simultaneously. Switch between them instantly or monitor all at once.
Claude Code ββββββ
VS Code ββββββββββΌβββΊ Changelog Master βββΊ Unified Dashboard
Antigravity IDE ββ
Gemini 3 Flash analyzes each changelog and extracts:
- TL;DR - Markdown-formatted executive summary
- Critical Breaking Changes - What will break your code
- Removals - Features being deprecated with severity ratings
- Major Features - New capabilities worth knowing
- Important Fixes - Bugs that were squashed
- Action Items - What you need to do
Browse previous analyses for any changelog version. Never lose context when new versions overwrite the current view - just select from the history dropdown to revisit past summaries.
Listen to changelog summaries using Gemini 2.5 Flash TTS with 30+ voice options:
| Voice | Tone |
|---|---|
| Charon | Informative |
| Puck | Upbeat |
| Kore | Firm |
| Zephyr | Bright |
| Aoede | Breezy |
| ...and 25 more |
Audio Features:
- Seekable Progress Bar - Click anywhere on the progress bar to jump to that position
- Auto-Restore - Last played audio is automatically restored on page reload (ready to play)
- SQLite Caching - Generated audio is cached in the database, no regeneration needed
- Adjustable Playback Speed - 0.5x to 2x speed options
Automatic emails when new versions are detected, including:
- HTML-formatted summary
- Categorized changes with severity indicators
- Audio file attachment (WAV format)
- Scheduled Summaries - Option to send emails on every check, not just new versions
Ask questions about any changelog versions using the AI assistant:
"What breaking changes were introduced between 2.0.70 and 2.0.74?" "Summarize all the new slash commands added this month" "Are there any security-related fixes I should know about?"
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (React) β
βββββββββββββββ¬ββββββββββββββ¬ββββββββββββββ¬ββββββββββββββββββββββββ€
β Header β TabNav β AudioPlayer β ChatPanel β
β (Source β (Changelog/ β (Play/Pause β (AI Assistant) β
β Selector) β Matters) β Download) β β
βββββββββββββββ΄ββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββββββββββ€
β useChangelog Hook β
β (Fetches, parses, caches, manages state) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND (Express.js) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β /api/sources/* - CRUD for changelog sources β
β /api/analysis/* - Cached AI analysis β
β /api/audio/* - TTS audio cache β
β /api/chat - Gemini-powered Q&A β
β /api/conversations - Chat history persistence β
β /api/monitor/* - Cron job status & manual triggers β
β /api/settings/* - User preferences β
β /api/send-* - Email notifications β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββΌββββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β SQLite β β Gemini API β β Resend API β
β (Caching) β β (AI/TTS) β β (Email) β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | React 19 + TypeScript + Vite |
| Styling | Tailwind CSS 4 (Anthropic-inspired design) |
| Backend | Express.js + TypeScript |
| Database | SQLite (better-sqlite3) |
| AI Analysis | Gemini 3 Flash (gemini-3-flash-preview) |
| Text-to-Speech | Gemini 2.5 Flash TTS (gemini-2.5-flash-preview-tts) |
| Resend API | |
| Scheduling | node-cron |
- Node.js 18+
- npm or yarn
- Gemini API key (Get one here)
- Resend API key (Get one here) - optional, for email notifications
# Clone the repository
git clone https://github.com/earlyaidopters/changelog-master.git
cd changelog-master
# Install dependencies
npm install
# Copy environment variables
cp .env.example .envEdit .env with your API keys:
# Required - Gemini API for AI analysis and TTS
VITE_GEMINI_API_KEY=your-gemini-api-key
# Optional - Email notifications
RESEND_API_KEY=re_xxxxxxxxxxxx
NOTIFY_EMAIL=you@example.com
# Optional - Customize defaults
VITE_CHANGELOG_CACHE_DURATION=3600000
VITE_VOICE_PREFERENCE=Charon# Start both frontend and backend (RECOMMENDED)
npm run dev:all
# Or run separately:
npm run dev # Frontend on http://localhost:5173
npm run dev:server # Backend on http://localhost:3001Important: Always use
npm run dev:allto start both servers. The backend is required for audio caching, analysis storage, and chat persistence to work properly.
- Click the link icon (π) in the header
- Click "Add Changelog Source"
- Enter a name and the raw markdown URL
- Click Test to validate the URL works
- Click Add Source to save
Example URLs:
# Claude Code
https://raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md
# VS Code
https://raw.githubusercontent.com/microsoft/vscode/main/CHANGELOG.md
# Any GitHub project
https://raw.githubusercontent.com/{owner}/{repo}/main/CHANGELOG.md
When you have multiple sources:
- Hover over the dropdown arrow next to the title
- Click any source to switch
- The app dynamically updates with that source's changelog
- Go to the "What Matters" tab
- Click "Read Latest" to hear the full summary
- Or click "Read TL;DR" for a quick briefing
- Use the audio player at the bottom to control playback:
- Play/Pause - Toggle audio playback
- Seek - Click anywhere on the progress bar to jump to that position
- Speed - Adjust playback speed (0.5x to 2x)
- Download - Save audio as WAV file
- Change voices using the dropdown selector
- Auto-Restore: Reload the page and your last played audio is ready to go
- Click the gear icon (βοΈ) for Settings
- Toggle "Notify me when a new version is released"
- Optionally enable "Send email on every check" for scheduled summaries (even without new versions)
- Select check frequency (e.g., "Every hour", "Once a week", "Every two weeks")
- Choose a voice for audio attachments
- Click "Send Demo Email" to test
- Click the chat bubble (π¬) in the bottom-right
- Select which versions to include in context
- Ask any question about the changes
- Previous conversations are saved and can be resumed
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/sources |
List all changelog sources |
| GET | /api/sources/:id |
Get single source details |
| POST | /api/sources |
Add new source |
| PATCH | /api/sources/:id |
Update source (name, URL, active) |
| DELETE | /api/sources/:id |
Delete source and history |
| GET | /api/sources/:id/changelog |
Fetch changelog markdown |
| POST | /api/sources/test |
Test if URL is valid changelog |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/analysis |
List all cached analyses |
| GET | /api/analysis/:version |
Get cached analysis |
| POST | /api/analysis/:version |
Save analysis to cache |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/audio/:hash/:voice |
Get cached audio |
| POST | /api/audio |
Save audio to cache |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/chat |
Send message, get AI response |
| GET | /api/conversations |
List all conversations |
| GET | /api/conversations/:id |
Get conversation with messages |
| POST | /api/conversations |
Create new conversation |
| DELETE | /api/conversations/:id |
Delete conversation |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/monitor/status |
Get cron job status |
| POST | /api/monitor/check |
Trigger manual check |
| GET | /api/monitor/history |
Get version detection history |
-- Changelog sources to monitor
CREATE TABLE changelog_sources (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
url TEXT NOT NULL UNIQUE,
is_active BOOLEAN DEFAULT 1,
last_version TEXT,
last_checked_at DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Version detection history
CREATE TABLE changelog_history (
version TEXT PRIMARY KEY,
source_id TEXT,
detected_at DATETIME DEFAULT CURRENT_TIMESTAMP,
notified BOOLEAN DEFAULT 0
);
-- Cached AI analyses
CREATE TABLE analysis_cache (
version TEXT PRIMARY KEY,
analysis_json TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Cached TTS audio
CREATE TABLE audio_cache (
id TEXT PRIMARY KEY,
text_hash TEXT NOT NULL,
voice TEXT NOT NULL,
audio_data BLOB NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Chat conversations
CREATE TABLE chat_conversations (
id TEXT PRIMARY KEY,
title TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Chat messages
CREATE TABLE chat_messages (
id TEXT PRIMARY KEY,
conversation_id TEXT NOT NULL,
role TEXT NOT NULL,
content TEXT NOT NULL,
selected_versions TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- User settings
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
);The monitoring system uses node-cron to check for new versions:
| Setting | Cron Expression | Schedule |
|---|---|---|
| Every 5 minutes | */5 * * * * |
:00, :05, :10... |
| Every 15 minutes | */15 * * * * |
:00, :15, :30, :45 |
| Every hour | 0 * * * * |
:00 each hour |
| Every 6 hours | 0 */6 * * * |
00:00, 06:00, 12:00, 18:00 |
| Once a day | 0 0 * * * |
Midnight |
| Once a week | 0 0 * * 0 |
Sunday at midnight |
| Every two weeks | 0 0 1,15 * * |
1st and 15th of month |
When a new version is detected:
- Save version to history
- Analyze changelog with Gemini 3 Flash
- Generate audio summary with Gemini TTS
- Send email with HTML summary + audio attachment
- Mark version as notified
changelog-master/
βββ server/
β βββ index.ts # Express backend with all API routes
βββ src/
β βββ components/
β β βββ Header.tsx # Title, source selector, toolbar
β β βββ TabNav.tsx # Changelog/Matters tabs
β β βββ ChangelogView.tsx # Raw markdown display
β β βββ MattersView.tsx # AI analysis display
β β βββ AudioPlayer.tsx # TTS playback controls
β β βββ ChatPanel.tsx # AI chat interface
β β βββ SettingsPanel.tsx # Notification settings
β β βββ SourcesPanel.tsx # Manage changelog URLs
β β βββ Toast.tsx # Notifications
β βββ hooks/
β β βββ useChangelog.ts # Changelog data + source selection
β β βββ useAudio.ts # TTS generation + playback
β β βββ useTheme.ts # Dark/light mode
β βββ services/
β β βββ changelogService.ts # Fetch & parse changelogs
β β βββ geminiService.ts # AI analysis
β β βββ ttsService.ts # Text-to-speech
β β βββ emailService.ts # Send notifications
β β βββ cacheService.ts # SQLite caching
β βββ types/
β β βββ index.ts # TypeScript interfaces
β βββ App.tsx # Main application
β βββ main.tsx # Entry point
βββ docs/
β βββ claude-changelog-app.md # Original spec
β βββ gemini-3.md # Gemini API reference
β βββ audio_understanding.md # TTS documentation
βββ data/
β βββ audio.db # SQLite database (gitignored)
βββ .env # API keys (gitignored)
Set dark mode as the default in Settings > Appearance. The app remembers your preference across sessions.
Voices are defined in src/types/index.ts:
export const VOICE_OPTIONS: VoiceOption[] = [
{ name: 'Charon', tone: 'Informative' },
{ name: 'Puck', tone: 'Upbeat' },
// Add more from Gemini's voice library
];Edit the prompt in server/index.ts:
const prompt = `Analyze this changelog and return JSON:
{
"tldr": "...",
"categories": { ... },
"action_items": [...],
"sentiment": "positive|neutral|critical"
}`;The HTML email is generated in generateEmailHtml() in server/index.ts.
- Check if the URL returns raw markdown (not HTML)
- Use the Test button in Sources panel to validate
- Verify your Gemini API key is correct
- Check the browser console for error details
- Audio is generated as PCM and converted to WAV
- Ensure browser supports WAV playback
- Make sure the backend server is running (
npm run dev:all) - Audio caching requires the
/api/audioendpoints on port 3001 - Check browser console for "Using cached audio from SQLite" message
- Verify Resend API key and NOTIFY_EMAIL in
.env - Check server logs for error messages
- Use "Send Demo Email" to test
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing) - Open a Pull Request
MIT License - see LICENSE for details.
- Anthropic - Claude Code changelog inspiration
- Google - Gemini 3 Flash & TTS APIs
- Resend - Email delivery
- Vite - Lightning-fast builds
Built with AI, for developers who value their time.