Skip to content

Commit 3fcd07a

Browse files
committed
docs: remove status column from examples table
Drop the Status column from README and strip all status-tracking logic from the pm-dashboard agent instruction. The dashboard now only rebuilds the 4-column table (number, example, language, integration) when examples are added or removed.
1 parent 31bfa97 commit 3fcd07a

File tree

2 files changed

+66
-102
lines changed

2 files changed

+66
-102
lines changed

README.md

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,46 @@ A collection of working examples showing how to use Deepgram SDKs with popular p
77
## Examples
88

99
<!-- examples-table-start -->
10-
| # | Example | Language | Integration | Status |
11-
|---|---------|----------|-------------|--------|
12-
| [010](examples/010-getting-started-node/) | Getting Started — Transcribe a URL with Node.js | Node.js | Deepgram SDK | ✅ passing |
13-
| [020](examples/020-twilio-media-streams-node/) | Twilio Media Streams — Real-Time Call Transcription | Node.js | Twilio | ✅ passing |
14-
| [021](examples/021-twilio-voice-agent-node/) | Twilio Voice + Deepgram Voice Agent — AI Phone Agent | Node.js | Twilio | ✅ passing |
15-
| [030](examples/030-livekit-agents-python/) | LiveKit Agents — Voice Assistant with Deepgram STT | Python | LiveKit | ✅ passing |
16-
| [040](examples/040-langchain-stt-tool-python/) | LangChain STT Tool — Transcribe Audio in AI Pipelines | Python | LangChain | ✅ passing |
17-
| [050](examples/050-vercel-ai-sdk-node/) | Vercel AI SDK — Transcribe Audio and Generate Speech with Deepgram | Node.js | Vercel AI SDK | ✅ passing |
18-
| [051](examples/051-nextjs-vercel-ai-sdk-streaming/) | Next.js Streaming STT + TTS with Deepgram via the Vercel AI SDK | Node.js | Vercel AI SDK | ✅ passing |
19-
| [060](examples/060-discord-bot-node/) | Discord Bot — Transcribe Audio Attachments with Deepgram | Node.js | Discord | ✅ passing |
20-
| [070](examples/070-vonage-voice-websocket-node/) | Vonage Voice API — Real-Time Call Transcription | Node.js | Vonage | ✅ passing |
21-
| [080](examples/080-pipecat-voice-pipeline-python/) | Pipecat Voice Pipeline — Conversational Bot with Deepgram STT & TTS | Python | Pipecat | ✅ passing |
22-
| [090](examples/090-expo-live-transcription-js/) | Expo Live Transcription | JavaScript | Expo | ✅ passing |
23-
| [100](examples/100-fastapi-audio-transcription-python/) | FastAPI Audio Transcription API | Python | FastAPI | ✅ passing |
24-
| [110](examples/110-cloudflare-worker-transcription-js/) | Cloudflare Worker — Edge Audio Transcription | Node.js | Cloudflare | ✅ passing |
25-
| [120](examples/120-slack-transcribe-bot-node/) | Slack Bot — Auto-Transcribe Audio Messages with Deepgram | Node.js | Slack | ✅ passing |
26-
| [130](examples/130-telegram-bot-python/) | Telegram Voice Transcription Bot | Python | Telegram | ✅ passing |
27-
| [140](examples/140-audio-to-subtitles-python/) | Audio to Subtitles CLI | Python | Deepgram SDK | ✅ passing |
28-
| [150](examples/150-flutter-voice-transcription-dart/) | Flutter Voice Transcription | Dart | Flutter ||
29-
| [160](examples/160-llamaindex-audio-loader-python/) | LlamaIndex Audio Document Loader — Transcribe Audio into RAG Pipelines | Python | LlamaIndex | ✅ passing |
30-
| [170](examples/170-electron-live-transcription-node/) | Electron Live Transcription Overlay | Node.js | Electron | ✅ passing |
31-
| [180](examples/180-zoom-recording-transcription-node/) | Zoom Cloud Recording Transcription with Deepgram | Node.js | Zoom | ✅ passing |
32-
| [190](examples/190-daily-co-transcription-node/) | Daily.co Real-Time Transcription Overlay | Node.js | Daily.co | ✅ passing |
33-
| [200](examples/200-vanilla-js-browser-transcription/) | Vanilla JavaScript Browser Transcription (No Bundler) | Node.js | Deepgram SDK | ✅ passing |
34-
| [210](examples/210-openai-agents-voice-python/) | OpenAI Agents SDK Voice Pipeline with Deepgram STT & TTS | Python | OpenAI Agents SDK | ✅ passing |
35-
| [220](examples/220-django-channels-live-stt-python/) | Django Channels Real-Time Transcription with Deepgram Live STT | Python | Django | ✅ passing |
36-
| [230](examples/230-n8n-deepgram-community-node-typescript/) | n8n Community Nodes for Deepgram | Node.js | n8n | ✅ passing |
37-
| [240](examples/240-nuxt-streaming-stt-tts-ts/) | Nuxt Streaming STT + TTS with Deepgram | Node.js | Nuxt | ✅ passing |
38-
| [260](examples/260-nestjs-websocket-stt/) | NestJS WebSocket Real-Time Transcription | Node.js | NestJS | ✅ passing |
39-
| [270](examples/270-sveltekit-live-transcription-ts/) | SvelteKit Real-Time Live Transcription | Node.js | SvelteKit | ✅ passing |
40-
| [280](examples/280-express-react-live-transcription-ts/) | Express.js + React Live Transcription (TypeScript) | Node.js | Express + React | ✅ passing |
41-
| [290](examples/290-aws-lambda-python-transcription/) | AWS Lambda Serverless Audio Transcription | Python | AWS Lambda | ✅ passing |
42-
| [300](examples/300-spring-boot-live-transcription-java/) | Spring Boot Real-Time Transcription with Deepgram | Java | Spring Boot ||
43-
| [310](examples/310-crewai-voice-agents-python/) | CrewAI Voice-Enabled Multi-Agent System with Deepgram | Python | CrewAI | ✅ passing |
44-
| [340](examples/340-tauri-live-transcription-rust-ts/) | Tauri Desktop Live Transcription | Rust | Tauri | ✅ passing |
45-
| [350](examples/350-asterisk-freeswitch-deepgram-stt-python/) | Asterisk / FreeSWITCH PBX to Deepgram Streaming STT | Python | Asterisk/FreeSWITCH | ✅ passing |
46-
| [360](examples/360-kotlin-android-live-transcription/) | Kotlin Android Live Transcription | Kotlin | Jetpack Compose ||
47-
| [370](examples/370-swift-ios-live-transcription/) | Swift iOS Live Transcription | Swift | SwiftUI ||
10+
| # | Example | Language | Integration |
11+
|---|---------|----------|-------------|
12+
| [010](examples/010-getting-started-node/) | Getting Started — Transcribe a URL with Node.js | Node.js | Deepgram SDK |
13+
| [020](examples/020-twilio-media-streams-node/) | Twilio Media Streams — Real-Time Call Transcription | Node.js | Twilio |
14+
| [021](examples/021-twilio-voice-agent-node/) | Twilio Voice + Deepgram Voice Agent — AI Phone Agent | Node.js | Twilio |
15+
| [030](examples/030-livekit-agents-python/) | LiveKit Agents — Voice Assistant with Deepgram STT | Python | LiveKit |
16+
| [040](examples/040-langchain-stt-tool-python/) | LangChain STT Tool — Transcribe Audio in AI Pipelines | Python | LangChain |
17+
| [050](examples/050-vercel-ai-sdk-node/) | Vercel AI SDK — Transcribe Audio and Generate Speech with Deepgram | Node.js | Vercel AI SDK |
18+
| [051](examples/051-nextjs-vercel-ai-sdk-streaming/) | Next.js Streaming STT + TTS with Deepgram via the Vercel AI SDK | Node.js | Vercel AI SDK |
19+
| [060](examples/060-discord-bot-node/) | Discord Bot — Transcribe Audio Attachments with Deepgram | Node.js | Discord |
20+
| [070](examples/070-vonage-voice-websocket-node/) | Vonage Voice API — Real-Time Call Transcription | Node.js | Vonage |
21+
| [080](examples/080-pipecat-voice-pipeline-python/) | Pipecat Voice Pipeline — Conversational Bot with Deepgram STT & TTS | Python | Pipecat |
22+
| [090](examples/090-expo-live-transcription-js/) | Expo Live Transcription | JavaScript | Expo |
23+
| [100](examples/100-fastapi-audio-transcription-python/) | FastAPI Audio Transcription API | Python | FastAPI |
24+
| [110](examples/110-cloudflare-worker-transcription-js/) | Cloudflare Worker — Edge Audio Transcription | Node.js | Cloudflare |
25+
| [120](examples/120-slack-transcribe-bot-node/) | Slack Bot — Auto-Transcribe Audio Messages with Deepgram | Node.js | Slack |
26+
| [130](examples/130-telegram-bot-python/) | Telegram Voice Transcription Bot | Python | Telegram |
27+
| [140](examples/140-audio-to-subtitles-python/) | Audio to Subtitles CLI | Python | Deepgram SDK |
28+
| [150](examples/150-flutter-voice-transcription-dart/) | Flutter Voice Transcription | Dart | Flutter |
29+
| [160](examples/160-llamaindex-audio-loader-python/) | LlamaIndex Audio Document Loader — Transcribe Audio into RAG Pipelines | Python | LlamaIndex |
30+
| [170](examples/170-electron-live-transcription-node/) | Electron Live Transcription Overlay | Node.js | Electron |
31+
| [180](examples/180-zoom-recording-transcription-node/) | Zoom Cloud Recording Transcription with Deepgram | Node.js | Zoom |
32+
| [190](examples/190-daily-co-transcription-node/) | Daily.co Real-Time Transcription Overlay | Node.js | Daily.co |
33+
| [200](examples/200-vanilla-js-browser-transcription/) | Vanilla JavaScript Browser Transcription (No Bundler) | Node.js | Deepgram SDK |
34+
| [210](examples/210-openai-agents-voice-python/) | OpenAI Agents SDK Voice Pipeline with Deepgram STT & TTS | Python | OpenAI Agents SDK |
35+
| [220](examples/220-django-channels-live-stt-python/) | Django Channels Real-Time Transcription with Deepgram Live STT | Python | Django |
36+
| [230](examples/230-n8n-deepgram-community-node-typescript/) | n8n Community Nodes for Deepgram | Node.js | n8n |
37+
| [240](examples/240-nuxt-streaming-stt-tts-ts/) | Nuxt Streaming STT + TTS with Deepgram | Node.js | Nuxt |
38+
| [260](examples/260-nestjs-websocket-stt/) | NestJS WebSocket Real-Time Transcription | Node.js | NestJS |
39+
| [270](examples/270-sveltekit-live-transcription-ts/) | SvelteKit Real-Time Live Transcription | Node.js | SvelteKit |
40+
| [280](examples/280-express-react-live-transcription-ts/) | Express.js + React Live Transcription (TypeScript) | Node.js | Express + React |
41+
| [290](examples/290-aws-lambda-python-transcription/) | AWS Lambda Serverless Audio Transcription | Python | AWS Lambda |
42+
| [300](examples/300-spring-boot-live-transcription-java/) | Spring Boot Real-Time Transcription with Deepgram | Java | Spring Boot |
43+
| [310](examples/310-crewai-voice-agents-python/) | CrewAI Voice-Enabled Multi-Agent System with Deepgram | Python | CrewAI |
44+
| [340](examples/340-tauri-live-transcription-rust-ts/) | Tauri Desktop Live Transcription | Rust | Tauri |
45+
| [350](examples/350-asterisk-freeswitch-deepgram-stt-python/) | Asterisk / FreeSWITCH PBX to Deepgram Streaming STT | Python | Asterisk/FreeSWITCH |
46+
| [360](examples/360-kotlin-android-live-transcription/) | Kotlin Android Live Transcription | Kotlin | Jetpack Compose |
47+
| [370](examples/370-swift-ios-live-transcription/) | Swift iOS Live Transcription | Swift | SwiftUI |
4848
<!-- examples-table-end -->
4949

