Open-source-intelligence (OSINT) cockpit for mapping entities, relations, sources and actions as interactive network graphs and geospatial maps. [Live Demo]
Built by Andrey Bulezyuk โ AI Engineer & founder of N-13 Analytics.
N-13 is built for professionals who turn scattered open-source information into a clear, connected picture:
- ๐ฐ Journalists & newsrooms โ map the people, companies and money trails behind a story.
- ๐ต๏ธ Private & corporate investigators โ due diligence, asset tracing, link analysis.
- ๐ฎ Police & law-enforcement investigative units โ visualize networks during casework.
- ๐ฐ๏ธ OSINT officers โ collect, connect and cross-reference public-source intelligence.
- ๐ง Intelligence & threat analysts โ entity/relationship mapping, timelines, situational pictures.
- ๐ Researchers & academics โ study networks, disinformation campaigns and public records.
- Build an entityโrelationship graph of an organization and the people around it.
- Trace connections between individuals, companies and sources across many documents.
- Attach sources to every claim so findings stay auditable and shareable.
- Plot entities on a map to see where activity concentrates geographically.
- Follow a network's evolution over time with the graph timeline.
Intended for lawful, ethical research and investigation only โ see the Disclaimer.
Get running in one or two lines.
With Docker (recommended):
docker compose upThen open http://localhost:9000. That's it โ no config required.
Or with Node.js (requires Node ^20):
npm install && npm run devThe app boots with sensible defaults and runs even with no configuration. Features that need external services (the Mapbox map, reCAPTCHA) simply degrade gracefully until you add keys โ see Configuration. By default it talks to a backend on
http://localhost:8000(Docker: your host's:8000).
| Intelligence dashboard | Entity detail dialog |
|---|---|
![]() |
![]() |
| Create-entity dialog | Pricing |
![]() |
![]() |
- ๐ธ๏ธ Interactive network graphs โ Cytoscape.js with fcose / cose-bilkent layouts, live edge-drawing, context menus and one-click JPG export.
- ๐บ๏ธ Geospatial view โ Mapbox GL map linked to the entities in the graph.
- ๐งฉ Entities, Relations, Sources, Actions โ a fully typed domain model backed by Pinia-ORM.
- ๐ Fast entity search and recently-created feeds for entities, relations and sources.
- ๐ช Sidebar / dialog workflows โ detail and create forms open as Quasar dialogs on demand.
- ๐ JWT auth with transparent token refresh via an Axios interceptor.
- ๐ Sentry error tracking, tracing and session replay in production.
| Layer | Tech |
|---|---|
| Framework | Vue 3 (<script setup>, Composition API) + TypeScript |
| UI | Quasar 2 (SSR-capable via @quasar/app-vite) |
| State | Pinia + Pinia-ORM |
| Graphs | Cytoscape.js (fcose, cose-bilkent, edgehandles, cxtmenu) |
| Maps | Mapbox GL |
| Data / HTTP | Axios โ Django REST Framework |
| Tooling | Vite, ESLint, Prettier, vue-tsc |
| Testing | Playwright (e2e), Cypress |
| Monitoring | Sentry |
Everything is optional. Copy .env.example to .env and set only what you need:
| Variable | Default | Purpose |
|---|---|---|
VITE_API_BASE_URL |
http://localhost:8000/api/v1 |
Backend REST API base URL. Set this to point at your own backend. |
VITE_MAPBOX_TOKEN |
(empty โ map disabled) | Mapbox GL access token; enables the geospatial map panel. |
VITE_RECAPTCHA_KEY |
(empty โ captcha off) | reCAPTCHA v3 site key for auth forms. |
SENTRY_DSN |
built-in public DSN | Sentry error-monitoring endpoint (production only). |
Notes for precise control:
VITE_*values are read at build time. For a production image, pass them as build args (seedocker-compose.prod.yml); for dev they are read from.envor the environment.- Docker โ host backend: inside a container, use
VITE_API_BASE_URL=http://host.docker.internal:8000/api/v1. - Sentry only initializes when
NODE_ENV=production. The DSN is a public client key and is safe to ship; the source-map upload token (.env.sentry-build-plugin) is secret and git-ignored.
# Development (hot reload, http://localhost:9000)
docker compose up
# Production (optimized SPA, http://localhost:8088)
docker compose -f docker-compose.prod.yml up --buildThis builds to a static SPA, so it deploys to any static host. A GitHub Action
(.github/workflows/deploy.yml) auto-deploys to Cloudflare
Pages on every push to main.
To enable it, add these in GitHub โ Settings โ Secrets and variables โ Actions:
| Name | Type | Value |
|---|---|---|
CLOUDFLARE_API_TOKEN |
secret | A Cloudflare token with the Cloudflare Pages : Edit permission |
CLOUDFLARE_ACCOUNT_ID |
secret | Your Cloudflare account ID |
VITE_MAPBOX_TOKEN |
secret | (optional) Mapbox token so the map renders in the deployed build |
VITE_API_BASE_URL |
variable | (optional) Overrides the backend URL |
Manual deploy from your machine:
npm run build && npx wrangler pages deploy dist/spa --project-name n13-frontendnpm run test # Playwright e2e (auto-starts the dev server on :9000)
npm run playwright:open # Playwright UI mode
npm run lint # ESLintSpecs live in tests/ and mock the backend where possible, so they can run without
a live API.
A full breakdown of the architecture, directory layout and coding conventions lives in CLAUDE.md. The short version:
src/
boot/ Quasar boot files (axios, pinia, sentry, head, captcha)
components/ Domain-grouped components (graph/, entity/, source/, account/, ...)
pages/ Route-level views
stores/
models/ Pinia-ORM models
repositories/ API access layer
css/ app.scss + quasar.variables.scss
src-ssr/ SSR server + middlewares
tests/ Playwright e2e specs
This software is provided for research and educational purposes only and is used entirely at your own risk and liability. You are solely responsible for ensuring your use complies with all applicable laws and regulations, including data-protection and privacy law. Neither N-13 Analytics UG nor the author accepts any responsibility or liability for any legal issues, penalties, damages or losses arising from the use or misuse of this software. It is provided "as is", without warranty of any kind.
ยฉ N-13 Analytics UG. All rights reserved. Add a LICENSE file if you intend to release this
under an open-source license. See the Disclaimer above โ use at your
own risk.


