AutomationFlowsDevOps › Display Project Data on Smashing Dashboard

Display Project Data on Smashing Dashboard

Original n8n title: Display Project Data on a Smashing Dashboard

Display Project Data On A Smashing Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.

Cron / scheduled trigger★★★★☆ complexity24 nodesHTTP RequestGitHub
DevOps Trigger: Cron / scheduled Nodes: 24 Complexity: ★★★★☆ Added:

This workflow follows the GitHub → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "position": [
        -290,
        180
      ],
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Dashboard Configuration",
      "type": "n8n-nodes-base.set",
      "color": "#FF0000",
      "notes": "Update project settings",
      "position": [
        -10,
        180
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "dashboardHostname",
              "value": "http://192.168.0.14:8080"
            },
            {
              "name": "dashboardAuthToken",
              "value": "n8n-rocks!"
            },
            {
              "name": "product_hunt_post_id",
              "value": "170391"
            },
            {
              "name": "npm_package",
              "value": "n8n"
            },
            {
              "name": "docker_name",
              "value": "n8nio"
            },
            {
              "name": "docker_repository",
              "value": "n8n"
            },
            {
              "name": "github_owner",
              "value": "n8n-io"
            },
            {
              "name": "github_repo",
              "value": "n8n"
            }
          ]
        },
        "options": {}
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "name": "Retrieve Docker Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        260,
        300
      ],
      "parameters": {
        "url": "=https://hub.docker.com/v2/repositories/{{$node[\"Dashboard Configuration\"].json[\"docker_name\"]}}/{{$node[\"Dashboard Configuration\"].json[\"docker_repository\"]}}",
        "options": {},
        "queryParametersUi": {
          "parameter": []
        },
        "headerParametersUi": {
          "parameter": [
            {
              "name": "User-Agent",
              "value": "n8n"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Docker Pulls",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        630,
        220
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/docker_pulls",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage Docker Data\"].json[\"pull_count\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "Docker Stars",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        630,
        400
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/docker_stars",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage Docker Data\"].json[\"star_count\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "Retrieve npm Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        250,
        50
      ],
      "parameters": {
        "url": "=https://api.npms.io/v2/package/{{$node[\"Dashboard Configuration\"].json[\"npm_package\"]}}",
        "options": {},
        "headerParametersUi": {
          "parameter": [
            {
              "name": "User-Agent",
              "value": "n8n"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "GitHub Watchers",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        820,
        640
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_watchers",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage GitHub Data\"].json[\"subscribers_count\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "GitHub Forks",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        820,
        800
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_forks",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage GitHub Data\"].json[\"forks_count\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "GitHub Open Issues ",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        620,
        860
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_open_issues",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage GitHub Data\"].json[\"open_issues_count\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "GitHub Stars",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        620,
        560
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_stars",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage GitHub Data\"].json[\"stargazers_count\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "npm Maintenance",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        830,
        -90
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_maintenance",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "value",
              "value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"detail\"][\"maintenance\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "npm Popularity",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1030,
        0
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_popularity",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "value",
              "value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"detail\"][\"popularity\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "npm Quality",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1030,
        150
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_quality",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "value",
              "value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"detail\"][\"quality\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "npm Final",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        830,
        190
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_final",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "value",
              "value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"final\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "Product Hunt Rating",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        630,
        -510
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_rating",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "value",
              "value": "={{$node[\"Retrieve Product Hunt Data\"].json[\"data\"][\"post\"][\"reviewsRating\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "Product Hunt Reviews",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        830,
        -410
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_reviews",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage Product Hunt Data\"].json[\"data\"][\"post\"][\"reviewsCount\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "Product Hunt Votes",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        830,
        -260
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_votes",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage Product Hunt Data\"].json[\"data\"][\"post\"][\"votesCount\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "Product Hunt Comments",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        630,
        -210
      ],
      "parameters": {
        "url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_comments",
        "options": {},
        "requestMethod": "POST",
        "bodyParametersUi": {
          "parameter": [
            {
              "name": "auth_token",
              "value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
            },
            {
              "name": "current",
              "value": "={{$node[\"Massage Product Hunt Data\"].json[\"data\"][\"post\"][\"commentsCount\"]}}"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "name": "GitHub",
      "type": "n8n-nodes-base.github",
      "color": "#FF0000",
      "position": [
        250,
        710
      ],
      "parameters": {
        "owner": "={{$node[\"Dashboard Configuration\"].json[\"github_owner\"]}}",
        "resource": "repository",
        "operation": "get",
        "repository": "={{$node[\"Dashboard Configuration\"].json[\"github_repo\"]}}"
      },
      "credentials": {
        "githubApi": "<your credential>"
      },
      "typeVersion": 1
    },
    {
      "name": "Retrieve Product Hunt Data",
      "type": "n8n-nodes-base.httpRequest",
      "color": "#FF0000",
      "notes": "Update authorization token",
      "position": [
        250,
        -360
      ],
      "parameters": {
        "url": "https://api.producthunt.com/v2/api/graphql",
        "options": {},
        "requestMethod": "POST",
        "queryParametersUi": {
          "parameter": [
            {
              "name": "query",
              "value": "={\n  post(id: {{$node[\"Dashboard Configuration\"].json[\"product_hunt_post_id\"]}}) {\n    commentsCount\n    votesCount\n    reviewsCount\n    reviewsRating\n    name\n  }\n}"
            }
          ]
        },
        "headerParametersUi": {
          "parameter": [
            {
              "name": "User-Agent",
              "value": "n8n"
            },
            {
              "name": "authorization",
              "value": "Bearer <Enter Product Hunt token here>"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "name": "Massage npm Data",
      "type": "n8n-nodes-base.function",
      "position": [
        440,
        50
      ],
      "parameters": {
        "functionCode": "items[0].json.score.detail.maintenance = parseFloat(items[0].json.score.detail.maintenance.toFixed(2));\nitems[0].json.score.detail.popularity= parseFloat(items[0].json.score.detail.popularity.toFixed(2));\nitems[0].json.score.detail.quality= parseFloat(items[0].json.score.detail.quality.toFixed(2));\nitems[0].json.score.final= parseFloat(items[0].json.score.final.toFixed(2));\n\nreturn items;"
      },
      "typeVersion": 1
    },
    {
      "name": "Massage Product Hunt Data",
      "type": "n8n-nodes-base.function",
      "position": [
        440,
        -360
      ],
      "parameters": {
        "functionCode": "items[0].json.data.post.commentsCount = items[0].json.data.post.commentsCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.data.post.votesCount= items[0].json.data.post.votesCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.data.post.reviewsCount= items[0].json.data.post.reviewsCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\nreturn items;\n"
      },
      "typeVersion": 1
    },
    {
      "name": "Massage Docker Data",
      "type": "n8n-nodes-base.function",
      "position": [
        460,
        300
      ],
      "parameters": {
        "functionCode": "items[0].json.star_count = items[0].json.star_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.pull_count = items[0].json.pull_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\nreturn items;\n"
      },
      "typeVersion": 1
    },
    {
      "name": "Massage GitHub Data",
      "type": "n8n-nodes-base.function",
      "position": [
        450,
        710
      ],
      "parameters": {
        "functionCode": "items[0].json.stargazers_count = items[0].json.stargazers_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.subscribers_count = items[0].json.subscribers_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.forks_count = items[0].json.forks_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.open_issues_count = items[0].json.open_issues_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\nreturn items;"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Cron": {
      "main": [
        [
          {
            "node": "Dashboard Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub": {
      "main": [
        [
          {
            "node": "Massage GitHub Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Massage npm Data": {
      "main": [
        [
          {
            "node": "npm Maintenance",
            "type": "main",
            "index": 0
          },
          {
            "node": "npm Quality",
            "type": "main",
            "index": 0
          },
          {
            "node": "npm Popularity",
            "type": "main",
            "index": 0
          },
          {
            "node": "npm Final",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve npm Data": {
      "main": [
        [
          {
            "node": "Massage npm Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Massage Docker Data": {
      "main": [
        [
          {
            "node": "Docker Stars",
            "type": "main",
            "index": 0
          },
          {
            "node": "Docker Pulls",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Massage GitHub Data": {
      "main": [
        [
          {
            "node": "GitHub Stars",
            "type": "main",
            "index": 0
          },
          {
            "node": "GitHub Watchers",
            "type": "main",
            "index": 0
          },
          {
            "node": "GitHub Forks",
            "type": "main",
            "index": 0
          },
          {
            "node": "GitHub Open Issues ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Docker Data": {
      "main": [
        [
          {
            "node": "Massage Docker Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dashboard Configuration": {
      "main": [
        [
          {
            "node": "Retrieve Product Hunt Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Retrieve npm Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Retrieve Docker Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "GitHub",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Massage Product Hunt Data": {
      "main": [
        [
          {
            "node": "Product Hunt Rating",
            "type": "main",
            "index": 0
          },
          {
            "node": "Product Hunt Reviews",
            "type": "main",
            "index": 0
          },
          {
            "node": "Product Hunt Votes",
            "type": "main",
            "index": 0
          },
          {
            "node": "Product Hunt Comments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Product Hunt Data": {
      "main": [
        [
          {
            "node": "Massage Product Hunt Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

How this works

Visualise your open-source project's performance metrics effortlessly on a Smashing dashboard, gaining instant insights into Docker pulls, stars, npm downloads, GitHub watchers, and forks without manual tracking. This workflow suits developers and project maintainers who need real-time visibility into community engagement to inform updates and promotions. It begins with a scheduled cron trigger that fetches data via HTTP requests from GitHub and other APIs, processes it, and pushes the results to your Smashing display for a dynamic overview.

Use this workflow for daily or hourly monitoring of project popularity in a self-hosted setup with Smashing already running. Avoid it if you require ad-hoc queries or integrations beyond HTTP and GitHub, such as direct database pulls. Common variations include adjusting the cron schedule for more frequent updates or adding filters to highlight specific metrics like recent changes in stars.

About this workflow

Display Project Data On A Smashing Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More DevOps workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

DevOps

Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.

HTTP Request, GitHub
DevOps

Backup Workflows To Github. Uses github, httpRequest. Scheduled trigger; 11 nodes.

GitHub, HTTP Request
DevOps

Code Github. Uses manualTrigger, stickyNote, n8n, httpRequest. Event-driven trigger; 25 nodes.

n8n, HTTP Request, GitHub +1
DevOps

Who is this for? This template is ideal for n8n administrators, automation engineers, and DevOps teams who want to maintain bidirectional synchronization between their n8n workflows and GitHub reposit

n8n, GitHub
DevOps

Code Github. Uses manualTrigger, stickyNote, httpRequest, noOp. Event-driven trigger; 24 nodes.

HTTP Request, GitHub, Execute Command +1