Skip to content

Latest commit

ย 

History

History
135 lines (97 loc) ยท 3.91 KB

File metadata and controls

135 lines (97 loc) ยท 3.91 KB

Twitter User Memo

Leave private memos on any X (Twitter) profile. Your notes stay synced across devices via Chrome storage - no servers, no accounts, no external APIs.

Features

  • Add memos to any user profile page
  • Quick memo on hover cards (collapsed by default, expand with one click)
  • Memos sync across your Chrome instances via chrome.storage.sync
  • Light and dark theme support (auto-detects X theme)
  • Bilingual: English and Korean UI
  • Zero external API calls - all data stays local
  • Manifest V3 compliant

How It Works

The extension injects a memo box into profile pages on x.com and twitter.com, plus a compact memo toggle inside user hover cards.

All memos are stored in chrome.storage.sync using the user's screen name as the key:

{
  "@username": {
    "memo": "Private note text",
    "updatedAt": 1712345678901
  }
}

This means:

  • Notes are private to the browser profile that installed the extension
  • Notes can sync across Chrome instances signed into the same Chrome account
  • Notes are not sent to any external server by this extension

Installation

  1. Download or clone this repository.
  2. Open Chrome and go to chrome://extensions.
  3. Enable Developer mode.
  4. Click Load unpacked.
  5. Select this project folder.

Usage

Profile page memo

Open any X profile page. A Memo field appears below the profile header. Type anything you want, and the note is saved automatically after a short debounce.

Hover card memo

Hover over a user to open their profile card. Click the memo toggle to expand the note area, then type. The memo is saved automatically and reused anywhere that account appears.

Privacy

This extension does not use:

  • Remote APIs
  • Analytics
  • Authentication
  • External databases

All memo data lives inside Chrome extension storage.

Theme Support

The UI adapts to X's current theme. The content script checks the page theme state and applies a scoped dark-mode class when needed.

Project Structure

manifest.json
README.md
css/
  main.css
js/
  background.js
  content.js
_locales/
  en/messages.json
  ko/messages.json
images/
  icon16.png
  icon48.png
  icon128.png

Technical Notes

  • Manifest V3 service worker is intentionally minimal
  • One content script handles profile pages, hover cards, theme sync, and SPA navigation
  • CSS is fully scoped with the .x-memo- prefix to avoid collisions with X styles
  • Navigation is handled by listening to pushState, replaceState, and popstate

Limitations

  • The extension is designed for X profile surfaces and hover cards only
  • DOM selectors may require updates if X significantly changes its internal markup
  • chrome.storage.sync has Chrome quota limits, so extremely large memo usage is not a target case

Korean

Twitter User Memo๋Š” X(ํŠธ์œ„ํ„ฐ) ํ”„๋กœํ•„๋งˆ๋‹ค ๊ฐœ์ธ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋Š” ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋Š” ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€ ์•Š์œผ๋ฉฐ, chrome.storage.sync์— ์ €์žฅ๋˜์–ด ๊ฐ™์€ ํฌ๋กฌ ๊ณ„์ • ํ™˜๊ฒฝ์—์„œ ๋™๊ธฐํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ํ”„๋กœํ•„ ํŽ˜์ด์ง€์— ๊ฐœ์ธ ๋ฉ”๋ชจ ์ถ”๊ฐ€
  • ํ˜ธ๋ฒ„ ์นด๋“œ์—์„œ ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๋น ๋ฅธ ๋ฉ”๋ชจ ์ž…๋ ฅ
  • X ๋ผ์ดํŠธ/๋‹คํฌ ํ…Œ๋งˆ ์ž๋™ ๊ฐ์ง€
  • ์˜์–ด/ํ•œ๊ตญ์–ด ๋กœ์ผ€์ผ ์ง€์›
  • ์™ธ๋ถ€ API ํ˜ธ์ถœ ์—†์Œ
  • Manifest V3 ๊ธฐ๋ฐ˜

์„ค์น˜ ๋ฐฉ๋ฒ•

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ๋‚ด๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ํฌ๋กฌ์—์„œ chrome://extensions๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ์ผญ๋‹ˆ๋‹ค.
  4. ์••์ถ•ํ•ด์ œ๋œ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ์ด ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅ ๋ฐฉ์‹

๋ฉ”๋ชจ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

{
  "@username": {
    "memo": "๊ฐœ์ธ ๋ฉ”๋ชจ",
    "updatedAt": 1712345678901
  }
}

์ผ๋ฐ˜์ ์ธ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์‚ญ์ œ๋งŒ์œผ๋กœ๋Š” ๋ฉ”๋ชจ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์ง€๋งŒ, ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ œ๊ฑฐ ๋˜๋Š” ํ™•์žฅ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ์‹œ์—๋Š” ๋ฉ”๋ชจ๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.