{"id":23087196,"url":"https://github.com/lachlanjc/spatial-bsky-search","last_synced_at":"2025-07-18T17:32:52.282Z","repository":{"id":264732369,"uuid":"894236179","full_name":"lachlanjc/spatial-bsky-search","owner":"lachlanjc","description":"Semantic search of Bluesky likes on an infinite canvas","archived":false,"fork":false,"pushed_at":"2024-11-26T02:01:31.000Z","size":4670,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-02T13:11:02.993Z","etag":null,"topics":["bluesky","bsky","infinite-canvas","react-flow","semantic-search"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lachlanjc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-26T02:01:13.000Z","updated_at":"2025-05-10T06:41:07.000Z","dependencies_parsed_at":"2024-11-26T03:18:17.341Z","dependency_job_id":"14ba1ec2-441d-42c6-bd5e-42210d7879b2","html_url":"https://github.com/lachlanjc/spatial-bsky-search","commit_stats":null,"previous_names":["lachlanjc/spatial-bsky-search"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lachlanjc/spatial-bsky-search","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lachlanjc%2Fspatial-bsky-search","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lachlanjc%2Fspatial-bsky-search/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lachlanjc%2Fspatial-bsky-search/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lachlanjc%2Fspatial-bsky-search/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lachlanjc","download_url":"https://codeload.github.com/lachlanjc/spatial-bsky-search/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lachlanjc%2Fspatial-bsky-search/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265801933,"owners_count":23830504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluesky","bsky","infinite-canvas","react-flow","semantic-search"],"created_at":"2024-12-16T19:55:11.484Z","updated_at":"2025-07-18T17:32:52.232Z","avatar_url":"https://github.com/lachlanjc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bluesky Spatial Semantic Search\n\nI’ve combined my 1) desire to re-surface content from my Bluesky feed 2) embeddings \u0026 semantic search and 3) my love of infinite canvas UIs:\n\n![Screenshot of a masonry grid of bluesky posts all showing pet photos, with a search field that says \"pet\" and a filter for \"has photo\" enabled](https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:5clwkdkmns2fk7luffo6efol/bafkreidvooa2czyrqstsizhnbedok7vrzztglbrtts4hjqwqup3l3k5gue@jpeg)\n\nIt’s an OpenAI embeddings-powered search tool for my Bluesky likes, with advanced filtering, on an infinite canvas with draggable results. I started this project last spring [for my Twitter likes + bookmarks](https://edu.lachlanjc.com/2024-05-07_shm_spatial_semantic_twitter_search), and since adapted it to Bluesky.\n\nRight now you can only run it locally or self-host it; I’m not offering a hosted version.\n\n## Running it yourself\n\n(Using [Bun](https://bun.sh/) because it’s excellent for scripting)\n\n1. Clone repo, `cd`\n2. `bun i`\n3. Copy `.env.sample` into `.env`, and fill out the API credentials. You’ll need an OpenAI API key, your Bsky handle (e.g. `lachlanjc.com`), plus a Bsky App Password\n4. Install [Chroma](https://trychroma.com), then in another terminal, `chroma run` (you’ll need to keep this running both for the download scripts and querying the embeddings database)\n5. If you’re using [Zed](https://zed.dev), spawn the task for download, then for embedding. Otherwise, `bun run lib/tasks/download.js` then `bun run lib/tasks/embed.js`\n6. `bun dev` \u0026 open the link!\n\n## Open source libraries\n\n- Next.js site\n- [Chroma](https://trychroma.com) for embeddings database\n- [`umap-js`](https://github.com/PAIR-code/umap-js) for positioning posts\n- [React Flow](https://reactflow.dev/) for infinite canvas\n- [`bsky-react-post`](https://bsky-react-post.rhinobase.io/) for post embeds\n- [Radix Themes](https://www.radix-ui.com/) for search UI\n\n---\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flachlanjc%2Fspatial-bsky-search","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flachlanjc%2Fspatial-bsky-search","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flachlanjc%2Fspatial-bsky-search/lists"}