A graph-powered developer ecosystem explorer built with React, Node.js, and CognoDB Cloud.
DevGraph demonstrates how graph databases can model and explore relationships between developers, projects, technologies, skills, companies, and domains.
Frontend: https://YOUR-VERCEL-DOMAIN.vercel.app
Backend API: https://YOUR-RENDER-DOMAIN.onrender.com
DevGraph is a developer ecosystem explorer created for the Wexa AI CognoDB take-home assignment.
The application allows users to:
- Browse developers
- Browse projects
- Explore technologies and skills
- View developer and project details
- Search and filter connected entities
- Explore graph relationships visually
- Navigate multi-hop relationships between entities
The core idea is to make relationships first-class data rather than treating them as secondary joins.
A relational database can represent this domain, but many of the application's most interesting questions require traversing multiple relationships.
For example:
Which technologies are connected to a developer through projects that belong to a particular domain?
A graph query can traverse these relationships directly:
Developer
↓ WORKED_ON
Project
↓ USES
Technology
This becomes increasingly valuable as the number of relationships grows.
DevGraph therefore uses CognoDB Cloud as the graph layer and the official Neo4j JavaScript driver to communicate with it using openCypher over the Bolt protocol.
- React
- TypeScript
- Vite
- Tailwind CSS
- React Router
- TanStack Query
- Lucide React
- React Flow
- Node.js
- Express
- TypeScript
- Official Neo4j JavaScript driver
- Zod
- Helmet
- CORS
- dotenv
- CognoDB Cloud
- openCypher
- Bolt protocol
Browser
│
▼
React + Vite
│
│ REST API
▼
Express API
│
▼
Service Layer
│
▼
Neo4j JavaScript Driver
│
│ Bolt / openCypher
▼
CognoDB Cloud
The frontend never connects directly to CognoDB.
Database credentials remain exclusively on the backend.
┌──────────────┐
│ Company │
└──────┬───────┘
│
WORKS_AT
│
▼
┌──────────────┐ ┌──────────────┐
│ Developer │─────────▶│ Project │
└──────┬───────┘ WORKED_ON└──────┬───────┘
│ │
│ KNOWS │ USES
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Technology │◀────────▶│ Skill │
└──────┬───────┘ RELATED_TO└──────────────┘
│
│
▼
┌──────────────┐
│ Domain │
└──────────────┘
DeveloperProjectTechnologySkillCompanyDomain
DEVELOPER -[:WORKED_ON]-> PROJECT
DEVELOPER -[:KNOWS]-> TECHNOLOGY
DEVELOPER -[:HAS_SKILL]-> SKILL
PROJECT -[:USES]-> TECHNOLOGY
PROJECT -[:BELONGS_TO]-> DOMAIN
PROJECT -[:BUILT_FOR]-> COMPANY
TECHNOLOGY -[:RELATED_TO]-> TECHNOLOGY
DEVELOPER -[:WORKS_AT]-> COMPANY
A two-hop traversal can find technologies used by projects worked on by a developer:
MATCH (d:Developer)-[:WORKED_ON]->(p:Project)-[:USES]->(t:Technology)
WHERE d.id = $developerId
RETURN DISTINCT t
ORDER BY t.nameThis demonstrates a multi-hop graph traversal:
Developer
↓
Project
↓
Technology
DevGraph also supports relationship-heavy queries that become cumbersome when represented through many relational join tables.
For example, finding developers who:
- work on projects,
- use a particular technology,
- belong to a particular domain,
- and work for a company connected to those projects.
The graph representation allows these relationships to be traversed directly.
Example:
MATCH
(d:Developer)-[:WORKED_ON]->(p:Project)-[:USES]->(t:Technology),
(p)-[:BELONGS_TO]->(domain:Domain),
(d)-[:WORKS_AT]->(company:Company)
WHERE
t.name = $technology
AND domain.name = $domain
RETURN DISTINCT
d,
p,
t,
domain,
company
ORDER BY d.nameAll user-provided values are passed as parameters rather than concatenated into Cypher.
The backend follows a layered architecture:
Route
↓
Controller
↓
Service
↓
Cypher Query
↓
Neo4j Driver
↓
CognoDB
Database queries are intentionally kept out of controllers.
This keeps HTTP handling, business logic, and database access separated and easier to maintain.
devgraph/
├── client/
│ ├── src/
│ ├── public/
│ ├── package.json
│ └── ...
│
├── server/
│ ├── src/
│ ├── package.json
│ └── ...
│
├── docs/
│ └── ...
│
├── README.md
├── package.json
└── LICENSE
- Node.js 22+
- npm
- CognoDB Cloud account
git clone https://github.com/Mathew-code01/devgraph.git
cd devgraphcd client
npm installOpen another terminal:
cd server
npm installCreate:
server/.env
Add the CognoDB connection details provided by CognoDB Cloud.
Example:
COGNODB_URI=bolt+s://your-instance-id.databases.cognodb.cloud
COGNODB_USERNAME=cognodb
COGNODB_PASSWORD=your-passwordDo not commit this file.
Create:
client/.env
Example:
VITE_API_URL=http://localhost:5000Use the actual API variable name defined by the frontend configuration.
cd server
npm run devcd client
npm run devThe frontend will then be available through the Vite development server.
- Create an account at CognoDB Cloud.
- Create a free C0 instance.
- Copy the generated Bolt connection URI.
- Save the generated
cognodbpassword securely. - Add the credentials to the backend environment variables.
- Run the project's seed script.
The database password should never be committed to Git or exposed to the frontend.
The repository contains a seed script for loading realistic developer ecosystem data into CognoDB.
The seed data includes relationships between:
- Developers
- Projects
- Technologies
- Skills
- Companies
- Domains
The dataset is intentionally sized for the CognoDB free tier while still providing enough relationships to demonstrate meaningful graph traversal.
The backend handles database failures gracefully rather than exposing raw database errors to users.
The application provides:
- Loading states
- Empty states
- Error states
- API failure handling
- Database connection failure handling
The React application is deployed to Vercel.
Vercel configuration:
Root Directory: client
Framework: Vite
Build Command: npm run build
Output Directory: dist
The frontend receives only the public API URL through a Vite environment variable.
The Express API is deployed to Render.
Render configuration:
Root Directory: server
Build Command: npm install && npm run build
Start Command: npm start
CognoDB credentials are configured as Render environment variables and are never exposed to the browser.
Add the dashboard screenshot here:
docs/screenshots/dashboard.png
Add the developer explorer screenshot here:
docs/screenshots/developers.png
Add the project explorer screenshot here:
docs/screenshots/projects.png
Add the graph visualization screenshot here:
docs/screenshots/graph.png
- CognoDB Cloud instance
- Environment variables
- Official Neo4j driver
- Graph data model
- Graph model documented
- Seed data
- Seed script
- Parameterized Cypher queries
- Multi-hop traversal
- Relationally awkward graph query
- Functional frontend
- Loading states
- Empty states
- Error states
- Responsive UI
- Graceful database failure handling
- README
- Architecture documentation
- Final screenshots
- GitHub repository
- Hosted demo
- Screen recording
- Submission email
Database credentials are stored exclusively in environment variables.
The frontend has no access to:
COGNODB_URI
COGNODB_USERNAME
COGNODB_PASSWORD
All database access is performed by the backend API.
Mathew Oloyede
GitHub: https://github.com/Mathew-code01