Topbar search box → debounced crm.search → dropdown of hits (chat/mail, highlighted snippet). Clicking a hit switches to the right tab and focuses the exact thread: mail → Inbox, chat → Messenger (via the SDK's new focusThreadId, 0.1.6). Snippet HTML is escaped except the <em> highlight. Demo mode searches an in-memory set. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
vendor/
Third-party source vendored into this repo so the app builds from a single checkout.
photo-gallery-sdk/
@photo-gallery/sdk — the Smart Gallery engine. Upstream:
https://git.lynkedup.cloud/KaushikRK99/advance-photo-gallery-web-sdk (packages/photo-sdk).
This directory is generated. Do not hand-edit it — changes belong upstream, then:
npm run sync:gallery-sdk # re-copies src/ + package.json + README.md from the sibling checkout
git add vendor/photo-gallery-sdk && git commit -m "chore: sync @photo-gallery/sdk"
Why vendored instead of a registry dependency
The SDK is not published anywhere yet. A file:../advance-photo-gallery-web-sdk/... dependency
works on a developer machine that has both repos side by side, but fails every CI/Vercel build,
because the deploy only ever checks out this repo. Vendoring keeps the dependency graph closed.
Only src/, package.json and README.md are copied — the package's exports point at src/
and next.config.ts lists it in transpilePackages, so no build output is needed. Its own
node_modules is deliberately excluded: without it, the SDK's sources resolve @types/react from
this repo's React 19 rather than the pnpm workspace's React 18, which is what lets them type-check
here at all.
Replacing this with a real dependency
When the SDK is published to the Gitea npm registry (the same one @insignia/* uses — Vercel
already has GITEA_TOKEN for it):
- Publish it from the SDK repo under a scope this repo's
.npmrcmaps to the registry. - In
package.json, swap"@photo-gallery/sdk": "file:./vendor/photo-gallery-sdk"for the version range. - Delete this directory and the
sync:gallery-sdkscript.
Nothing else changes — no import paths, no config.