# jasimcm/tinkerspace_digital_calicut architecture

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

- Interactive diagram: https://gitdiagram.com/jasimcm/tinkerspace_digital_calicut
- Repository: https://github.com/jasimcm/tinkerspace_digital_calicut

## Overview

TinkerSpace Calicut is a kiosk display of active makers for the Calicut space. The main workflow fetches check-ins, removes duplicate records, and presents makers in a responsive, paginated card grid alongside a mascot. The display also shows clock and weather information; the mascot has its own pose-selection, playback, and asset-watchdog logic. The graph follows the sampled calls and README capabilities; unsampled component internals are represented only where their role is clear from the tree or documentation.

Main entry points: [`src/components/mascot/TinkerHubMascot.jsx`](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/TinkerHubMascot.jsx) (Mascot display), [`src/App.js`](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/App.js) (App orchestrator), [`src/components/layout/PaginatedCardGrid.jsx`](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/layout/PaginatedCardGrid.jsx) (Paginated grid), [`src/utils/api/weatherService.js`](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/api/weatherService.js) (Weather service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Check-in data"]
  node_checkins[("Check-in API")]
  node_fetch["Fetch records<br/>[fetchData.js]"]
  node_dedupe["Remove duplicates"]
end

subgraph group_display["Kiosk display"]
  node_app["App orchestrator<br/>[App.js]"]
  node_header["Header and clock<br/>[Header.jsx]"]
  node_weather["Weather service<br/>[weatherService.js]"]
end

subgraph group_layout["Grid and cards"]
  node_grid["Paginated grid"]
  node_layout_hook["Responsive layout hook<br/>[useGridLayout.js]"]
  node_grid_rules["Grid rules<br/>[makerGrid.js]"]
  node_user_card["Maker card<br/>[UserCard.jsx]"]
  node_user_info["Maker details<br/>[UserInfo.jsx]"]
end

subgraph group_mascot["Mascot system"]
  node_mascot["Mascot display"]
  node_mascot_policy["Pose policy<br/>[policy.js]"]
  node_mascot_playback["Pose playback<br/>[playback.js]"]
  node_mascot_watchdog["Asset watchdog<br/>[watchdog.js]"]
  node_mascot_manifest["Pose definitions<br/>[manifest.js]"]
end

node_viewer(("Kiosk viewer"))
node_openmeteo[("Open-Meteo")]

node_viewer -->|"views"| node_app
node_app -->|"requests"| node_fetch
node_fetch -->|"fetches check-ins"| node_checkins
node_app -->|"deduplicates"| node_dedupe
node_app -->|"renders"| node_header
node_app -->|"supplies makers"| node_grid
node_header -->|"requests weather"| node_weather
node_mascot -->|"requests weather"| node_weather
node_weather -->|"fetches conditions"| node_openmeteo
node_grid -->|"measures layout"| node_layout_hook
node_layout_hook -->|"selects capacity"| node_grid_rules
node_grid -->|"renders cards"| node_user_card
node_user_card -->|"renders details"| node_user_info
node_mascot -->|"selects poses"| node_mascot_policy
node_mascot -->|"schedules poses"| node_mascot_playback
node_mascot -->|"checks assets"| node_mascot_watchdog
node_mascot -->|"reads definitions"| node_mascot_manifest

click node_app "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/App.js"
click node_fetch "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/api/fetchData.js"
click node_dedupe "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/helpers/removeDuplicates.js"
click node_header "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/layout/Header.jsx"
click node_weather "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/api/weatherService.js"
click node_grid "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/layout/PaginatedCardGrid.jsx"
click node_layout_hook "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/hooks/useGridLayout.js"
click node_grid_rules "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/layout/makerGrid.js"
click node_user_card "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/cards/UserCard.jsx"
click node_user_info "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/userdetails/UserInfo.jsx"
click node_mascot "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/TinkerHubMascot.jsx"
click node_mascot_policy "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/policy.js"
click node_mascot_playback "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/playback.js"
click node_mascot_watchdog "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/watchdog.js"
click node_mascot_manifest "https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/manifest.js"

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_checkins,node_fetch,node_dedupe,node_viewer toneBlue
class node_app,node_header,node_weather,node_openmeteo toneAmber
class node_grid,node_layout_hook,node_grid_rules,node_user_card,node_user_info toneMint
class node_mascot,node_mascot_policy,node_mascot_playback,node_mascot_watchdog,node_mascot_manifest toneRose
```

## Components

### Check-in data

- **Check-in API**
- [Fetch records](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/api/fetchData.js): `src/utils/api/fetchData.js`
- [Remove duplicates](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/helpers/removeDuplicates.js): `src/utils/helpers/removeDuplicates.js`

### Kiosk display

- [App orchestrator](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/App.js): `src/App.js`
- [Header and clock](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/layout/Header.jsx): `src/components/layout/Header.jsx`
- [Weather service](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/api/weatherService.js): `src/utils/api/weatherService.js`

### Grid and cards

- [Paginated grid](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/layout/PaginatedCardGrid.jsx): `src/components/layout/PaginatedCardGrid.jsx`
- [Responsive layout hook](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/hooks/useGridLayout.js): `src/hooks/useGridLayout.js`
- [Grid rules](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/utils/layout/makerGrid.js): `src/utils/layout/makerGrid.js`
- [Maker card](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/cards/UserCard.jsx): `src/components/cards/UserCard.jsx`
- [Maker details](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/userdetails/UserInfo.jsx): `src/components/userdetails/UserInfo.jsx`

### Mascot system

- [Mascot display](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/TinkerHubMascot.jsx): `src/components/mascot/TinkerHubMascot.jsx`
- [Pose policy](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/policy.js): `src/components/mascot/policy.js`
- [Pose playback](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/playback.js): `src/components/mascot/playback.js`
- [Asset watchdog](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/watchdog.js): `src/components/mascot/watchdog.js`
- [Pose definitions](https://github.com/jasimcm/tinkerspace_digital_calicut/blob/main/src/components/mascot/manifest.js): `src/components/mascot/manifest.js`

### Other components

- **Kiosk viewer**
- **Open-Meteo**

## Connections

- Kiosk viewer → App orchestrator: views
- App orchestrator → Fetch records: requests
- Fetch records → Check-in API: fetches check-ins
- App orchestrator → Remove duplicates: deduplicates
- App orchestrator → Header and clock: renders
- App orchestrator → Paginated grid: supplies makers
- Header and clock → Weather service: requests weather
- Mascot display → Weather service: requests weather
- Weather service → Open-Meteo: fetches conditions
- Paginated grid → Responsive layout hook: measures layout
- Responsive layout hook → Grid rules: selects capacity
- Paginated grid → Maker card: renders cards
- Maker card → Maker details: renders details
- Mascot display → Pose policy: selects poses
- Mascot display → Pose playback: schedules poses
- Mascot display → Asset watchdog: checks assets
- Mascot display → Pose definitions: reads definitions