50-
*Status last updated 2026-04-02.*
51-
5250
## CI / testing
5351

5452
Every PR that touches `examples/**` runs language-specific test jobs automatically. The `e2e-api-check` status check is required before merge.

instructions/pm-dashboard.md

Lines changed: 28 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,86 +3,54 @@
33
> **HARD RULE: Never create, edit, or delete any file under `.github/`.**
44
> Only modify `README.md`.
55
6-
You are the PM Dashboard agent. Run the example test suite, rebuild the README
7-
examples table with live status, and open a PR if anything changed.
6+
You are the PM Dashboard agent. Rebuild the README examples table to reflect the
7+
current set of example directories, then open a PR if anything changed.
88

99
---
1010

11-
## Step 1: Get current test status from last test-existing run
12-
13-
Do NOT run tests yourself — test-existing runs every 6 hours and has already tested everything.
14-
Read its results from the last workflow run instead.
11+
## Step 1: Enumerate example directories
1512

1613
```bash
17-
# Get the last test-existing run ID
18-
RUN_ID=$(gh run list --repo {repo} --workflow=test-existing.yml --status=completed --limit=1 --json databaseId --jq '.[0].databaseId')
19-
20-
# For each example, check if it appears in failed_examples output of that run
21-
# If an example dir was in node/python/go/java failures → "failing"
22-
# If it was skipped (missing credentials) → "needs credentials"
23-
# Otherwise → "passing"
24-
25-
# Simpler: scan the existing examples directory and build status from
26-
# open PRs (status:fix-needed = failing, status:needs-credentials = needs creds)
27-
# and merged examples that have no open fix PRs = passing
28-
29-
declare -A STATUS
30-
3114
for dir in examples/*/; do
3215
[ ! -d "$dir" ] || [ -f "${dir}.gitkeep" ] && continue
3316
EXAMPLE=$(basename "$dir")
34-
SLUG="${EXAMPLE#*-}"
35-
36-
# Check for an open fix PR
37-
HAS_FIX=$(gh pr list --repo {repo} --state open --search "$SLUG" --label "status:fix-needed" --json number --jq 'length' 2>/dev/null || echo "0")
38-
39-
# Check for needs-credentials
40-
HAS_CREDS=$(gh pr list --repo {repo} --state open --search "$SLUG" --label "status:needs-credentials" --json number --jq 'length' 2>/dev/null || echo "0")
4117

4218
LANG=""
43-
[ -f "${dir}package.json" ] && LANG="node"
44-
[ -f "${dir}requirements.txt" ] && LANG="python"
45-
[ -f "${dir}go.mod" ] && LANG="go"
46-
[ -z "$LANG" ] && STATUS[$EXAMPLE]="" && continue
47-
48-
if [ "$HAS_FIX" != "0" ]; then
49-
STATUS[$EXAMPLE]="failing"
50-
elif [ "$HAS_CREDS" != "0" ]; then
51-
STATUS[$EXAMPLE]="needs-credentials"
52-
else
53-
STATUS[$EXAMPLE]="passing"
54-
fi
19+
[ -f "${dir}package.json" ] && LANG="Node.js"
20+
[ -f "${dir}requirements.txt" ] && LANG="Python"
21+
[ -f "${dir}go.mod" ] && LANG="Go"
22+
[ -f "${dir}pubspec.yaml" ] && LANG="Dart"
23+
[ -f "${dir}Cargo.toml" ] && LANG="Rust"
24+
[ -f "${dir}pom.xml" ] || [ -f "${dir}build.gradle" ] && LANG="Java"
25+
[ -f "${dir}build.gradle.kts" ] && LANG="Kotlin"
26+
[ -f "${dir}Package.swift" ] && LANG="Swift"
27+
[ -z "$LANG" ] && LANG="JavaScript"
28+
29+
echo "$EXAMPLE|$LANG"
5530
done
5631
```
57-
---
5832

