{"id":22003655,"url":"https://github.com/zs1l3nt/web-next-statify","last_synced_at":"2026-04-11T14:02:01.495Z","repository":{"id":43378856,"uuid":"412853228","full_name":"zS1L3NT/web-next-statify","owner":"zS1L3NT","description":"A website to view your top Spotify listening statistics using the Spotify API","archived":false,"fork":false,"pushed_at":"2024-03-29T07:55:16.000Z","size":2044,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T16:24:15.216Z","etag":null,"topics":["nextjs","react","shadcnui","spotify","tailwind","typescript","vercel"],"latest_commit_sha":null,"homepage":"https://statify.zectan.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zS1L3NT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-02T16:37:59.000Z","updated_at":"2024-03-19T07:55:59.000Z","dependencies_parsed_at":"2024-01-03T08:38:58.603Z","dependency_job_id":"f96a00ef-3d3b-4018-ad25-de6e3000acbc","html_url":"https://github.com/zS1L3NT/web-next-statify","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zS1L3NT/web-next-statify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zS1L3NT%2Fweb-next-statify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zS1L3NT%2Fweb-next-statify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zS1L3NT%2Fweb-next-statify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zS1L3NT%2Fweb-next-statify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zS1L3NT","download_url":"https://codeload.github.com/zS1L3NT/web-next-statify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zS1L3NT%2Fweb-next-statify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31682953,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T13:07:20.380Z","status":"ssl_error","status_checked_at":"2026-04-11T13:06:47.903Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nextjs","react","shadcnui","spotify","tailwind","typescript","vercel"],"created_at":"2024-11-30T00:10:22.485Z","updated_at":"2026-04-11T14:02:01.460Z","avatar_url":"https://github.com/zS1L3NT.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Statify Cover Image](https://res.cloudinary.com/zs1l3nt/image/upload/repositories/web-react-statify.png)\n\n# Statify\n\n![License](https://img.shields.io/github/license/zS1L3NT/web-react-statify?style=for-the-badge) ![Languages](https://img.shields.io/github/languages/count/zS1L3NT/web-react-statify?style=for-the-badge) ![Top Language](https://img.shields.io/github/languages/top/zS1L3NT/web-react-statify?style=for-the-badge) ![Commit Activity](https://img.shields.io/github/commit-activity/y/zS1L3NT/web-react-statify?style=for-the-badge) ![Last commit](https://img.shields.io/github/last-commit/zS1L3NT/web-react-statify?style=for-the-badge)\n\nStatify is a Spotify listening statistics checking website available [here](https://statify.zectan.com). Just sign into your Spotify account and you will be able to see your top tracks, artists and recent tracks. Click on a Track, Artist or Album to view more details about it.\n\n## Motivation\n\nI love looking at my Spotify statistics. I enjoy seeing what track I'm listening to the most across different time periods. I used to use [StatsForSpotify](https://statsforspotify.com) to check my listening history on Spotify. However, the UI looked terrible and it didn't support progressive web applications, meaning I can install on my phone.\n\nBuilding Statify allowed me to view my Spotify listening statistics with a much nicer UI than StatsForSpotify.\n\n## Features\n\n-   Progressive Web Application\n-   Authentication state saves on refresh\n-   Light mode or Dark mode\n-   Top Tracks\n    -   Last Month\n    -   Last 6 Months\n    -   All Time\n-   Top Artists\n    -   Last Month\n    -   Last 6 Months\n    -   All Time\n-   Recently Played\n    -   Last 50\n-   Information about a\n    -   Track\n    -   Artist\n    -   Album\n\n## Usage\n\n```\n$ npm i\n$ npm run dev\n```\n\n## Credits\n\n[@Shockch4rge](https://github.com/Shockch4rge) introduced me to `@reduxjs/toolkit` which improved my productivity in Redux.\nOverlapping elements was simplified for me thanks to [this](https://css-tricks.com/how-to-stack-elements-in-css/) article\n\n## Build with\n\n-   TypeScript\n\t-   TypeScript\n        -   [![@types/luxon](https://img.shields.io/badge/%40types%2Fluxon-%5E3.2.0-red?style=flat-square)](https://npmjs.com/package/@types/luxon/v/3.2.0)\n        -   [![@types/react](https://img.shields.io/badge/%40types%2Freact-%5E18.0.28-red?style=flat-square)](https://npmjs.com/package/@types/react/v/18.0.28)\n        -   [![@types/react-dom](https://img.shields.io/badge/%40types%2Freact--dom-%5E18.0.11-red?style=flat-square)](https://npmjs.com/package/@types/react-dom/v/18.0.11)\n        -   [![@types/react-lazyload](https://img.shields.io/badge/%40types%2Freact--lazyload-%5E3.2.0-red?style=flat-square)](https://npmjs.com/package/@types/react-lazyload/v/3.2.0)\n        -   [![@types/react-redux](https://img.shields.io/badge/%40types%2Freact--redux-%5E7.1.25-red?style=flat-square)](https://npmjs.com/package/@types/react-redux/v/7.1.25)\n        -   [![@types/react-router-dom](https://img.shields.io/badge/%40types%2Freact--router--dom-%5E5.3.3-red?style=flat-square)](https://npmjs.com/package/@types/react-router-dom/v/5.3.3)\n        -   [![@typescript-eslint/eslint-plugin](https://img.shields.io/badge/%40typescript--eslint%2Feslint--plugin-latest-red?style=flat-square)](https://npmjs.com/package/@typescript-eslint/eslint-plugin/v/latest)\n        -   [![@typescript-eslint/parser](https://img.shields.io/badge/%40typescript--eslint%2Fparser-latest-red?style=flat-square)](https://npmjs.com/package/@typescript-eslint/parser/v/latest)\n        -   [![ts-node](https://img.shields.io/badge/ts--node-latest-red?style=flat-square)](https://npmjs.com/package/ts-node/v/latest)\n        -   [![typescript](https://img.shields.io/badge/typescript-%5E5.1.6-red?style=flat-square)](https://npmjs.com/package/typescript/v/5.1.6)\n\t-   React\n        -   [![react](https://img.shields.io/badge/react-%5E18.2.0-red?style=flat-square)](https://npmjs.com/package/react/v/18.2.0)\n        -   [![react-dom](https://img.shields.io/badge/react--dom-%5E18.2.0-red?style=flat-square)](https://npmjs.com/package/react-dom/v/18.2.0)\n        -   [![react-ga4](https://img.shields.io/badge/react--ga4-%5E2.0.0-red?style=flat-square)](https://npmjs.com/package/react-ga4/v/2.0.0)\n        -   [![react-lazyload](https://img.shields.io/badge/react--lazyload-%5E3.2.0-red?style=flat-square)](https://npmjs.com/package/react-lazyload/v/3.2.0)\n        -   [![react-router-dom](https://img.shields.io/badge/react--router--dom-%5E6.8.1-red?style=flat-square)](https://npmjs.com/package/react-router-dom/v/6.8.1)\n        -   [![react-use-is-online](https://img.shields.io/badge/react--use--is--online-%5E1.2.1-red?style=flat-square)](https://npmjs.com/package/react-use-is-online/v/1.2.1)\n\t-   MUI\n        -   [![@emotion/react](https://img.shields.io/badge/%40emotion%2Freact-%5E11.10.6-red?style=flat-square)](https://npmjs.com/package/@emotion/react/v/11.10.6)\n        -   [![@emotion/styled](https://img.shields.io/badge/%40emotion%2Fstyled-%5E11.10.6-red?style=flat-square)](https://npmjs.com/package/@emotion/styled/v/11.10.6)\n        -   [![@mui/icons-material](https://img.shields.io/badge/%40mui%2Ficons--material-%5E5.11.9-red?style=flat-square)](https://npmjs.com/package/@mui/icons-material/v/5.11.9)\n        -   [![@mui/lab](https://img.shields.io/badge/%40mui%2Flab-5.0.0--alpha.120-red?style=flat-square)](https://npmjs.com/package/@mui/lab/v/5.0.0-alpha.120)\n        -   [![@mui/material](https://img.shields.io/badge/%40mui%2Fmaterial-%5E5.11.9-red?style=flat-square)](https://npmjs.com/package/@mui/material/v/5.11.9)\n\t-   Redux\n        -   [![@reduxjs/toolkit](https://img.shields.io/badge/%40reduxjs%2Ftoolkit-%5E1.9.2-red?style=flat-square)](https://npmjs.com/package/@reduxjs/toolkit/v/1.9.2)\n        -   [![react-redux](https://img.shields.io/badge/react--redux-%5E8.0.5-red?style=flat-square)](https://npmjs.com/package/react-redux/v/8.0.5)\n\t-\tESLint\n        -   [![eslint](https://img.shields.io/badge/eslint-latest-red?style=flat-square)](https://npmjs.com/package/eslint/v/latest)\n        -   [![eslint-config-prettier](https://img.shields.io/badge/eslint--config--prettier-latest-red?style=flat-square)](https://npmjs.com/package/eslint-config-prettier/v/latest)\n        -   [![eslint-plugin-react](https://img.shields.io/badge/eslint--plugin--react-latest-red?style=flat-square)](https://npmjs.com/package/eslint-plugin-react/v/latest)\n        -   [![eslint-plugin-simple-import-sort](https://img.shields.io/badge/eslint--plugin--simple--import--sort-latest-red?style=flat-square)](https://npmjs.com/package/eslint-plugin-simple-import-sort/v/latest)\n        -   [![prettier](https://img.shields.io/badge/prettier-latest-red?style=flat-square)](https://npmjs.com/package/prettier/v/latest)\n\t-   Vite\n        -   [![@vitejs/plugin-react](https://img.shields.io/badge/%40vitejs%2Fplugin--react-%5E3.1.0-red?style=flat-square)](https://npmjs.com/package/@vitejs/plugin-react/v/3.1.0)\n        -   [![vite](https://img.shields.io/badge/vite-%5E4.1.1-red?style=flat-square)](https://npmjs.com/package/vite/v/4.1.1)\n        -   [![vite-plugin-pwa](https://img.shields.io/badge/vite--plugin--pwa-%5E0.14.4-red?style=flat-square)](https://npmjs.com/package/vite-plugin-pwa/v/0.14.4)\n        -   [![workbox-window](https://img.shields.io/badge/workbox--window-%5E6.5.4-red?style=flat-square)](https://npmjs.com/package/workbox-window/v/6.5.4)\n\t-   Miscellaneous\n        -   [![axios](https://img.shields.io/badge/axios-%5E1.3.3-red?style=flat-square)](https://npmjs.com/package/axios/v/1.3.3)\n        -   [![bun-types](https://img.shields.io/badge/bun--types-%5E1.0.21-red?style=flat-square)](https://npmjs.com/package/bun-types/v/1.0.21)\n        -   [![luxon](https://img.shields.io/badge/luxon-%5E3.2.1-red?style=flat-square)](https://npmjs.com/package/luxon/v/3.2.1)\n        -   [![posthog-js](https://img.shields.io/badge/posthog--js-%5E1.96.1-red?style=flat-square)](https://npmjs.com/package/posthog-js/v/1.96.1)\n        -   [![spotify-web-api-js](https://img.shields.io/badge/spotify--web--api--js-%5E1.5.2-red?style=flat-square)](https://npmjs.com/package/spotify-web-api-js/v/1.5.2)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzs1l3nt%2Fweb-next-statify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzs1l3nt%2Fweb-next-statify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzs1l3nt%2Fweb-next-statify/lists"}