Skip to content

Commit ed1f7a4

Browse files
aramb-devclaude
andcommitted
feat(changelog): add v3.2 changelog and update announcement modal
- Add v3.2.0 changelog entry with AI features, SDK migration, smart error recovery, video playback fix, and shadcn v3 upgrade - Update announcement modal to v3.2 content (AI Intelligence theme) - Replace emojis with Lucide icons in modal feature highlights - Change localStorage key from "seenV3" to "v3.2SAW" - Auto-show modal on first visit when v3.2SAW is not set - Update header button text from "V3 is Here!" to "V3.2" Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b785804 commit ed1f7a4

5 files changed

Lines changed: 94 additions & 60 deletions

File tree

src/app/page.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import { Suspense, useState, lazy } from "react";
3+
import { Suspense, useState, useEffect, lazy } from "react";
44
import { motion, AnimatePresence } from "framer-motion";
55
import { Card, CardContent } from "../components/ui/card";
66
import { Header } from "../components/layout/Header";
@@ -36,6 +36,14 @@ export default function Page() {
3636
useState<TranscriptionSession | null>(null);
3737
const [transcriptionResult] = useState<string | null>(null);
3838

39+
// Auto-show V3.2 announcement for users who haven't seen it
40+
useEffect(() => {
41+
const hasSeen = localStorage.getItem("v3.2SAW")
42+
if (!hasSeen) {
43+
setShowV3Modal(true)
44+
}
45+
}, [])
46+
3947
// Updated to use the new window method instead of direct DOM manipulation
4048
const openFeedbackModal = (type: "general" | "issue" | "feature") => {
4149
if (window.openFeedbackModal) {
Lines changed: 56 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,51 @@
1-
import { useEffect, useState } from "react";
2-
import { motion } from "framer-motion";
3-
import { X, Sparkles, Music2, Play } from "lucide-react";
4-
import Confetti from "react-confetti";
5-
import { Button } from "./ui/button";
6-
import { AnimatedBackdrop } from "./ui/animated-backdrop";
7-
import { expandCenter } from "../lib/animations";
1+
import { useEffect, useState } from "react"
2+
import { motion } from "framer-motion"
3+
import { X, Brain, Languages, RefreshCw } from "lucide-react"
4+
import Confetti from "react-confetti"
5+
import { Button } from "./ui/button"
6+
import { AnimatedBackdrop } from "./ui/animated-backdrop"
7+
import { expandCenter } from "../lib/animations"
8+
9+
const STORAGE_KEY = "v3.2SAW"
810

911
interface V3AnnouncementModalProps {
10-
onClose: () => void;
12+
onClose: () => void
1113
}
1214

1315
export function V3AnnouncementModal({ onClose }: V3AnnouncementModalProps) {
14-
const [showConfetti, setShowConfetti] = useState(false);
16+
const [showConfetti, setShowConfetti] = useState(false)
1517
const [windowDimensions, setWindowDimensions] = useState({
1618
width: 0,
1719
height: 0,
18-
});
20+
})
1921

2022
useEffect(() => {
21-
// Set window dimensions for confetti
2223
const updateWindowDimensions = () => {
2324
setWindowDimensions({
2425
width: window.innerWidth,
2526
height: window.innerHeight,
26-
});
27-
};
27+
})
28+
}
2829

29-
updateWindowDimensions();
30-
window.addEventListener("resize", updateWindowDimensions);
30+
updateWindowDimensions()
31+
window.addEventListener("resize", updateWindowDimensions)
3132

32-
// Start confetti animation
33-
setShowConfetti(true);
33+
setShowConfetti(true)
3434

35-
// Stop confetti after 6 seconds
3635
const confettiTimer = setTimeout(() => {
37-
setShowConfetti(false);
38-
}, 6800);
36+
setShowConfetti(false)
37+
}, 6800)
3938

4039
return () => {
41-
window.removeEventListener("resize", updateWindowDimensions);
42-
clearTimeout(confettiTimer);
43-
};
44-
}, []);
40+
window.removeEventListener("resize", updateWindowDimensions)
41+
clearTimeout(confettiTimer)
42+
}
43+
}, [])
4544

4645
const handleClose = () => {
47-
// Set the flag to prevent showing again
48-
localStorage.setItem("seenV3", "true");
49-
onClose();
50-
};
46+
localStorage.setItem(STORAGE_KEY, "true")
47+
onClose()
48+
}
5149

