# fatkhurroyyan/linktrack-app architecture

> Architecture diagram of the GitHub repository fatkhurroyyan/linktrack-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fatkhurroyyan/linktrack-app
- Repository: https://github.com/fatkhurroyyan/linktrack-app

## Overview

LinkSense AI collects and curates links from Google Drive, GitHub, and general websites: a user submits one or more URLs, the backend extracts resource metadata, AI assigns categories and summaries, and the result is stored for search, management, analytics, and filtered document export. The graph reflects documented capabilities and sampled calls; orchestration and analytics internals are represented only at their supported source paths.

Main entry points: [`frontend/src/App.tsx`](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/App.tsx) (Dashboard), [`backend/app/services/orchestrator.py`](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/orchestrator.py) (Ingestion orchestrator), [`backend/app/database/session.py`](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/database/session.py) (Database session), [`frontend/src/services/api.ts`](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/services/api.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Web experience"]
  node_dashboard["Dashboard<br/>[App.tsx]"]
  node_ingestion_ui["Link input<br/>[IngestionBar.tsx]"]
  node_batch_ui["Batch input"]
  node_api_client["API client<br/>[api.ts]"]
  node_library_ui["Search and manage<br/>[LinkTable.tsx]"]
  node_category_ui["Category controls"]
  node_stats_ui["Dashboard statistics<br/>[StatsOverview.tsx]"]
  node_export_ui["Export controls<br/>[ExportDropdown.tsx]"]
end

subgraph group_ingestion["Ingestion and curation"]
  node_link_api["Link API<br/>[routes_links.py]"]
  node_orchestrator["Ingestion orchestrator<br/>[orchestrator.py]"]
  node_gdrive["Drive extractor"]
  node_github["GitHub extractor"]
  node_web["Web scraper<br/>[web_scraper.py]"]
  node_ai["AI categorization<br/>[ai_service.py]"]
end

subgraph group_library["Resource library"]
  node_link_store[("Link database<br/>[link_item.py]")]
  node_db_session["Database session<br/>[session.py]"]
  node_category_api["Category management"]
end

subgraph group_reporting["Analytics and export"]
  node_analytics_api["Analytics API"]
  node_export_api["Export API<br/>[routes_export.py]"]
  node_export_service["Document generator<br/>[export_service.py]"]
end

node_user(("User"))
node_gemini{{"Gemini API"}}
node_drive_api{{"Google Drive API"}}
node_github_api{{"GitHub API"}}
node_websites{{"Public websites"}}
node_files["Excel, CSV, PDF"]

node_user -->|"uses"| node_dashboard
node_dashboard -->|"presents"| node_ingestion_ui
node_dashboard -->|"presents"| node_batch_ui
node_ingestion_ui -->|"submits URL"| node_dashboard
node_batch_ui -->|"submits URLs"| node_dashboard
node_dashboard -->|"requests"| node_api_client
node_api_client -->|"calls"| node_link_api
node_link_api -->|"processes links"| node_orchestrator
node_orchestrator -->|"extracts Drive"| node_gdrive
node_orchestrator -->|"extracts GitHub"| node_github
node_orchestrator -->|"scrapes websites"| node_web
node_gdrive -.->|"reads metadata"| node_drive_api
node_github -.->|"reads repository"| node_github_api
node_web -->|"fetches pages"| node_websites
node_orchestrator -->|"categorizes content"| node_ai
node_ai -.->|"requests structured analysis"| node_gemini
node_orchestrator -->|"persists results"| node_db_session
node_db_session -->|"reads and writes"| node_link_store
node_dashboard -->|"shows resources"| node_library_ui
node_library_ui -->|"changes filters"| node_dashboard
node_category_ui -->|"manages categories"| node_dashboard
node_dashboard -->|"requests categories"| node_category_api
node_category_api -->|"reads and updates"| node_db_session
node_dashboard -->|"requests statistics"| node_analytics_api
node_analytics_api -->|"queries metrics"| node_db_session
node_dashboard -->|"displays metrics"| node_stats_ui
node_dashboard -->|"presents export"| node_export_ui
node_export_ui -->|"selects format"| node_dashboard
node_dashboard -->|"requests export"| node_api_client
node_api_client -->|"calls"| node_export_api
node_export_api -->|"loads filtered links"| node_db_session
node_export_api -->|"generates document"| node_export_service
node_export_service -->|"returns file"| node_files

click node_dashboard "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/App.tsx"
click node_ingestion_ui "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/IngestionBar.tsx"
click node_batch_ui "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/BatchIngestionModal.tsx"
click node_api_client "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/services/api.ts"
click node_link_api "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_links.py"
click node_orchestrator "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/orchestrator.py"
click node_gdrive "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/extractors/gdrive_extractor.py"
click node_github "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/extractors/github_extractor.py"
click node_web "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/extractors/web_scraper.py"
click node_ai "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/ai_service.py"
click node_link_store "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/models/link_item.py"
click node_db_session "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/database/session.py"
click node_category_api "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_categories.py"
click node_library_ui "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/LinkTable.tsx"
click node_category_ui "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/CategoryManageModal.tsx"
click node_analytics_api "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_analytics.py"
click node_stats_ui "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/StatsOverview.tsx"
click node_export_api "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_export.py"
click node_export_service "https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/export_service.py"
click node_export_ui "https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/ExportDropdown.tsx"

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_dashboard,node_ingestion_ui,node_batch_ui,node_api_client,node_library_ui,node_category_ui,node_stats_ui,node_export_ui,node_user toneBlue
class node_link_api,node_orchestrator,node_gdrive,node_github,node_web,node_ai toneAmber
class node_link_store,node_db_session,node_category_api,node_gemini,node_drive_api,node_github_api toneMint
class node_analytics_api,node_export_api,node_export_service toneRose
class node_websites,node_files toneIndigo
```

## Components

### Web experience

- [Dashboard](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Link input](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/IngestionBar.tsx): `frontend/src/components/IngestionBar.tsx`
- [Batch input](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/BatchIngestionModal.tsx): `frontend/src/components/BatchIngestionModal.tsx`
- [API client](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`
- [Search and manage](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/LinkTable.tsx): `frontend/src/components/LinkTable.tsx`
- [Category controls](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/CategoryManageModal.tsx): `frontend/src/components/CategoryManageModal.tsx`
- [Dashboard statistics](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/StatsOverview.tsx): `frontend/src/components/StatsOverview.tsx`
- [Export controls](https://github.com/fatkhurroyyan/linktrack-app/blob/main/frontend/src/components/ExportDropdown.tsx): `frontend/src/components/ExportDropdown.tsx`

### Ingestion and curation

- [Link API](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_links.py): `backend/app/api/routes_links.py`
- [Ingestion orchestrator](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/orchestrator.py): `backend/app/services/orchestrator.py`
- [Drive extractor](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/extractors/gdrive_extractor.py): `backend/app/extractors/gdrive_extractor.py`
- [GitHub extractor](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/extractors/github_extractor.py): `backend/app/extractors/github_extractor.py`
- [Web scraper](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/extractors/web_scraper.py): `backend/app/extractors/web_scraper.py`
- [AI categorization](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/ai_service.py): `backend/app/services/ai_service.py`

### Resource library

- [Link database](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/models/link_item.py): `backend/app/models/link_item.py`
- [Database session](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/database/session.py): `backend/app/database/session.py`
- [Category management](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_categories.py): `backend/app/api/routes_categories.py`

### Analytics and export

- [Analytics API](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_analytics.py): `backend/app/api/routes_analytics.py`
- [Export API](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/api/routes_export.py): `backend/app/api/routes_export.py`
- [Document generator](https://github.com/fatkhurroyyan/linktrack-app/blob/main/backend/app/services/export_service.py): `backend/app/services/export_service.py`

### Other components

- **User**
- **Gemini API**
- **Google Drive API**
- **GitHub API**
- **Public websites**
- **Excel, CSV, PDF**

## Connections

- User → Dashboard: uses
- Dashboard → Link input: presents
- Dashboard → Batch input: presents
- Link input → Dashboard: submits URL
- Batch input → Dashboard: submits URLs
- Dashboard → API client: requests
- API client → Link API: calls
- Link API → Ingestion orchestrator: processes links
- Ingestion orchestrator → Drive extractor: extracts Drive
- Ingestion orchestrator → GitHub extractor: extracts GitHub
- Ingestion orchestrator → Web scraper: scrapes websites
- Drive extractor → Google Drive API: reads metadata
- GitHub extractor → GitHub API: reads repository
- Web scraper → Public websites: fetches pages
- Ingestion orchestrator → AI categorization: categorizes content
- AI categorization → Gemini API: requests structured analysis
- Ingestion orchestrator → Database session: persists results
- Database session → Link database: reads and writes
- Dashboard → Search and manage: shows resources
- Search and manage → Dashboard: changes filters
- Category controls → Dashboard: manages categories
- Dashboard → Category management: requests categories
- Category management → Database session: reads and updates
- Dashboard → Analytics API: requests statistics
- Analytics API → Database session: queries metrics
- Dashboard → Dashboard statistics: displays metrics
- Dashboard → Export controls: presents export
- Export controls → Dashboard: selects format
- Dashboard → API client: requests export
- API client → Export API: calls
- Export API → Database session: loads filtered links
- Export API → Document generator: generates document
- Document generator → Excel, CSV, PDF: returns file
