six-degrees 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +42 -14
- package/.next/standalone/.next/routes-manifest.json +24 -0
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +25 -16
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin-update/route.js +2 -2
- package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bridges/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +3 -3
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/route.js +3 -3
- package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/connections/route.js +2 -2
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/backup/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/backup/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/csv/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restore/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/restore/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js +2 -2
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js +2 -2
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +3 -3
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js +2 -2
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js +5 -3
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js +2 -2
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/route.js +2 -2
- package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +2 -2
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js +2 -2
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js +2 -2
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page.js +1 -1
- package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +20 -15
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/insights/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/insights/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/insights/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/insights/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/insights/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/insights/page.js +13 -0
- package/.next/standalone/.next/server/app/insights/page.js.map +5 -0
- package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/insights.html +1 -0
- package/.next/standalone/.next/server/app/insights.meta +26 -0
- package/.next/standalone/.next/server/app/insights.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +33 -0
- package/.next/standalone/.next/server/app/launch/page.js +1 -1
- package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/launch.html +2 -2
- package/.next/standalone/.next/server/app/launch.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths.html +1 -1
- package/.next/standalone/.next/server/app/paths.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/profile/page.js +1 -1
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/queue/page.js +1 -1
- package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/queue.html +1 -1
- package/.next/standalone/.next/server/app/queue.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/scores/page.js +1 -1
- package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/scores.html +1 -1
- package/.next/standalone/.next/server/app/scores.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -18
- package/.next/standalone/.next/server/app/setup/page.js +1 -1
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/social/page.js +1 -1
- package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/social.html +1 -1
- package/.next/standalone/.next/server/app/social.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app-paths-manifest.json +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__066rab1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fooke1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__15wc9e-._.js → [root-of-the-server]__0r-0t-9._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ra6xyg._.js +15 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20rwfdw._.js → [root-of-the-server]__0rcpjad._.js} +6 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t6y79e._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x29muh._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a_6x37._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an_8pa._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ducpz2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xhyinn._.js +3 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0sqqpzb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
- package/.next/standalone/.next/server/chunks/_1fn30_l._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_backup_route_actions_0zoj04p.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_csv_route_actions_0l6m7lg.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restore_route_actions_0-b05bv.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +174 -0
- package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_rpc_00nndai.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ibb-x.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ri3ji.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_078ce48.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0a69mgr.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cej3t8.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cmh4g6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nx2_pc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0r79-w1.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0t552z6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0yx8ynd.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_12p-o9-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1466dnb.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sryxv6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1trn-x5.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1ygu_mv.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0egamyq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qd8pzm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qdeuyo._.js → [root-of-the-server]__1-012q1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_04am_h8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_06rgzfh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_07zb7lu._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0gds903._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0klqt9z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14jak5s._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1cj2yog._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1hdqw0-._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1r62six._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_insights_page_actions_0-0tf75.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_CompanyScores_1g0mytz.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_insights_page_1d_chja.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +26 -14
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +11 -11
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +12 -13
- package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_1c4ieuw._.js → lib_csv_1ttiu_h.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_separation_1305zsx.js +3 -0
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/prefetch-hints.json +14 -0
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/standalone/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/standalone/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/standalone/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/standalone/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/standalone/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/standalone/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/standalone/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/standalone/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/standalone/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/standalone/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/standalone/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/standalone/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/standalone/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/standalone/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/CHANGELOG.md +203 -0
- package/.next/standalone/README.md +96 -50
- package/.next/standalone/SECURITY.md +25 -11
- package/.next/standalone/app/api/data/backup/route.js +25 -0
- package/.next/standalone/app/api/data/csv/route.js +74 -0
- package/.next/standalone/app/api/data/export/route.js +1 -1
- package/.next/standalone/app/api/data/restore/route.js +48 -0
- package/.next/standalone/app/api/data/reveal/route.js +19 -6
- package/.next/standalone/app/api/data/route.js +15 -4
- package/.next/standalone/app/api/ingest/route.js +1 -1
- package/.next/standalone/app/api/outreach/route.js +13 -73
- package/.next/standalone/app/api/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +217 -36
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +41 -21
- package/.next/standalone/app/components/AppTabs.js +12 -8
- package/.next/standalone/app/components/AutoConnect.js +286 -0
- package/.next/standalone/app/components/AutoScanButton.js +2 -2
- package/.next/standalone/app/components/Avatar.js +1 -1
- package/.next/standalone/app/components/ChainView.js +258 -113
- package/.next/standalone/app/components/CirclePanel.js +16 -16
- package/.next/standalone/app/components/ClusterSpinner.js +64 -0
- package/.next/standalone/app/components/CompanyScores.js +20 -20
- package/.next/standalone/app/components/EmptyState.js +39 -18
- package/.next/standalone/app/components/FieldStep.js +15 -13
- package/.next/standalone/app/components/FilterPanel.js +25 -18
- package/.next/standalone/app/components/ForceGraph.js +49 -14
- package/.next/standalone/app/components/GalaxyLab.js +33 -33
- package/.next/standalone/app/components/GridView.js +18 -18
- package/.next/standalone/app/components/LegacyScoresCard.js +10 -11
- package/.next/standalone/app/components/LinkedInLimits.js +57 -27
- package/.next/standalone/app/components/LiquidGlass.js +99 -0
- package/.next/standalone/app/components/ListView.js +20 -20
- package/.next/standalone/app/components/MapControls.js +5 -5
- package/.next/standalone/app/components/MappingProgress.js +16 -16
- package/.next/standalone/app/components/NoteDetail.js +13 -13
- package/.next/standalone/app/components/OnboardingGate.js +4 -4
- package/.next/standalone/app/components/OutlinkQuest.js +56 -35
- package/.next/standalone/app/components/PathsAnalyzer.js +37 -36
- package/.next/standalone/app/components/PeopleMap.js +21 -21
- package/.next/standalone/app/components/RingsView.js +11 -11
- package/.next/standalone/app/components/ScanRadar.js +84 -39
- package/.next/standalone/app/components/ScanStatusBar.js +40 -21
- package/.next/standalone/app/components/ScanTrail.js +21 -8
- package/.next/standalone/app/components/SeparationView.js +172 -124
- package/.next/standalone/app/components/Sidebar.js +308 -199
- package/.next/standalone/app/components/StaleServerBanner.js +4 -4
- package/.next/standalone/app/components/TheirCircle.js +26 -26
- package/.next/standalone/app/components/ThemeDefs.js +42 -0
- package/.next/standalone/app/components/ThemeLoader.js +20 -1
- package/.next/standalone/app/components/UpdatePanel.js +22 -22
- package/.next/standalone/app/components/UserProvider.js +22 -15
- package/.next/standalone/app/components/insights/Boards.js +275 -0
- package/.next/standalone/app/components/insights/PeopleView.js +266 -0
- package/.next/standalone/app/components/insights/Rail.js +156 -0
- package/.next/standalone/app/components/insights/Report.js +382 -0
- package/.next/standalone/app/components/insights/parts.js +239 -0
- package/.next/standalone/app/components/settings/AppearanceSection.js +47 -24
- package/.next/standalone/app/components/settings/DataSection.js +276 -109
- package/.next/standalone/app/components/settings/NetworkHealthSection.js +13 -13
- package/.next/standalone/app/components/settings/SectorPicker.js +12 -12
- package/.next/standalone/app/components/settings/SectorSection.js +13 -14
- package/.next/standalone/app/components/settings/TierSection.js +9 -9
- package/.next/standalone/app/components/settings/TitleSection.js +11 -11
- package/.next/standalone/app/components/settings/UsageSection.js +360 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +161 -5
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/insights/page.js +220 -0
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -53
- package/.next/standalone/app/paths/page.js +63 -63
- package/.next/standalone/app/profile/page.js +58 -58
- package/.next/standalone/app/queue/page.js +84 -72
- package/.next/standalone/app/scores/page.js +2 -2
- package/.next/standalone/app/settings/page.js +16 -13
- package/.next/standalone/app/setup/page.js +236 -133
- package/.next/standalone/app/social/Crm.js +63 -62
- package/.next/standalone/app/social/SocialHub.js +22 -22
- package/.next/standalone/app/social/Thread.js +7 -7
- package/.next/standalone/app/social/page.js +2 -2
- package/.next/standalone/lib/auto-connect.js +145 -0
- package/.next/standalone/lib/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- package/.next/standalone/lib/companies.js +1 -1
- package/.next/standalone/lib/csv-store.js +131 -0
- package/.next/standalone/lib/csv.js +137 -39
- package/.next/standalone/lib/data-folder.js +19 -3
- package/.next/standalone/lib/data-import.js +5 -2
- package/.next/standalone/lib/db-client.js +78 -20
- package/.next/standalone/lib/demo.js +5 -4
- package/.next/standalone/lib/galaxy-export.js +9 -2
- package/.next/standalone/lib/galaxy-lab.js +19 -5
- package/.next/standalone/lib/galaxy-layouts.js +43 -0
- package/.next/standalone/lib/gate.js +10 -4
- package/.next/standalone/lib/in-progress.js +46 -0
- package/.next/standalone/lib/ingest.js +1 -1
- package/.next/standalone/lib/insights-board.js +613 -0
- package/.next/standalone/lib/linkedin-limits.js +240 -14
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -0
- package/.next/standalone/lib/requests-client.js +10 -0
- package/.next/standalone/lib/requests.js +124 -0
- package/.next/standalone/lib/scan-pace.js +11 -0
- package/.next/standalone/lib/scan-progress.js +20 -0
- package/.next/standalone/lib/scan-risk.js +44 -0
- package/.next/standalone/lib/scan-state.js +1 -0
- package/.next/standalone/lib/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +35 -8
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +13 -0
- package/.next/standalone/lib/social-store.js +3 -2
- package/.next/standalone/lib/synced-setting.js +46 -0
- package/.next/standalone/lib/theme-store.js +42 -10
- package/.next/standalone/lib/themes.js +111 -21
- package/.next/standalone/lib/usage.js +200 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +595 -11
- package/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/CHANGELOG.md +203 -0
- package/README.md +96 -50
- package/SECURITY.md +25 -11
- package/lib/auto-connect.js +145 -0
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- package/lib/companies.js +1 -1
- package/lib/csv-store.js +131 -0
- package/lib/csv.js +137 -39
- package/lib/data-folder.js +19 -3
- package/lib/data-import.js +5 -2
- package/lib/db-client.js +78 -20
- package/lib/demo.js +5 -4
- package/lib/galaxy-export.js +9 -2
- package/lib/galaxy-lab.js +19 -5
- package/lib/galaxy-layouts.js +43 -0
- package/lib/gate.js +10 -4
- package/lib/in-progress.js +46 -0
- package/lib/ingest.js +1 -1
- package/lib/insights-board.js +613 -0
- package/lib/linkedin-limits.js +240 -14
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/requests-client.js +10 -0
- package/lib/requests.js +124 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scan-state.js +1 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +35 -8
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +13 -0
- package/lib/social-store.js +3 -2
- package/lib/synced-setting.js +46 -0
- package/lib/theme-store.js +42 -10
- package/lib/themes.js +111 -21
- package/lib/usage.js +200 -0
- package/package.json +1 -1
- package/scripts/scrape.py +595 -11
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13dx4sd._.js +0 -8
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +0 -3
- package/.next/standalone/.next/server/chunks/_02twlca._.js +0 -10
- package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +0 -174
- package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1-658fq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +0 -3
- package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/standalone/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/standalone/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/standalone/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/standalone/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- package/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useState, useRef } from 'react';
|
|
4
|
-
import {
|
|
3
|
+
import { useState, useRef, useEffect } from 'react';
|
|
4
|
+
import {
|
|
5
|
+
parseConnectionsCsv, saveCsvNetwork, ConnectionsCsvError, CSV_USER, keptBehindScan, closeCsvNetwork, REMOVE_CSV_QUESTION,
|
|
6
|
+
} from '../../lib/csv';
|
|
5
7
|
import { setUser } from '../../lib/user';
|
|
6
8
|
import Link from 'next/link';
|
|
7
9
|
import { TIER_COLORS } from '../../lib/themes';
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
const card = {
|
|
11
|
-
background: 'rgba(255,255,255,0.03)',
|
|
12
|
-
border: '1px solid rgba(255,255,255,0.08)',
|
|
13
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.03)',
|
|
14
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)',
|
|
13
15
|
borderRadius: 16,
|
|
14
16
|
padding: 24,
|
|
15
17
|
};
|
|
@@ -19,20 +21,36 @@ export default function ImportPage() {
|
|
|
19
21
|
const [error, setError] = useState('');
|
|
20
22
|
const [result, setResult] = useState(null);
|
|
21
23
|
const [busy, setBusy] = useState(false);
|
|
24
|
+
// A CSV kept here that the map doesn't show, because you have scanned your
|
|
25
|
+
// own connections (lib/csv.js openNetworkSource).
|
|
26
|
+
const [behindScan, setBehindScan] = useState(null);
|
|
22
27
|
const inputRef = useRef(null);
|
|
23
28
|
|
|
24
|
-
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
let off = false;
|
|
31
|
+
keptBehindScan().then((k) => { if (!off) setBehindScan(k); });
|
|
32
|
+
return () => { off = true; };
|
|
33
|
+
}, []);
|
|
34
|
+
|
|
35
|
+
async function handleText(text) {
|
|
25
36
|
setBusy(true);
|
|
26
37
|
setError('');
|
|
27
38
|
try {
|
|
28
39
|
const { connections, skipped } = parseConnectionsCsv(text);
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
// Kept in the data folder (lib/csv-store.js), so it's still here after
|
|
41
|
+
// the window closes. If it can't be kept, nothing opens: a map that
|
|
42
|
+
// vanished on the next start would look kept when it wasn't.
|
|
43
|
+
const saved = await saveCsvNetwork(connections);
|
|
44
|
+
if (!saved.ok) {
|
|
45
|
+
setError(saved.error);
|
|
31
46
|
setBusy(false);
|
|
32
47
|
return;
|
|
33
48
|
}
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
const behind = await keptBehindScan();
|
|
50
|
+
setBehindScan(behind);
|
|
51
|
+
// Local-only identity so the app opens without creating an account,
|
|
52
|
+
// unless the map opens on your scanned network instead.
|
|
53
|
+
if (!behind) setUser(CSV_USER.id, CSV_USER.name);
|
|
36
54
|
const tiers = {};
|
|
37
55
|
connections.forEach((c) => { tiers[c.tier] = (tiers[c.tier] || 0) + 1; });
|
|
38
56
|
setResult({ count: connections.length, skipped, tiers });
|
|
@@ -58,32 +76,36 @@ export default function ImportPage() {
|
|
|
58
76
|
<h1 style={{ fontSize: 38, fontWeight: 800, margin: '0 0 8px' }}>
|
|
59
77
|
{result.count.toLocaleString()} connections mapped
|
|
60
78
|
</h1>
|
|
61
|
-
<p style={{ color: 'rgba(255,255,255,0.45)', margin: '0 0 28px', lineHeight: 1.6 }}>
|
|
79
|
+
<p style={{ color: 'rgba(var(--sd-ink, 255, 255, 255), 0.45)', margin: '0 0 28px', lineHeight: 1.6 }}>
|
|
62
80
|
Scored on seniority and company, sorted into tiers.
|
|
63
81
|
{result.skipped > 0 && ` ${result.skipped} row${result.skipped === 1 ? '' : 's'} skipped (blank or duplicate).`}
|
|
64
82
|
</p>
|
|
65
83
|
|
|
66
84
|
<div style={{ ...card, marginBottom: 20 }}>
|
|
67
|
-
<div style={{ fontSize: 11, fontWeight: 700, color: '#666', letterSpacing: 2, marginBottom: 14 }}>YOUR TIERS</div>
|
|
85
|
+
<div style={{ fontSize: 11, fontWeight: 700, color: 'var(--sd-fg-4, #666)', letterSpacing: 2, marginBottom: 14 }}>YOUR TIERS</div>
|
|
68
86
|
{['S', 'A', 'B', 'C', 'D'].map((t) => {
|
|
69
87
|
const n = result.tiers[t] || 0;
|
|
70
88
|
const pct = result.count ? (n / result.count) * 100 : 0;
|
|
71
89
|
return (
|
|
72
90
|
<div key={t} style={{ display: 'flex', alignItems: 'center', gap: 12, marginBottom: 8 }}>
|
|
73
91
|
<span style={{ width: 16, color: TIER_COLORS[t], fontWeight: 800 }}>{t}</span>
|
|
74
|
-
<div style={{ flex: 1, height: 8, borderRadius: 4, background: 'rgba(255,255,255,0.05)', overflow: 'hidden' }}>
|
|
92
|
+
<div style={{ flex: 1, height: 8, borderRadius: 4, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)', overflow: 'hidden' }}>
|
|
75
93
|
<div style={{ width: `${pct}%`, height: '100%', background: TIER_COLORS[t], borderRadius: 4 }} />
|
|
76
94
|
</div>
|
|
77
|
-
<span style={{ width: 46, textAlign: 'right', color: 'rgba(255,255,255,0.6)', fontSize: 13 }}>{n}</span>
|
|
95
|
+
<span style={{ width: 46, textAlign: 'right', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.6)', fontSize: 13 }}>{n}</span>
|
|
78
96
|
</div>
|
|
79
97
|
);
|
|
80
98
|
})}
|
|
81
99
|
</div>
|
|
82
100
|
|
|
101
|
+
{behindScan && <BehindScan onRemoved={() => { setBehindScan(null); setResult(null); }} />}
|
|
83
102
|
<Link href="/" style={primaryBtn}>See your galaxy →</Link>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
103
|
+
{!behindScan && (
|
|
104
|
+
<p style={{ color: 'var(--sd-fg-5, #555)', fontSize: 12, marginTop: 18, lineHeight: 1.6 }}>
|
|
105
|
+
Kept on this computer, in your data folder, so it’s still here after you close the window. Nothing was
|
|
106
|
+
sent anywhere. To remove it, click × next to Your CSV at the top of the map.
|
|
107
|
+
</p>
|
|
108
|
+
)}
|
|
87
109
|
</div>
|
|
88
110
|
</div>
|
|
89
111
|
);
|
|
@@ -95,11 +117,13 @@ export default function ImportPage() {
|
|
|
95
117
|
<h1 style={{ fontSize: 40, fontWeight: 800, margin: '0 0 10px', letterSpacing: -1 }}>
|
|
96
118
|
Map <span style={{ background: 'linear-gradient(135deg,#FFD700,#9B59B6,#3498DB)', WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent' }}>your</span> network
|
|
97
119
|
</h1>
|
|
98
|
-
<p style={{ color: 'rgba(255,255,255,0.45)', margin: '0 0 30px', lineHeight: 1.6, fontSize: 16 }}>
|
|
99
|
-
Drop LinkedIn’s official <code style={code}>Connections.csv</code> below. It is read
|
|
100
|
-
scored,
|
|
120
|
+
<p style={{ color: 'rgba(var(--sd-ink, 255, 255, 255), 0.45)', margin: '0 0 30px', lineHeight: 1.6, fontSize: 16 }}>
|
|
121
|
+
Drop LinkedIn’s official <code style={code}>Connections.csv</code> below. It is read on this computer,
|
|
122
|
+
scored, drawn as a galaxy, and kept in your data folder. No account, and nothing leaves this computer.
|
|
101
123
|
</p>
|
|
102
124
|
|
|
125
|
+
{behindScan && <BehindScan onRemoved={() => setBehindScan(null)} />}
|
|
126
|
+
|
|
103
127
|
<div
|
|
104
128
|
onDragOver={(e) => { e.preventDefault(); setDragging(true); }}
|
|
105
129
|
onDragLeave={() => setDragging(false)}
|
|
@@ -109,7 +133,7 @@ export default function ImportPage() {
|
|
|
109
133
|
...card,
|
|
110
134
|
padding: '48px 24px', textAlign: 'center', cursor: 'pointer', marginBottom: 16,
|
|
111
135
|
borderStyle: 'dashed',
|
|
112
|
-
borderColor: dragging ? '#FFD700' : 'rgba(255,255,255,0.12)',
|
|
136
|
+
borderColor: dragging ? '#FFD700' : 'rgba(var(--sd-ink, 255, 255, 255), 0.12)',
|
|
113
137
|
background: dragging ? 'rgba(255,215,0,0.05)' : card.background,
|
|
114
138
|
transition: 'all 0.15s ease',
|
|
115
139
|
}}
|
|
@@ -118,7 +142,7 @@ export default function ImportPage() {
|
|
|
118
142
|
<div style={{ fontWeight: 700, fontSize: 17, marginBottom: 6 }}>
|
|
119
143
|
{busy ? 'Reading…' : 'Drop Connections.csv here'}
|
|
120
144
|
</div>
|
|
121
|
-
<div style={{ color: '#666', fontSize: 13 }}>or click to choose the file</div>
|
|
145
|
+
<div style={{ color: 'var(--sd-fg-4, #666)', fontSize: 13 }}>or click to choose the file</div>
|
|
122
146
|
<input
|
|
123
147
|
ref={inputRef} type="file" accept=".csv,text/csv" style={{ display: 'none' }}
|
|
124
148
|
onChange={(e) => handleFile(e.target.files?.[0])}
|
|
@@ -132,10 +156,10 @@ export default function ImportPage() {
|
|
|
132
156
|
)}
|
|
133
157
|
|
|
134
158
|
<div style={{ ...card, marginBottom: 16 }}>
|
|
135
|
-
<div style={{ fontSize: 11, fontWeight: 700, color: '#666', letterSpacing: 2, marginBottom: 14 }}>HOW TO GET THE FILE</div>
|
|
136
|
-
<ol style={{ margin: 0, paddingLeft: 20, color: 'rgba(255,255,255,0.6)', fontSize: 14, lineHeight: 2 }}>
|
|
137
|
-
<li>LinkedIn → <strong style={{ color: '#fff' }}>Settings & Privacy → Data privacy → Get a copy of your data</strong></li>
|
|
138
|
-
<li>Pick <strong style={{ color: '#fff' }}>Connections</strong> and request the archive</li>
|
|
159
|
+
<div style={{ fontSize: 11, fontWeight: 700, color: 'var(--sd-fg-4, #666)', letterSpacing: 2, marginBottom: 14 }}>HOW TO GET THE FILE</div>
|
|
160
|
+
<ol style={{ margin: 0, paddingLeft: 20, color: 'rgba(var(--sd-ink, 255, 255, 255), 0.6)', fontSize: 14, lineHeight: 2 }}>
|
|
161
|
+
<li>LinkedIn → <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Settings & Privacy → Data privacy → Get a copy of your data</strong></li>
|
|
162
|
+
<li>Pick <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Connections</strong> and request the archive</li>
|
|
139
163
|
<li>LinkedIn emails a download link, usually within ~10 minutes</li>
|
|
140
164
|
<li>Unzip it and drop <code style={code}>Connections.csv</code> above</li>
|
|
141
165
|
</ol>
|
|
@@ -143,42 +167,74 @@ export default function ImportPage() {
|
|
|
143
167
|
|
|
144
168
|
<div style={{ ...card, marginBottom: 16 }}>
|
|
145
169
|
<div style={{ fontSize: 11, fontWeight: 700, color: '#2ecc71', letterSpacing: 2, marginBottom: 10 }}>PRIVATE BY DESIGN</div>
|
|
146
|
-
<p style={{ margin: 0, color: 'rgba(255,255,255,0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
147
|
-
Your file never leaves this
|
|
148
|
-
|
|
170
|
+
<p style={{ margin: 0, color: 'rgba(var(--sd-ink, 255, 255, 255), 0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
171
|
+
Your file never leaves this computer. It is read here, and only what the map needs (names, positions,
|
|
172
|
+
companies, profile links and when you connected) is kept, in your data folder, apart from any network you
|
|
173
|
+
scan. The <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Email Address column is ignored entirely</strong>.
|
|
149
174
|
</p>
|
|
150
175
|
</div>
|
|
151
176
|
|
|
152
177
|
<div style={{ ...card, borderColor: 'rgba(255,215,0,0.15)' }}>
|
|
153
|
-
<div style={{ fontSize: 11, fontWeight: 700, color: '#FFD700', letterSpacing: 2, marginBottom: 10 }}>HONEST CAVEAT</div>
|
|
154
|
-
<p style={{ margin: '0 0 12px', color: 'rgba(255,255,255,0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
178
|
+
<div style={{ fontSize: 11, fontWeight: 700, color: 'var(--sd-gold, #FFD700)', letterSpacing: 2, marginBottom: 10 }}>HONEST CAVEAT</div>
|
|
179
|
+
<p style={{ margin: '0 0 12px', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
155
180
|
LinkedIn’s export contains no profile photos, so everyone renders as initials on a tier-colored circle.
|
|
156
|
-
It also only covers people you are <em>already</em> connected to
|
|
157
|
-
the <strong style={{ color: '#fff' }}>Outlink queue</strong> stay empty, because those map the people you
|
|
181
|
+
It also only covers people you are <em>already</em> connected to, so <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Degrees</strong> and
|
|
182
|
+
the <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Outlink queue</strong> stay empty, because those map the people you
|
|
158
183
|
haven’t met yet.
|
|
159
184
|
</p>
|
|
160
|
-
<p style={{ margin: 0, color: '#666', fontSize: 13, lineHeight: 1.7 }}>
|
|
161
|
-
Want those? Run the local scanner
|
|
162
|
-
<Link href="/setup" style={{ color: '#3498DB', textDecoration: 'none' }}>See setup →</Link>
|
|
185
|
+
<p style={{ margin: 0, color: 'var(--sd-fg-4, #666)', fontSize: 13, lineHeight: 1.7 }}>
|
|
186
|
+
Want those? Run the local scanner: it captures 2nd-degree circles and real photos.{' '}
|
|
187
|
+
<Link href="/setup" style={{ color: 'var(--sd-blue, #3498DB)', textDecoration: 'none' }}>See setup →</Link>
|
|
163
188
|
</p>
|
|
164
189
|
</div>
|
|
165
190
|
|
|
166
191
|
<div style={{ textAlign: 'center', marginTop: 26 }}>
|
|
167
|
-
<Link href="/" style={{ color: '#555', fontSize: 13, textDecoration: 'none' }}>← Back</Link>
|
|
192
|
+
<Link href="/" style={{ color: 'var(--sd-fg-5, #555)', fontSize: 13, textDecoration: 'none' }}>← Back</Link>
|
|
168
193
|
</div>
|
|
169
194
|
</div>
|
|
170
195
|
</div>
|
|
171
196
|
);
|
|
172
197
|
}
|
|
173
198
|
|
|
199
|
+
// A CSV kept here that the map doesn't show: your scan wins (lib/csv.js
|
|
200
|
+
// openNetworkSource). The file is never deleted for you, so this says it's
|
|
201
|
+
// there and offers to remove it.
|
|
202
|
+
function BehindScan({ onRemoved }) {
|
|
203
|
+
const [busy, setBusy] = useState(false);
|
|
204
|
+
const [error, setError] = useState('');
|
|
205
|
+
async function remove() {
|
|
206
|
+
if (!window.confirm(REMOVE_CSV_QUESTION)) return;
|
|
207
|
+
setBusy(true);
|
|
208
|
+
setError('');
|
|
209
|
+
const closed = await closeCsvNetwork('csv');
|
|
210
|
+
setBusy(false);
|
|
211
|
+
if (closed.ok) onRemoved();
|
|
212
|
+
else setError(closed.error);
|
|
213
|
+
}
|
|
214
|
+
return (
|
|
215
|
+
<div style={{ ...card, padding: '14px 18px', marginBottom: 16, display: 'flex', alignItems: 'center', gap: 14, flexWrap: 'wrap' }}>
|
|
216
|
+
<span style={{ flex: '1 1 260px', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.65)', fontSize: 14, lineHeight: 1.6 }}>
|
|
217
|
+
Your map shows the network you scanned. A CSV import is still kept on this computer.
|
|
218
|
+
</span>
|
|
219
|
+
<button onClick={remove} disabled={busy} style={{
|
|
220
|
+
padding: '8px 14px', borderRadius: 8, cursor: busy ? 'default' : 'pointer', font: 'inherit', fontSize: 13, fontWeight: 700,
|
|
221
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.2)', background: 'transparent', color: 'var(--sd-fg-1, #fff)',
|
|
222
|
+
}}>
|
|
223
|
+
{busy ? 'Removing…' : 'Remove it'}
|
|
224
|
+
</button>
|
|
225
|
+
{error && <div style={{ width: '100%', color: '#ff8080', fontSize: 13, lineHeight: 1.6 }}>{error}</div>}
|
|
226
|
+
</div>
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
|
|
174
230
|
const wrap = {
|
|
175
|
-
minHeight: '100vh', background: 'var(--sd-page)', color: '#fff', padding: '56px 24px',
|
|
231
|
+
minHeight: '100vh', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)', padding: '56px 24px',
|
|
176
232
|
fontFamily: 'var(--sd-font)',
|
|
177
233
|
display: 'flex', justifyContent: 'center',
|
|
178
234
|
};
|
|
179
235
|
|
|
180
236
|
const code = {
|
|
181
|
-
background: 'rgba(255,255,255,0.07)', padding: '2px 6px', borderRadius: 5,
|
|
237
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.07)', padding: '2px 6px', borderRadius: 5,
|
|
182
238
|
fontSize: 13, fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
|
|
183
239
|
};
|
|
184
240
|
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
// Insights: your network ranked by power, and the boards that read it
|
|
4
|
+
// (Blake, 2026-10-03: "stats and insights … data and insights based off their
|
|
5
|
+
// circles … almost no moral tie to the person … base it off value like
|
|
6
|
+
// richest person or highest power people … an intro perspective look at the
|
|
7
|
+
// data of what we have"). Mock-up B, "The Power Index", is the page; mock-up
|
|
8
|
+
// C, the scrolling report, is its Report view.
|
|
9
|
+
//
|
|
10
|
+
// Its views sit in the notch under the header, as every page's do
|
|
11
|
+
// (lib/island.js setNotchTabs): People, Kingmakers, Gatekeepers, Companies,
|
|
12
|
+
// Industries and Report. Every number comes from lib/insights-board.js, which
|
|
13
|
+
// says where each came from; nothing here is estimated and nothing is about
|
|
14
|
+
// money.
|
|
15
|
+
|
|
16
|
+
import { Suspense, useCallback, useEffect, useMemo, useState } from 'react';
|
|
17
|
+
import { useSearchParams } from 'next/navigation';
|
|
18
|
+
import Link from 'next/link';
|
|
19
|
+
import AppHeader from '../components/AppHeader';
|
|
20
|
+
import OnboardingGate from '../components/OnboardingGate';
|
|
21
|
+
import { useUser } from '../components/UserProvider';
|
|
22
|
+
import useRequests from '../components/useRequests';
|
|
23
|
+
import { setNotchTabs } from '../../lib/island';
|
|
24
|
+
import { loadNetwork } from '../../lib/network';
|
|
25
|
+
import { loadCsvNetwork } from '../../lib/csv';
|
|
26
|
+
import { loadScanNotes, NO_SCAN_NOTES } from '../../lib/scraper-client';
|
|
27
|
+
import { hasRequest } from '../../lib/requests-client';
|
|
28
|
+
import { networkLevel } from '../../lib/level';
|
|
29
|
+
import { IS_DEMO } from '../../lib/demo';
|
|
30
|
+
import {
|
|
31
|
+
boardBase, powerIndex, kingmakers, gatekeepers, hiddenGiants, tierByRarity, untapped,
|
|
32
|
+
companyPower, industries, titleLadder, coverage, howSure, reachSummary,
|
|
33
|
+
} from '../../lib/insights-board';
|
|
34
|
+
import PeopleView from '../components/insights/PeopleView';
|
|
35
|
+
import { KingmakersBoard, GatekeepersBoard, CompaniesBoard, IndustriesBoard } from '../components/insights/Boards';
|
|
36
|
+
import Report from '../components/insights/Report';
|
|
37
|
+
import { fmt, useIsMobile, TITLE } from '../components/insights/parts';
|
|
38
|
+
|
|
39
|
+
const VIEWS = ['people', 'kingmakers', 'gatekeepers', 'companies', 'industries', 'report'];
|
|
40
|
+
const LABELS = { people: 'People', kingmakers: 'Kingmakers', gatekeepers: 'Gatekeepers', companies: 'Companies', industries: 'Industries', report: 'Report' };
|
|
41
|
+
|
|
42
|
+
export default function InsightsPage() {
|
|
43
|
+
// Suspense because the page reads the address's ?view= (useSearchParams),
|
|
44
|
+
// which Next requires to sit inside one for the page to build (TRAPS §41).
|
|
45
|
+
return <OnboardingGate><Suspense><InsightsInner /></Suspense></OnboardingGate>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function InsightsInner() {
|
|
49
|
+
const { userId } = useUser();
|
|
50
|
+
const isMobile = useIsMobile();
|
|
51
|
+
const asked = useSearchParams().get('view');
|
|
52
|
+
const [view, setView] = useState(() => (VIEWS.includes(asked) ? asked : 'people'));
|
|
53
|
+
const [net, setNet] = useState(null); // { degree1, degree2, degree3, notes, source, budget }
|
|
54
|
+
const [failed, setFailed] = useState(null);
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (IS_DEMO || !userId) return;
|
|
58
|
+
let live = true;
|
|
59
|
+
(async () => {
|
|
60
|
+
try {
|
|
61
|
+
// The sample (this window) or a kept CSV import, else your own network:
|
|
62
|
+
// lib/csv.js openNetworkSource, the one rule every page opens on.
|
|
63
|
+
const local = await loadCsvNetwork();
|
|
64
|
+
if (local) {
|
|
65
|
+
if (live) setNet({ degree1: local.degree1 || [], degree2: local.degree2 || [], degree3: [], notes: NO_SCAN_NOTES, source: local.source || 'csv', budget: null });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Your daily search budget and speed, for what scanning the next circles would take:
|
|
69
|
+
// ?usage only reads the scanner's files (no checks, no Python, nothing written).
|
|
70
|
+
const usage = fetch('/api/scraper?usage').then((r) => (r.ok ? r.json() : null)).catch(() => null);
|
|
71
|
+
const [n, notes, used] = await Promise.all([loadNetwork(userId), loadScanNotes(), usage]);
|
|
72
|
+
const limits = used?.limits;
|
|
73
|
+
if (live) setNet({ ...n, notes, source: 'own', budget: limits ? { daily: limits.daily, pace: limits.pace } : null });
|
|
74
|
+
} catch (e) {
|
|
75
|
+
if (live) setFailed(e.message || 'The network couldn’t be loaded.');
|
|
76
|
+
}
|
|
77
|
+
})();
|
|
78
|
+
return () => { live = false; };
|
|
79
|
+
}, [userId]);
|
|
80
|
+
|
|
81
|
+
// The quick part first: the ranking and the boards that read circles.
|
|
82
|
+
const base = useMemo(() => (net ? boardBase(net) : null), [net]);
|
|
83
|
+
const data = useMemo(() => {
|
|
84
|
+
if (!base) return null;
|
|
85
|
+
const index = powerIndex(base);
|
|
86
|
+
return {
|
|
87
|
+
index, reach: reachSummary(base), kings: kingmakers(base), gates: gatekeepers(base), hidden: hiddenGiants(base),
|
|
88
|
+
grid: tierByRarity(base), cover: coverage(base, net.budget || {}), sure: howSure(index),
|
|
89
|
+
};
|
|
90
|
+
}, [base, net]);
|
|
91
|
+
// Companies and titles read every headline (about half a second on 7,000
|
|
92
|
+
// people), so they follow once the table is on screen.
|
|
93
|
+
const [slow, setSlow] = useState(null);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!base) return undefined;
|
|
96
|
+
const t = setTimeout(() => {
|
|
97
|
+
const companies = companyPower(base);
|
|
98
|
+
setSlow({ base, companies, industries: industries(companies), ladder: titleLadder(base) });
|
|
99
|
+
}, 30);
|
|
100
|
+
return () => clearTimeout(t);
|
|
101
|
+
}, [base]);
|
|
102
|
+
const heavy = slow && slow.base === base ? slow : null;
|
|
103
|
+
|
|
104
|
+
const requests = useRequests();
|
|
105
|
+
const isAsked = useCallback((row) => hasRequest(row, requests), [requests]);
|
|
106
|
+
const open = useMemo(() => (base ? untapped(base, isAsked) : null), [base, isAsked]);
|
|
107
|
+
|
|
108
|
+
const pick = useCallback((v) => {
|
|
109
|
+
setView(v);
|
|
110
|
+
try {
|
|
111
|
+
const u = new URL(window.location.href);
|
|
112
|
+
if (v === 'people') u.searchParams.delete('view'); else u.searchParams.set('view', v);
|
|
113
|
+
window.history.replaceState(null, '', u.pathname + u.search);
|
|
114
|
+
} catch { /* the address stays */ }
|
|
115
|
+
window.scrollTo(0, 0);
|
|
116
|
+
}, []);
|
|
117
|
+
|
|
118
|
+
// The views in the notch, with how many each ranks.
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
if (!data || data.index.total === 0) { setNotchTabs(null); return undefined; }
|
|
121
|
+
const count = {
|
|
122
|
+
people: data.index.total, kingmakers: data.kings.scanned, gatekeepers: data.gates.list.length,
|
|
123
|
+
companies: heavy?.companies.count, industries: heavy?.industries.list.length,
|
|
124
|
+
};
|
|
125
|
+
setNotchTabs({
|
|
126
|
+
items: VIEWS.map((key) => ({
|
|
127
|
+
key,
|
|
128
|
+
label: count[key] ? <>{LABELS[key]}<small style={{ fontSize: 10.5, opacity: 0.65, fontWeight: 600 }}>{fmt(count[key])}</small></> : LABELS[key],
|
|
129
|
+
})),
|
|
130
|
+
current: view, onPick: pick,
|
|
131
|
+
});
|
|
132
|
+
return () => setNotchTabs(null);
|
|
133
|
+
}, [data, heavy, view, pick]);
|
|
134
|
+
|
|
135
|
+
const level = useMemo(() => (net ? networkLevel(net.degree1, net.degree2) : null), [net]);
|
|
136
|
+
const csvMode = Boolean(net && net.source !== 'own');
|
|
137
|
+
|
|
138
|
+
if (IS_DEMO) {
|
|
139
|
+
return (
|
|
140
|
+
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 12, color: 'var(--sd-fg-2, #ccc)', fontFamily: 'var(--sd-font)' }}>
|
|
141
|
+
<h1 style={{ fontSize: 20, fontWeight: 700, margin: 0, color: 'var(--sd-fg-1, #fff)' }}>Not part of the demo</h1>
|
|
142
|
+
<p style={{ fontSize: 13, margin: 0 }}>The public demo includes the Network Circle and Degrees views only.</p>
|
|
143
|
+
<Link href="/" style={{ fontSize: 13, color: 'var(--sd-fg-3, #888)', textDecoration: 'none' }}>← Back to the network</Link>
|
|
144
|
+
</div>
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const shared = { data, heavy, open, net, source: net?.source, isMobile, onView: pick };
|
|
149
|
+
return (
|
|
150
|
+
<div style={{ minHeight: '100vh', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)', fontFamily: 'var(--sd-font)' }}>
|
|
151
|
+
<AppHeader active="insights" csvMode={csvMode} level={level} isMobile={isMobile} />
|
|
152
|
+
{/* Room for the notch, which hangs under the header with the views in it */}
|
|
153
|
+
<main style={{ maxWidth: view === 'report' ? 920 : 1400, margin: '0 auto', padding: isMobile ? '52px 12px 0' : '58px 30px 0' }}>
|
|
154
|
+
{failed ? <Message title="The network couldn’t be loaded" body={failed} />
|
|
155
|
+
: !data ? <Message title="Reading your network…" />
|
|
156
|
+
: data.index.total === 0 ? <Empty source={net.source} />
|
|
157
|
+
: view === 'people' ? <PeopleView {...shared} requests={requests} />
|
|
158
|
+
: view === 'kingmakers' ? <KingmakersBoard {...shared} />
|
|
159
|
+
: view === 'gatekeepers' ? <GatekeepersBoard {...shared} />
|
|
160
|
+
: view === 'companies' ? <CompaniesBoard {...shared} />
|
|
161
|
+
: view === 'industries' ? <IndustriesBoard {...shared} />
|
|
162
|
+
: <Report {...shared} />}
|
|
163
|
+
<Footer net={net} data={data} isMobile={isMobile} />
|
|
164
|
+
</main>
|
|
165
|
+
</div>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function Message({ title, body }) {
|
|
170
|
+
return (
|
|
171
|
+
<div style={{ padding: '80px 0', textAlign: 'center' }}>
|
|
172
|
+
<div style={{ fontSize: 17, fontWeight: 700 }}>{title}</div>
|
|
173
|
+
{body && <div style={{ fontSize: 13, color: 'var(--sd-fg-3, #888)', marginTop: 8 }}>{body}</div>}
|
|
174
|
+
</div>
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** No one to rank yet: where people come from. */
|
|
179
|
+
function Empty({ source }) {
|
|
180
|
+
return (
|
|
181
|
+
<div style={{ maxWidth: 560, margin: '60px auto', textAlign: 'center' }}>
|
|
182
|
+
<h1 style={TITLE}>The Power Index</h1>
|
|
183
|
+
<p style={{ fontSize: 15, color: 'var(--sd-fg-2, #b8c4c4)', lineHeight: 1.6, margin: '12px 0 22px' }}>
|
|
184
|
+
Nothing to rank yet. Once your connections are in, everyone within two steps of you shows here, ranked by power,
|
|
185
|
+
with who holds the doors and what’s still closed.
|
|
186
|
+
</p>
|
|
187
|
+
<div style={{ display: 'flex', gap: 10, justifyContent: 'center', flexWrap: 'wrap' }}>
|
|
188
|
+
{source === 'own' && (
|
|
189
|
+
<Link href="/setup" style={{ padding: '10px 16px', borderRadius: 8, fontWeight: 700, fontSize: 13.5, textDecoration: 'none', color: '#000', background: 'linear-gradient(135deg, #00ff88, #1abc9c)' }}>
|
|
190
|
+
Scan your connections →
|
|
191
|
+
</Link>
|
|
192
|
+
)}
|
|
193
|
+
<Link href="/import" style={{ padding: '10px 16px', borderRadius: 8, fontWeight: 700, fontSize: 13.5, textDecoration: 'none', color: 'var(--sd-fg-1, #fff)', border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.2)' }}>
|
|
194
|
+
Import a CSV
|
|
195
|
+
</Link>
|
|
196
|
+
</div>
|
|
197
|
+
<p style={{ fontSize: 12.5, color: 'var(--sd-fg-4, #6f7a88)', marginTop: 18 }}>
|
|
198
|
+
Or look around first: the <Link href="/" style={{ color: 'var(--sd-blue, #3498DB)', textDecoration: 'none' }}>map’s welcome screen</Link> opens a sample network where every person is invented.
|
|
199
|
+
</p>
|
|
200
|
+
</div>
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** The rule every screen with a tier says, and which network this is. */
|
|
205
|
+
function Footer({ net, data, isMobile }) {
|
|
206
|
+
const what = !net || !data?.index.total ? null
|
|
207
|
+
: net.source === 'sample' ? 'The sample network: every person in it is invented.'
|
|
208
|
+
: net.source === 'csv' ? `Your CSV import: ${fmt(data?.reach.d1)} connections, no circles.`
|
|
209
|
+
: data ? `Counted from your ${fmt(data.reach.d1)} connections and the ${fmt(data.reach.circles)} circle${data.reach.circles === 1 ? '' : 's'} you’ve scanned.` : null;
|
|
210
|
+
return (
|
|
211
|
+
<footer style={{
|
|
212
|
+
margin: '36px 0 0', padding: '18px 0 34px', borderTop: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)',
|
|
213
|
+
display: 'flex', flexDirection: isMobile ? 'column' : 'row', justifyContent: 'space-between', gap: isMobile ? 8 : 20,
|
|
214
|
+
color: 'var(--sd-fg-4, #6f7a88)', fontSize: 11.5, lineHeight: 1.5,
|
|
215
|
+
}}>
|
|
216
|
+
<div><b style={{ color: 'var(--sd-fg-2, #b8c4c4)' }}>Power ranks reachability, not people.</b> A tier is a statement about network position, not human worth.</div>
|
|
217
|
+
{what && <div>{what}</div>}
|
|
218
|
+
</footer>
|
|
219
|
+
);
|
|
220
|
+
}
|
|
@@ -244,7 +244,7 @@ function GalaxySection() {
|
|
|
244
244
|
</h2>
|
|
245
245
|
<p style={{ fontSize: 17, color: 'rgba(255,255,255,0.5)', lineHeight: 1.7, marginTop: 20, maxWidth: 440 }}>
|
|
246
246
|
Every connection orbits you by power tier. S-Tier innermost, D-Tier outermost.
|
|
247
|
-
A living galaxy of influence
|
|
247
|
+
A living galaxy of influence. Zoom, filter, and explore your entire professional universe.
|
|
248
248
|
</p>
|
|
249
249
|
{/* Tier legend */}
|
|
250
250
|
<div style={{ display: 'flex', gap: 12, marginTop: 32, flexWrap: 'wrap' }}>
|
|
@@ -321,7 +321,7 @@ function ChainSection() {
|
|
|
321
321
|
const [ref, inView] = useInView();
|
|
322
322
|
const degrees = [
|
|
323
323
|
// The sample's counts; it maps two degrees.
|
|
324
|
-
{ d: 1, label: 'Your Connections', desc: 'Direct network
|
|
324
|
+
{ d: 1, label: 'Your Connections', desc: 'Direct network, scored & tiered', color: '#3498DB', count: SAMPLE_STATS.degree1 },
|
|
325
325
|
{ d: 2, label: 'Bridge Connections', desc: 'Friends of your bridges', color: '#9B59B6', count: SAMPLE_STATS.degree2 },
|
|
326
326
|
{ d: 3, label: 'Extended Reach', desc: 'Bridged from promoted D2s', color: '#FFD700', count: null },
|
|
327
327
|
{ d: 4, label: 'Industry Layer', desc: 'Company & sector intelligence', color: '#FF6B35', count: null },
|
|
@@ -515,7 +515,7 @@ function FeaturesGrid() {
|
|
|
515
515
|
{
|
|
516
516
|
title: 'Bridge Clusters',
|
|
517
517
|
subtitle: 'Deep Network Mining',
|
|
518
|
-
desc: 'Select any D1 connection as a bridge. Automatically discover and score all their connections
|
|
518
|
+
desc: 'Select any D1 connection as a bridge. Automatically discover and score all their connections: your D2 layer.',
|
|
519
519
|
color: '#9B59B6',
|
|
520
520
|
icon: '🔗',
|
|
521
521
|
stat: `${SAMPLE_STATS.bridges} bridges in the sample`,
|
|
@@ -700,7 +700,7 @@ function TheorySection() {
|
|
|
700
700
|
proximity, and shared experience.
|
|
701
701
|
</p>
|
|
702
702
|
<p style={{ fontSize: 17, color: 'rgba(255,255,255,0.45)', lineHeight: 1.8, marginTop: 16, maxWidth: 560, margin: '16px auto 0' }}>
|
|
703
|
-
Six degrees of separation isn’t just a theory &
|
|
703
|
+
Six degrees of separation isn’t just a theory. It’s the architecture of human connection.
|
|
704
704
|
Every string vibrates with potential. Every bridge shortens the distance.
|
|
705
705
|
</p>
|
|
706
706
|
|
|
@@ -712,7 +712,7 @@ function TheorySection() {
|
|
|
712
712
|
opacity: inView ? 1 : 0, transition: 'opacity 1.5s ease 0.5s',
|
|
713
713
|
}}>
|
|
714
714
|
“Everyone is connected to everyone else by six degrees or fewer.
|
|
715
|
-
The question isn’t <em>if</em
|
|
715
|
+
The question isn’t <em>if</em>, it’s <em>through whom</em>.”
|
|
716
716
|
</div>
|
|
717
717
|
</div>
|
|
718
718
|
</div>
|
|
@@ -22,12 +22,14 @@ import StaleServerBanner from './components/StaleServerBanner';
|
|
|
22
22
|
import ScanStatusBar from './components/ScanStatusBar';
|
|
23
23
|
import SocialAutoSync from './components/SocialAutoSync';
|
|
24
24
|
import ThemeLoader from './components/ThemeLoader';
|
|
25
|
+
import LiquidGlass from './components/LiquidGlass';
|
|
26
|
+
import ThemeDefs from './components/ThemeDefs';
|
|
25
27
|
|
|
26
|
-
const THEME_FIRST = `try{var t=JSON.parse(localStorage.getItem('six-degrees-theme-vars')||'null');if(t&&t.vars){var r=document.documentElement;for(var k in t.vars){var v=String(t.vars[k]);if(/^--sd-[a-z0-9-]+$/.test(k)&&!/[;{}<>]/.test(v))r.style.setProperty(k,v)}var a=t.attrs||{};if(/^[a-z]+$/.test(a
|
|
28
|
+
const THEME_FIRST = `try{var t=JSON.parse(localStorage.getItem('six-degrees-theme-vars')||'null');if(t&&t.vars){var r=document.documentElement;for(var k in t.vars){var v=String(t.vars[k]);if(/^--sd-[a-z0-9-]+$/.test(k)&&!/[;{}<>]/.test(v))r.style.setProperty(k,v)}var a=t.attrs||{};['theme','backdrop','mode','buttons','dots'].forEach(function(n){if(/^[a-z]+$/.test(a[n]||''))r.dataset[n]=a[n]});r.style.colorScheme=a.mode==='light'?'light':'dark'}}catch(e){}`;
|
|
27
29
|
|
|
28
30
|
export default function RootLayout({ children }) {
|
|
29
31
|
return (
|
|
30
|
-
<html lang="en" data-backdrop="none" className={`${geistSans.variable} ${geistMono.variable}`} suppressHydrationWarning>
|
|
32
|
+
<html lang="en" data-backdrop="none" data-mode="dark" data-buttons="soft" data-dots="solid" className={`${geistSans.variable} ${geistMono.variable}`} suppressHydrationWarning>
|
|
31
33
|
<head>
|
|
32
34
|
{/* The theme (lib/theme-store.js), on the page before it paints. Only
|
|
33
35
|
--sd- variables, and only values with nothing that could end one. */}
|
|
@@ -35,6 +37,8 @@ export default function RootLayout({ children }) {
|
|
|
35
37
|
</head>
|
|
36
38
|
<body style={{ margin: 0, padding: 0, background: 'var(--sd-bg, #0a0a1a)' }}>
|
|
37
39
|
<ThemeLoader />
|
|
40
|
+
<LiquidGlass />
|
|
41
|
+
<ThemeDefs />
|
|
38
42
|
<UserProvider>
|
|
39
43
|
{children}
|
|
40
44
|
{/* Says so when the files on disk have moved past what this server
|