linkedin-sync

One-click sync from your LinkedIn profile to the JSON files your portfolio reads.

1. Create a GitHub Personal Access Token

  1. Go to github.com/settings/tokens (fine-grained)Generate new token.
  2. Name it linkedin-sync. Expiration: your choice (1 year is fine).
  3. Repository accessOnly select repositories → choose at0m-b0mb/linkedin-sync.
  4. Permissions → Repository permissions → Contents → Read and write. That's the only scope you need.
  5. Generate, copy the token (starts with github_pat_…).

2. Drag this to your bookmarks bar

This is the bookmarklet — drag it (don't click it on this page; it only works when you're on LinkedIn):

📥  Sync LinkedIn → GitHub

Browsers won't let you drag a javascript: link from some pages. If the drag doesn't fly, the cleanest fallback is:
  1. Right-click an empty area of your bookmarks bar → Add page…
  2. Name: Sync LinkedIn → GitHub
  3. URL: copy the entire string below (click inside, Cmd+A, Cmd+C):
Generating…

3. Use it

  1. Log in to LinkedIn in your browser.
  2. Navigate to your own profile: https://www.linkedin.com/in/kailash-parshad/
  3. Click "Show all experiences" so the section is fully expanded (the bookmarklet will try to click it for you, but doing it manually is a safe sanity check).
  4. Click the Sync LinkedIn → GitHub bookmark.
  5. First time only: paste your GitHub PAT when prompted. It's stored in localStorage scoped to linkedin.com — your PAT never leaves your browser except when going to GitHub.
  6. A black banner appears in the top-right showing progress. When it turns green: done. Your profile.json and experience.json are updated in the repo.
Security note: Use a fine-grained PAT scoped only to at0m-b0mb/linkedin-sync with only Contents: read and write. If you suspect it leaked, revoke it at github.com/settings/tokens. Never use a classic PAT or a token with broader scopes here.

How your website consumes the data

const base = 'https://raw.githubusercontent.com/at0m-b0mb/linkedin-sync/main';
const [profile, experience] = await Promise.all([
  fetch(`${base}/profile.json`).then(r => r.json()),
  fetch(`${base}/experience.json`).then(r => r.json()),
]);

To clear your stored PAT

In LinkedIn's tab → DevTools → Console:

localStorage.removeItem('linkedin_sync_pat_v1');