# neru-33/djusw-reposcope architecture

> Architecture diagram of the GitHub repository neru-33/djusw-reposcope, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/neru-33/djusw-reposcope
- Repository: https://github.com/neru-33/djusw-reposcope

## Overview

RepoScope is a GitHub activity-tracking product: its worker accepts queued GitHub event messages, processes installation and repository lifecycle changes, and records eligible commit, pull-request, and issue activity. The repository also contains a Java API foundation and a React screen-flow frontend; the sampled frontend screens are navigation placeholders, not the documented product workflows fully implemented. The graph preserves the worker’s evidenced processing stages and the frontend/API foundations. Source excerpts do not establish deployment wiring or the full product API, so those relationships are omitted.

Main entry points: [`backend/worker/events.py`](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/events.py) (Event processor), [`backend/worker/__main__.py`](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/__main__.py) (Worker runtime), [`frontend/src/router.tsx`](https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/router.tsx) (Screen routes), [`backend/worker/queue.py`](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/queue.py) (Message queue adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_web_entry["React entry<br/>[main.tsx]"]
  node_route_table["Screen routes<br/>[router.tsx]"]
  node_screen_catalog["Screen catalog<br/>[screens.ts]"]
  node_screen_view["Screen placeholder<br/>[ScreenPage.tsx]"]
  node_api_client["API client<br/>[client.ts]"]
end

subgraph group_api["API and security"]
  node_api_server["Spring API"]
  node_security_config["Security configuration"]
  node_current_user["Current user service"]
  node_api_errors["API error handling"]
end

subgraph group_worker["GitHub event worker"]
  node_worker_runtime["Worker runtime<br/>[__main__.py]"]
  node_queue_adapter["Message queue adapter<br/>[queue.py]"]
  node_message_parser["Message parsing<br/>[message.py]"]
  node_github_client["GitHub integration<br/>[github.py]"]
  node_event_processor["Event processor<br/>[events.py]"]
  node_activity_rules["Activity processing<br/>[activities.py]"]
  node_worker_logging["Worker logging<br/>[log.py]"]
end

subgraph group_storage["Persistence"]
  node_db_access["Database access<br/>[db.py]"]
  node_postgres[("PostgreSQL")]
  node_schema_migration["Initial schema<br/>[V1__m1_init.sql]"]
end

node_browser_user(("Browser user"))

node_browser_user -.->|"uses"| node_web_entry
node_web_entry -->|"mounts"| node_route_table
node_route_table -->|"builds routes"| node_screen_catalog
node_route_table -->|"renders"| node_screen_view
node_screen_view -->|"reads screens"| node_screen_catalog
node_api_client -.->|"calls API"| node_postgres
node_worker_runtime -->|"starts"| node_queue_adapter
node_worker_runtime -->|"configures"| node_db_access
node_worker_runtime -->|"initializes"| node_event_processor
node_worker_runtime -->|"initializes"| node_github_client
node_queue_adapter -->|"parses messages"| node_message_parser
node_queue_adapter -->|"emits logs"| node_worker_logging
node_event_processor -->|"uses timestamps"| node_message_parser
node_event_processor -->|"dispatches events"| node_activity_rules
node_event_processor -->|"emits logs"| node_worker_logging
node_event_processor -.->|"writes event state"| node_postgres
node_event_processor -.->|"looks up repos"| node_github_client
node_activity_rules -->|"normalizes timestamps"| node_message_parser
node_activity_rules -.->|"reads and writes"| node_postgres
node_db_access -.->|"connects"| node_postgres
node_schema_migration -.->|"defines schema"| node_postgres
node_security_config -->|"configures"| node_current_user
node_security_config -->|"uses error response"| node_api_errors
node_api_errors -.->|"translates failures"| node_current_user

click node_web_entry "https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/main.tsx"
click node_route_table "https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/router.tsx"
click node_screen_catalog "https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/screens.ts"
click node_screen_view "https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/pages/ScreenPage.tsx"
click node_api_client "https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/api/client.ts"
click node_api_server "https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/ApiApplication.java"
click node_security_config "https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/security/SecurityConfig.java"
click node_current_user "https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/security/CurrentUserService.java"
click node_api_errors "https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/error/ApiExceptionHandler.java"
click node_worker_runtime "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/__main__.py"
click node_queue_adapter "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/queue.py"
click node_message_parser "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/message.py"
click node_github_client "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/github.py"
click node_event_processor "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/events.py"
click node_activity_rules "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/activities.py"
click node_worker_logging "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/log.py"
click node_db_access "https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/db.py"
click node_schema_migration "https://github.com/neru-33/djusw-reposcope/blob/main/backend/migrations/V1__m1_init.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web_entry,node_route_table,node_screen_catalog,node_screen_view,node_api_client,node_browser_user toneBlue
class node_api_server,node_security_config,node_current_user,node_api_errors toneAmber
class node_worker_runtime,node_queue_adapter,node_message_parser,node_github_client,node_event_processor,node_activity_rules,node_worker_logging toneMint
class node_db_access,node_postgres,node_schema_migration toneRose
```

## Components

### Web interface

- [React entry](https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/main.tsx): `frontend/src/main.tsx`
- [Screen routes](https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/router.tsx): `frontend/src/router.tsx`
- [Screen catalog](https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/screens.ts): `frontend/src/screens.ts`
- [Screen placeholder](https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/pages/ScreenPage.tsx): `frontend/src/pages/ScreenPage.tsx`
- [API client](https://github.com/neru-33/djusw-reposcope/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`

### API and security

- [Spring API](https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/ApiApplication.java): `backend/api/src/main/java/com/djusw/api/ApiApplication.java`
- [Security configuration](https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/security/SecurityConfig.java): `backend/api/src/main/java/com/djusw/api/security/SecurityConfig.java`
- [Current user service](https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/security/CurrentUserService.java): `backend/api/src/main/java/com/djusw/api/security/CurrentUserService.java`
- [API error handling](https://github.com/neru-33/djusw-reposcope/blob/main/backend/api/src/main/java/com/djusw/api/error/ApiExceptionHandler.java): `backend/api/src/main/java/com/djusw/api/error/ApiExceptionHandler.java`

### GitHub event worker

- [Worker runtime](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/__main__.py): `backend/worker/__main__.py`
- [Message queue adapter](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/queue.py): `backend/worker/queue.py`
- [Message parsing](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/message.py): `backend/worker/message.py`
- [GitHub integration](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/github.py): `backend/worker/github.py`
- [Event processor](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/events.py): `backend/worker/events.py`
- [Activity processing](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/activities.py): `backend/worker/activities.py`
- [Worker logging](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/log.py): `backend/worker/log.py`

### Persistence

- [Database access](https://github.com/neru-33/djusw-reposcope/blob/main/backend/worker/db.py): `backend/worker/db.py`
- **PostgreSQL**
- [Initial schema](https://github.com/neru-33/djusw-reposcope/blob/main/backend/migrations/V1__m1_init.sql): `backend/migrations/V1__m1_init.sql`

### Other components

- **Browser user**

## Connections

- Browser user → React entry: uses
- React entry → Screen routes: mounts (evidence: `frontend/src/main.tsx`)
- Screen routes → Screen catalog: builds routes (evidence: `frontend/src/router.tsx`)
- Screen routes → Screen placeholder: renders (evidence: `frontend/src/router.tsx`)
- Screen placeholder → Screen catalog: reads screens (evidence: `frontend/src/pages/ScreenPage.tsx`)
- API client → PostgreSQL: calls API
- Worker runtime → Message queue adapter: starts (evidence: `backend/worker/__main__.py`)
- Worker runtime → Database access: configures (evidence: `backend/worker/__main__.py`)
- Worker runtime → Event processor: initializes (evidence: `backend/worker/__main__.py`)
- Worker runtime → GitHub integration: initializes (evidence: `backend/worker/__main__.py`)
- Message queue adapter → Message parsing: parses messages (evidence: `backend/worker/queue.py`)
- Message queue adapter → Worker logging: emits logs (evidence: `backend/worker/queue.py`)
- Event processor → Message parsing: uses timestamps (evidence: `backend/worker/events.py`)
- Event processor → Activity processing: dispatches events (evidence: `backend/worker/events.py`)
- Event processor → Worker logging: emits logs (evidence: `backend/worker/events.py`)
- Event processor → PostgreSQL: writes event state
- Event processor → GitHub integration: looks up repos
- Activity processing → Message parsing: normalizes timestamps (evidence: `backend/worker/activities.py`)
- Activity processing → PostgreSQL: reads and writes
- Database access → PostgreSQL: connects
- Initial schema → PostgreSQL: defines schema
- Security configuration → Current user service: configures (evidence: `backend/api/src/main/java/com/djusw/api/security/SecurityConfig.java`)
- Security configuration → API error handling: uses error response (evidence: `backend/api/src/main/java/com/djusw/api/security/SecurityConfig.java`)
- API error handling → Current user service: translates failures