59-
## Step 2: Read current README and rebuild table
33+
For each example directory, read its `README.md` to extract:
34+
- Title (first H1)
35+
- Integration (from directory slug or README body)
6036

61-
Status emoji:
62-
- `✅ passing` — tests ran and passed
63-
- `❌ failing` — tests ran and failed (see logs)
64-
- `⏳ needs credentials` — missing secrets
65-
- `` — no tests found
37+
---
6638

67-
For each example directory, read its README.md to extract:
68-
- Title (first H1)
69-
- Language (from package.json/requirements.txt/go.mod)
70-
- Integration (from directory slug)
71-
- Products (from README body: STT, TTS, agent, intelligence)
39+
## Step 2: Rebuild the table
7240

73-
Replace the content between these markers:
41+
Replace the content between these markers in `README.md`:
7442
```
7543
<!-- examples-table-start -->
7644
...
7745
<!-- examples-table-end -->
7846
```
7947

80-
New table format:
48+
New table format (no Status column):
8149
```markdown
8250
<!-- examples-table-start -->
83-
| # | Example | Language | Integration | Status |
84-
|---|---------|----------|-------------|--------|
85-
| [010](examples/010-getting-started-node/) | Getting started — Node.js | Node.js | Deepgram SDK | ✅ passing |
51+
| # | Example | Language | Integration |
52+
|---|---------|----------|-------------|
53+
| [010](examples/010-getting-started-node/) | Getting started — Node.js | Node.js | Deepgram SDK |
8654
<!-- examples-table-end -->
8755
```
8856

