← Selected work03 / CASE STUDY

Internal operation · public UI demo

Meeting Assistant

A meeting assistant used by the education and development departments of a company of approximately 32 people. I own planning, development, deployment, operations, and maintenance on an RTX 4090 server.

ROLESole owner · planning / development / deployment / operations / maintenance
PERIOD2026.06–
BUILT WITHPython · faster-whisper · pyannote · Claude API · Docker · Google SSO
Meeting Assistant UI demo showing meeting setup and microphone testing
Public UI demo · explore the workflow with sample data.
Recorded meetings
32

Aug + Sep 2026 supplied counts · not active users

Total recorded meeting duration
833 min

363 + 470 minutes · not time saved

Current deployment
RTX 4090

Internal service · sole operations and maintenance owner

01 / WORKFLOW

Workflow and implementation

A CLI tool became a web interface and Docker service for internal staff, connecting recording, transcription, speaker attribution, minutes, Notion storage, and email delivery.

I am the sole owner across planning, the speech pipeline and web UI, sign-in and access boundaries, deployment, operations, and maintenance. Requests from education and development staff led to an error-management UI, recording backups, and an Android web app.

02 / USAGE · 2026.08–09

Monthly usage records

The service is used by the education and development departments of a company of approximately 32 people. These monthly aggregates were supplied from the operating UI on Sep 15, 2026; individual names and activity are omitted.

PeriodRecorded meetingsMeeting duration
2026.0810363 min
2026.09 · supplied Sep 1522470 min
  • Total: 32 recorded meetings and 833 minutes. Minutes describe recorded meeting duration, not model latency or staff time saved.
  • September is a partial month. Company headcount is not active users; these aggregates alone do not establish success, retention, or monthly growth rates.

03 / USER REQUESTS

Changes driven by user requests

As the operations owner, I brought logs, completed and failed jobs, and retry actions into the UI so I can investigate failures and respond. Requests to retain recordings and simplify mobile use led to backups and an Android web app.

Request or operational needDelivered change
Locate failures and respondInspect logs and completed/failed records; retry from the UI
Keep a separate recording copyRecording-file backup
Make mobile recording easier for older usersAndroid web app with a simplified recording flow
  • These are request summaries and implementation details supplied by the project owner, not verbatim user quotations or satisfaction measurements.

04 / SYSTEM

Architecture

An RTX 4090 runs faster-whisper and pyannote. Transcription and diarization are serialized, with waiting jobs marked queued. Transcript text is sent to the external Claude API to generate structured minutes.

The server returns a job ID instead of holding an HTTP response for the full audio pipeline. Short status polls separate long inference jobs from proxy request limits.

  1. 01Audio

    faster-whisper

  2. 02Diarize

    pyannote · RTX 4090

  3. 03Minutes

    Claude · structured JSON

  4. 04Deliver

    Notion · SMTP

05 / CHANGE · 2026.09

When the upload response is lost

A job can be created on the server while its start response arrives as an HTML error. A JSON parsing error then makes the upload appear to have failed. The client now looks for an existing in-progress job before asking the user to upload again.

  1. 01Inspect response

    Detect HTML / 5xx

  2. 02Find job

    Own in-progress jobs

  3. 03Match context

    Time · department · sender · duration

  4. 04Reconnect

    Poll the existing job ID

  • Matching compensates for server/client clock differences and requires several conditions. This is heuristic reconnection, not an idempotency guarantee.
  • The behavior is documented in the Sep 11, 2026 change and implementation. Reconnection success and duplicate reduction have not been aggregated.

06 / FAILURE HANDLING

Failures and retained results

Retry after a restart starts a new job from retained audio; it does not resume inference at a saved checkpoint.

FailureImplemented behavior
Diarization failsContinue with the transcript without speaker labels
Summary API failsSave the transcript with a summary-failure notice
Notion delivery failsRetain minutes locally and record the delivery error separately
Server restarts mid-jobRestore the job record as interrupted; retry if source audio remains

07 / DATA FLOW

Sign-in and data flow

Google SSO identifies the user; the app lists and opens meetings created by that user. Notion uses separate department delivery routes. Local audio processing is distinct from sending transcript text to an external summary API.

The public demo runs on sample data. Internal recordings, transcripts, customer information, and operational credentials are excluded.

08 / EVIDENCE

Evidence and measurement scope

A Sep 15, 2026 review of implementation and change history confirms reconnection, interrupted-job records, and partial-result retention paths. The current internal RTX 4090 service is separate from the public UI demo.

The historical “56-minute file, about 28 seconds” observation covers chunked diarization only. It is not an end-to-end or repeated benchmark. Recorded usage appears in the monthly statistics. Human time savings, satisfaction, and stage-level success rates have not been measured.

ENGINEERING DECISIONS

Engineering decisions

01

Separate requests from jobs

Long GPU processing lives in a server job while the UI polls its ID. If the upload response is lost, the client looks for a matching existing job and reconnects.

02

Preserve useful partial results

Diarization failure can fall back to a transcript without speaker labels; summarization failure preserves the transcript. Generated minutes and Notion delivery errors are recorded separately.

03

Distinguish recovery paths from success rates

Implemented reconnection and retry paths do not establish a recovery success rate. A done status can coexist with summary or external-storage failure, so stage outcomes must be counted separately.

SCOPE & LIMITS

Limitations and scope

  • Implementation review does not establish long-term operating performance or a full security assessment. Internal code and meeting data remain private.
  • Completed jobs must be distinguished from successful summaries and deliveries. Repeat usage, manual editing time, and retry success require separate aggregation.
NEXT CASEMED-RAG ↗

Contact

hyunaeee@gmail.com ↗

South Korea · Korean / English

Portfolio PDF

A casebook with roles, engineering decisions, evidence, and source links.

Choose “Save as PDF” in the print dialog.