5250
return (
5351
<>
@@ -66,10 +64,10 @@ export function V3AnnouncementModal({ onClose }: V3AnnouncementModalProps) {
6664
<div className="mb-6 flex items-center justify-between">
6765
<div className="flex items-center gap-3">
6866
<div className="rounded-full bg-gradient-to-r from-blue-500 to-purple-600 p-2">
69-
<Play className="h-6 w-6 text-white" />
67+
<Brain className="h-6 w-6 text-white" />
7068
</div>
7169
<h1 className="bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-2xl font-bold text-transparent dark:from-blue-400 dark:to-purple-400">
72-
V3 is here!
70+
V3.2 -- AI Intelligence
7371
</h1>
7472
</div>
7573
<Button
@@ -85,57 +83,58 @@ export function V3AnnouncementModal({ onClose }: V3AnnouncementModalProps) {
8583
{/* Main content */}
8684
<div className="space-y-6">
8785
<p className="text-lg text-gray-700 dark:text-gray-300">
88-
Experience the future of transcription with Transcription Studio!
89-
V3 brings a revolutionary interactive workspace with OpenAI's
90-
official Whisper model for unmatched accuracy.
86+
Transcriptr now runs on the AssemblyAI SDK with opt-in AI
87+
analysis features. Get chapters, summaries, sentiment, entities,
88+
and more -- all from a single transcription.
9189
</p>
9290

9391
{/* Feature highlights */}
9492
<div className="space-y-4">
9593
<div className="flex items-start gap-3">
9694
<div className="mt-1 rounded-full bg-blue-100 p-1 dark:bg-blue-900">
97-
<Play className="h-4 w-4 text-blue-600 dark:text-blue-400" />
95+
<Brain className="h-4 w-4 text-blue-600 dark:text-blue-400" />
9896
</div>
9997
<div>
10098
<h3 className="font-medium text-blue-600 dark:text-blue-400">
101-
🎬 Transcription Studio
99+
AI Analysis Features
102100
</h3>
103101
<p className="text-sm text-gray-700 dark:text-gray-300">
104-
Brand new interactive workspace with an integrated audio
105-
player. Click any segment to jump to that exact moment in
106-
the audio!
102+
Toggle Auto Chapters, Summarization, Sentiment Analysis,
103+
Entity Detection, Key Phrases, Content Moderation, and
104+
Topic Detection. Each feature appears as a new tab in the
105+
Studio.
107106
</p>
108107
</div>
109108
</div>
110109

111110
<div className="flex items-start gap-3">
112111
<div className="mt-1 rounded-full bg-purple-100 p-1 dark:bg-purple-900">
113-
<Music2 className="h-4 w-4 text-purple-600 dark:text-purple-400" />
112+
<Languages className="h-4 w-4 text-purple-600 dark:text-purple-400" />
114113
</div>
115114
<div>
116115
<h3 className="font-medium text-purple-600 dark:text-purple-400">
117-
🤖 OpenAI Whisper Model
116+
30+ Language Support
118117
</h3>
119118
<p className="text-sm text-gray-700 dark:text-gray-300">
120-
Upgraded to OpenAI's official Whisper model with precise
121-
timestamps for every segment. Better accuracy, better
122-
results.
119+
Auto-detect or manually select from 20+ languages.
120+
AssemblyAI natively supports audio and video formats --
121+
no conversion step needed.
123122
</p>
124123
</div>
125124
</div>
126125

127126
<div className="flex items-start gap-3">
128127
<div className="mt-1 rounded-full bg-green-100 p-1 dark:bg-green-900">
129-
<Sparkles className="h-4 w-4 text-green-600 dark:text-green-400" />
128+
<RefreshCw className="h-4 w-4 text-green-600 dark:text-green-400" />
130129
</div>
131130
<div>
132131
<h3 className="font-medium text-green-600 dark:text-green-400">
133-
⏱️ Interactive Playback
132+
Smart Error Recovery
134133
</h3>
135134
<p className="text-sm text-gray-700 dark:text-gray-300">
136-
Watch segments highlight in real-time as audio plays. Export
137-
professional SRT and VTT subtitle files with perfect
138-
timestamps.
135+
If a feature does not support the detected language, you
136+
get a clear explanation and a one-click retry that
137+
automatically disables the unsupported feature.
139138
</p>
140139
</div>
141140
</div>
@@ -144,8 +143,8 @@ export function V3AnnouncementModal({ onClose }: V3AnnouncementModalProps) {
144143
{/* Call to action */}
145144
<div className="rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900">
146145
<p className="text-center text-sm text-gray-600 dark:text-gray-400">
147-
Try the new Studio! Upload an audio file and click "Open in
148-
Studio" to experience interactive playback.
146+
Enable AI features in the Transcription Options panel before
147+
uploading. Results appear as tabs in the Studio.
149148
</p>
150149
</div>
151150

@@ -175,17 +174,17 @@ export function V3AnnouncementModal({ onClose }: V3AnnouncementModalProps) {
175174
numberOfPieces={200}
176175
gravity={0.3}
177176
colors={[
178-
"#3b82f6", // blue-500
179-
"#10b981", // emerald-500
180-
"#f59e0b", // amber-500
181-
"#ef4444", // red-500
182-
"#8b5cf6", // violet-500
183-
"#06b6d4", // cyan-500
177+
"#3b82f6",
178+
"#10b981",
179+
"#f59e0b",
180+
"#ef4444",
181+
"#8b5cf6",
182+
"#06b6d4",
184183
]}
185184
/>
186185
</div>
187186
)}
188187
</AnimatedBackdrop>
189188
</>
190-
);
189+
)
191190
}

