A personal social graph tool for mapping and analyzing your relationships. You add people as nodes, connect them with weighted edges, tag them, and attach custom properties. A graph analytics engine surfaces metrics like betweenness centrality, clustering coefficients, and bridge nodes to help you understand the structure of your network.
- Frontend: React + TypeScript (Vite)
- Backend: Node.js + Express + TypeScript
- Database: SQLite via better-sqlite3
- Graph analytics: Graphology
socio/
backend/ Express API, SQLite schema, graph algorithms
frontend/ React app
cd backend
npm install
npm run devRuns on http://localhost:3001 by default.
cd frontend
npm install
npm run dev| Method | Route | Description |
|---|---|---|
| GET | /api/nodes |
List all nodes with tags and properties |
| POST | /api/nodes |
Create a node |
| PATCH | /api/nodes/:id |
Update a node |
| DELETE | /api/nodes/:id |
Delete a node |
| GET | /api/edges |
List all edges |
| POST | /api/edges |
Create an edge (strength 1-5) |
| PATCH | /api/edges/:id |
Update edge strength |
| DELETE | /api/edges/:id |
Delete an edge |
| GET | /api/tags |
List all tags with usage counts |
| GET | /api/graph/stats |
Graph analytics for all nodes |
| GET | /api/me |
Get the self node |
| PUT | /api/me |
Create or update the self node |
- Nodes represent people. Each node has a name, optional notes, tags, and arbitrary key/value properties. One node can be marked as
is_selfto represent you. - Edges are directed connections between nodes with a strength value from 1 to 5.
- Tags are shared across nodes and support case-insensitive matching.
The /api/graph/stats endpoint returns per-node metrics computed via Graphology:
- Degree (in, out, total)
- Clustering coefficient
- Betweenness centrality (normalized)
- Bridge node detection (nodes whose removal disconnects the graph)
- Network density