@@ -102,25 +70,23 @@ Use a single persistent branch so there is never more than one open README PR.
10270
If a PR already exists for this branch, push the update to it in place.
10371

10472
```bash
105-
BRANCH="chore/examples-status-update"
73+
BRANCH="chore/examples-table-update"
10674

10775
git checkout -B "$BRANCH"
10876
git add README.md
109-
git commit -m "docs: update examples status table [skip ci]"
77+
git commit -m "docs: update examples table [skip ci]"
11078

111-
# Check for an already-open PR on this branch
11279
EXISTING_PR=$(gh pr list --repo {repo} --head "$BRANCH" --state open \
11380
--json number --jq '.[0].number')
11481

11582
if [ -n "$EXISTING_PR" ]; then
116-
# Update the existing PR by force-pushing — same PR, new content
11783
git push --force-with-lease origin "$BRANCH"
11884
echo "Updated existing PR #$EXISTING_PR"
11985
else
12086
git push origin "$BRANCH"
12187
gh pr create \
122-
--title "docs: update examples status table" \
123-
--body "Automated dashboard update. No code changes." \
88+
--title "docs: update examples table" \
89+
--body "Automated table update. No code changes." \
12490
--base main --head "$BRANCH"
12591
echo "Created new PR"
12692
fi

0 commit comments

Comments
 (0)