The Problem: "Dumb" Contacts

You meet (or re-discover) interesting people on LinkedIn, but your Google Contacts are "dumb." They just store a name and an email. When you see a name, you have no context of who they are or why they're there.

Our Solution: The "AI-Memory"

Link3d-Memory solves this by turning Google Contacts into a lightweight, intelligent "memory" CRM.

When you're on a LinkedIn profile, our extension:

  1. Scrapes the profile's Name, Title, and "About" section.
  2. Uses chrome.ai (Gemini Nano) to instantly create a one-sentence AI summary of their bio.
  3. Searches your Google Contacts via the People API to see if they exist.
  4. Saves that "memory" (and the profile URL) to the contact's "Notes" field, either by creating a new contact or updating an existing one.

How We Built It (The "Rebel" Architecture)

Our system is a "responsible rebel" architecture built on Chrome's latest tech:

  • l3_analyzer_agent.js (The "Brain"): This is our main service worker. It coordinates everything. It fields requests from the popup, calls the scraper, runs the AI, and handles the Google API logic.
  • l3_extractor.js (The "Robot"): This script is injected into the LinkedIn page to find and extract the raw text data.
  • chrome.ai (Gemini Nano): The star of the show. We use the built-in, on-device createTextSession to generate the AI summary instantly and privately. We also built a fallback to the full Gemini API just in case.
  • chrome.identity & Google People API: We use this for secure, seamless Google OAuth2 to search, create, and update contacts.
  • popup.js & popup.html (The "Storefront"): A clean, simple UI that reacts to messages from the "brain" to show states like "Loading," "Auth Required," or "Success".

Our "Rebel's Bug Hunt" (Challenges)

We didn't just build this; we went on an epic bug hunt. Our main challenges were:

  • The "Google Maze" Bug: Realizing we needed to install the broken extension first to get its 32-letter ID, just so we could get the client_id from Google Cloud to fix the extension.
  • The "Flag" Bug: Discovering that chrome.ai didn't just need Chrome Dev, but also a specific flag (chrome://flags) to be enabled.
  • The "Invalid Scope" Bug: We spent hours debugging auth, only to find a typo (httpSa://) in our manifest.json scopes.
  • The "Broken Comms" Bug: Our biggest lesson! We had to re-wire all three core JS files (popup.js, l3_analyzer_agent.js, l3_extractor.js) to use one unified chrome.runtime.sendMessage system to talk to each other.

Built With

  • chrome-service-worker
  • chrome.ai-(gemini-nano)
  • chrome.identity-api
  • gemini
  • google-people-api
  • javascript-(esm)
Share this project:

Updates