···11-## frontpage.fyi Firefox extension
11+## ATProto Social — Firefox extension
2233-This repository provides a Firefox WebExtension that lets you share the current tab to [frontpage.fyi](https://frontpage.fyi) with minimal effort.
44-Links are submitted by creating `fyi.frontpage.feed.post` records on your ATProto account, the same mechanism the official Frontpage site uses.
33+A Firefox WebExtension for publishing to ATProto-based social platforms directly from your browser.
5466-> ℹ️ This repository is hosted on [tangled](https://tangled.org/@galiglobal.com/frontpage_firefox_plugin) (PRs, issues) and [GitHub](https://github.com/antonmry/frontpage_firefox_plugin) (CI/CD, releases).
55+> ℹ️ This repository is hosted on [tangled](https://tangled.org/anton.galiglobal.com/frontpage_firefox_plugin) (PRs, issues) and [GitHub](https://github.com/antonmry/frontpage_firefox_plugin) (CI/CD, releases).
7687### Features
981010-- Pop-up form that auto-fills the active tab’s title and URL.
1111-- Title length indicator (120 characters, matching the Frontpage UI).
1212-- Background service worker handles ATProto login, token refresh, and record creation.
99+- **Margin tab** — select text on any page and publish it as a highlight or annotation to [margin.at](https://margin.at):
1010+ - No comment → creates an `at.margin.highlight` record.
1111+ - With comment → creates an `at.margin.annotation` record (`motivation: commenting`).
1212+ - Uses the W3C `TextQuoteSelector` (exact text + surrounding context) for precise targeting.
1313+- **Frontpage tab** — share the current tab to [frontpage.fyi](https://frontpage.fyi) by creating a `fyi.frontpage.feed.post` record on your ATProto account.
1414+ - Auto-fills the active tab's title and URL.
1515+ - Title length indicator (120 character limit).
1616+- Background service worker handles ATProto login, token refresh, and record creation for both services.
1317- Options page for storing your handle, app password, and optional PDS override.
1414-- Convenience links to open frontpage.fyi or the options page from the pop-up.
15181619### Prerequisites
17201818-- An ATProto account that Frontpage can read.
2121+- An ATProto account (Bluesky or self-hosted PDS).
1922- An app password for that account (create one at <https://bsky.app/settings/app-passwords> or via your own PDS).
20232124### Install a packaged build
···31343. Click **Save credentials**. A success message confirms that the session tokens are stored locally.
32354. Use **Log out** at any time to remove stored tokens (you can also revoke the app password server-side).
33363434-### Submit a link
3737+### Publish a highlight or annotation (Margin)
3838+3939+1. Select text on any webpage.
4040+2. Open the ATProto Social pop-up — the **Margin** tab opens by default with the selected text pre-filled.
4141+3. Optionally add a comment (turns a highlight into an annotation).
4242+4. Click **Highlight on Margin** or **Annotate on Margin**.
4343+4444+### Submit a link (Frontpage)
354536461. Browse to the page you want to share.
3737-2. Open the Frontpage pop-up; the title and URL are pre-filled.
4747+2. Open the ATProto Social pop-up and switch to the **Frontpage** tab; the title and URL are pre-filled.
38483. Adjust the text if necessary and click **Post to Frontpage**.
39494. On success, the pop-up reports the record URI returned by `com.atproto.repo.createRecord`.
40504151### Implementation notes
42524343-- The background worker discovers the user’s PDS by resolving the handle (`com.atproto.identity.resolveHandle` + PLC lookup).
5353+- The background worker discovers the user's PDS by resolving the handle (`com.atproto.identity.resolveHandle` + PLC lookup).
4454- Sessions are refreshed automatically via `com.atproto.server.refreshSession` when the access JWT expires.
4555- All data stays in `browser.storage.local`; nothing is transmitted to third-party services beyond the ATProto endpoints.
5656+- Margin records use the `at.margin.annotation` and `at.margin.highlight` lexicons with a `TextQuoteSelector` for text targeting.
4657- Maximum lengths follow the current Frontpage limits (120 characters for the title, 2048 for URLs).
47584859### Development tips
···566757681. Open `about:debugging#/runtime/this-firefox`.
58692. Click **Load Temporary Add-on…** and choose `manifest.json` inside the `extension/` directory.
5959-3. Pin the “Frontpage” toolbar button if you want quick access.
7070+3. Pin the "ATProto Social" toolbar button if you want quick access.
60716172> This method is ideal while iterating; Firefox forgets the add-on on restart.
6273···64756576This repository includes `.github/workflows/package-extension.yml` which builds (and optionally signs) the add-on using [`web-ext`](https://extensionworkshop.com/documentation/develop/web-ext-command-reference/).
66776767-1. Configure `AMO_JWT_ISSUER` and `AMO_JWT_SECRET` repository secrets with your AMO API credentials if you want automatic signing.
7878+1. Configure `AMO_JWT_ISSUER` and `AMO_JWT_SECRET` repository secrets with your AMO API credentials if you want automatic signing.
6879 Without the secrets, the workflow still produces an unsigned ZIP you can download.
69802. Trigger the workflow manually (`Actions` → **package-extension** → **Run workflow**).
70813. Download the artifacts:
···77887889### Tangled mirror
79908080-The `mirror-to-tangled.yml` workflow pushes every commit on `main` to Tangled, a federated Git hosting platform built on ATProto.
8181-Browse the mirror at <https://tangled.org/@galiglobal.com/frontpage_firefox_plugin>.
9191+The `mirror-to-tangled.yml` workflow pushes every commit on `main` to Tangled, a federated Git hosting platform built on ATProto.
9292+Browse the mirror at <https://tangled.org/anton.galiglobal.com/frontpage_firefox_plugin>.
8293Add a deploy key with write access as the `TANGLED_DEPLOY_KEY` repository secret so the mirror stays up to date.
+3-3
extension/manifest.json
···11{
22 "manifest_version": 3,
33 "name": "ATProto Social",
44- "description": "Quickly share the current tab to frontpage.fyi via ATProto.",
55- "version": "0.1.5",
44+ "description": "Quickly share the current tab to different ATProto services.",
55+ "version": "0.1.6",
66 "author": "ATProto Social Contributors",
77- "homepage_url": "https://frontpage.fyi",
77+ "homepage_url": "https://tangled.org/anton.galiglobal.com/frontpage_firefox_plugin",
88 "icons": {
99 "16": "icons/icon-16.svg",
1010 "32": "icons/icon-32.svg",