![]()
An extension that generates custom cover letters for UBC Co-op jobs in a single click, including SCOPE, PD Portal, and more!
git clone https://github.com/ExxML/SCOPEOut.git
src/ folder inside the cloned repository.Note: This extension requires a Chromium-based browser that supports Manifest V3. Most modern browsers are compatible.
{hiringManager} : the cover letter addressee scraped from the posting (defaults to βHiring Managerβ){companyName} : the organisation name scraped from the posting{jobTitle} : the cleaned job title scraped from the posting{jobDescription} : the full job description scraped from the posting(*) while there are unsaved changes.[!NOTE] This prompt is saved in your browserβs local storage. Therefore, clearing your browser data or uninstalling SCOPEOut will delete your prompt, so we recommend keeping a backup in a separate document.
Use the Model dropdown in the popup to choose a Gemini model. The list is fetched from the Gemini API each time the popup opens, so new models appear automatically and deprecated ones are removed. Only general-purpose text-in, text-out models (including previews and -latest aliases) are shown, sorted newest first.
The newest Gemini models are often under heavy load and requests may frequently get rejected (and still use up your quota). If consistency matters to you, we recommend using slightly less popular models to avoid these hiccups.
Free tier rate limits vary by model; see Gemini API rate limits for up-to-date quotas.
| Layer | Technology |
|---|---|
| Extension platform | Chrome Extensions Manifest V3 |
| Language | Vanilla JavaScript (ES Modules) |
| AI backend | Google Gemini API |
SCOPEOut/
βββ src/
β βββ manifest.json # Extension manifest (MV3)
β βββ assets/
β β βββ scope_out_icon_128.png # 128x128 Extension icon
β β βββ scope_out_icon_2048.png # Full resolution extension icon
β β βββ eng_coop_footer.png # Engineering Co-op footer image for cover letter
β β βββ science_coop_footer.png # Science Co-op footer image for cover letter
β βββ api/
β β βββ gemini.js # Gemini API client: lists models, builds prompt & calls generateContent
β β βββ default-prompt.js # Default cover letter prompt template with placeholders
β βββ background/
β β βββ service-worker.js # MV3 service worker: orchestrates scraping, generation & preview
β βββ content/
β β βββ scraper.js # Content script injected into job posting pages to extract job data
β βββ popup/
β β βββ popup.html # Extension popup UI
β β βββ popup.css
β β βββ popup.js # Popup controller: settings, model picker, generation trigger
β βββ preview/
β β βββ preview.html # Cover letter preview page
β β βββ preview.css
β β βββ preview.js # Renders paginated, editable letter; handles PDF download
β βββ prompt-editor/
β βββ prompt-editor.html # Full-page prompt editor
β βββ prompt-editor.css
β βββ prompt-editor.js # Prompt editor controller: load, save, restore default
βββ README.md
User clicks "Generate cover letter"
β
βΌ
popup.js validates active tab URL
β
βΌ
Sends "startGeneration" message β service-worker.js
β
βΌ
chrome.scripting.executeScript injects content/scraper.js
β Extracts: hiringManager, companyName, jobTitle, jobDescription
βΌ
gemini.js builds prompt (replaces placeholders in stored/default template)
β
βΌ
POST to Gemini API (generateContent endpoint)
β
βΌ
Cover letter body returned β stored in chrome.storage.session
β
βΌ
preview/preview.html opened in new tab
β Renders paginated, editable letter
βΌ
User edits in-browser β clicks "Download PDF" β window.print()
Generation progress is written to chrome.storage.session at each stage (generating β complete / error), so the popup displays live status updates even if it is closed and reopened during generation.
This project is licensed under the GNU General Public License v3.0.