Project Info
This project did not submit a demo video on Devpost.
Inspiration
Have you ever spent hours trying to find the right person—whether it’s a hire, a mentor, or a collaborator—only to feel like the process was inefficient and hit-or-miss? It’s not just about finding talent; it’s about finding people who align with your goals, bring positive value, and fit into your long-term vision. From our experience as founders and students, we’ve seen that the best connections come from meaningful relationships. Successful hiring, mentorship, or collaboration is about building relationships over time, identifying mutual values, and offering the right opportunity at the right moment. The problem? This process is time-consuming and often reliant on referrals or alumni networks, making it hard to discover the best-fit individuals. That’s why we built this platform: to automate parts of the process while increasing its human-centered essence. We don’t just help users search for people or talent—we enable them to understand their network, foster genuine connections, and make strategic decisions with visibility into how people and companies relate to one another.
What it does
Our platform combines real-time graph visualization with LLM-powered search and message generation to streamline relationship-building. Users connect their social platforms (e.g., LinkedIn, GitHub) to view an interactive graph of people, companies, and connections, grouped by organizations and structured by degrees of separation. The graph provides insights into the strength of connections, letting users navigate between platforms to explore how individuals and organizations are linked. With semantic search, users can input queries like: “Find a cybersecurity mentor at a startup.” “Who in my network has experience with AI and fundraising?” Behind the scenes, a multi-agent system classifies each query and triggers specialized agents to search through GitHub, LinkedIn, or other sources. Results are stored as vector embeddings in ChromaDB, ensuring quick and relevant retrieval. Users receive not just matches, but insights into who the right person is based on shared values, skills, and experiences. To facilitate outreach, the platform offers tailored message generation based on the context of the platform and the common points between them. If they don’t have a direct connection, they can request introductions through mutual contacts. Finally, data-scraping agents pull and refresh data from platforms like GitHub and LinkedIn to keep the graph updated. The agents work on a schedule or on-demand by proxy, ensuring users always have access to the latest information.
How we built it
Our platform combines a multi-agent system, interactive graph visualization, and intelligent search and outreach capabilities to help users discover and build meaningful connections. Here’s a breakdown of the core technologies and how they work together: Multi-Agent System: Classification agents analyze user queries to determine if they target people or companies. Search agents first figure out how best identify key individuals or companies that fit user criteria. They then optimize queries with the Hyperbolic API, based on how many searches they need to get to the goal, and where they want to search. Scraping agents from Fetch.ai pull data from platforms like GitHub and LinkedIn, extracting relevant content (e.g., GitHub projects, LinkedIn profiles) to enrich the graph or store as vector embeddings in ChromaDB for more optimized search. Agents also retrieve contact information, ensuring a way to reach out to people even if the platform doesn’t offer direct messaging (e.g., finding GitHub usernames from email addresses). Message-generation agents create personalized outreach content, incorporating Hyperbolic inference APIs to ensure contextual relevance and prevent hallucinations. Interactive Graph Visualization and Retrieval: Built using Three.js for smooth rendering, with a SQL database for relational data and ChromaDB for vector-based search Each node represents a person, company, or organization, with node size reflecting the strength of the connection. Users can navigate their connections across platforms, grouped by organizations, and seamlessly click between contexts (e.g., viewing a person’s LinkedIn profile and their GitHub activity). If not logged in, the graph displays public companies without revealing sensitive data, preserving privacy.
Challenges we ran into
Designing a Complex System and Maintaining Consistency: Building a platform with multiple interconnected agents, data sources, and visual components required meticulous planning. Dividing tasks across our team while maintaining a consistent structure and flow was challenging, especially when coordinating agents’ tasks (e.g., search, scraping, message generation) and datatypes to work together seamlessly. Smooth communication between components was essential to avoid duplication, misalignment, or performance bottlenecks. Scraping Without Accessible APIs: Platforms like LinkedIn don’t provide public APIs for many key data points, making scraping particularly challenging. We had to develop creative solutions to reliably access and extract the data while staying compliant with privacy policies. For users who don’t want to provide account credentials, we implemented proxy-based scraping techniques that work within platform limitations, providing functionality without compromising security or usability. Graph Search Optimization: Traversing large networks in real-time is computationally demanding. With thousands of nodes and connections, we focused on minimizing query complexity using advanced search techniques, such as graph pruning and embeddings-based lookups, to ensure fast and responsive performance. Data Consistency and Scraping: Pulling data from multiple sources with different structures required intelligent fetch and refresh cycles. Agents handle scheduled updates and on-demand queries to keep data current without overwhelming APIs. Accurate, Context-Aware Messaging: Balancing automation with personalization was challenging. The Hyperbolic API ensures that messages align with the search context, preventing irrelevant or incorrect messaging. Cross-Platform Integration: Creating smooth transitions between platforms like GitHub and LinkedIn required careful planning to synchronize different data structures and privacy constraints. The wifi at the venue was very slow and made scraping and LLM calls very inefficient.
Accomplishments we're proud of
For all of us, this was our first multi-agent system relying on heavy inter-agent communication. We're of our robust multi-agent system capable of handling classification, search, scraping, and personalized outreach seamlessly. Using graph traversal and theory we learned in our classes in a real application! Developed a real-time, interactive graph that visualizes thousands of nodes, connections, and degrees of separation efficiently. Very pleasing to scroll and click around on too. Successfully integrated ChromaDB embeddings to enable fast, semantic search across diverse datasets and 2 types of dbs. Created a platform that not only identifies the right connections but also facilitates genuine relationship-building over time. While building this, we definitely gained even more insight on the benefits a tool like this can bring.
What we learned
Real-time graph traversal at scale is challenging: Managing thousands of nodes efficiently (and our computers continuously crashing) required us to rethink our query optimization strategies, ultimately leading to embeddings-based lookups and graph pruning techniques. Consistent data management and communication about it is key: Keeping scraped data current across multiple platforms was more complex than anticipated, especially when we divided up tasks without clear communication about it and had to make changes on that later. Intelligent agents allowed us to balance data freshness with API usage constraints. The strongest models aren't always necessary. We experimented a lot and ended up going with lighter models to balance performance and latency. graph animations! (physics and math there too)
What's next
Twitter scraping Groups of users, to see all your connections/networks together Filters for graph visualization More optimal algorithms Sentiment analysis and more user info, for message drafting to really personalize the user Searching with you.com or perplexity for additional context for message drafting
nebulink
Inspiration
Have you ever spent hours trying to find the right person—whether it’s a hire, a mentor, or a collaborator—only to feel like the process was inefficient and hit-or-miss? It’s not just about finding talent; it’s about finding people who align with your goals, bring positive value, and fit into your long-term vision.
The problem? This process is time-consuming and often reliant on referrals or alumni networks, making it hard to discover the best-fit individuals. That’s why we built this platform: to automate parts of the process while increasing its human-centered essence. We don’t just help users search for people or talent—we enable them to understand their network, foster genuine connections, and make strategic decisions with visibility into how people and companies relate to one another.
What it does
Our platform combines real-time graph visualization with LLM-powered search and message generation to streamline relationship-building. Users connect their social platforms (e.g., LinkedIn, GitHub) to view an interactive graph of people, companies, and connections, grouped by organizations and structured by degrees of separation. The graph provides insights into the strength of connections, letting users navigate between platforms to explore how individuals and organizations are linked.
With semantic search, users can input queries like:
- “Find a cybersecurity mentor at a startup.”
- “Who in my network has experience with AI and fundraising?” Behind the scenes, a multi-agent system classifies each query and triggers specialized agents to search through GitHub, LinkedIn, or other sources. Results are stored as vector embeddings in ChromaDB, ensuring quick and relevant retrieval. Users receive not just matches, but insights into who the right person is based on shared values, skills, and experiences.
To facilitate outreach, the platform offers tailored message generation based on the context of the platform and the common points between them. If they don’t have a direct connection, they can request introductions through mutual contacts.
Finally, data-scraping agents pull and refresh data from platforms like GitHub and LinkedIn to keep the graph updated. The agents work on a schedule or on-demand by proxy, ensuring users always have access to the latest information.
How we built it
Our platform combines a multi-agent system, interactive graph visualization, and intelligent search and outreach capabilities to help users discover and build meaningful connections. Here’s a breakdown of the core technologies and how they work together:
- Multi-Agent System:
- Classification agents analyze user queries to determine if they target people or companies.
- Search agents first figure out how best identify key individuals or companies that fit user criteria. They then optimize queries with the Hyperbolic API, based on how many searches they need to get to the goal, and where they want to search.
- Scraping agents from Fetch.ai pull data from platforms like GitHub and LinkedIn, extracting relevant content (e.g., GitHub projects, LinkedIn profiles) to enrich the graph or store as vector embeddings in ChromaDB for more optimized search. Agents also retrieve contact information, ensuring a way to reach out to people even if the platform doesn’t offer direct messaging (e.g., finding GitHub usernames from email addresses).
- Message-generation agents create personalized outreach content, incorporating Hyperbolic inference APIs to ensure contextual relevance and prevent hallucinations.
- Interactive Graph Visualization and Retrieval:
- Built using Three.js for smooth rendering, with a SQL database for relational data and ChromaDB for vector-based search
- Each node represents a person, company, or organization, with node size reflecting the strength of the connection.
- Users can navigate their connections across platforms, grouped by organizations, and seamlessly click between contexts (e.g., viewing a person’s LinkedIn profile and their GitHub activity).
- If not logged in, the graph displays public companies without revealing sensitive data, preserving privacy.
What's next for nebulink
- Twitter scraping
- Groups of users, to see all your connections/networks together
- Filters for graph visualization
- More optimal algorithms
- Sentiment analysis and more user info, for message drafting to really personalize the user
- Searching with you.com or perplexity for additional context for message drafting
Setup
Backend
cd backend python -m venv venv source venv/bin/activate pip install -r requirements.txt uvicorn main:app --reload
If you add new packages, run pip freeze > requirements.txt to update the requirements.txt file.
To lint, run chmod +x lint.sh to make it executable for the first time, and then run ./lint.sh.
To run the Fetch AI agent, run python -m app.agents.scraper_agents. They will be hosted on port 8001!
Frontend
cd frontend npm install npm run dev
Analysis
View
Metric
- 29
- 26
- 16
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- FastAPIIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
7 of 7 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
196 KB
Source files
67
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
ashleyzhang01/nebulink
111 files · 5.3 MB · @ 1109fb7
Structure
Interface
30 files · 27%Screens, components and styles rendered to the user.
API & routing
8 files · 7%Request entry points: routes, handlers and controllers.
Application logic
8 files · 7%Domain rules, services and shared utilities.
Data & schema
22 files · 20%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python61%
- TypeScript35%
- Markdown3%
- CSS1%
- Shell0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
backend/requirements.txt
pypi · 83- aiohappyeyeballs
- aiohttp
- aiomysql
- aiosignal
- alembic
- annotated-types
- anyio
- apispec
- attrs
- bcrypt
- beautifulsoup4
- bech32
- bs4
- certifi
- cffi
- charset-normalizer
- click
- cosmpy
- +65 more
frontend/package.json
npm · 17- 3d-force-graph
- axios
- dynamic
- next
- react
- react-dom
- react-icons
- three
- +9 more
backend/pyproject.toml
pypi · 1- uagents
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.