This project builds and documents an offline-first Chrome extension that helps users capture vocabulary while browsing, synchronize flashcards to AWS, practise them in a web application, and export their data securely. The implementation is presented as a reproducible workshop covering the complete lifecycle from local setup and deployment to verification and resource cleanup.
| Field | Value |
|---|---|
| Project | Chrome Flashcard Extension & Study Platform |
| Platform | Chrome Extension Manifest V3 and AWS |
| Region | ap-southeast-1 (Singapore) |
| Core services | API Gateway HTTP API, Lambda, DynamoDB, S3, CloudWatch |
| Infrastructure as Code | AWS SAM / CloudFormation |
| Backend | Node.js 24.x, Express.js, serverless-http |
| Workshop outcome | Deploy, configure, test, export, and remove the solution |
Learners regularly encounter unfamiliar words while reading websites, technical documentation, and online articles. Moving to a separate application to create a flashcard interrupts the reading flow, while browser-only storage makes the resulting vocabulary difficult to synchronize or recover.
The proposed solution connects the moment a learner finds a word with later study. A user selects text on a page, opens a context-menu action, reviews the card in an inline dialog, and saves it locally. After authentication, locally created cards can be synchronized to AWS and reviewed through the Study Web App.
The project will:
chrome.storage.local.POST /api/sync.Again, Hard, Good, and Easy).
+-----------------------+ HTTPS REST +--------------------------+
| Chrome Extension MV3 |-------------------------->| API Gateway (HTTP API) |
| + local persistence | +------------+-------------+
+-----------------------+ |
v
+-----------------------+ +--------------------------+
| Study Web Application |-------------------------->| AWS Lambda |
| static web client | | Express + serverless-http|
+-----------------------+ +------------+-------------+
|
+-------------------------+------------------+
| |
v v
+--------------------+ +--------------------+
| Amazon DynamoDB | | Amazon S3 |
| Users / Cards / | | private JSON export|
| Categories | | pre-signed GET URL |
+--------------------+ +--------------------+
| Component | Responsibility |
|---|---|
| Chrome Extension | Capture selected text, edit card details, store cards locally, authenticate, and start synchronization |
| API Gateway HTTP API | Provide the public HTTPS endpoint, CORS handling, and proxy routing to Lambda |
| AWS Lambda | Run the Express backend, verify JWTs, process API requests, and coordinate persistence and export |
| DynamoDB | Persist users, flashcards, and categories using user-scoped keys |
| Study Web App | Retrieve authenticated flashcards and provide active-recall study sessions |
| Private S3 bucket | Store generated JSON exports and serve them only through temporary signed URLs |
| CloudWatch | Record Lambda execution logs and operational metrics used during verification |
The proposal maps directly to the workshop:
| Workshop section | Planned activity | Expected result |
|---|---|---|
| 5.1 Architecture overview | Review components and end-to-end data flow | Participants understand how the extension, web app, and AWS services interact |
| 5.2 Prerequisites | Install required tools, inspect the repository, and run the backend locally | Local health endpoint is available |
| 5.3 Backend deployment | Build with sam build, deploy with sam deploy --guided, and test /api/health |
The serverless API responds with {"ok":true,"service":"flashcard-backend"} |
| 5.4 Extension setup | Configure the API URL, load the unpacked extension, authenticate, capture cards, and sync | Local cards are stored and synchronized to DynamoDB |
| 5.5 Study and export | Study synchronized cards and request a JSON export | The signed URL downloads the export; the raw S3 object URL returns 403 Forbidden |
| 5.6 Cleanup | Empty required S3 objects, delete the stack, and audit remaining resources | Workshop-created cloud resources are removed |
contentScript.js displays an inline editor and saves the flashcard to
chrome.storage.local.POST /api/sync.The project is complete when a workshop participant can:
ap-southeast-1.The final deliverable is a working, documented serverless flashcard platform and a six-part workshop that demonstrates its architecture, setup, deployment, client synchronization, study and export features, and responsible teardown.