Repository navigation
profiles: professional facets (title, company, seniority) + LinkedIn lookup - #185
Merged
Merged
Conversation
…lookup
Read a job title (`Title:`, `Job Title:`, `Role:`, `Position:`) and an
employer (`Company:`, `Employer:`) from a profile's identity block, case
insensitively, and derive a seniority (c-suite, vp, director, manager,
senior, entry) from keywords in the title. `CEO at Acme` names both; nothing
is guessed from the headline. Company is not an identity key, so its URL
never fuses people.
- profileView stores title, company {name, domain}, seniority and facets
(only when stated, so other profiles keep their view and item hash)
- profileItem tags title:<slug>, company:<domain|slug>, seniority:<level>,
so ?tags= filters the profiles collection
- profileOut (REST, MCP, CLI) carries title, company, seniority, facets
- GET /api/v1/profiles, search_profiles and `nichedb profiles` take
title, company, seniority and tags (matched on data.facets)
- LinkedIn-only lookup: GET /api/v1/profiles?linkedin=<url>,
find_profile_by_linkedin, `nichedb profiles --linkedin`; public profiles
only, and deliberately no lookup by email
- installmap founders now write Title and Company lines, so the next crawl
gives existing founders the facets
No schema change and no new index.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Professional facets on nichedb.dev profiles, read only from what the person (or a public page an adapter already crawls) published.
packages/core/src/profiles.js):Title:/Job Title:/Role:/Position:andCompany:/Employer:identity lines, case-insensitive.CompanyreadsAcme,acme.com,https://acme.com,Acme (https://acme.com),[Acme](https://acme.com); a social page (LinkedIn company URL etc.) is never taken as the domain; an email is never kept.Title: CEO at Acmenames both. Nothing is guessed from the headline.c-suite(founder, CxO, chief, president, owner but not product owner, chair, managing/general partner),vp,director(incl. head of),manager,senior(senior/sr/staff/principal/lead),entry(intern/junior/trainee/apprentice/graduate/entry level); otherwise null.title:<slug>,company:<domain>(slug of the name when no domain),seniority:<level>, so?tags=works.get_profile/search_profiles, CLI):title,company{name, domain},seniority,facets.GET /api/v1/profiles?title=&company=&seniority=&tags=, same onsearch_profiles,nichedb profiles --title/--company/--seniority/--tags. Matched onprofiles.data->'facets'(@>); rows pick it up on their next rebuild (pull or edit).GET /api/v1/profiles?linkedin=<url>, MCPfind_profile_by_linkedin,nichedb profiles --linkedin <url>. Public profiles only. There is deliberately no email lookup (would be an address oracle).TitleandCompanylines, so existing founders gain the facets on the next crawl.Companyis not an OpenProfile identity key, so the company URL cannot fuse a founder into the org profile (tested).No schema change, no new index, no Apollo or private data, nothing new stores emails.
Tests
New cases in
test/profiles.test.js(seniority rules, parsing, tags, view, filter SQL on PGlite, LinkedIn keys),test/installmap.test.js,apps/web/src/routes/profiles.test.js(API fields, filters, LinkedIn lookup incl. private/email/non-LinkedIn),apps/cli/test/cli.test.js. Local full run: 2350 pass, 1 unrelated local failure (podcasts-podcastindex-catalogtar/timeout in this sandbox).Not done: the OpenProfile spec in logicsrc does not yet list
Title/Companyas named keys.🤖 Generated with Claude Code