Inspiration
It started with a business trip. I was heading to the US for a conference and needed a way to follow English lectures in real time — my English listening isn't strong enough to keep up live, and I wanted a Japanese summary afterward to actually retain what was said.
So I looked for a tool. Most real-time translation and archiving services required a subscription, which felt like overkill for a single short trip. The free alternatives weren't bad, but they weren't built for this — phone apps in particular struggled with long sessions, and none of them combined live translation with a searchable archive afterward.
What I actually wanted was simple: something lightweight I could spin up just for the trip, pay only for what I used, and not have to think about again once I got home. That's what became Honraku aro — built first for people like me: business travelers and conference attendees who are confident enough in their field but not in live English listening, and who need something they can use once and forget, not another subscription to manage.
What it does
Honraku Taro turns spoken English into something you can actually use afterward, in Japanese.
You either start real-time translation during a live lecture, or upload a recorded audio file. From there:
- Speech is transcribed automatically (Amazon Transcribe)
- Text is translated into Japanese, synced to timestamps (Amazon Translate)
- A structured summary (overview, key points, keywords) is generated with Amazon Bedrock (Claude Haiku)
- Everything is archived and searchable afterward, with a Q&A feature so you can ask "what did they say about X?" instead of scrolling through a transcript
No account setup beyond an organization code, no subscription, no software to install for the live mode.
How we built it
The frontend is a Next.js app, with several pages and components scaffolded using v0 to move fast on the UI layer. The backend logic lives in Next.js API Routes, orchestrating a pipeline across S3, Transcribe, Translate, Bedrock, and DynamoDB.
The access pattern here is narrow and predictable: for a given lecture, read back all subtitles in timestamp order, and look up lecture metadata by ID. There's no need for joins across entities or ad-hoc relational queries — every read is a single-partition, sort-key-ordered fetch. That's exactly the shape DynamoDB is built for, and it scales that single-digit-millisecond read pattern without any schema migration overhead as more tenants and lectures get added. An Aurora-based relational schema would have given us SQL flexibility we don't actually need, at the cost of provisioning and connection management we'd rather not deal with for a serverless, bursty workload (most usage happens in short spikes around live lectures, not constant traffic).
Concretely: lectures is keyed by lectureId with a fixed sk, holding tenant, status, and summary; subtitles is keyed by lectureId with timestamp as the sort key, so fetching a lecture's full subtitle track is a single Query, already in order, with no client-side sorting.
For the live mode, the browser's Web Speech API handles real-time English recognition, piped through a translation API route so subtitles appear in Japanese almost instantly.
Challenges we ran into
Getting from a working local prototype to a deployed app surfaced a long list of small but blocking issues. Tailwind v4's stricter syntax broke v0-generated CSS, and Next.js 15+ made route params async (Promise<{ id: string }> instead of a plain object). The biggest one was Vercel's 4.5MB request body limit — the first version of file upload failed silently on anything longer than a few minutes of audio, which forced a real architectural change: rebuilding upload around S3 presigned URLs so the browser uploads directly to S3 and Vercel never touches the file bytes at all.
Bedrock added its own wrinkle: the Tokyo region doesn't support on-demand invocation for newer Claude models, so model IDs had to be swapped for region-specific inference profile IDs — a detail that wasn't obvious from the error message alone.
There was also a real tension between processing granularity and Vercel's function timeout. Translating subtitles in small time chunks gives smoother, more precise timestamps, but doing that for a full-length lecture risks timing out the serverless function before the whole transcript is translated. We settled on 30-second chunks with an extended maxDuration as the balance that kept both granularity and reliability acceptable.
Accomplishments that we're proud of
Going from "I need this for one trip" to a multi-tenant SaaS with authentication and per-organization data isolation, built around a real personal need rather than a hypothetical one. The pricing model is something we're particularly proud of: there's no fixed monthly cost, so it genuinely works for someone who needs it for a single trip and someone running it as part of daily work.
We're also glad the real-time mode and the archive mode share one consistent backend pipeline and data model, rather than feeling like two separate products bolted together.
What we learned
A lot of this project was learning AWS services hands-on for the first time in this combination — Transcribe, Translate, and Bedrock each have their own quirks (region availability, inference profiles, job polling patterns), and getting them to work together cleanly took more iteration than expected. We also learned, earlier than expected, how much Vercel's serverless constraints (payload size, function timeout) shape architectural decisions — these aren't edge cases you hit later, they show up the moment you handle a real audio file.
What's next for Honraku Taro
- Support for more target languages beyond Japanese, since the underlying pipeline is language-agnostic
- A lighter "quick session" mode for short ad-hoc use (a single meeting, a quick call) without going through the full upload flow
- Speaker diarization, so multi-speaker panels get attributed subtitles
- Usage-based pricing tiers, so the same lightweight, pay-as-you-go philosophy that inspired this project scales cleanly from a single business trip to ongoing team use
Built With
- bedrock
- claude
- dynamodb
- mediarecorderapi
- next.js
- react
- s3
- sdk
- transcribe
- translate
- typescript
- v0
- vercel
- webspeachapi
Log in or sign up for Devpost to join the conversation.