src/components/layout/Header.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export function Header({
7373
<span className="absolute inline-flex h-full w-full animate-ping rounded-full bg-white opacity-75"></span>
7474
<span className="relative inline-flex h-2 w-2 rounded-full bg-white"></span>
7575
</span>
76-
V3 is Here!
76+
V3.2
7777
</button>
7878
)}
7979
<a

src/components/ui/mobile-navigation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ export function MobileNavigation({
173173
<span className="absolute inline-flex h-full w-full animate-ping rounded-full bg-white opacity-75"></span>
174174
<span className="relative inline-flex h-2 w-2 rounded-full bg-white"></span>
175175
</span>
176-
V3 is Here!
176+
V3.2
177177
</Button>
178178
</motion.div>
179179
)}

src/data/changelog.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,33 @@ export interface ChangeItem {
99
}
1010

1111
export const changelogItems: ChangeItem[] = [
12+
{
13+
date: "Fri, 14 Feb 2026",
14+
version: "3.2.0",
15+
changes: {
16+
new: [
17+
"**AssemblyAI SDK Integration**: Migrated transcription engine to the official AssemblyAI JavaScript SDK for better reliability and type safety",
18+
"**AI Analysis Features**: Opt-in AI intelligence features including Auto Chapters, Summarization, Sentiment Analysis, Entity Detection, Key Phrases, Content Moderation, and Topic Detection",
19+
"**Speaker Diarization**: Identify different speakers in interviews, meetings, and conversations",
20+
"**Smart Error Recovery**: Feature-language incompatibility errors now show a clear explanation and a one-click retry button that automatically disables the unsupported feature",
21+
"**Options Badges**: Selected transcription options (language, diarize, AI features) are shown as badges on the result screen",
22+
"**shadcn/ui v3 Upgrade**: All UI components upgraded to shadcn v3 (radix-vega) with unified Radix UI package and Tabler icons",
23+
"**Intelligence Panels**: New Studio tabs for Chapters, Summary, Sentiment, Entities, and Key Phrases when AI features are enabled",
24+
],
25+
improved: [
26+
"**Video File Playback**: Studio player now uses a video element to handle both audio and video containers (MP4, WebM, etc.)",
27+
"**Polling Resilience**: Transcription status polling retries up to 5 consecutive errors before failing, with 5-second intervals",
28+
"**Mutual Exclusivity Handling**: Auto Chapters and Summarization are mutually exclusive in the UI with clear descriptions",
29+
"**Donation Transparency**: Premium features show a one-time donation nudge explaining processing costs",
30+
],
31+
fixed: [
32+
"**Null Safety**: Added guards on nullable SDK fields to prevent crashes during polling",
33+
"**Polling Error Details**: Error responses are now fully read and displayed instead of generic messages",
34+
"**Dialog Overlay**: Fixed nearly invisible modal overlay (was 10% opacity, now 50%)",
35+
"**CSS Variable System**: Cleaned up theme variables to work correctly with shadcn v3 and Tailwind CSS v4",
36+
],
37+
},
38+
},
1239
{
1340
date: "Fri, 31 Oct 2025",
1441
version: "3.0.0",

0 commit comments

Comments
 (0)