What I set out to build
Internship applications repeat the same information constantly, but sending a full personal profile to another backend for every generated paragraph felt unnecessary. I wanted to build a useful AI writing workflow around a privacy constraint instead of treating the model call as the product.
My contribution
- Built the React/TypeScript Chrome extension with WXT.
- Structured profile and application context stored locally.
- Integrated on-device Gemini Nano writing flows using Chrome’s Prompt API.
- Added matching, form-fill helpers, tracking, and availability/error handling.
Problem & approach
The React/TypeScript extension keeps profile and application context in local browser workflows. Chrome’s Prompt API runs Gemini Nano on-device for summaries and cover letters. Content scripts read a posting, a background workflow constructs the model context, and the interface returns structured, editable results. I connected that to matching, form-fill helpers, and locally stored application statuses.
How it works
- 01
Store locally
Store reusable personal/application information on the user’s device.
- 02
Read the application
Select the relevant information for a specific application.
- 03
Build context
Construct model context for the requested writing task.
- 04
Generate & edit
Return editable generated material without requiring a central profile database.
Results & progress
- On-device
- AI inference
- Chrome MV3
- Extension
- Working Chrome extension prototype with job summaries, tailored cover letters, matching, form-fill helpers, and tracking.
Limits & lessons
Limitations
- On-device AI availability depends on browser and device support.
- The local AI workflow does not imply that every website visited through the extension is private.
What I learned
- SwiftApply made me think more carefully about product constraints around AI. The easiest architecture is not always the one that matches how I want user data to be handled.
Next steps
- Make the local data model easier to manage.
- Make the context used for each generation easier to inspect.
- Improve editing and reuse workflows if I revisit the project.
