WordHoard
Client
Myself
When
Q3 2026 - Present
Built with
React
TypeScript
Vite
Tailwind CSS
shadcn/ui
TanStack Query
AWS Lambda
API Gateway
DynamoDB
Cognito
CloudFront
AWS CDK
Amazon Translate
Amazon Polly
Amazon Bedrock

WordHoard, after the Old English wordhord, a speaker's treasury of words, is a personal language-learning app for me and invited users. You translate a word or a sentence, hear it pronounced, save it to your own dictionary, see simple learning stats, and get a word of the day; single words also pick up an example sentence generated on the fly. It installs as a progressive web app, with saved words readable offline and pronunciations cached for replay. The backend is serverless AWS defined in CDK: Lambda functions behind an HTTP API Gateway with Cognito sign-in, DynamoDB tables for the dictionary, caches, and activity, Amazon Translate and Polly for text and speech, and Claude on Amazon Bedrock for the example sentences and the word of the day, with pronunciation audio served from S3.
It is a deliberate rebuild of an earlier proof of concept on the patterns from my course chatbot.
Accomplishments
- A progressive web app with a Workbox service worker: cache-first audio that Safari can replay from byte ranges, network-first dictionary reads, and an installable shell
- Every translation and enrichment is cached once, globally, in DynamoDB, so the same word never costs a second Translate or Bedrock call
- Zero secrets: Bedrock, Translate, and Polly are called with IAM-scoped roles rather than API keys, and sign-up is invite-only through Cognito
- Operations built in from the first deploy: CloudWatch alarms per Lambda and for API errors routed to SNS, two AWS Budgets per environment, a daily EventBridge job that pre-warms the word of the day, and CodeBuild deploys for staging and production
Still to do
- Practice with flashcards and review sessions
- Badges for learning streaks
- Offline writes, queued and replayed when the connection returns



