├── .gitignore ├── README.md ├── components ├── activity │ ├── movement.js │ ├── repos.js │ ├── repos.mdx │ ├── ring.js │ └── rings.js ├── avatar.js ├── bg-img.js ├── blocks.js ├── fonts.css ├── footer.js ├── footer.mdx ├── header.js ├── meta.js ├── music │ ├── artwork.js │ ├── awards.js │ ├── player.js │ └── song-list.js ├── nav.js ├── nprogress.js ├── stat.js ├── story.js ├── theme.js └── util.js ├── data ├── fall-songs.json ├── monthly-songs.json ├── movement.json ├── rings.json ├── spring-songs.json ├── summer-songs.json └── top-songs.json ├── next.config.js ├── package.json ├── pages ├── _app.js ├── _document.js ├── activity.js ├── index.mdx └── music.js ├── prettier.config.js ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── card.png ├── cover.jpg ├── fall │ ├── autovendor.jpeg │ ├── elvin.jpeg │ ├── plum.jpeg │ ├── show.jpeg │ └── subway.jpeg ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── mstile-150x150.png ├── safari-pinned-tab.svg ├── site.webmanifest ├── spring │ ├── amanda.jpeg │ ├── conan.jpeg │ ├── lah_stage.jpeg │ ├── sf_night.jpeg │ └── sf_sunset.jpeg ├── summer │ ├── dorm_pano.jpeg │ ├── flagship_superclub.jpeg │ └── matthew_cute.jpeg ├── winter │ ├── hackpenn_ceremony.jpg │ ├── hackpenn_team.jpg │ ├── hackpenn_working.jpg │ └── retreat.jpeg ├── zoe_glasses.jpeg └── zoe_hair.jpeg ├── vercel.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | yarn-error.log 3 | .cache/ 4 | .next/ 5 | .DS_Store 6 | *.swp 7 | .vercel 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 2019 2 | 3 | [@lachlanjc](https://lachlanjc.com)’s 2019 year in review! 4 | 5 | [**2019.lachlanjc.com**](https://2019.lachlanjc.com) 6 | -------------------------------------------------------------------------------- /components/activity/movement.js: -------------------------------------------------------------------------------- 1 | import React, { useRef } from 'react' 2 | import useComponentSize from '@rehooks/component-size' 3 | import { Box, Card, Text, useThemeUI } from 'theme-ui' 4 | 5 | import raw from '../../data/movement.json' 6 | import { parseInt } from 'lodash' 7 | import commaNumber from 'comma-number' 8 | import { BarChart, Bar, XAxis, YAxis, Tooltip } from 'recharts' 9 | 10 | const movement = raw.map(({ date, steps }) => ({ 11 | date, 12 | steps: parseInt(steps) 13 | })) 14 | 15 | const renderTooltip = ({ active, payload }) => { 16 | if (active && payload && payload.length) { 17 | const data = payload[0] && payload[0].payload 18 | return ( 19 | 20 | {new Date(data.date).toLocaleDateString('en-us')} 21 | {commaNumber(data.steps)} steps 22 | 23 | ) 24 | } 25 | return null 26 | } 27 | 28 | const Movement = () => { 29 | const ref = useRef(null) 30 | const { width } = useComponentSize(ref) 31 | const { theme } = useThemeUI() 32 | return ( 33 | 43 | 50 | 53 | new Date(n).toLocaleDateString('en-us').replace('/2019', '') 54 | } 55 | /> 56 | 59 | n === 0 ? 0 : String(n).substring(0, String(n).length - 3) + 'k' 60 | } 61 | /> 62 | 63 | 64 | 65 | 66 | ) 67 | } 68 | 69 | export default Movement 70 | -------------------------------------------------------------------------------- /components/activity/repos.js: -------------------------------------------------------------------------------- 1 | import { Book } from 'react-feather' 2 | import { Grid, Flex, Text } from 'theme-ui' 3 | import Content from './repos.mdx' 4 | import { MDXProvider } from '@mdx-js/react' 5 | 6 | export const Repo = ({ children }) => ( 7 | 21 | 22 | 23 | {children} 24 | 25 | 26 | ) 27 | 28 | export const RepoList = props => ( 29 | 30 | ) 31 | 32 | const Repos = () => ( 33 | 39 | 40 | 41 | ) 42 | 43 | export default Repos 44 | -------------------------------------------------------------------------------- /components/activity/repos.mdx: -------------------------------------------------------------------------------- 1 | - lachlanjc/gunfunded 2 | - lachlanjc/co2 3 | - lachlanjc/ima 4 | - hackclub/hackathons 5 | - angelhacks/site 6 | - windyhacks/2019-site 7 | -------------------------------------------------------------------------------- /components/activity/ring.js: -------------------------------------------------------------------------------- 1 | import { Box } from 'theme-ui' 2 | 3 | const colors = { 4 | move: '#fa114f', 5 | exercise: '#92e82a', 6 | stand: '#1eeaef' 7 | } 8 | const dash = n => `${n * 100}, 100` 9 | 10 | const Ring = ({ 11 | move = 0.75, 12 | exercise = 0.66, 13 | stand = 0.5, 14 | size = 72, 15 | ...props 16 | }) => ( 17 | 36 | 37 | 38 | 44 | 45 | 46 | 47 | 53 | 54 | 55 | 56 | 62 | 63 | 64 | ) 65 | 66 | export default Ring 67 | -------------------------------------------------------------------------------- /components/activity/rings.js: -------------------------------------------------------------------------------- 1 | import { Grid, Heading, Flex } from 'theme-ui' 2 | import Ring from './ring' 3 | import { padMonth, getMonth } from '../util' 4 | import { times, keys, filter, startsWith } from 'lodash' 5 | import activity from '../../data/rings.json' 6 | 7 | const Rings = () => ( 8 | 19 | {times(12, month => ( 20 |
  • 21 | 22 | {getMonth(month)} 23 | 24 | 29 | {filter(keys(activity), k => startsWith(k, padMonth(month))).map( 30 | date => ( 31 | 50 | 51 | 52 | ) 53 | )} 54 | 55 |
  • 56 | ))} 57 |
    58 | ) 59 | 60 | export default Rings 61 | -------------------------------------------------------------------------------- /components/avatar.js: -------------------------------------------------------------------------------- 1 | import { Image } from 'theme-ui' 2 | 3 | const Avatar = ({ size = 32, ...props }) => ( 4 | Lachlan’s avatar 12 | ) 13 | 14 | export default Avatar 15 | 16 | -------------------------------------------------------------------------------- /components/bg-img.js: -------------------------------------------------------------------------------- 1 | import { Box } from 'theme-ui' 2 | import Image from 'next/image' 3 | 4 | /* 5 | * Use this component inside a container with CSS: 6 | * `position: relative; overflow: hidden;` 7 | * then pass width/height/alt/src as usual 8 | */ 9 | 10 | const gx = gradient => 11 | gradient 12 | ? { 13 | '&:after': { 14 | content: '""', 15 | position: 'absolute', 16 | backgroundImage: `linear-gradient(${gradient})`, 17 | top: 0, 18 | left: 0, 19 | right: 0, 20 | bottom: 0 21 | } 22 | } 23 | : {} 24 | 25 | const BGImg = ({ gradient, ...props }) => ( 26 | span': { height: '100% !important', width: '100%' }, 37 | '~ *': { position: 'relative' } 38 | }} 39 | > 40 | 46 | 47 | ) 48 | 49 | export default BGImg 50 | -------------------------------------------------------------------------------- /components/blocks.js: -------------------------------------------------------------------------------- 1 | import { Box, Text, useColorMode } from 'theme-ui' 2 | import Image from 'next/image' 3 | import YouTubePlayer from 'react-player/youtube' 4 | import theme from './theme' 5 | 6 | export const YouTube = props => ( 7 | 20 | 27 | 28 | ) 29 | 30 | export const Photo = ({ 31 | src, 32 | width, 33 | height, 34 | alt, 35 | showAlt = true, 36 | top = false, 37 | ...props 38 | }) => { 39 | const [colorMode] = useColorMode() 40 | return ( 41 | 60 | {alt} 61 | {showAlt && alt && ( 62 | 83 | )} 84 | 85 | ) 86 | } 87 | 88 | export const Pano = props => ( 89 | 90 | 91 | 92 | ) 93 | -------------------------------------------------------------------------------- /components/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Roobert'; 3 | font-style: normal; 4 | font-weight: 400; 5 | font-display: swap; 6 | src: url('https://cdn.glitch.com/ead942eb-5f14-487b-a118-4759cfc04f43%2FRoobert-Medium.woff2?v=1570659234070') 7 | format('woff2'); 8 | } 9 | 10 | @font-face { 11 | font-family: 'Roobert'; 12 | font-style: normal; 13 | font-weight: 700; 14 | font-display: swap; 15 | src: url('https://cdn.glitch.com/ead942eb-5f14-487b-a118-4759cfc04f43%2FRoobert-Bold.woff2?v=1570659237353') 16 | format('woff2'); 17 | } 18 | 19 | @font-face { 20 | font-family: 'iA Quattro'; 21 | src: url('https://2019.hackpenn.com/quattro/iAWriterQuattroS-Regular.woff2') 22 | format('woff2'), 23 | url('https://2019.hackpenn.com/quattro/iAWriterQuattroS-Regular.woff') 24 | format('woff'), 25 | url('https://2019.hackpenn.com/quattro/iAWriterQuattroS-Regular.eot') 26 | format('truetype'); 27 | font-weight: 400; 28 | font-style: normal; 29 | font-display: swap; 30 | } 31 | 32 | @font-face { 33 | font-family: 'iA Quattro'; 34 | src: url('https://2019.hackpenn.com/quattro/iAWriterQuattroS-Bold.woff2') 35 | format('woff2'), 36 | url('https://2019.hackpenn.com/quattro/iAWriterQuattroS-Bold.woff') 37 | format('woff'), 38 | url('https://2019.hackpenn.com/quattro/iAWriterQuattroS-Bold.eot') 39 | format('truetype'); 40 | font-weight: 700; 41 | font-style: normal; 42 | font-display: swap; 43 | } 44 | -------------------------------------------------------------------------------- /components/footer.js: -------------------------------------------------------------------------------- 1 | import Content from './footer.mdx' 2 | import Ring from './activity/ring' 3 | import BGImg from './bg-img' 4 | import imgCover from '../public/cover.jpg' 5 | import { Container, Box, Grid, Card } from 'theme-ui' 6 | import Link from 'next/link' 7 | import { useRouter } from 'next/router' 8 | import { Headphones } from 'react-feather' 9 | 10 | const Footer = () => { 11 | const { pathname } = useRouter() 12 | return [ 13 | svg': { 30 | position: 'absolute', 31 | top: 3, 32 | right: 3, 33 | opacity: 0.875 34 | } 35 | }, 36 | h2: { 37 | variant: 'text.headline', 38 | textAlign: 'left', 39 | mb: 0 40 | } 41 | }} 42 | > 43 | {pathname !== '/' && ( 44 | 45 | 46 | 47 |

    Story

    48 |
    49 | 50 | )} 51 | {pathname !== '/activity' && ( 52 | 53 | 54 | 55 |

    Activity

    56 |
    57 | 58 | )} 59 | {pathname !== '/music' && ( 60 | 61 | 68 | 69 |

    Music

    70 |
    71 | 72 | )} 73 |
    , 74 | 79 | 87 | 88 | 89 | 90 | ] 91 | } 92 | 93 | export default Footer 94 | -------------------------------------------------------------------------------- /components/footer.mdx: -------------------------------------------------------------------------------- 1 | Site by [@lachlanjc](https://lachlanjc.com), 2020 2 | 3 | [Open source on GitHub](https://github.com/lachlanjc/2019) 4 | -------------------------------------------------------------------------------- /components/header.js: -------------------------------------------------------------------------------- 1 | import { useColorMode, Box, Heading } from 'theme-ui' 2 | 3 | const Header = ({ bg = 'primary', color = 'white', sx = {}, children }) => { 4 | const dark = useColorMode()[0] === 'dark' 5 | return ( 6 | 18 | 30 | 2019: {children} 31 | 32 | 33 | ) 34 | } 35 | 36 | export default Header 37 | -------------------------------------------------------------------------------- /components/meta.js: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { colors } from './theme' 3 | 4 | const name = '2019 in Review – @lachlanjc' 5 | const makeTitle = title => (title === name ? title : `${title} – ${name}`) 6 | 7 | const Meta = ({ 8 | title = name, 9 | description = 'Looking back at Lachlan Campbell’s 2019.', 10 | image = 'https://2019.lachlanjc.com/card.png', 11 | color = colors.primary 12 | }) => ( 13 | 14 | 15 | 16 | 17 | {makeTitle(title)} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 31 | 32 | 38 | 44 | 51 | 58 | 59 | 60 | ) 61 | 62 | export default Meta 63 | -------------------------------------------------------------------------------- /components/music/artwork.js: -------------------------------------------------------------------------------- 1 | import Image from 'next/image' 2 | import { Box, IconButton } from 'theme-ui' 3 | import { PlayCircle } from 'react-feather' 4 | 5 | const PlayButton = props => ( 6 | 18 | 19 | 20 | ) 21 | 22 | const Artwork = ({ src, alt, size = 64 }) => ( 23 | 30 | {`${alt} 38 | 39 | 40 | ) 41 | 42 | export default Artwork 43 | -------------------------------------------------------------------------------- /components/music/awards.js: -------------------------------------------------------------------------------- 1 | import { Grid, Box, Avatar, Text } from 'theme-ui' 2 | import Artwork from './artwork' 3 | 4 | const Label = props => ( 5 | 10 | ) 11 | 12 | const Name = ({ fontSize, ...props }) => ( 13 | 32 ? [2, 3, 4] : [2, 3, 4, 5], 17 | display: 'block', 18 | lineHeight: 'heading', 19 | my: 1 20 | }} 21 | {...props} 22 | /> 23 | ) 24 | 25 | const Comment = props => ( 26 | 27 | ) 28 | 29 | export const Artist = ({ label, name, artwork, children }) => ( 30 | 31 | 35 | 36 | 37 | 38 | {name} 39 | 40 | 41 | {children} 42 | 43 | ) 44 | 45 | export const Album = ({ label, name, artwork, artist, children, ...props }) => ( 46 | 47 | 51 | 57 | 58 | 59 | {name} 60 | 65 | {artist} 66 | 67 | 68 | 69 | {children} 70 | 71 | ) 72 | 73 | export const CD = ({ label, name, artwork, artist, children, ...props }) => ( 74 | 75 | 81 | 82 | {name} 83 | 84 | {artist} 85 | 86 | 87 | {children} 88 | 89 | ) 90 | -------------------------------------------------------------------------------- /components/music/player.js: -------------------------------------------------------------------------------- 1 | import useComponentSize from '@rehooks/component-size' 2 | import { useState, useRef } from 'react' 3 | import { Box, Flex, IconButton, useColorMode } from 'theme-ui' 4 | import { VideoOff, Maximize, X } from 'react-feather' 5 | import Embed from 'react-song-embed' 6 | 7 | const TOOLBAR_HEIGHT = 40 8 | 9 | const Player = ({ url, onClose }) => { 10 | const ref = useRef(null) 11 | const { width, height } = useComponentSize(ref) 12 | const [colorMode] = useColorMode() 13 | const [mini, setMini] = useState(false) 14 | return ( 15 | 37 | 53 | setMini(m => !m)} mr={2}> 54 | {mini ? : } 55 | 56 | 57 | 58 | 59 | 60 | {url && ( 61 | 68 | )} 69 | 70 | ) 71 | } 72 | 73 | export default Player 74 | -------------------------------------------------------------------------------- /components/music/song-list.js: -------------------------------------------------------------------------------- 1 | import { Box, Flex, Grid, Text } from 'theme-ui' 2 | import { getMonth } from '../util' 3 | import Artwork from './artwork' 4 | 5 | const getAlbum = a => (a.includes(' - Single') ? 'Single' : a) 6 | 7 | const SongList = ({ songs = [], monthly = false, sx = { px: 2 }, onPlay }) => ( 8 | 20 | {songs.map((song, i) => ( 21 | onPlay(song.link)} 35 | key={song.title + song.artist} 36 | > 37 | 41 | {monthly ? getMonth(i).slice(0, 3) : `${i + 1}.`} 42 | 43 | 48 | 49 | 50 | {song.title} 51 | 52 | 53 | {song.artist} – {getAlbum(song.album)} 54 | 55 | 56 | 57 | ))} 58 | 59 | ) 60 | 61 | export default SongList 62 | -------------------------------------------------------------------------------- /components/nav.js: -------------------------------------------------------------------------------- 1 | import { 2 | useColorMode, 3 | Avatar, 4 | Box, 5 | Container, 6 | IconButton, 7 | Flex, 8 | NavLink 9 | } from 'theme-ui' 10 | import Link from 'next/link' 11 | import { Moon } from 'react-feather' 12 | 13 | const NavButton = ({ sx, ...props }) => ( 14 | 26 | ) 27 | 28 | const ColorSwitcher = props => { 29 | const [mode, setMode] = useColorMode() 30 | return ( 31 | setMode(mode === 'dark' ? 'light' : 'dark')} 34 | title="Invert color scheme" 35 | > 36 | 37 | 38 | ) 39 | } 40 | 41 | const Nav = () => { 42 | const [mode] = useColorMode() 43 | return ( 44 | 57 | 72 | 73 | 84 | 90 | 91 | 2019 in Review 92 | 93 | 94 | 95 | 96 | Activity 97 | 98 | 99 | Music 100 | 101 | 102 | 103 | 104 | ) 105 | } 106 | 107 | export default Nav 108 | -------------------------------------------------------------------------------- /components/nprogress.js: -------------------------------------------------------------------------------- 1 | import NProgress from 'nprogress' 2 | import { useRouter } from 'next/router' 3 | import { useEffect } from 'react' 4 | import { colors } from './theme' 5 | 6 | const Progress = ({ color = colors.accent }) => { 7 | const router = useRouter() 8 | 9 | useEffect(() => { 10 | let timeout 11 | 12 | const start = () => { 13 | timeout = setTimeout(NProgress.start, 100) 14 | } 15 | 16 | const done = () => { 17 | clearTimeout(timeout) 18 | NProgress.done() 19 | } 20 | 21 | router.events.on('routeChangeStart', start) 22 | router.events.on('routeChangeComplete', done) 23 | router.events.on('routeChangeError', done) 24 | return () => { 25 | router.events.off('routeChangeStart', start) 26 | router.events.off('routeChangeComplete', done) 27 | router.events.off('routeChangeError', done) 28 | } 29 | }, []) 30 | 31 | return ( 32 | 46 | ) 47 | } 48 | 49 | export default Progress 50 | -------------------------------------------------------------------------------- /components/stat.js: -------------------------------------------------------------------------------- 1 | import { Box, Badge, Text } from 'theme-ui' 2 | 3 | const Arc = ({ value = 2 / 3, strokeWidth = 2, size = 128, ...props }) => { 4 | const R = 16 - strokeWidth 5 | const C = 2 * Math.PI * R 6 | return ( 7 | 8 | 20 | 21 | ) 22 | } 23 | 24 | const Stat = ({ value, label, color = 'currentColor' }) => ( 25 | 46 | 47 | 2 ? 4 : 6, 52 | lineHeight: '64px' 53 | }}>{value} 54 | 65 | {label} 66 | 67 | 68 | ) 69 | 70 | export default Stat 71 | -------------------------------------------------------------------------------- /components/story.js: -------------------------------------------------------------------------------- 1 | import { BaseStyles, Box, Container } from 'theme-ui' 2 | import { colors } from './theme' 3 | 4 | import BGImg from './bg-img' 5 | import imgCover from '../public/cover.jpg' 6 | 7 | export const Banner = ({ children }) => ( 8 | 41 | 46 | {children} 47 | 48 | ) 49 | 50 | const Story = props => ( 51 | figure': { 75 | my: 4 76 | }, 77 | '> section': { 78 | position: 'relative', 79 | width: '100vw', 80 | left: '50%', 81 | right: '50%', 82 | mx: '-50vw', 83 | my: [4, 5] 84 | }, 85 | hr: { 86 | '@media (prefers-reduced-motion: no-preference) and (hover: hover)': { 87 | transition: 'transform 1.5s ease-in-out', 88 | ':hover': { 89 | transform: 'scaleY(8) scaleX(-8)' 90 | } 91 | }, 92 | ':nth-of-type(1)': { 93 | backgroundImage: `linear-gradient(${colors.cyan} 33%, ${colors.blue} 100%)` 94 | }, 95 | ':nth-of-type(2)': { 96 | backgroundImage: `linear-gradient(${colors.yellow} 33%, ${colors.green} 100%)` 97 | }, 98 | ':nth-of-type(3)': { 99 | backgroundImage: `linear-gradient(${colors.yellow} 33%, ${colors.orange} 100%)` 100 | }, 101 | ':nth-of-type(4)': { 102 | backgroundImage: `linear-gradient(${colors.orange} 33%, ${colors.red} 100%)` 103 | }, 104 | ':nth-of-type(5)': { 105 | backgroundImage: `linear-gradient(${colors.smoke} 33%, ${colors.muted} 100%)` 106 | } 107 | } 108 | }} 109 | {...props} 110 | /> 111 | ) 112 | 113 | export default Story 114 | -------------------------------------------------------------------------------- /components/theme.js: -------------------------------------------------------------------------------- 1 | export const colors = { 2 | darker: '#121217', 3 | dark: '#17171d', 4 | darkless: '#252429', 5 | 6 | black: '#1f2d3d', 7 | steel: '#273444', 8 | slate: '#3c4858', 9 | muted: '#8492a6', 10 | smoke: '#e0e6ed', 11 | snow: '#f9fafc', 12 | white: '#ffffff', 13 | 14 | red: '#ec3750', 15 | orange: '#ff8c37', 16 | yellow: '#f1c40f', 17 | green: '#33d6a6', 18 | cyan: '#5bc0de', 19 | blue: '#338eda' 20 | } 21 | 22 | const theme = { 23 | breakpoints: [32, 48, 64, 96, 128].map(w => `${w}em`), 24 | space: [0, 4, 8, 16, 32, 64, 128, 256, 512], 25 | fontSizes: [12, 16, 20, 24, 32, 48, 64, 96, 128], 26 | config:{ 27 | initialColorModeName: 'light', 28 | useColorSchemeMediaQuery: true, 29 | }, 30 | colors: { 31 | ...colors, 32 | text: colors.black, 33 | background: colors.white, 34 | elevated: colors.white, 35 | sunken: colors.smoke, 36 | border: colors.smoke, 37 | placeholder: colors.muted, 38 | secondary: colors.slate, 39 | primary: colors.cyan, 40 | muted: colors.muted, 41 | accent: colors.yellow, 42 | music: '#ff365d', 43 | modes: { 44 | dark: { 45 | text: colors.white, 46 | background: colors.dark, 47 | elevated: colors.darkless, 48 | sunken: colors.darker, 49 | border: colors.darkless, 50 | placeholder: colors.slate, 51 | secondary: colors.muted 52 | } 53 | } 54 | }, 55 | fonts: { 56 | heading: 57 | '"Roobert", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', 58 | body: 59 | '"Roobert", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', 60 | accent: 61 | '"iA Quattro", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', 62 | monospace: '"SFMono-Regular", "Roboto Mono", Menlo, Consolas, monospace' 63 | }, 64 | lineHeights: { 65 | limit: 0.875, 66 | title: 1, 67 | heading: 1.125, 68 | subheading: 1.25, 69 | caption: 1.375, 70 | body: 1.5 71 | }, 72 | fontWeights: { 73 | body: 400, 74 | bold: 700, 75 | heading: 700 76 | }, 77 | letterSpacings: { 78 | title: '-0.009em', 79 | headline: '0.009em' 80 | }, 81 | sizes: { 82 | widePlus: 2048, 83 | wide: 1536, 84 | layoutPlus: 1200, 85 | layout: 1024, 86 | copyPlus: 768, 87 | copy: 680, 88 | narrowPlus: 600, 89 | narrow: 512 90 | }, 91 | radii: { 92 | default: 6, 93 | extra: 9, 94 | circle: 99999 95 | }, 96 | shadows: { 97 | small: '0 1px 2px rgba(0, 0, 0, 0.0625), 0 2px 4px rgba(0, 0, 0, 0.0625)', 98 | card: '0 4px 8px rgba(0, 0, 0, 0.125)', 99 | elevated: '0 1px 2px rgba(0, 0, 0, 0.0625), 0 8px 12px rgba(0, 0, 0, 0.125)' 100 | }, 101 | text: { 102 | heading: { 103 | fontWeight: 'bold', 104 | lineHeight: 'heading' 105 | }, 106 | title: { 107 | fontWeight: 'bold', 108 | lineHeight: 'title', 109 | letterSpacing: 'title', 110 | fontSize: [4, 5, 6] 111 | }, 112 | subtitle: { 113 | fontSize: [2, 3, null, null, 4], 114 | fontWeight: 'body', 115 | letterSpacing: 'headline', 116 | lineHeight: 'subheading' 117 | }, 118 | headline: { 119 | fontWeight: 'bold', 120 | lineHeight: 'heading', 121 | letterSpacing: 'headline', 122 | fontSize: 4, 123 | textAlign: 'center', 124 | textTransform: 'uppercase', 125 | mt: 0, 126 | mb: [3, 4] 127 | }, 128 | subheadline: { 129 | fontWeight: 'bold', 130 | lineHeight: 'heading', 131 | letterSpacing: 'headline', 132 | fontSize: [2, 3], 133 | mt: 0, 134 | mb: 2 135 | }, 136 | caption: { 137 | color: 'muted', 138 | fontFamily: 'accent', 139 | fontWeight: 'body', 140 | letterSpacing: 'headline' 141 | }, 142 | accent: { 143 | fontFamily: 'accent' 144 | } 145 | }, 146 | badges: { 147 | pill: { 148 | borderRadius: 'circle', 149 | px: 2, 150 | py: 1, 151 | fontSize: 1 152 | } 153 | }, 154 | buttons: { 155 | primary: { 156 | bg: 'primary', 157 | color: 'background', 158 | cursor: 'pointer', 159 | fontFamily: 'inherit', 160 | fontWeight: 'bold', 161 | svg: { ml: -1, mr: 2 } 162 | }, 163 | outline: { 164 | variant: 'buttons.primary', 165 | bg: 'transparent', 166 | color: 'primary', 167 | border: '2px solid currentColor' 168 | } 169 | }, 170 | cards: { 171 | primary: { 172 | bg: 'elevated', 173 | color: 'text', 174 | p: [3, 4], 175 | borderRadius: 'extra', 176 | boxShadow: 'card', 177 | position: 'relative' 178 | }, 179 | interactive: { 180 | variant: 'cards.primary', 181 | textDecoration: 'none', 182 | WebkitTapHighlightColor: 'transparent', 183 | transition: 'transform .125s ease-in-out, box-shadow .125s ease-in-out', 184 | ':hover,:focus': { 185 | transform: 'scale(1.0625)', 186 | boxShadow: 'elevated' 187 | } 188 | }, 189 | }, 190 | layout: { 191 | container: { 192 | maxWidth: ['copyPlus', null, 'layout', null, 'layoutPlus'], 193 | width: '100%', 194 | mx: 'auto', 195 | px: 3 196 | }, 197 | wide: { 198 | variant: 'layout.container', 199 | px: [3, null, 4], 200 | maxWidth: ['wide', null, null, null, 'widePlus'] 201 | }, 202 | copy: { 203 | variant: 'layout.container', 204 | maxWidth: ['copy', null, null, null, 'copyPlus'] 205 | }, 206 | narrow: { 207 | variant: 'layout.container', 208 | maxWidth: ['narrow', null, 'narrowPlus', null, 'layout'] 209 | } 210 | }, 211 | styles: { 212 | root: { 213 | fontFamily: 'body', 214 | lineHeight: 'body', 215 | fontWeight: 'body', 216 | color: 'text', 217 | margin: 0, 218 | minHeight: '100vh' 219 | }, 220 | h2: { 221 | variant: 'text.heading', 222 | my: 0, 223 | fontSize: [4, 5] 224 | }, 225 | p: { 226 | color: 'text', 227 | fontWeight: 'body', 228 | lineHeight: 'body' 229 | }, 230 | a: { 231 | color: 'primary', 232 | textUnderlinePosition: 'under', 233 | }, 234 | code: { 235 | fontFamily: 'monospace', 236 | fontSize: 'inherit' 237 | }, 238 | img: { 239 | maxWidth: '100%' 240 | }, 241 | hr: { 242 | border: 0, 243 | py: 1, 244 | backgroundImage: `linear-gradient(${colors.yellow} 33%, ${colors.orange} 100%)`, 245 | borderRadius: 999, 246 | maxWidth: 256, 247 | mx: 'auto', 248 | my: 5 249 | } 250 | } 251 | } 252 | 253 | theme.util = { 254 | motion: '@media (prefers-reduced-motion: no-preference)', 255 | reduceMotion: '@media (prefers-reduced-motion: reduce)', 256 | supportsClipText: '@supports (-webkit-background-clip: text)', 257 | supportsBackdrop: 258 | '@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none)' 259 | } 260 | 261 | theme.cards.translucent = { 262 | backgroundColor: 'rgba(255, 255, 255, 0.98)', 263 | color: 'text', 264 | boxShadow: 'none', 265 | [theme.util.supportsBackdrop]: { 266 | backgroundColor: 'rgba(255, 255, 255, 0.75)', 267 | backdropFilter: 'saturate(180%) blur(20px)', 268 | WebkitBackdropFilter: 'saturate(180%) blur(20px)' 269 | } 270 | } 271 | theme.cards.translucentDark = { 272 | backgroundColor: 'rgba(0, 0, 0, 0.875)', 273 | color: 'white', 274 | boxShadow: 'none', 275 | [theme.util.supportsBackdrop]: { 276 | backgroundColor: 'rgba(0, 0, 0, 0.625)', 277 | backdropFilter: 'saturate(180%) blur(16px)', 278 | WebkitBackdropFilter: 'saturate(180%) blur(16px)' 279 | } 280 | } 281 | 282 | export default theme 283 | -------------------------------------------------------------------------------- /components/util.js: -------------------------------------------------------------------------------- 1 | export const padMonth = i => `2019-${i < 9 ? '0' : ''}${i + 1}` 2 | 3 | export const getMonth = i => { 4 | let dt = new Date(padMonth(i)) 5 | dt.setDate(dt.getDate() + 1) 6 | return dt.toLocaleString('default', { month: 'long' }) 7 | } 8 | -------------------------------------------------------------------------------- /data/fall-songs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Fresh Laundry", 4 | "album": "Cape God", 5 | "artist": "Allie X", 6 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/45/c2/b9/45c2b9ab-e8b7-979c-8e2e-a05117dee27e/5056167117735_1.jpg/250x250bb.jpeg", 7 | "plays": 21, 8 | "link": "https://song.link/us/i/1478068219" 9 | }, 10 | { 11 | "title": "Lights Up", 12 | "album": "Fine Line", 13 | "artist": "Harry Styles", 14 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/72/89/85/728985d1-9484-7b71-1ea8-0f0654f7dc16/886448022213.jpg/250x250bb.jpeg", 15 | "plays": 23, 16 | "link": "https://song.link/us/i/1485802971" 17 | }, 18 | { 19 | "title": "Purple Hat", 20 | "album": "DANCING ON THE PEOPLE - EP", 21 | "artist": "Sofi Tukker", 22 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/c6/65/17/c6651761-c790-9e92-eb4f-1fba41e1a8cb/0617465006685.png/250x250bb.jpeg", 23 | "plays": 30, 24 | "link": "https://song.link/de/i/1475338107" 25 | }, 26 | { 27 | "title": "Maniac", 28 | "album": "Maniac - Single", 29 | "artist": "Conan Gray", 30 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music123/v4/66/10/64/661064e2-4169-7205-15ba-20a75ac569e1/19UMGIM91956.rgb.jpg/250x250bb.jpeg", 31 | "plays": 68, 32 | "link": "https://song.link/us/i/1487234734" 33 | }, 34 | { 35 | "title": "Regulars", 36 | "album": "Cape God", 37 | "artist": "Allie X", 38 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/64/c1/0c/64c10c3e-f4fc-9b98-5ba0-4db1505d3e3c/5056167119111_1.jpg/250x250bb.jpeg", 39 | "plays": 24, 40 | "link": "https://song.link/us/i/1482800173" 41 | }, 42 | { 43 | "title": "Boots", 44 | "album": "Boots - Single", 45 | "artist": "Greyson Chance", 46 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/8b/7a/80/8b7a80b9-fcb3-e28f-b28a-9a98ac7cff36/886448087090.jpg/250x250bb.jpeg", 47 | "plays": 23, 48 | "link": "https://song.link/us/i/1484885154" 49 | }, 50 | { 51 | "title": "ferrari", 52 | "album": "balloons don't float here", 53 | "artist": "Isaac Dunbar", 54 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/bb/00/e4/bb00e4ae-ebb4-3cae-b5f9-167b2a3e4a20/5060450069250.png/250x250bb.jpeg", 55 | "plays": 29, 56 | "link": "https://song.link/in/i/1467610444" 57 | }, 58 | { 59 | "title": "It Might Be Time", 60 | "album": "The Slow Rush", 61 | "artist": "Tame Impala", 62 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/4c/d9/c4/4cd9c4d5-c05d-19e6-6738-860817b52598/19UMGIM96748.rgb.jpg/250x250bb.jpeg", 63 | "plays": 86, 64 | "link": "https://song.link/us/i/1497231168" 65 | }, 66 | { 67 | "title": "everything i wanted", 68 | "album": "everything i wanted - Single", 69 | "artist": "Billie Eilish", 70 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music123/v4/85/57/85/855785ff-6433-a6b5-45e2-ccee55d608dc/19UM1IM00404.rgb.jpg/250x250bb.jpeg", 71 | "plays": 59, 72 | "link": "https://song.link/us/i/1487502476" 73 | }, 74 | { 75 | "title": "Hallucinations", 76 | "album": "Hallucinations - EP", 77 | "artist": "PVRIS", 78 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/56/cc/b8/56ccb833-9a98-df5a-1b1c-13267c744503/093624899297.jpg/250x250bb.jpeg", 79 | "plays": 15, 80 | "link": "https://song.link/us/i/1482646546" 81 | }, 82 | { 83 | "title": "Watermelon Sugar", 84 | "album": "Fine Line", 85 | "artist": "Harry Styles", 86 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/72/89/85/728985d1-9484-7b71-1ea8-0f0654f7dc16/886448022213.jpg/250x250bb.jpeg", 87 | "plays": 29, 88 | "link": "https://song.link/us/i/1485802967" 89 | }, 90 | { 91 | "title": "Feelings", 92 | "album": "~how i'm feeling~", 93 | "artist": "Lauv", 94 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/a2/97/fc/a297fc05-f994-54e1-0a26-c814ba467dc2/5056167118077_1.jpg/250x250bb.jpeg", 95 | "plays": 24, 96 | "link": "https://song.link/us/i/1479070182" 97 | }, 98 | { 99 | "title": "suffice", 100 | "album": "the masquerade", 101 | "artist": "mxmtoon", 102 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/7c/ce/55/7cce55c7-f8d3-f163-f7da-9d4a6cf762fc/193483922911.jpg/250x250bb.jpeg", 103 | "plays": 17, 104 | "link": "https://song.link/us/i/1469937863" 105 | }, 106 | { 107 | "title": "Hallelujah", 108 | "album": "No One Else Can Wear Your Crown (Deluxe)", 109 | "artist": "Oh Wonder", 110 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/da/94/58/da945871-90e1-42ff-2c7e-a7e1792c26d2/19UMGIM70810.rgb.jpg/250x250bb.jpeg", 111 | "plays": 32, 112 | "link": "https://song.link/us/i/1476046881" 113 | }, 114 | { 115 | "title": "Just Like Love", 116 | "album": "No Shape", 117 | "artist": "Perfume Genius", 118 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/e0/b8/e3/e0b8e3e1-2ac8-ca6a-fb85-39e27d9d114f/cover.jpg/250x250bb.jpeg", 119 | "plays": 22, 120 | "link": "https://song.link/us/i/1389453060" 121 | } 122 | ] 123 | -------------------------------------------------------------------------------- /data/monthly-songs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "i'm so tired...", 4 | "album": "i'm so tired... - Single", 5 | "artist": "Lauv & Troye Sivan", 6 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music124/v4/18/0b/d3/180bd3af-f1fe-a16e-9bb5-0c4039a17094/5056167111702_1.jpg/250x250bb.jpeg", 7 | "plays": 77, 8 | "link": "https://song.link/us/i/1448700185" 9 | }, 10 | { 11 | "title": "The Other Side", 12 | "album": "The Other Side - Single", 13 | "artist": "Conan Gray", 14 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music124/v4/fc/4c/99/fc4c99fa-6e9b-a6fb-692d-bd8a385461c7/00602577465536.rgb.jpg/250x250bb.jpeg", 15 | "plays": 181, 16 | "link": "https://song.link/us/i/1451249426" 17 | }, 18 | { 19 | "title": "black on black", 20 | "album": "portraits", 21 | "artist": "Greyson Chance", 22 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music114/v4/e3/be/17/e3be179b-dd5a-4a7d-0db9-f538c7439475/5056167112778_1.jpg/250x250bb.jpeg", 23 | "plays": 46, 24 | "link": "https://song.link/us/i/1451317877" 25 | }, 26 | { 27 | "title": "Heaven Can Wait (feat. Sia, Diplo & Labrinth)", 28 | "album": "LABRINTH, SIA & DIPLO PRESENT... LSD", 29 | "artist": "LSD", 30 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/fe/ca/4a/feca4af4-5a20-26cd-d365-f23bf51b51df/886447603130.jpg/250x250bb.jpeg", 31 | "plays": 24, 32 | "link": "https://song.link/lb/i/1455271384" 33 | }, 34 | { 35 | "title": "Sweet Little Lies", 36 | "album": "Crystalline", 37 | "artist": "bülow", 38 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/4d/38/63/4d386389-59de-031a-5d90-b8775c0f7a69/00602577491139.rgb.jpg/250x250bb.jpeg", 39 | "plays": 65, 40 | "link": "https://song.link/us/i/1453118803" 41 | }, 42 | { 43 | "title": "The Kids Don't Wanna Come Home", 44 | "album": "What Do You Think About the Car?", 45 | "artist": "Declan McKenna", 46 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music111/v4/5e/b8/1b/5eb81b1e-9753-e896-a13a-6282811fde94/886446197173.jpg/250x250bb.jpeg", 47 | "plays": 27, 48 | "link": "https://song.link/us/i/1208110314" 49 | }, 50 | { 51 | "title": "Jesus In LA", 52 | "album": "Jesus In LA - Single", 53 | "artist": "Alec Benjamin", 54 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/3b/3f/69/3b3f69f2-66da-641a-3746-aa1fc53ec98f/075679843500.jpg/250x250bb.jpeg", 55 | "plays": 46, 56 | "link": "https://song.link/us/i/1470294505" 57 | }, 58 | { 59 | "title": "The Man", 60 | "album": "Lover", 61 | "artist": "Taylor Swift", 62 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/20/6f/b5/206fb560-6fd5-15f9-0b68-88d309ffc5a6/19UMGIM53909.rgb.jpg/250x250bb.jpeg", 63 | "plays": 32, 64 | "link": "https://song.link/us/i/1468058176" 65 | }, 66 | { 67 | "title": "Comfort Crowd", 68 | "album": "Comfort Crowd - Single", 69 | "artist": "Conan Gray", 70 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music123/v4/c1/44/d4/c144d4a0-3c1d-bcbc-5733-82b093abcfc2/19UMGIM71417.rgb.jpg/250x250bb.jpeg", 71 | "plays": 156, 72 | "link": "https://song.link/us/i/1491987857" 73 | }, 74 | { 75 | "title": "Maniac", 76 | "album": "Maniac - Single", 77 | "artist": "Conan Gray", 78 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music123/v4/66/10/64/661064e2-4169-7205-15ba-20a75ac569e1/19UMGIM91956.rgb.jpg/250x250bb.jpeg", 79 | "plays": 68, 80 | "link": "https://song.link/us/i/1491987859" 81 | }, 82 | { 83 | "title": "It Might Be Time", 84 | "album": "The Slow Rush", 85 | "artist": "Tame Impala", 86 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/4c/d9/c4/4cd9c4d5-c05d-19e6-6738-860817b52598/19UMGIM96748.rgb.jpg/250x250bb.jpeg", 87 | "plays": 86, 88 | "link": "https://song.link/us/i/1497231168" 89 | }, 90 | { 91 | "title": "Love Me Wrong", 92 | "album": "Love Me Wrong - Single", 93 | "artist": "Allie X & Troye Sivan", 94 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/29/43/b8/2943b896-e98e-fed2-5323-b352a320218b/5056167119937_1.jpg/250x250bb.jpeg", 95 | "plays": 31, 96 | "link": "https://song.link/s/59uEiooaCUECb1fMmo6Sr9" 97 | } 98 | ] 99 | -------------------------------------------------------------------------------- /data/movement.json: -------------------------------------------------------------------------------- 1 | [{"date":"2019-01-01","distance":"4.257","steps":"8274"},{"date":"2019-01-02","distance":"6.256","steps":"12240"},{"date":"2019-01-03","distance":"2.241","steps":"4492"},{"date":"2019-01-04","distance":"4.551","steps":"9001"},{"date":"2019-01-05","distance":"1.237","steps":"2494"},{"date":"2019-01-06","distance":"1.129","steps":"2213"},{"date":"2019-01-07","distance":"5.359","steps":"10266"},{"date":"2019-01-08","distance":"3.558","steps":"6717"},{"date":"2019-01-09","distance":"4.359","steps":"8265"},{"date":"2019-01-10","distance":"3.677","steps":"7023"},{"date":"2019-01-11","distance":"5.671","steps":"10765"},{"date":"2019-01-12","distance":"1.167","steps":"2288"},{"date":"2019-01-13","distance":"1.447","steps":"2842"},{"date":"2019-01-14","distance":"2.892","steps":"5475"},{"date":"2019-01-15","distance":"4.150","steps":"7874"},{"date":"2019-01-16","distance":"4.446","steps":"8279"},{"date":"2019-01-17","distance":"7.332","steps":"13871"},{"date":"2019-01-18","distance":"4.730","steps":"8975"},{"date":"2019-01-19","distance":"7.373","steps":"13706"},{"date":"2019-01-20","distance":"7.055","steps":"13125"},{"date":"2019-01-21","distance":"3.647","steps":"7103"},{"date":"2019-01-22","distance":"4.009","steps":"8257"},{"date":"2019-01-23","distance":"5.445","steps":"11062"},{"date":"2019-01-24","distance":"4.408","steps":"8442"},{"date":"2019-01-25","distance":"6.760","steps":"13250"},{"date":"2019-01-26","distance":"2.330","steps":"4561"},{"date":"2019-01-27","distance":"2.411","steps":"4692"},{"date":"2019-01-28","distance":"4.081","steps":"7861"},{"date":"2019-01-29","distance":"0.843","steps":"1678"},{"date":"2019-01-30","distance":"1.815","steps":"3637"},{"date":"2019-01-31","distance":"1.096","steps":"2125"},{"date":"2019-02-01","distance":"1.873","steps":"3530"},{"date":"2019-02-02","distance":"1.397","steps":"2767"},{"date":"2019-02-03","distance":"1.658","steps":"3224"},{"date":"2019-02-04","distance":"4.266","steps":"8269"},{"date":"2019-02-05","distance":"1.307","steps":"2579"},{"date":"2019-02-06","distance":"2.594","steps":"4889"},{"date":"2019-02-07","distance":"6.397","steps":"12368"},{"date":"2019-02-08","distance":"5.860","steps":"11398"},{"date":"2019-02-09","distance":"2.622","steps":"5263"},{"date":"2019-02-10","distance":"3.734","steps":"7799"},{"date":"2019-02-11","distance":"2.315","steps":"4616"},{"date":"2019-02-12","distance":"1.009","steps":"1906"},{"date":"2019-02-13","distance":"2.292","steps":"4405"},{"date":"2019-02-14","distance":"4.849","steps":"9270"},{"date":"2019-02-15","distance":"1.473","steps":"2864"},{"date":"2019-02-16","distance":"3.234","steps":"6307"},{"date":"2019-02-17","distance":"6.340","steps":"12147"},{"date":"2019-02-18","distance":"2.529","steps":"4913"},{"date":"2019-02-19","distance":"5.707","steps":"11054"},{"date":"2019-02-20","distance":"2.516","steps":"4940"},{"date":"2019-02-21","distance":"2.990","steps":"5822"},{"date":"2019-02-22","distance":"4.503","steps":"8785"},{"date":"2019-02-23","distance":"5.526","steps":"10701"},{"date":"2019-02-24","distance":"2.129","steps":"4030"},{"date":"2019-02-25","distance":"3.588","steps":"7069"},{"date":"2019-02-26","distance":"2.726","steps":"5276"},{"date":"2019-02-27","distance":"2.421","steps":"4740"},{"date":"2019-02-28","distance":"3.194","steps":"6317"},{"date":"2019-03-01","distance":"5.913","steps":"11382"},{"date":"2019-03-02","distance":"1.415","steps":"2799"},{"date":"2019-03-03","distance":"2.213","steps":"4001"},{"date":"2019-03-04","distance":"2.297","steps":"4371"},{"date":"2019-03-05","distance":"3.097","steps":"5793"},{"date":"2019-03-06","distance":"3.584","steps":"6762"},{"date":"2019-03-07","distance":"5.864","steps":"11080"},{"date":"2019-03-08","distance":"5.096","steps":"9688"},{"date":"2019-03-09","distance":"8.283","steps":"15174"},{"date":"2019-03-10","distance":"5.851","steps":"10779"},{"date":"2019-03-11","distance":"5.951","steps":"11594"},{"date":"2019-03-12","distance":"6.039","steps":"11563"},{"date":"2019-03-13","distance":"5.147","steps":"9736"},{"date":"2019-03-14","distance":"4.887","steps":"9132"},{"date":"2019-03-15","distance":"4.216","steps":"7997"},{"date":"2019-03-16","distance":"5.662","steps":"10901"},{"date":"2019-03-17","distance":"3.775","steps":"7335"},{"date":"2019-03-18","distance":"3.924","steps":"7407"},{"date":"2019-03-19","distance":"3.563","steps":"6855"},{"date":"2019-03-20","distance":"3.205","steps":"6224"},{"date":"2019-03-21","distance":"5.199","steps":"9919"},{"date":"2019-03-22","distance":"5.951","steps":"11444"},{"date":"2019-03-23","distance":"4.440","steps":"8650"},{"date":"2019-03-24","distance":"6.758","steps":"12646"},{"date":"2019-03-25","distance":"1.772","steps":"3364"},{"date":"2019-03-26","distance":"9.639","steps":"18421"},{"date":"2019-03-27","distance":"4.419","steps":"8401"},{"date":"2019-03-28","distance":"2.475","steps":"4746"},{"date":"2019-03-29","distance":"4.573","steps":"8700"},{"date":"2019-03-30","distance":"6.168","steps":"11527"},{"date":"2019-03-31","distance":"5.530","steps":"10435"},{"date":"2019-04-01","distance":"3.786","steps":"7328"},{"date":"2019-04-02","distance":"1.457","steps":"2966"},{"date":"2019-04-03","distance":"3.219","steps":"6167"},{"date":"2019-04-04","distance":"1.180","steps":"2467"},{"date":"2019-04-05","distance":"2.902","steps":"5835"},{"date":"2019-04-06","distance":"3.346","steps":"6468"},{"date":"2019-04-07","distance":"2.631","steps":"5033"},{"date":"2019-04-08","distance":"2.969","steps":"5635"},{"date":"2019-04-09","distance":"1.811","steps":"3622"},{"date":"2019-04-10","distance":"1.201","steps":"2432"},{"date":"2019-04-11","distance":"4.581","steps":"8742"},{"date":"2019-04-12","distance":"3.717","steps":"7161"},{"date":"2019-04-13","distance":"3.919","steps":"7757"},{"date":"2019-04-14","distance":"4.165","steps":"8112"},{"date":"2019-04-15","distance":"4.990","steps":"9909"},{"date":"2019-04-16","distance":"3.392","steps":"6706"},{"date":"2019-04-17","distance":"4.017","steps":"7828"},{"date":"2019-04-18","distance":"2.354","steps":"4624"},{"date":"2019-04-19","distance":"6.192","steps":"11705"},{"date":"2019-04-20","distance":"8.154","steps":"16464"},{"date":"2019-04-21","distance":"3.208","steps":"6236"},{"date":"2019-04-22","distance":"4.570","steps":"8837"},{"date":"2019-04-23","distance":"2.208","steps":"4703"},{"date":"2019-04-24","distance":"1.133","steps":"2352"},{"date":"2019-04-25","distance":"1.318","steps":"2731"},{"date":"2019-04-26","distance":"4.454","steps":"8710"},{"date":"2019-04-27","distance":"3.655","steps":"7799"},{"date":"2019-04-28","distance":"3.686","steps":"7157"},{"date":"2019-04-29","distance":"4.265","steps":"8579"},{"date":"2019-04-30","distance":"5.144","steps":"10102"},{"date":"2019-05-01","distance":"3.247","steps":"6447"},{"date":"2019-05-02","distance":"6.366","steps":"12421"},{"date":"2019-05-03","distance":"0.890","steps":"1926"},{"date":"2019-05-04","distance":"1.267","steps":"2506"},{"date":"2019-05-05","distance":"3.545","steps":"7203"},{"date":"2019-05-06","distance":"4.121","steps":"8335"},{"date":"2019-05-07","distance":"1.235","steps":"2499"},{"date":"2019-05-08","distance":"2.673","steps":"5833"},{"date":"2019-05-09","distance":"4.370","steps":"9273"},{"date":"2019-05-10","distance":"3.679","steps":"7507"},{"date":"2019-05-11","distance":"6.036","steps":"11619"},{"date":"2019-05-12","distance":"1.445","steps":"2998"},{"date":"2019-05-13","distance":"1.610","steps":"3248"},{"date":"2019-05-14","distance":"1.017","steps":"2335"},{"date":"2019-05-15","distance":"4.149","steps":"8342"},{"date":"2019-05-16","distance":"4.642","steps":"9495"},{"date":"2019-05-17","distance":"2.399","steps":"5449"},{"date":"2019-05-18","distance":"2.060","steps":"4309"},{"date":"2019-05-19","distance":"1.066","steps":"2357"},{"date":"2019-05-20","distance":"5.849","steps":"11799"},{"date":"2019-05-21","distance":"4.247","steps":"8587"},{"date":"2019-05-22","distance":"3.126","steps":"6508"},{"date":"2019-05-23","distance":"0.728","steps":"1579"},{"date":"2019-05-24","distance":"3.627","steps":"6902"},{"date":"2019-05-25","distance":"1.231","steps":"2619"},{"date":"2019-05-26","distance":"1.051","steps":"2291"},{"date":"2019-05-27","distance":"3.314","steps":"5958"},{"date":"2019-05-28","distance":"0.804","steps":"1686"},{"date":"2019-05-29","distance":"1.941","steps":"4247"},{"date":"2019-05-30","distance":"0.950","steps":"2026"},{"date":"2019-05-31","distance":"4.219","steps":"8111"},{"date":"2019-06-01","distance":"2.177","steps":"3620"},{"date":"2019-06-02","distance":"2.766","steps":"4720"},{"date":"2019-06-03","distance":"4.423","steps":"8730"},{"date":"2019-06-04","distance":"3.817","steps":"7882"},{"date":"2019-06-05","distance":"5.142","steps":"10508"},{"date":"2019-06-06","distance":"4.234","steps":"7761"},{"date":"2019-06-07","distance":"2.800","steps":"5687"},{"date":"2019-06-08","distance":"3.287","steps":"6678"},{"date":"2019-06-09","distance":"2.875","steps":"5747"},{"date":"2019-06-10","distance":"2.486","steps":"4974"},{"date":"2019-06-11","distance":"2.209","steps":"4322"},{"date":"2019-06-12","distance":"1.976","steps":"4166"},{"date":"2019-06-13","distance":"1.275","steps":"2687"},{"date":"2019-06-14","distance":"6.713","steps":"12902"},{"date":"2019-06-15","distance":"2.626","steps":"4556"},{"date":"2019-06-16","distance":"0.843","steps":"1732"},{"date":"2019-06-17","distance":"3.749","steps":"6705"},{"date":"2019-06-18","distance":"2.141","steps":"4390"},{"date":"2019-06-19","distance":"4.853","steps":"9947"},{"date":"2019-06-20","distance":"4.500","steps":"8943"},{"date":"2019-06-21","distance":"5.974","steps":"11708"},{"date":"2019-06-22","distance":"6.939","steps":"13813"},{"date":"2019-06-23","distance":"8.509","steps":"16868"},{"date":"2019-06-24","distance":"3.186","steps":"6430"},{"date":"2019-06-25","distance":"3.607","steps":"7055"},{"date":"2019-06-26","distance":"2.542","steps":"5109"},{"date":"2019-06-27","distance":"1.951","steps":"3711"},{"date":"2019-06-28","distance":"4.365","steps":"8387"},{"date":"2019-06-29","distance":"4.113","steps":"7323"},{"date":"2019-06-30","distance":"2.577","steps":"4508"},{"date":"2019-07-01","distance":"6.851","steps":"12654"},{"date":"2019-07-02","distance":"5.302","steps":"9721"},{"date":"2019-07-03","distance":"0.892","steps":"1971"},{"date":"2019-07-04","distance":"5.733","steps":"10562"},{"date":"2019-07-05","distance":"0.865","steps":"1806"},{"date":"2019-07-06","distance":"0.873","steps":"1746"},{"date":"2019-07-07","distance":"4.668","steps":"8357"},{"date":"2019-07-08","distance":"0.849","steps":"1712"},{"date":"2019-07-09","distance":"3.238","steps":"6159"},{"date":"2019-07-10","distance":"2.650","steps":"5513"},{"date":"2019-07-11","distance":"4.012","steps":"7996"},{"date":"2019-07-12","distance":"4.556","steps":"9098"},{"date":"2019-07-13","distance":"3.883","steps":"7760"},{"date":"2019-07-14","distance":"4.518","steps":"8955"},{"date":"2019-07-15","distance":"6.282","steps":"12484"},{"date":"2019-07-16","distance":"6.763","steps":"13594"},{"date":"2019-07-17","distance":"6.860","steps":"13373"},{"date":"2019-07-18","distance":"3.265","steps":"6420"},{"date":"2019-07-19","distance":"5.069","steps":"10012"},{"date":"2019-07-20","distance":"6.693","steps":"13285"},{"date":"2019-07-21","distance":"3.813","steps":"7595"},{"date":"2019-07-22","distance":"0.708","steps":"1457"},{"date":"2019-07-23","distance":"0.815","steps":"1726"},{"date":"2019-07-24","distance":"1.886","steps":"3983"},{"date":"2019-07-25","distance":"1.047","steps":"2200"},{"date":"2019-07-26","distance":"2.434","steps":"5142"},{"date":"2019-07-27","distance":"2.025","steps":"4103"},{"date":"2019-07-28","distance":"6.287","steps":"12562"},{"date":"2019-07-29","distance":"4.079","steps":"8231"},{"date":"2019-07-30","distance":"2.874","steps":"5861"},{"date":"2019-07-31","distance":"3.393","steps":"6691"},{"date":"2019-08-01","distance":"3.101","steps":"6283"},{"date":"2019-08-02","distance":"0.770","steps":"1591"},{"date":"2019-08-03","distance":"1.419","steps":"2840"},{"date":"2019-08-04","distance":"2.236","steps":"3797"},{"date":"2019-08-05","distance":"3.403","steps":"6224"},{"date":"2019-08-06","distance":"2.635","steps":"5275"},{"date":"2019-08-07","distance":"3.617","steps":"6274"},{"date":"2019-08-08","distance":"1.799","steps":"3741"},{"date":"2019-08-09","distance":"4.495","steps":"9341"},{"date":"2019-08-10","distance":"0.834","steps":"1708"},{"date":"2019-08-11","distance":"4.581","steps":"8200"},{"date":"2019-08-12","distance":"3.402","steps":"6172"},{"date":"2019-08-13","distance":"4.464","steps":"8839"},{"date":"2019-08-14","distance":"5.564","steps":"11383"},{"date":"2019-08-15","distance":"0.366","steps":"744"},{"date":"2019-08-16","distance":"1.371","steps":"2898"},{"date":"2019-08-17","distance":"5.829","steps":"12153"},{"date":"2019-08-18","distance":"5.190","steps":"10100"},{"date":"2019-08-19","distance":"3.931","steps":"7428"},{"date":"2019-08-20","distance":"7.633","steps":"15825"},{"date":"2019-08-21","distance":"4.057","steps":"7869"},{"date":"2019-08-22","distance":"3.517","steps":"6820"},{"date":"2019-08-23","distance":"2.265","steps":"4752"},{"date":"2019-08-24","distance":"1.970","steps":"4083"},{"date":"2019-08-25","distance":"8.513","steps":"17092"},{"date":"2019-08-26","distance":"6.319","steps":"12967"},{"date":"2019-08-27","distance":"9.737","steps":"19203"},{"date":"2019-08-28","distance":"5.433","steps":"11255"},{"date":"2019-08-29","distance":"5.990","steps":"12219"},{"date":"2019-08-30","distance":"10.138","steps":"20384"},{"date":"2019-08-31","distance":"1.506","steps":"3161"},{"date":"2019-09-01","distance":"1.492","steps":"3078"},{"date":"2019-09-02","distance":"3.718","steps":"7688"},{"date":"2019-09-03","distance":"3.492","steps":"7271"},{"date":"2019-09-04","distance":"4.581","steps":"9151"},{"date":"2019-09-05","distance":"4.696","steps":"9656"},{"date":"2019-09-06","distance":"0.694","steps":"1444"},{"date":"2019-09-07","distance":"5.401","steps":"11096"},{"date":"2019-09-08","distance":"2.947","steps":"6132"},{"date":"2019-09-09","distance":"3.684","steps":"7332"},{"date":"2019-09-10","distance":"3.799","steps":"7701"},{"date":"2019-09-11","distance":"5.644","steps":"11516"},{"date":"2019-09-12","distance":"2.256","steps":"4523"},{"date":"2019-09-13","distance":"3.221","steps":"6736"},{"date":"2019-09-14","distance":"4.928","steps":"10091"},{"date":"2019-09-15","distance":"1.912","steps":"3871"},{"date":"2019-09-16","distance":"4.770","steps":"9517"},{"date":"2019-09-17","distance":"2.026","steps":"4082"},{"date":"2019-09-18","distance":"2.844","steps":"5614"},{"date":"2019-09-19","distance":"3.768","steps":"7532"},{"date":"2019-09-20","distance":"4.130","steps":"8178"},{"date":"2019-09-21","distance":"8.076","steps":"16305"},{"date":"2019-09-22","distance":"1.526","steps":"2953"},{"date":"2019-09-23","distance":"3.858","steps":"7623"},{"date":"2019-09-24","distance":"2.370","steps":"4844"},{"date":"2019-09-25","distance":"7.006","steps":"13873"},{"date":"2019-09-26","distance":"4.280","steps":"8514"},{"date":"2019-09-27","distance":"9.372","steps":"18596"},{"date":"2019-09-28","distance":"2.905","steps":"5797"},{"date":"2019-09-29","distance":"1.491","steps":"2846"},{"date":"2019-09-30","distance":"3.321","steps":"6571"},{"date":"2019-10-01","distance":"1.696","steps":"3451"},{"date":"2019-10-02","distance":"2.956","steps":"5925"},{"date":"2019-10-03","distance":"3.329","steps":"6622"},{"date":"2019-10-04","distance":"4.490","steps":"8979"},{"date":"2019-10-05","distance":"6.961","steps":"14429"},{"date":"2019-10-06","distance":"4.050","steps":"8116"},{"date":"2019-10-07","distance":"4.143","steps":"8220"},{"date":"2019-10-08","distance":"4.127","steps":"8015"},{"date":"2019-10-09","distance":"3.404","steps":"6730"},{"date":"2019-10-10","distance":"3.288","steps":"6441"},{"date":"2019-10-11","distance":"3.411","steps":"6612"},{"date":"2019-10-12","distance":"2.013","steps":"4137"},{"date":"2019-10-13","distance":"4.370","steps":"8820"},{"date":"2019-10-14","distance":"2.414","steps":"5141"},{"date":"2019-10-15","distance":"2.522","steps":"5054"},{"date":"2019-10-16","distance":"3.145","steps":"6484"},{"date":"2019-10-17","distance":"2.631","steps":"5619"},{"date":"2019-10-18","distance":"2.913","steps":"6005"},{"date":"2019-10-19","distance":"3.271","steps":"7109"},{"date":"2019-10-20","distance":"1.436","steps":"3019"},{"date":"2019-10-21","distance":"5.969","steps":"11953"},{"date":"2019-10-22","distance":"1.424","steps":"3022"},{"date":"2019-10-23","distance":"3.233","steps":"6466"},{"date":"2019-10-24","distance":"3.490","steps":"7223"},{"date":"2019-10-25","distance":"6.755","steps":"14284"},{"date":"2019-10-26","distance":"4.270","steps":"8516"},{"date":"2019-10-27","distance":"1.467","steps":"2946"},{"date":"2019-10-28","distance":"2.744","steps":"5386"},{"date":"2019-10-29","distance":"2.588","steps":"5539"},{"date":"2019-10-30","distance":"3.059","steps":"6406"},{"date":"2019-10-31","distance":"4.681","steps":"9818"},{"date":"2019-11-01","distance":"5.218","steps":"11236"},{"date":"2019-11-02","distance":"1.838","steps":"3801"},{"date":"2019-11-03","distance":"3.173","steps":"6878"},{"date":"2019-11-04","distance":"2.511","steps":"5275"},{"date":"2019-11-05","distance":"2.740","steps":"5845"},{"date":"2019-11-06","distance":"2.140","steps":"4280"},{"date":"2019-11-07","distance":"4.442","steps":"9395"},{"date":"2019-11-08","distance":"4.253","steps":"9117"},{"date":"2019-11-09","distance":"3.265","steps":"7199"},{"date":"2019-11-10","distance":"4.346","steps":"9313"},{"date":"2019-11-11","distance":"3.001","steps":"6408"},{"date":"2019-11-12","distance":"1.932","steps":"4062"},{"date":"2019-11-13","distance":"3.723","steps":"7837"},{"date":"2019-11-14","distance":"2.726","steps":"5768"},{"date":"2019-11-15","distance":"4.686","steps":"9868"},{"date":"2019-11-16","distance":"4.241","steps":"9137"},{"date":"2019-11-17","distance":"0.866","steps":"1867"},{"date":"2019-11-18","distance":"3.255","steps":"6811"},{"date":"2019-11-19","distance":"2.083","steps":"4249"},{"date":"2019-11-20","distance":"3.070","steps":"6500"},{"date":"2019-11-21","distance":"1.451","steps":"3188"},{"date":"2019-11-22","distance":"0.767","steps":"1538"},{"date":"2019-11-23","distance":"3.849","steps":"8159"},{"date":"2019-11-24","distance":"3.961","steps":"8358"},{"date":"2019-11-25","distance":"3.383","steps":"7190"},{"date":"2019-11-26","distance":"3.224","steps":"6884"},{"date":"2019-11-27","distance":"2.394","steps":"4779"},{"date":"2019-11-28","distance":"4.166","steps":"8691"},{"date":"2019-11-29","distance":"3.158","steps":"6987"},{"date":"2019-11-30","distance":"3.612","steps":"7276"},{"date":"2019-12-01","distance":"1.383","steps":"2933"},{"date":"2019-12-02","distance":"3.888","steps":"8202"},{"date":"2019-12-03","distance":"2.193","steps":"4696"},{"date":"2019-12-04","distance":"3.941","steps":"8508"},{"date":"2019-12-05","distance":"3.910","steps":"8382"},{"date":"2019-12-06","distance":"1.543","steps":"3339"},{"date":"2019-12-07","distance":"4.122","steps":"8685"},{"date":"2019-12-08","distance":"2.686","steps":"5676"},{"date":"2019-12-09","distance":"4.622","steps":"9136"},{"date":"2019-12-10","distance":"2.299","steps":"4792"},{"date":"2019-12-11","distance":"4.201","steps":"8749"},{"date":"2019-12-12","distance":"2.001","steps":"4345"},{"date":"2019-12-13","distance":"2.679","steps":"5354"},{"date":"2019-12-14","distance":"5.075","steps":"10511"},{"date":"2019-12-15","distance":"4.153","steps":"8697"},{"date":"2019-12-16","distance":"3.229","steps":"6582"},{"date":"2019-12-17","distance":"1.922","steps":"4155"},{"date":"2019-12-18","distance":"6.250","steps":"13293"},{"date":"2019-12-19","distance":"2.869","steps":"6059"},{"date":"2019-12-20","distance":"2.118","steps":"4263"},{"date":"2019-12-21","distance":"1.174","steps":"2409"},{"date":"2019-12-22","distance":"2.536","steps":"5248"},{"date":"2019-12-23","distance":"1.776","steps":"3772"},{"date":"2019-12-24","distance":"1.357","steps":"2818"},{"date":"2019-12-25","distance":"0.739","steps":"1547"}] 2 | -------------------------------------------------------------------------------- /data/rings.json: -------------------------------------------------------------------------------- 1 | {"2019-01-01": {"move":1.215625,"exercise":1.6,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-01-02": {"move":1.896875,"exercise":2.166666666666667,"stand":1.333333333333333,"rings":1},"2019-01-03": {"move":1.2125,"exercise":0.4333333333333333,"stand":1.083333333333333,"rings":0.8100000000000001},"2019-01-04": {"move":1.659375,"exercise":1.566666666666667,"stand":1.333333333333333,"rings":1},"2019-01-05": {"move":0.86875,"exercise":0.2333333333333333,"stand":0.75,"rings":0.62},"2019-01-06": {"move":0.81875,"exercise":0.2333333333333333,"stand":0.6666666666666666,"rings":0.57},"2019-01-07": {"move":2.059375,"exercise":2.3,"stand":1.25,"rings":1},"2019-01-08": {"move":2.384375,"exercise":3.266666666666667,"stand":1.166666666666667,"rings":1},"2019-01-09": {"move":1.74375,"exercise":1.366666666666667,"stand":1.333333333333333,"rings":1},"2019-01-10": {"move":1.609375,"exercise":1.133333333333333,"stand":1.416666666666667,"rings":1},"2019-01-11": {"move":2.075,"exercise":2.233333333333333,"stand":1.583333333333333,"rings":1},"2019-01-12": {"move":0.74375,"exercise":0.2666666666666667,"stand":0.8333333333333334,"rings":0.61},"2019-01-13": {"move":1.0375,"exercise":0.2333333333333333,"stand":1.25,"rings":0.74},"2019-01-14": {"move":1.165625,"exercise":0.5666666666666667,"stand":1.083333333333333,"rings":0.86},"2019-01-15": {"move":3.121875,"exercise":3.233333333333333,"stand":1.416666666666667,"rings":1},"2019-01-16": {"move":1.790625,"exercise":1.7,"stand":1.166666666666667,"rings":1},"2019-01-17": {"move":2.415625,"exercise":2.5,"stand":1.333333333333333,"rings":1},"2019-01-18": {"move":1.91875,"exercise":1.466666666666667,"stand":1.416666666666667,"rings":1},"2019-01-19": {"move":2.46875,"exercise":0.8,"stand":1.583333333333333,"rings":0.93},"2019-01-20": {"move":3.425,"exercise":2.5,"stand":1.583333333333333,"rings":1},"2019-01-21": {"move":1.375,"exercise":0.8666666666666667,"stand":1.083333333333333,"rings":0.96},"2019-01-22": {"move":1.09375,"exercise":0.5333333333333333,"stand":1,"rings":0.84},"2019-01-23": {"move":2.1625,"exercise":2.266666666666667,"stand":1.416666666666667,"rings":1},"2019-01-24": {"move":1.78125,"exercise":1.666666666666667,"stand":1.333333333333333,"rings":1},"2019-01-25": {"move":2.6625,"exercise":3.266666666666667,"stand":1.333333333333333,"rings":1},"2019-01-26": {"move":0.99375,"exercise":0.06666666666666667,"stand":1.25,"rings":0.6899999999999999},"2019-01-27": {"move":1.221875,"exercise":0.2333333333333333,"stand":1.166666666666667,"rings":0.74},"2019-01-28": {"move":1.222857142857143,"exercise":1.4,"stand":1,"rings":1},"2019-01-29": {"move":0.5857142857142857,"exercise":0.1,"stand":0.75,"rings":0.48},"2019-01-30": {"move":0.9057142857142857,"exercise":0.4,"stand":1,"rings":0.77},"2019-01-31": {"move":0.9314285714285714,"exercise":0.3,"stand":0.9166666666666666,"rings":0.72},"2019-02-01": {"move":0.8657142857142858,"exercise":0.4666666666666667,"stand":0.9166666666666666,"rings":0.75},"2019-02-02": {"move":0.8171428571428572,"exercise":0.2,"stand":1,"rings":0.67},"2019-02-03": {"move":0.7742857142857142,"exercise":0.3333333333333333,"stand":0.75,"rings":0.62},"2019-02-04": {"move":1.522857142857143,"exercise":1.2,"stand":1.166666666666667,"rings":1},"2019-02-05": {"move":0.9885714285714285,"exercise":0.1333333333333333,"stand":1.083333333333333,"rings":0.71},"2019-02-06": {"move":1.037142857142857,"exercise":1.1,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-02-07": {"move":1.714285714285714,"exercise":2.566666666666667,"stand":1.166666666666667,"rings":1},"2019-02-08": {"move":1.948571428571429,"exercise":2.6,"stand":1.416666666666667,"rings":1},"2019-02-09": {"move":1.037142857142857,"exercise":0.6333333333333333,"stand":1.083333333333333,"rings":0.88},"2019-02-10": {"move":1.282857142857143,"exercise":1.533333333333333,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-02-11": {"move":1.208571428571429,"exercise":0.9666666666666667,"stand":1.333333333333333,"rings":0.99},"2019-02-12": {"move":0.7171428571428572,"exercise":0.2333333333333333,"stand":0.9166666666666666,"rings":0.62},"2019-02-13": {"move":1.968571428571429,"exercise":2.4,"stand":0.9166666666666666,"rings":0.97},"2019-02-14": {"move":1.522857142857143,"exercise":1.233333333333333,"stand":1.083333333333333,"rings":1},"2019-02-15": {"move":0.7514285714285714,"exercise":0.2666666666666667,"stand":0.8333333333333334,"rings":0.62},"2019-02-16": {"move":1.171428571428571,"exercise":0.7333333333333333,"stand":1.333333333333333,"rings":0.91},"2019-02-17": {"move":1.831428571428571,"exercise":2.4,"stand":1.333333333333333,"rings":1},"2019-02-18": {"move":1.42,"exercise":1.566666666666667,"stand":1.083333333333333,"rings":1},"2019-02-19": {"move":2.402857142857143,"exercise":3.566666666666667,"stand":1.5,"rings":1},"2019-02-20": {"move":1.331428571428571,"exercise":1.033333333333333,"stand":1.083333333333333,"rings":1},"2019-02-21": {"move":1.874285714285714,"exercise":1.633333333333333,"stand":1.25,"rings":1},"2019-02-22": {"move":2.094285714285714,"exercise":3.266666666666667,"stand":1.25,"rings":1},"2019-02-23": {"move":3.56,"exercise":5.7,"stand":1.083333333333333,"rings":1},"2019-02-24": {"move":1.32,"exercise":1.6,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-02-25": {"move":1.468571428571429,"exercise":1.633333333333333,"stand":1,"rings":1},"2019-02-26": {"move":1.202857142857143,"exercise":0.9666666666666667,"stand":1,"rings":0.99},"2019-02-27": {"move":1.208571428571429,"exercise":1.333333333333333,"stand":1.166666666666667,"rings":1},"2019-02-28": {"move":1.502857142857143,"exercise":1.833333333333333,"stand":1.166666666666667,"rings":1},"2019-03-01": {"move":1.768571428571428,"exercise":2.033333333333333,"stand":1,"rings":1},"2019-03-02": {"move":0.8114285714285714,"exercise":0.03333333333333333,"stand":1.166666666666667,"rings":0.62},"2019-03-03": {"move":1.154285714285714,"exercise":1.033333333333333,"stand":1.166666666666667,"rings":1},"2019-03-04": {"move":1.8,"exercise":2.233333333333333,"stand":1.333333333333333,"rings":1},"2019-03-05": {"move":1.674285714285714,"exercise":2.1,"stand":1.166666666666667,"rings":1},"2019-03-06": {"move":1.688571428571429,"exercise":2.466666666666667,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-03-07": {"move":2.445714285714286,"exercise":3.633333333333333,"stand":1.416666666666667,"rings":1},"2019-03-08": {"move":1.422857142857143,"exercise":2.533333333333333,"stand":1.166666666666667,"rings":1},"2019-03-09": {"move":1.597142857142857,"exercise":1.666666666666667,"stand":1.166666666666667,"rings":1},"2019-03-10": {"move":3.008571428571428,"exercise":5.7,"stand":1.083333333333333,"rings":1},"2019-03-11": {"move":2.457894736842105,"exercise":4.733333333333333,"stand":1.25,"rings":1},"2019-03-12": {"move":1.402631578947368,"exercise":1.9,"stand":1,"rings":1},"2019-03-13": {"move":1.844736842105263,"exercise":2.7,"stand":1.166666666666667,"rings":1},"2019-03-14": {"move":1.789473684210526,"exercise":3.1,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-03-15": {"move":2.160526315789474,"exercise":4.633333333333334,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-03-16": {"move":1.105263157894737,"exercise":1.3,"stand":1.083333333333333,"rings":1},"2019-03-17": {"move":1.555263157894737,"exercise":2.333333333333333,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-03-18": {"move":1.3125,"exercise":1.733333333333333,"stand":1,"rings":1},"2019-03-19": {"move":1.325,"exercise":2.1,"stand":0.9166666666666666,"rings":0.97},"2019-03-20": {"move":1.5775,"exercise":2.333333333333333,"stand":1.25,"rings":1},"2019-03-21": {"move":1.855,"exercise":3.633333333333333,"stand":1.083333333333333,"rings":1},"2019-03-22": {"move":1.655,"exercise":2.533333333333333,"stand":1.25,"rings":1},"2019-03-23": {"move":1.5175,"exercise":0.5,"stand":1.75,"rings":0.83},"2019-03-24": {"move":2.3025,"exercise":4.333333333333333,"stand":1.583333333333333,"rings":1},"2019-03-25": {"move":0.5047619047619047,"exercise":0.8,"stand":0.75,"rings":0.6899999999999999},"2019-03-26": {"move":2.073809523809524,"exercise":4.866666666666666,"stand":0.75,"rings":0.92},"2019-03-27": {"move":1.040476190476191,"exercise":1.466666666666667,"stand":1.166666666666667,"rings":1},"2019-03-28": {"move":1.461904761904762,"exercise":4.066666666666666,"stand":1.166666666666667,"rings":1},"2019-03-29": {"move":1.528571428571428,"exercise":18.9,"stand":1.666666666666667,"rings":1},"2019-03-30": {"move":1.366666666666667,"exercise":2.5,"stand":1.083333333333333,"rings":1},"2019-03-31": {"move":1.766666666666667,"exercise":3.2,"stand":0.9166666666666666,"rings":0.97},"2019-04-01": {"move":0.8285714285714286,"exercise":0.7,"stand":1,"rings":0.84},"2019-04-02": {"move":0.6071428571428571,"exercise":0.3,"stand":0.75,"rings":0.55},"2019-04-03": {"move":1.028571428571428,"exercise":1.3,"stand":1.083333333333333,"rings":1},"2019-04-04": {"move":0.5190476190476191,"exercise":0.1333333333333333,"stand":0.9166666666666666,"rings":0.52},"2019-04-05": {"move":1.042857142857143,"exercise":1,"stand":1.166666666666667,"rings":1},"2019-04-06": {"move":1.495238095238095,"exercise":2.066666666666667,"stand":1.166666666666667,"rings":1},"2019-04-07": {"move":0.9428571428571428,"exercise":1,"stand":1.083333333333333,"rings":0.98},"2019-04-08": {"move":2.20952380952381,"exercise":2.7,"stand":1.25,"rings":1},"2019-04-09": {"move":0.6976190476190476,"exercise":0.1666666666666667,"stand":1,"rings":0.62},"2019-04-10": {"move":0.5976190476190476,"exercise":0.2,"stand":1,"rings":0.6},"2019-04-11": {"move":2.45,"exercise":6.2,"stand":1.333333333333333,"rings":1},"2019-04-12": {"move":1.211904761904762,"exercise":1.333333333333333,"stand":1.5,"rings":1},"2019-04-13": {"move":1.116666666666667,"exercise":1.1,"stand":1.25,"rings":1},"2019-04-14": {"move":1.038095238095238,"exercise":0.7333333333333333,"stand":1,"rings":0.91},"2019-04-15": {"move":1.30952380952381,"exercise":1.6,"stand":1.166666666666667,"rings":1},"2019-04-16": {"move":1.2,"exercise":1.133333333333333,"stand":1.416666666666667,"rings":1},"2019-04-17": {"move":1.247619047619048,"exercise":1.633333333333333,"stand":1.083333333333333,"rings":1},"2019-04-18": {"move":0.9166666666666666,"exercise":0.7666666666666667,"stand":1.25,"rings":0.89},"2019-04-19": {"move":1.814285714285714,"exercise":2.8,"stand":1.166666666666667,"rings":1},"2019-04-20": {"move":1.733333333333333,"exercise":1.933333333333333,"stand":1.333333333333333,"rings":1},"2019-04-21": {"move":0.9380952380952381,"exercise":0.7666666666666667,"stand":1.083333333333333,"rings":0.9},"2019-04-22": {"move":1.152380952380952,"exercise":1.933333333333333,"stand":0.75,"rings":0.92},"2019-04-23": {"move":0.8690476190476191,"exercise":0.5,"stand":1.333333333333333,"rings":0.79},"2019-04-24": {"move":0.4642857142857143,"exercise":0.03333333333333333,"stand":0.6666666666666666,"rings":0.39},"2019-04-25": {"move":0.6761904761904762,"exercise":0.3333333333333333,"stand":1,"rings":0.67},"2019-04-26": {"move":1.292857142857143,"exercise":1.6,"stand":1.416666666666667,"rings":1},"2019-04-27": {"move":1.066666666666667,"exercise":0.8,"stand":1.166666666666667,"rings":0.93},"2019-04-28": {"move":1.040476190476191,"exercise":1.5,"stand":1.083333333333333,"rings":1},"2019-04-29": {"move":1.278571428571428,"exercise":2.033333333333333,"stand":0.9166666666666666,"rings":0.97},"2019-04-30": {"move":1.35,"exercise":2.366666666666667,"stand":0.75,"rings":0.92},"2019-05-01": {"move":1.002380952380952,"exercise":1.5,"stand":1,"rings":1},"2019-05-02": {"move":1.504761904761905,"exercise":2.533333333333333,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-05-03": {"move":0.5023809523809524,"exercise":0.2,"stand":0.5833333333333334,"rings":0.43},"2019-05-04": {"move":0.7380952380952381,"exercise":0.3333333333333333,"stand":0.9166666666666666,"rings":0.66},"2019-05-05": {"move":1.040476190476191,"exercise":1.366666666666667,"stand":1,"rings":1},"2019-05-06": {"move":1.011904761904762,"exercise":0.4666666666666667,"stand":1,"rings":0.82},"2019-05-07": {"move":0.6928571428571428,"exercise":0.2333333333333333,"stand":1.083333333333333,"rings":0.64},"2019-05-08": {"move":0.9380952380952381,"exercise":0.2666666666666667,"stand":1.166666666666667,"rings":0.73},"2019-05-09": {"move":1.111904761904762,"exercise":1,"stand":1,"rings":1},"2019-05-10": {"move":1.164285714285714,"exercise":1.333333333333333,"stand":1.25,"rings":1},"2019-05-11": {"move":3.785714285714286,"exercise":5.766666666666667,"stand":1.25,"rings":1},"2019-05-12": {"move":0.6976190476190476,"exercise":0.2333333333333333,"stand":1.083333333333333,"rings":0.64},"2019-05-13": {"move":0.6904761904761905,"exercise":0.5666666666666667,"stand":0.75,"rings":0.67},"2019-05-14": {"move":0.5380952380952381,"exercise":0.06666666666666667,"stand":0.8333333333333334,"rings":0.48},"2019-05-15": {"move":1.097619047619048,"exercise":2.033333333333333,"stand":0.6666666666666666,"rings":0.89},"2019-05-16": {"move":1.142857142857143,"exercise":2.2,"stand":0.75,"rings":0.92},"2019-05-17": {"move":0.8357142857142857,"exercise":0.2666666666666667,"stand":1.166666666666667,"rings":0.7},"2019-05-18": {"move":0.7714285714285715,"exercise":0.3,"stand":0.9166666666666666,"rings":0.66},"2019-05-19": {"move":0.5904761904761905,"exercise":0.2333333333333333,"stand":0.6666666666666666,"rings":0.5},"2019-05-20": {"move":1.823809523809524,"exercise":1.9,"stand":1.166666666666667,"rings":1},"2019-05-21": {"move":1.216666666666667,"exercise":1.2,"stand":1.083333333333333,"rings":1},"2019-05-22": {"move":0.9571428571428572,"exercise":1.266666666666667,"stand":0.75,"rings":0.9},"2019-05-23": {"move":0.5357142857142857,"exercise":0.2,"stand":0.5833333333333334,"rings":0.44},"2019-05-24": {"move":1.111904761904762,"exercise":1.466666666666667,"stand":0.75,"rings":0.92},"2019-05-25": {"move":0.7142857142857143,"exercise":0.2,"stand":1.166666666666667,"rings":0.64},"2019-05-26": {"move":0.7261904761904762,"exercise":0.1333333333333333,"stand":1.083333333333333,"rings":0.62},"2019-05-27": {"move":1.023809523809524,"exercise":0.5,"stand":1.166666666666667,"rings":0.83},"2019-05-28": {"move":0.6166666666666667,"exercise":0.1666666666666667,"stand":0.9166666666666666,"rings":0.57},"2019-05-29": {"move":0.75,"exercise":0.2333333333333333,"stand":1.166666666666667,"rings":0.66},"2019-05-30": {"move":0.5928571428571429,"exercise":0.2666666666666667,"stand":0.9166666666666666,"rings":0.59},"2019-05-31": {"move":1.219047619047619,"exercise":1.766666666666667,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-06-01": {"move":0.9238095238095239,"exercise":0.6333333333333333,"stand":1.166666666666667,"rings":0.85},"2019-06-02": {"move":0.9071428571428571,"exercise":0.5666666666666667,"stand":1.083333333333333,"rings":0.82},"2019-06-03": {"move":1.447368421052632,"exercise":0.9,"stand":1.25,"rings":0.97},"2019-06-04": {"move":1.210526315789474,"exercise":1.466666666666667,"stand":1.083333333333333,"rings":1},"2019-06-05": {"move":1.526315789473684,"exercise":1.433333333333333,"stand":1.333333333333333,"rings":1},"2019-06-06": {"move":1.434210526315789,"exercise":2.233333333333333,"stand":1,"rings":1},"2019-06-07": {"move":1.081578947368421,"exercise":0.7333333333333333,"stand":1.333333333333333,"rings":0.91},"2019-06-08": {"move":1.210526315789474,"exercise":0.8666666666666667,"stand":1.583333333333333,"rings":0.96},"2019-06-09": {"move":1.028947368421053,"exercise":0.8333333333333334,"stand":1.083333333333333,"rings":0.9399999999999999},"2019-06-10": {"move":0.9657894736842105,"exercise":0.8666666666666667,"stand":0.8333333333333334,"rings":0.89},"2019-06-11": {"move":1.91578947368421,"exercise":2.6,"stand":1.083333333333333,"rings":1},"2019-06-12": {"move":1.089473684210526,"exercise":0.1333333333333333,"stand":0.8333333333333334,"rings":0.66},"2019-06-13": {"move":0.7973684210526316,"exercise":0.4666666666666667,"stand":0.9166666666666666,"rings":0.73},"2019-06-14": {"move":1.842105263157895,"exercise":2.566666666666667,"stand":0.9166666666666666,"rings":0.97},"2019-06-15": {"move":1.021052631578947,"exercise":0.6333333333333333,"stand":0.75,"rings":0.79},"2019-06-16": {"move":0.6105263157894737,"exercise":0.2333333333333333,"stand":1,"rings":0.61},"2019-06-17": {"move":1.739473684210526,"exercise":1.7,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-06-18": {"move":0.8447368421052631,"exercise":0.4666666666666667,"stand":0.8333333333333334,"rings":0.71},"2019-06-19": {"move":1.58421052631579,"exercise":1.033333333333333,"stand":1.416666666666667,"rings":1},"2019-06-20": {"move":1.323684210526316,"exercise":1,"stand":1,"rings":1},"2019-06-21": {"move":1.589473684210526,"exercise":1.566666666666667,"stand":1.166666666666667,"rings":1},"2019-06-22": {"move":1.873684210526316,"exercise":1,"stand":1.416666666666667,"rings":1},"2019-06-23": {"move":2.652631578947368,"exercise":2.533333333333333,"stand":1.666666666666667,"rings":1},"2019-06-24": {"move":1.063157894736842,"exercise":1.033333333333333,"stand":0.9166666666666666,"rings":0.97},"2019-06-25": {"move":1.163157894736842,"exercise":1.2,"stand":1.166666666666667,"rings":1},"2019-06-26": {"move":0.7763157894736842,"exercise":0.4666666666666667,"stand":1.166666666666667,"rings":0.75},"2019-06-27": {"move":0.868421052631579,"exercise":0.9333333333333333,"stand":1,"rings":0.93},"2019-06-28": {"move":1.486842105263158,"exercise":1.7,"stand":1.333333333333333,"rings":1},"2019-06-29": {"move":1.397368421052632,"exercise":1.7,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-06-30": {"move":1.228947368421053,"exercise":0.5666666666666667,"stand":1.166666666666667,"rings":0.86},"2019-07-01": {"move":1.931578947368421,"exercise":3.366666666666667,"stand":1,"rings":1},"2019-07-02": {"move":1.563157894736842,"exercise":2.4,"stand":1,"rings":1},"2019-07-03": {"move":0.6973684210526315,"exercise":0.2333333333333333,"stand":0.8333333333333334,"rings":0.59},"2019-07-04": {"move":1.523684210526316,"exercise":1.966666666666667,"stand":1,"rings":1},"2019-07-05": {"move":0.531578947368421,"exercise":0.2666666666666667,"stand":0.9166666666666666,"rings":0.57},"2019-07-06": {"move":0.6052631578947368,"exercise":0.1333333333333333,"stand":0.8333333333333334,"rings":0.52},"2019-07-07": {"move":1.4,"exercise":1.9,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-07-08": {"move":0.6210526315789474,"exercise":0.1,"stand":0.8333333333333334,"rings":0.52},"2019-07-09": {"move":1.228947368421053,"exercise":1.333333333333333,"stand":1.083333333333333,"rings":1},"2019-07-10": {"move":1.071052631578947,"exercise":0.3333333333333333,"stand":1.166666666666667,"rings":0.78},"2019-07-11": {"move":1.723684210526316,"exercise":1.766666666666667,"stand":1.416666666666667,"rings":1},"2019-07-12": {"move":1.510526315789474,"exercise":1.766666666666667,"stand":1.25,"rings":1},"2019-07-13": {"move":1.002631578947368,"exercise":0.5666666666666667,"stand":0.9166666666666666,"rings":0.83},"2019-07-14": {"move":2.057894736842105,"exercise":2.766666666666667,"stand":1.333333333333333,"rings":1},"2019-07-15": {"move":1.528947368421053,"exercise":2.2,"stand":1,"rings":1},"2019-07-16": {"move":1.707894736842105,"exercise":2.6,"stand":1.25,"rings":1},"2019-07-17": {"move":1.905263157894737,"exercise":3.733333333333333,"stand":1.083333333333333,"rings":1},"2019-07-18": {"move":1.128947368421053,"exercise":1.2,"stand":1.083333333333333,"rings":1},"2019-07-19": {"move":1.315789473684211,"exercise":1.1,"stand":1.416666666666667,"rings":1},"2019-07-20": {"move":1.942105263157895,"exercise":1.866666666666667,"stand":1.583333333333333,"rings":1},"2019-07-21": {"move":1.357894736842105,"exercise":1,"stand":1.166666666666667,"rings":1},"2019-07-22": {"move":0.5026315789473684,"exercise":0.1333333333333333,"stand":0.5,"rings":0.38},"2019-07-23": {"move":0.6052631578947368,"exercise":0.1,"stand":0.8333333333333334,"rings":0.51},"2019-07-24": {"move":0.7947368421052632,"exercise":0.1666666666666667,"stand":0.9166666666666666,"rings":0.63},"2019-07-25": {"move":0.6921052631578948,"exercise":0.1666666666666667,"stand":0.8333333333333334,"rings":0.5600000000000001},"2019-07-26": {"move":0.9052631578947369,"exercise":0.5333333333333333,"stand":1,"rings":0.8100000000000001},"2019-07-27": {"move":0.9447368421052632,"exercise":0.7666666666666667,"stand":1,"rings":0.9},"2019-07-28": {"move":1.565789473684211,"exercise":1.4,"stand":1.5,"rings":1},"2019-07-29": {"move":1.08421052631579,"exercise":0.9666666666666667,"stand":1.083333333333333,"rings":0.99},"2019-07-30": {"move":1.068421052631579,"exercise":0.9,"stand":1,"rings":0.97},"2019-07-31": {"move":1.047368421052632,"exercise":1,"stand":1.083333333333333,"rings":1},"2019-08-01": {"move":0.9368421052631579,"exercise":0.5,"stand":1.416666666666667,"rings":0.8100000000000001},"2019-08-02": {"move":0.5815789473684211,"exercise":0.1333333333333333,"stand":0.9166666666666666,"rings":0.54},"2019-08-03": {"move":0.7789473684210526,"exercise":0.2,"stand":0.8333333333333334,"rings":0.6},"2019-08-04": {"move":1.063157894736842,"exercise":0.6,"stand":1,"rings":0.87},"2019-08-05": {"move":1.2,"exercise":1.7,"stand":0.9166666666666666,"rings":0.97},"2019-08-06": {"move":1,"exercise":0.5666666666666667,"stand":1,"rings":0.86},"2019-08-07": {"move":2.410526315789474,"exercise":2.466666666666667,"stand":0.9166666666666666,"rings":0.97},"2019-08-08": {"move":0.8236842105263158,"exercise":0.2666666666666667,"stand":0.9166666666666666,"rings":0.67},"2019-08-09": {"move":1.436842105263158,"exercise":1.533333333333333,"stand":1.25,"rings":1},"2019-08-10": {"move":0.6552631578947369,"exercise":0.1333333333333333,"stand":0.9166666666666666,"rings":0.57},"2019-08-11": {"move":1.339473684210526,"exercise":1.866666666666667,"stand":0.6666666666666666,"rings":0.89},"2019-08-12": {"move":1.181578947368421,"exercise":1.733333333333333,"stand":0.75,"rings":0.92},"2019-08-13": {"move":1.38421052631579,"exercise":2.333333333333333,"stand":0.9166666666666666,"rings":0.97},"2019-08-14": {"move":1.5,"exercise":2.1,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-08-15": {"move":0.45,"exercise":0.1333333333333333,"stand":0.5833333333333334,"rings":0.39},"2019-08-16": {"move":0.7947368421052632,"exercise":0.3333333333333333,"stand":1.166666666666667,"rings":0.71},"2019-08-17": {"move":1.647368421052632,"exercise":2.8,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-08-18": {"move":1.644736842105263,"exercise":2.766666666666667,"stand":0.9166666666666666,"rings":0.97},"2019-08-19": {"move":1.243589743589744,"exercise":0.7333333333333333,"stand":0.9166666666666666,"rings":0.88},"2019-08-20": {"move":1.982051282051282,"exercise":3.9,"stand":1.166666666666667,"rings":1},"2019-08-21": {"move":1.184615384615385,"exercise":0.9333333333333333,"stand":0.9166666666666666,"rings":0.95},"2019-08-22": {"move":2.282051282051282,"exercise":2.933333333333333,"stand":1.083333333333333,"rings":1},"2019-08-23": {"move":0.8923076923076924,"exercise":0.5,"stand":1.083333333333333,"rings":0.8},"2019-08-24": {"move":0.8974358974358975,"exercise":0.4,"stand":1,"rings":0.77},"2019-08-25": {"move":1.994871794871795,"exercise":2.3,"stand":1.333333333333333,"rings":1},"2019-08-26": {"move":1.423076923076923,"exercise":1.6,"stand":1,"rings":1},"2019-08-27": {"move":3.197435897435898,"exercise":4.766666666666667,"stand":1.166666666666667,"rings":1},"2019-08-28": {"move":1.292307692307692,"exercise":0.8666666666666667,"stand":1,"rings":0.96},"2019-08-29": {"move":1.535897435897436,"exercise":0.9666666666666667,"stand":1.333333333333333,"rings":0.99},"2019-08-30": {"move":2.692307692307693,"exercise":5.1,"stand":1.083333333333333,"rings":1},"2019-08-31": {"move":0.6897435897435897,"exercise":0,"stand":0.9166666666666666,"rings":0.54},"2019-09-01": {"move":0.7153846153846154,"exercise":0.1333333333333333,"stand":1.083333333333333,"rings":0.62},"2019-09-02": {"move":1.041025641025641,"exercise":0.6333333333333333,"stand":1,"rings":0.88},"2019-09-03": {"move":0.9948717948717949,"exercise":0.4333333333333333,"stand":1.083333333333333,"rings":0.8100000000000001},"2019-09-04": {"move":1.169230769230769,"exercise":1.266666666666667,"stand":1.166666666666667,"rings":1},"2019-09-05": {"move":1.346153846153846,"exercise":1.2,"stand":1.083333333333333,"rings":1},"2019-09-06": {"move":0.4846153846153846,"exercise":0.03333333333333333,"stand":0.75,"rings":0.42},"2019-09-07": {"move":1.343589743589743,"exercise":0.9333333333333333,"stand":1.25,"rings":0.98},"2019-09-08": {"move":0.882051282051282,"exercise":0.2,"stand":1,"rings":0.6899999999999999},"2019-09-09": {"move":1,"exercise":1.3,"stand":1,"rings":1},"2019-09-10": {"move":1.035897435897436,"exercise":0.8,"stand":0.8333333333333334,"rings":0.88},"2019-09-11": {"move":1.387179487179487,"exercise":1.433333333333333,"stand":1.166666666666667,"rings":1},"2019-09-12": {"move":0.8538461538461538,"exercise":0.4666666666666667,"stand":0.8333333333333334,"rings":0.72},"2019-09-13": {"move":1.017948717948718,"exercise":0.4666666666666667,"stand":1.333333333333333,"rings":0.82},"2019-09-14": {"move":1.023076923076923,"exercise":0.8333333333333334,"stand":0.75,"rings":0.86},"2019-09-15": {"move":0.8538461538461538,"exercise":0.3333333333333333,"stand":1,"rings":0.73},"2019-09-16": {"move":1.351282051282051,"exercise":1.433333333333333,"stand":1.25,"rings":1},"2019-09-17": {"move":0.6923076923076923,"exercise":0.7,"stand":0.75,"rings":0.71},"2019-09-18": {"move":0.9897435897435898,"exercise":0.8333333333333334,"stand":1.25,"rings":0.9399999999999999},"2019-09-19": {"move":1.051282051282051,"exercise":0.9333333333333333,"stand":1.166666666666667,"rings":0.98},"2019-09-20": {"move":1.212820512820513,"exercise":1.1,"stand":1.333333333333333,"rings":1},"2019-09-21": {"move":1.887179487179487,"exercise":2.666666666666667,"stand":1,"rings":1},"2019-09-22": {"move":0.7076923076923077,"exercise":0.06666666666666667,"stand":1.083333333333333,"rings":0.59},"2019-09-23": {"move":1.082051282051282,"exercise":0.9666666666666667,"stand":1.25,"rings":0.99},"2019-09-24": {"move":0.8564102564102564,"exercise":0.3666666666666666,"stand":1,"rings":0.74},"2019-09-25": {"move":1.546153846153846,"exercise":1.333333333333333,"stand":1.333333333333333,"rings":1},"2019-09-26": {"move":1.194871794871795,"exercise":1.133333333333333,"stand":1,"rings":1},"2019-09-27": {"move":1.982051282051282,"exercise":2.8,"stand":1.416666666666667,"rings":1},"2019-09-28": {"move":0.9025641025641026,"exercise":0.2333333333333333,"stand":0.8333333333333334,"rings":0.66},"2019-09-29": {"move":0.9846153846153847,"exercise":0.6666666666666666,"stand":0.6666666666666666,"rings":0.77},"2019-09-30": {"move":0.9897435897435898,"exercise":0.8333333333333334,"stand":1,"rings":0.9399999999999999},"2019-10-01": {"move":0.7,"exercise":0.4333333333333333,"stand":0.8333333333333334,"rings":0.66},"2019-10-02": {"move":0.882051282051282,"exercise":0.7333333333333333,"stand":1.083333333333333,"rings":0.87},"2019-10-03": {"move":1.092307692307692,"exercise":1.2,"stand":1.083333333333333,"rings":1},"2019-10-04": {"move":1.379487179487179,"exercise":1.066666666666667,"stand":1.333333333333333,"rings":1},"2019-10-05": {"move":1.925641025641026,"exercise":3.2,"stand":1.25,"rings":1},"2019-10-06": {"move":1.174358974358974,"exercise":1.1,"stand":1.083333333333333,"rings":1},"2019-10-07": {"move":1.171794871794872,"exercise":0.9,"stand":1.166666666666667,"rings":0.97},"2019-10-08": {"move":0.9897435897435898,"exercise":0.8333333333333334,"stand":1,"rings":0.9399999999999999},"2019-10-09": {"move":1.11025641025641,"exercise":1.066666666666667,"stand":1.166666666666667,"rings":1},"2019-10-10": {"move":0.9051282051282051,"exercise":1,"stand":0.8333333333333334,"rings":0.91},"2019-10-11": {"move":1.112820512820513,"exercise":1.133333333333333,"stand":1.333333333333333,"rings":1},"2019-10-12": {"move":0.7230769230769231,"exercise":0.2,"stand":0.8333333333333334,"rings":0.59},"2019-10-13": {"move":1.025641025641026,"exercise":0.7333333333333333,"stand":1.083333333333333,"rings":0.91},"2019-10-14": {"move":0.8384615384615385,"exercise":0.6666666666666666,"stand":0.9166666666666666,"rings":0.8100000000000001},"2019-10-15": {"move":0.8666666666666667,"exercise":0.8666666666666667,"stand":0.9166666666666666,"rings":0.88},"2019-10-16": {"move":1.015384615384615,"exercise":0.9666666666666667,"stand":1.25,"rings":0.99},"2019-10-17": {"move":0.9435897435897436,"exercise":1.033333333333333,"stand":0.9166666666666666,"rings":0.95},"2019-10-18": {"move":1.066666666666667,"exercise":1.266666666666667,"stand":0.9166666666666666,"rings":0.97},"2019-10-19": {"move":0.958974358974359,"exercise":0.6333333333333333,"stand":1.166666666666667,"rings":0.86},"2019-10-20": {"move":0.6897435897435897,"exercise":0.2333333333333333,"stand":0.75,"rings":0.5600000000000001},"2019-10-21": {"move":1.497435897435897,"exercise":2.233333333333333,"stand":1.666666666666667,"rings":1},"2019-10-22": {"move":0.6128205128205129,"exercise":0.5,"stand":0.6666666666666666,"rings":0.59},"2019-10-23": {"move":1.028205128205128,"exercise":1.166666666666667,"stand":1,"rings":1},"2019-10-24": {"move":1.043589743589744,"exercise":0.7333333333333333,"stand":1,"rings":0.91},"2019-10-25": {"move":1.405128205128205,"exercise":1,"stand":1.333333333333333,"rings":1},"2019-10-26": {"move":1.202564102564103,"exercise":0.7666666666666667,"stand":1.083333333333333,"rings":0.92},"2019-10-27": {"move":0.7102564102564103,"exercise":0.2333333333333333,"stand":0.9166666666666666,"rings":0.62},"2019-10-28": {"move":0.9692307692307692,"exercise":0.9,"stand":0.9166666666666666,"rings":0.93},"2019-10-29": {"move":0.8641025641025641,"exercise":0.4666666666666667,"stand":1.083333333333333,"rings":0.78},"2019-10-30": {"move":1.084615384615385,"exercise":0.8,"stand":1,"rings":0.93},"2019-10-31": {"move":1.087179487179487,"exercise":1,"stand":1,"rings":1},"2019-11-01": {"move":1.379487179487179,"exercise":0.9333333333333333,"stand":1.333333333333333,"rings":0.98},"2019-11-02": {"move":0.6512820512820513,"exercise":0.5,"stand":0.8333333333333334,"rings":0.66},"2019-11-03": {"move":0.8897435897435897,"exercise":0.2333333333333333,"stand":0.8333333333333334,"rings":0.65},"2019-11-04": {"move":0.8076923076923077,"exercise":0.5,"stand":1.166666666666667,"rings":0.77},"2019-11-05": {"move":0.8205128205128205,"exercise":0.7333333333333333,"stand":0.8333333333333334,"rings":0.8},"2019-11-06": {"move":0.717948717948718,"exercise":0.5,"stand":0.8333333333333334,"rings":0.68},"2019-11-07": {"move":1.192307692307692,"exercise":1.3,"stand":0.9166666666666666,"rings":0.97},"2019-11-08": {"move":1.269230769230769,"exercise":1.266666666666667,"stand":1.083333333333333,"rings":1},"2019-11-09": {"move":0.9564102564102565,"exercise":0.2666666666666667,"stand":1.166666666666667,"rings":0.74},"2019-11-10": {"move":1.266666666666667,"exercise":1.3,"stand":1.333333333333333,"rings":1},"2019-11-11": {"move":1.005128205128205,"exercise":0.7333333333333333,"stand":1.166666666666667,"rings":0.91},"2019-11-12": {"move":0.7025641025641025,"exercise":0.7666666666666667,"stand":0.8333333333333334,"rings":0.77},"2019-11-13": {"move":1.135897435897436,"exercise":1.066666666666667,"stand":1.166666666666667,"rings":1},"2019-11-14": {"move":0.9923076923076923,"exercise":0.8666666666666667,"stand":0.9166666666666666,"rings":0.93},"2019-11-15": {"move":1.528205128205128,"exercise":1.433333333333333,"stand":1.166666666666667,"rings":1},"2019-11-16": {"move":1.087179487179487,"exercise":1.033333333333333,"stand":0.75,"rings":0.92},"2019-11-17": {"move":0.4641025641025641,"exercise":0.1,"stand":0.6666666666666666,"rings":0.41},"2019-11-18": {"move":1.315384615384615,"exercise":1.066666666666667,"stand":1.333333333333333,"rings":1},"2019-11-19": {"move":0.7846153846153846,"exercise":0.7333333333333333,"stand":1,"rings":0.84},"2019-11-20": {"move":1.051282051282051,"exercise":1.1,"stand":1,"rings":1},"2019-11-21": {"move":0.6538461538461539,"exercise":0.4,"stand":0.6666666666666666,"rings":0.57},"2019-11-22": {"move":0.4487179487179487,"exercise":0.1,"stand":0.5833333333333334,"rings":0.38},"2019-11-23": {"move":1.048717948717949,"exercise":1.133333333333333,"stand":1,"rings":1},"2019-11-24": {"move":1.330769230769231,"exercise":1.366666666666667,"stand":1,"rings":1},"2019-11-25": {"move":1.166666666666667,"exercise":1.133333333333333,"stand":0.9166666666666666,"rings":0.97},"2019-11-26": {"move":0.9025641025641026,"exercise":0.6666666666666666,"stand":1.083333333333333,"rings":0.86},"2019-11-27": {"move":0.9974358974358974,"exercise":0.7,"stand":1,"rings":0.9},"2019-11-28": {"move":1.028205128205128,"exercise":1.533333333333333,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-11-29": {"move":1.458974358974359,"exercise":1.733333333333333,"stand":1,"rings":1},"2019-11-30": {"move":1.176923076923077,"exercise":1,"stand":1.166666666666667,"rings":1},"2019-12-01": {"move":0.7435897435897436,"exercise":0.4666666666666667,"stand":0.75,"rings":0.65},"2019-12-02": {"move":1.233333333333333,"exercise":1.366666666666667,"stand":1,"rings":1},"2019-12-03": {"move":0.8435897435897436,"exercise":0.8,"stand":1,"rings":0.88},"2019-12-04": {"move":1.141025641025641,"exercise":1.133333333333333,"stand":1.166666666666667,"rings":1},"2019-12-05": {"move":1.184615384615385,"exercise":1.166666666666667,"stand":1.166666666666667,"rings":1},"2019-12-06": {"move":0.5435897435897435,"exercise":0.5333333333333333,"stand":0.6666666666666666,"rings":0.58},"2019-12-07": {"move":1.235897435897436,"exercise":1.233333333333333,"stand":0.9166666666666666,"rings":0.97},"2019-12-08": {"move":0.9641025641025641,"exercise":0.7666666666666667,"stand":0.8333333333333334,"rings":0.85},"2019-12-09": {"move":1.343589743589743,"exercise":1.4,"stand":1.25,"rings":1},"2019-12-10": {"move":0.9487179487179487,"exercise":0.4666666666666667,"stand":0.8333333333333334,"rings":0.75},"2019-12-11": {"move":1.276923076923077,"exercise":1.333333333333333,"stand":1.25,"rings":1},"2019-12-12": {"move":0.7384615384615385,"exercise":0.5333333333333333,"stand":0.75,"rings":0.67},"2019-12-13": {"move":1.071794871794872,"exercise":1.133333333333333,"stand":0.8333333333333334,"rings":0.9399999999999999},"2019-12-14": {"move":1.430769230769231,"exercise":1.133333333333333,"stand":1.333333333333333,"rings":1},"2019-12-15": {"move":1.21025641025641,"exercise":0.8666666666666667,"stand":0.9166666666666666,"rings":0.93},"2019-12-16": {"move":0.9564102564102565,"exercise":0.4333333333333333,"stand":0.8333333333333334,"rings":0.74},"2019-12-17": {"move":0.7871794871794872,"exercise":0.3666666666666666,"stand":0.9166666666666666,"rings":0.6899999999999999},"2019-12-18": {"move":1.656410256410257,"exercise":1.333333333333333,"stand":1.416666666666667,"rings":1},"2019-12-19": {"move":0.9641025641025641,"exercise":0.8333333333333334,"stand":1,"rings":0.93},"2019-12-20": {"move":0.9,"exercise":0.4333333333333333,"stand":0.9166666666666666,"rings":0.75},"2019-12-21": {"move":0.5743589743589743,"exercise":0.4666666666666667,"stand":0.8333333333333334,"rings":0.62},"2019-12-22": {"move":0.8102564102564103,"exercise":0.8333333333333334,"stand":1,"rings":0.88},"2019-12-23": {"move":0.7282051282051282,"exercise":0.3333333333333333,"stand":1,"rings":0.6899999999999999},"2019-12-24": {"move":0.658974358974359,"exercise":0.1333333333333333,"stand":0.8333333333333334,"rings":0.54},"2019-12-25": {"move":1.279487179487179,"exercise":1.366666666666667,"stand":1.083333333333333,"rings":1},"2019-12-26": {"move":0.9205128205128205,"exercise":0.5,"stand":1.083333333333333,"rings":0.8100000000000001},"2019-12-27": {"move":1.066666666666667,"exercise":1.133333333333333,"stand":0.9166666666666666,"rings":0.97},"2019-12-28": {"move":0.6717948717948717,"exercise":0.1666666666666667,"stand":0.6666666666666666,"rings":0.5},"2019-12-29": {"move":1.420512820512821,"exercise":2.166666666666667,"stand":1,"rings":1},"2019-12-30": {"move":1.071794871794872,"exercise":1.233333333333333,"stand":1.166666666666667,"rings":1},"2019-12-31": {"move":1.271794871794872,"exercise":1.333333333333333,"stand":1.166666666666667,"rings":1}} -------------------------------------------------------------------------------- /data/spring-songs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Drugs & The Internet", 4 | "album": "~how i'm feeling~", 5 | "artist": "Lauv", 6 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/1f/ef/9b/1fef9b0b-ef42-ecc2-3ba5-33dbfa0927fb/5056167113867_1.jpg/250x250bb.jpeg", 7 | "plays": 16, 8 | "link": "https://song.link/us/i/1480846541" 9 | }, 10 | { 11 | "title": "Fantasy", 12 | "album": "DANCING ON THE PEOPLE - EP", 13 | "artist": "Sofi Tukker", 14 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/c6/65/17/c6651761-c790-9e92-eb4f-1fba41e1a8cb/0617465006685.png/250x250bb.jpeg", 15 | "plays": 20, 16 | "link": "https://song.link/us/i/1475338109" 17 | }, 18 | { 19 | "title": "Mi Rumba", 20 | "album": "Mi Rumba - Single", 21 | "artist": "Sofi Tukker & ZHU", 22 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music118/v4/fc/16/99/fc1699a9-304d-f9b2-8320-9960ca793792/0617465000911.png/250x250bb.jpeg", 23 | "plays": 29, 24 | "link": "https://song.link/us/i/1446638007" 25 | }, 26 | { 27 | "title": "black on black", 28 | "album": "portraits", 29 | "artist": "Greyson Chance", 30 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music114/v4/e3/be/17/e3be179b-dd5a-4a7d-0db9-f538c7439475/5056167112778_1.jpg/250x250bb.jpeg", 31 | "plays": 46, 32 | "link": "https://song.link/us/i/1451317877" 33 | }, 34 | { 35 | "title": "I Wanna Be Your Girlfriend", 36 | "album": "Chapter 1 - EP", 37 | "artist": "girl in red", 38 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music118/v4/63/f1/9a/63f19acb-849a-3960-69c3-9f7c07027a7f/5054960920149_1.jpg/250x250bb.jpeg", 39 | "plays": 17, 40 | "link": "https://song.link/us/i/1446460728" 41 | }, 42 | { 43 | "title": "The King", 44 | "album": "The King - Single", 45 | "artist": "Conan Gray", 46 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/12/00/03/120003c8-88a0-a321-c3db-173c66dda700/00602577524639.rgb.jpg/250x250bb.jpeg", 47 | "plays": 98, 48 | "link": "https://song.link/us/i/1454717313" 49 | }, 50 | { 51 | "title": "Love", 52 | "album": "Love - Single", 53 | "artist": "Simon Curtis", 54 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music124/v4/7e/cf/c1/7ecfc117-b577-a5cf-7428-94640bf2eaab/5054526558397_1.jpg/250x250bb.jpeg", 55 | "plays": 31, 56 | "link": "https://song.link/us/i/1450276975" 57 | }, 58 | { 59 | "title": "Insomnia", 60 | "album": "Insomnia - Single", 61 | "artist": "Daya", 62 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/35/b2/e2/35b2e2dc-fe98-fd4e-50f8-3fb6df720fec/00602577520631.rgb.jpg/250x250bb.jpeg", 63 | "plays": 19, 64 | "link": "https://song.link/us/i/1454848852" 65 | }, 66 | { 67 | "title": "Video (feat. Mallrat)", 68 | "album": "Cub Sport", 69 | "artist": "Cub Sport", 70 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music118/v4/de/d8/64/ded8640c-77d8-6bcd-293b-38386dad5442/cover.jpg/250x250bb.jpeg", 71 | "plays": 49, 72 | "link": "https://song.link/us/i/1440010928" 73 | }, 74 | { 75 | "title": "No New Friends (feat. Sia, Diplo & Labrinth)", 76 | "album": "LABRINTH, SIA & DIPLO PRESENT... LSD", 77 | "artist": "LSD", 78 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/fe/ca/4a/feca4af4-5a20-26cd-d365-f23bf51b51df/886447603130.jpg/250x250bb.jpeg", 79 | "plays": 32, 80 | "link": "https://song.link/de/i/1455271382" 81 | }, 82 | { 83 | "title": "House Party", 84 | "album": "House Party - Single", 85 | "artist": "Brenda Mada", 86 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/8d/47/4e/8d474e40-f86a-c9b8-1956-900b57f701c0/00602557534177.rgb.jpg/250x250bb.jpeg", 87 | "plays": 10, 88 | "link": "https://song.link/us/i/1444853736" 89 | }, 90 | { 91 | "title": "Basic", 92 | "album": "Basic - Single", 93 | "artist": "N i G H T S", 94 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/09/b4/86/09b48695-4228-3c42-2514-1729d3b3814f/859721990516_cover.jpg/250x250bb.jpeg", 95 | "plays": 21, 96 | "link": "https://song.link/us/i/1259671189" 97 | }, 98 | { 99 | "title": "Blame", 100 | "album": "Man on Fire", 101 | "artist": "Thutmose", 102 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music124/v4/d6/c0/cd/d6c0cd55-fede-2eca-a22b-952d9c29040c/859729031082_cover.jpg/250x250bb.jpeg", 103 | "plays": 17, 104 | "link": "https://song.link/us/i/1439117080" 105 | }, 106 | { 107 | "title": "Heaven", 108 | "album": "Heaven - Single", 109 | "artist": "FINNEAS", 110 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/32/e6/f4/32e6f45c-e66b-9374-2a5c-cfa0e83ea27e/5054526337725_1.jpg/250x250bb.jpeg", 111 | "plays": 33, 112 | "link": "https://song.link/us/i/1353433766" 113 | }, 114 | { 115 | "title": "Let's Fall in Love for the Night", 116 | "album": "Let's Fall in Love for the Night - Single", 117 | "artist": "FINNEAS", 118 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/81/a4/af/81a4af3a-2de6-9262-8afc-b2fcf9b96106/5054526159761_1.jpg/250x250bb.jpeg", 119 | "plays": 35, 120 | "link": "https://song.link/us/i/1437781738" 121 | } 122 | ] 123 | -------------------------------------------------------------------------------- /data/summer-songs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "On Melancholy Hill", 4 | "album": "Plastic Beach", 5 | "artist": "Gorillaz", 6 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music/v4/b8/f9/b9/b8f9b9f8-a609-bde2-0302-349436ffc508/825646291038.jpg/250x250bb.jpeg", 7 | "plays": 16, 8 | "link": "https://song.link/ru/i/850569480" 9 | }, 10 | { 11 | "title": "f**k, i'm lonely (feat. Anne-Marie) [from “13 Reasons Why: Season 3”]", 12 | "album": "~how i'm feeling~", 13 | "artist": "Lauv", 14 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/1f/ef/9b/1fef9b0b-ef42-ecc2-3ba5-33dbfa0927fb/5056167113867_1.jpg/250x250bb.jpeg", 15 | "plays": 20, 16 | "link": "https://song.link/us/i/1474712490" 17 | }, 18 | { 19 | "title": "Jesus In LA", 20 | "album": "Jesus In LA - Single", 21 | "artist": "Alec Benjamin", 22 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/3b/3f/69/3b3f69f2-66da-641a-3746-aa1fc53ec98f/075679843500.jpg/250x250bb.jpeg", 23 | "plays": 46, 24 | "link": "https://song.link/us/i/1470294505" 25 | }, 26 | { 27 | "title": "The Kids Don't Wanna Come Home", 28 | "album": "What Do You Think About the Car?", 29 | "artist": "Declan McKenna", 30 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music111/v4/5e/b8/1b/5eb81b1e-9753-e896-a13a-6282811fde94/886446197173.jpg/250x250bb.jpeg", 31 | "plays": 27, 32 | "link": "https://song.link/us/i/1208110314" 33 | }, 34 | { 35 | "title": "Yes & No", 36 | "album": "Yes & No - EP", 37 | "artist": "XYLØ", 38 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music113/v4/7e/8c/63/7e8c63c0-bb84-f7fe-e761-43314a2459ed/EP_ARTWORK.jpg/250x250bb.jpeg", 39 | "plays": 23, 40 | "link": "https://song.link/fr/i/1463120431" 41 | }, 42 | { 43 | "title": "Let Me Down Slowly", 44 | "album": "Narrated for You", 45 | "artist": "Alec Benjamin", 46 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music118/v4/ee/85/4d/ee854dfd-b4c1-14f5-dd14-7fb24698b3a2/075679859518.jpg/250x250bb.jpeg", 47 | "plays": 80, 48 | "link": "https://song.link/us/i/1441728727" 49 | }, 50 | { 51 | "title": "I Just Wanna Shine", 52 | "album": "All the Feels", 53 | "artist": "Fitz and The Tantrums", 54 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/ca/cc/d5/caccd520-e020-4604-b0d5-a7ddc6b5771d/075679848819.jpg/250x250bb.jpeg", 55 | "plays": 20, 56 | "link": "https://song.link/us/i/1469275539" 57 | }, 58 | { 59 | "title": "Paracetamol", 60 | "album": "What Do You Think About the Car?", 61 | "artist": "Declan McKenna", 62 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music111/v4/5e/b8/1b/5eb81b1e-9753-e896-a13a-6282811fde94/886446197173.jpg/250x250bb.jpeg", 63 | "plays": 40, 64 | "link": "https://song.link/us/i/1208110341" 65 | }, 66 | { 67 | "title": "I Like Boys", 68 | "album": "Haus Party 1", 69 | "artist": "Todrick Hall", 70 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/ce/01/8a/ce018a74-8dd7-c3ce-7f3a-eeb39b0c0c0b/dj.frlnnlbu.jpg/250x250bb.jpeg", 71 | "plays": 33, 72 | "link": "https://song.link/us/i/1463476052" 73 | }, 74 | { 75 | "title": "Checkmate", 76 | "album": "Checkmate - Single", 77 | "artist": "Conan Gray", 78 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/6b/06/9e/6b069ec8-2247-be4f-cd96-f558ec5fc205/19UMGIM51462.rgb.jpg/250x250bb.jpeg", 79 | "plays": 77, 80 | "link": "https://song.link/ua/i/1468029419" 81 | }, 82 | { 83 | "title": "Euphoria", 84 | "album": "Crystalline", 85 | "artist": "bülow", 86 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music113/v4/ac/d1/d5/acd1d593-de7e-85cc-18bd-dc15ee4323e8/00602577660924.rgb.jpg/250x250bb.jpeg", 87 | "plays": 41, 88 | "link": "https://song.link/us/i/1457759950" 89 | }, 90 | { 91 | "title": "Blame It On Your Love (feat. Lizzo)", 92 | "album": "Charli", 93 | "artist": "Charli XCX", 94 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music123/v4/79/cf/61/79cf612f-73db-3c12-aed5-7abb74cd0d9c/190295409562.jpg/250x250bb.jpeg", 95 | "plays": 14, 96 | "link": "https://song.link/us/i/1468263376" 97 | }, 98 | { 99 | "title": "Glad He's Gone", 100 | "album": "Glad He's Gone - Single", 101 | "artist": "Tove Lo", 102 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music123/v4/d2/93/33/d2933345-103d-7fd6-5196-faac8d8d3261/19UMGIM44576.rgb.jpg/250x250bb.jpeg", 103 | "plays": 24, 104 | "link": "https://song.link/ru/i/1464659365" 105 | }, 106 | { 107 | "title": "Str8 Outta Mumbai", 108 | "album": "Leak 04-13 (Bait Ones)", 109 | "artist": "Jai Paul", 110 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music123/v4/5d/a4/49/5da449d8-a148-028c-dd13-50e3415010d3/cover.jpg/250x250bb.jpeg", 111 | "plays": 16, 112 | "link": "https://song.link/us/i/1465710075" 113 | }, 114 | { 115 | "title": "Sad Forever", 116 | "album": "~how i'm feeling~", 117 | "artist": "Lauv", 118 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/87/20/13/872013e0-9834-c73d-b278-1501fe287030/5056167115403_1.jpg/250x250bb.jpeg", 119 | "plays": 25, 120 | "link": "https://song.link/us/i/1464726584" 121 | } 122 | ] 123 | -------------------------------------------------------------------------------- /data/top-songs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "The Other Side", 4 | "album": "The Other Side - Single", 5 | "artist": "Conan Gray", 6 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/41/9e/ff419e2d-d9f5-851e-9866-00cc97d5d09a/source/512x512bb.png", 7 | "plays": 178, 8 | "link": "https://song.link/us/i/1451249426" 9 | }, 10 | { 11 | "title": "Greek God", 12 | "album": "Sunset Season - EP", 13 | "artist": "Conan Gray", 14 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music128/v4/ea/6a/af/ea6aafb9-7c23-5b77-5e6d-2547f216c93b/source/512x512bb.png", 15 | "plays": 194, 16 | "link": "https://song.link/us/i/1441067458" 17 | }, 18 | { 19 | "title": "Comfort Crowd", 20 | "album": "Comfort Crowd - Single", 21 | "artist": "Conan Gray", 22 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/44/66/d9/4466d9ed-eada-1a8f-3ef4-23c65521188f/source/512x512bb.png", 23 | "plays": 147, 24 | "link": "https://song.link/us/i/1477561878" 25 | }, 26 | { 27 | "title": "Lookalike", 28 | "album": "Sunset Season - EP", 29 | "artist": "Conan Gray", 30 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music128/v4/ea/6a/af/ea6aafb9-7c23-5b77-5e6d-2547f216c93b/source/512x512bb.png", 31 | "plays": 181, 32 | "link": "https://song.link/us/i/1441067459" 33 | }, 34 | { 35 | "title": "Generation Why", 36 | "album": "Sunset Season - EP", 37 | "artist": "Conan Gray", 38 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music128/v4/ea/6a/af/ea6aafb9-7c23-5b77-5e6d-2547f216c93b/source/512x512bb.png", 39 | "plays": 123, 40 | "link": "https://song.link/de/i/1441067454" 41 | }, 42 | { 43 | "title": "i'm so tired...", 44 | "album": "i'm so tired... - Single", 45 | "artist": "Lauv & Troye Sivan", 46 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/05/c7/1b/05c71b41-8627-37a3-6fc4-0f1a2272a18c/source/512x512bb.png", 47 | "plays": 77, 48 | "link": "https://song.link/us/i/1448700185" 49 | }, 50 | { 51 | "title": "The King", 52 | "album": "The King - Single", 53 | "artist": "Conan Gray", 54 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music113/v4/1a/22/95/1a229573-6b58-7bb3-325d-9d307824301d/source/512x512bb.png", 55 | "plays": 93, 56 | "link": "https://song.link/us/i/1454717313" 57 | }, 58 | { 59 | "title": "Crush Culture", 60 | "album": "Sunset Season - EP", 61 | "artist": "Conan Gray", 62 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music128/v4/ea/6a/af/ea6aafb9-7c23-5b77-5e6d-2547f216c93b/source/512x512bb.png", 63 | "plays": 125, 64 | "link": "https://song.link/us/i/1441067456" 65 | }, 66 | { 67 | "title": "Let Me Down Slowly", 68 | "album": "Narrated for You", 69 | "artist": "Alec Benjamin", 70 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 71 | "plays": 77, 72 | "link": "https://song.link/us/i/1441728727" 73 | }, 74 | { 75 | "title": "Bloom", 76 | "album": "Bloom", 77 | "artist": "Troye Sivan", 78 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 79 | "plays": 206, 80 | "link": "https://song.link/us/i/1396292371" 81 | }, 82 | { 83 | "title": "Doin' Time", 84 | "album": "Doin' Time - Single", 85 | "artist": "Lana Del Rey", 86 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/be/65/69/be656922-9d4a-1f21-eef8-6c3855940f14/source/512x512bb.png", 87 | "plays": 39, 88 | "link": "https://song.link/us/i/1463229995" 89 | }, 90 | { 91 | "title": "Should Have Known Better", 92 | "album": "Carrie & Lowell", 93 | "artist": "Sufjan Stevens", 94 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music3/v4/ca/0b/5f/ca0b5f5f-22c0-4257-9a78-dc8fb9b857ca/source/512x512bb.png", 95 | "plays": 190, 96 | "link": "https://song.link/us/i/955572619" 97 | }, 98 | { 99 | "title": "Plum", 100 | "album": "Bloom", 101 | "artist": "Troye Sivan", 102 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 103 | "plays": 171, 104 | "link": "https://song.link/us/i/1396292381" 105 | }, 106 | { 107 | "title": "bury a friend", 108 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 109 | "artist": "Billie Eilish", 110 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 111 | "plays": 60, 112 | "link": "https://song.link/us/i/1450695881" 113 | }, 114 | { 115 | "title": "Drugs & The Internet", 116 | "album": "Drugs & The Internet - Single", 117 | "artist": "Lauv", 118 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music113/v4/3a/ca/10/3aca10ac-0849-1d15-7ba0-dd6d1bdd7a63/source/512x512bb.png", 119 | "plays": 52, 120 | "link": "https://song.link/us/i/1459102774" 121 | }, 122 | { 123 | "title": "Swim", 124 | "album": "Narrated for You", 125 | "artist": "Alec Benjamin", 126 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 127 | "plays": 66, 128 | "link": "https://song.link/us/i/1441728729" 129 | }, 130 | { 131 | "title": "It Might Be Time", 132 | "album": "The Slow Rush", 133 | "artist": "Tame Impala", 134 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/f6/92/97/f6929759-3423-ece4-2aff-e84683aea54a/source/512x512bb.png", 135 | "plays": 77, 136 | "link": "https://song.link/us/i/1484743123" 137 | }, 138 | { 139 | "title": "Checkmate", 140 | "album": "Checkmate - Single", 141 | "artist": "Conan Gray", 142 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/93/b4/58/93b4580d-8120-d926-e0ec-21c3916fb940/source/512x512bb.png", 143 | "plays": 73, 144 | "link": "https://song.link/us/i/1468029419" 145 | }, 146 | { 147 | "title": "Idle Town", 148 | "album": "Sunset Season - EP", 149 | "artist": "Conan Gray", 150 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music128/v4/ea/6a/af/ea6aafb9-7c23-5b77-5e6d-2547f216c93b/source/512x512bb.png", 151 | "plays": 74, 152 | "link": "https://song.link/us/i/1441067450" 153 | }, 154 | { 155 | "title": "All of Me Wants All of You", 156 | "album": "Carrie & Lowell", 157 | "artist": "Sufjan Stevens", 158 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music3/v4/ca/0b/5f/ca0b5f5f-22c0-4257-9a78-dc8fb9b857ca/source/512x512bb.png", 159 | "plays": 167, 160 | "link": "https://song.link/us/i/955572620" 161 | }, 162 | { 163 | "title": "Outrunning Karma", 164 | "album": "Narrated for You", 165 | "artist": "Alec Benjamin", 166 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 167 | "plays": 59, 168 | "link": "https://song.link/us/i/1441728855" 169 | }, 170 | { 171 | "title": "bad guy", 172 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 173 | "artist": "Billie Eilish", 174 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 175 | "plays": 59, 176 | "link": "https://song.link/us/i/1450695739" 177 | }, 178 | { 179 | "title": "Sweet Little Lies", 180 | "album": "Crystalline", 181 | "artist": "bülow", 182 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/e2/1c/ac/e21cacac-ff21-2f31-a92d-9f43dda6cbf6/source/512x512bb.png", 183 | "plays": 64, 184 | "link": "https://song.link/us/i/1453118803" 185 | }, 186 | { 187 | "title": "Fourth of July", 188 | "album": "Carrie & Lowell", 189 | "artist": "Sufjan Stevens", 190 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music3/v4/ca/0b/5f/ca0b5f5f-22c0-4257-9a78-dc8fb9b857ca/source/512x512bb.png", 191 | "plays": 146, 192 | "link": "https://song.link/us/i/955572623" 193 | }, 194 | { 195 | "title": "Boy in the Bubble", 196 | "album": "Narrated for You", 197 | "artist": "Alec Benjamin", 198 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 199 | "plays": 59, 200 | "link": "https://song.link/us/i/1441728730" 201 | }, 202 | { 203 | "title": "Let's Fall in Love for the Night", 204 | "album": "Let's Fall in Love for the Night - Single", 205 | "artist": "FINNEAS", 206 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/1e/35/02/1e35029c-fb5a-c46a-ba30-8d4146116320/source/512x512bb.png", 207 | "plays": 34, 208 | "link": "https://song.link/us/i/1479728155" 209 | }, 210 | { 211 | "title": "Maniac", 212 | "album": "Maniac - Single", 213 | "artist": "Conan Gray", 214 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/c0/13/3f/c0133f3d-18c8-f0bd-2f9b-8759326f251e/source/512x512bb.png", 215 | "plays": 64, 216 | "link": "https://song.link/us/i/1491987859" 217 | }, 218 | { 219 | "title": "Sad Forever", 220 | "album": "~how i'm feeling~", 221 | "artist": "Lauv", 222 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/b4/97/3b/b4973b6c-7328-94d4-fc6a-8cdb92057138/source/512x512bb.png", 223 | "plays": 21, 224 | "link": "https://song.link/us/i/1480847192" 225 | }, 226 | { 227 | "title": "my strange addiction", 228 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 229 | "artist": "Billie Eilish", 230 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 231 | "plays": 52, 232 | "link": "https://song.link/us/i/1450695877" 233 | }, 234 | { 235 | "title": "wish you were gay", 236 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 237 | "artist": "Billie Eilish", 238 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 239 | "plays": 48, 240 | "link": "https://song.link/us/i/1450695871" 241 | }, 242 | { 243 | "title": "WHEN I WAS OLDER", 244 | "album": "WHEN I WAS OLDER - Single", 245 | "artist": "Billie Eilish", 246 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music124/v4/7e/bd/40/7ebd4084-b370-8e1b-c951-6d310ce3b582/source/512x512bb.png", 247 | "plays": 53, 248 | "link": "https://song.link/us/i/1448440127" 249 | }, 250 | { 251 | "title": "bloodline", 252 | "album": "thank u, next", 253 | "artist": "Ariana Grande", 254 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music114/v4/ee/7b/f4/ee7bf4cc-a3a4-406d-3367-6d871d54a87f/source/512x512bb.png", 255 | "plays": 49, 256 | "link": "https://song.link/us/i/1450330601" 257 | }, 258 | { 259 | "title": "shut up", 260 | "album": "portraits", 261 | "artist": "Greyson Chance", 262 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music114/v4/59/81/79/59817969-c00e-0cd2-fc76-01f3cf13ba8c/source/512x512bb.png", 263 | "plays": 61, 264 | "link": "https://song.link/us/i/1449130150" 265 | }, 266 | { 267 | "title": "f**k, i'm lonely (feat. Anne-Marie) [from “13 Reasons Why: Season 3”]", 268 | "album": "f**k, i'm lonely (feat. Anne-Marie) [From “13 Reasons Why: Season 3”] - Single", 269 | "artist": "Lauv", 270 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/f5/50/2e/f5502efa-7d14-818d-21f4-cc0bc9dbd5ca/source/512x512bb.jpg", 271 | "plays": 28, 272 | "link": "https://song.link/us/i/1472800240" 273 | }, 274 | { 275 | "title": "If I Killed Someone for You", 276 | "album": "Narrated for You", 277 | "artist": "Alec Benjamin", 278 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 279 | "plays": 50, 280 | "link": "https://song.link/us/i/1441728857" 281 | }, 282 | { 283 | "title": "black on black", 284 | "album": "portraits", 285 | "artist": "Greyson Chance", 286 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music114/v4/59/81/79/59817969-c00e-0cd2-fc76-01f3cf13ba8c/source/512x512bb.png", 287 | "plays": 46, 288 | "link": "https://song.link/us/i/1451317877" 289 | }, 290 | { 291 | "title": "TOOTIMETOOTIMETOOTIME", 292 | "album": "A Brief Inquiry Into Online Relationships", 293 | "artist": "The 1975", 294 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music128/v4/ed/74/65/ed74656a-b885-cbb0-6e0a-ceb65203b0d9/source/512x512bb.png", 295 | "plays": 77, 296 | "link": "https://song.link/us/i/1435546669" 297 | }, 298 | { 299 | "title": "The Good Side", 300 | "album": "Bloom", 301 | "artist": "Troye Sivan", 302 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 303 | "plays": 107, 304 | "link": "https://song.link/us/i/1396292370" 305 | }, 306 | { 307 | "title": "Lights Up", 308 | "album": "Fine Line", 309 | "artist": "Harry Styles", 310 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music123/v4/58/d4/b0/58d4b029-62e0-d823-d6ae-cab13794cb77/source/512x512bb.png", 311 | "plays": 35, 312 | "link": "https://song.link/us/i/1485802971" 313 | }, 314 | { 315 | "title": "Get Stüpid", 316 | "album": "Crystalline", 317 | "artist": "bülow", 318 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/e2/1c/ac/e21cacac-ff21-2f31-a92d-9f43dda6cbf6/source/512x512bb.png", 319 | "plays": 48, 320 | "link": "https://song.link/us/i/1457759940" 321 | }, 322 | { 323 | "title": "Trees", 324 | "album": "Cub Sport", 325 | "artist": "Cub Sport", 326 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/c4/b2/bf/c4b2bfb3-d68d-c7c3-bbcb-07fa18a0ba20/source/512x512bb.png", 327 | "plays": 57, 328 | "link": "https://song.link/us/i/1440011131" 329 | }, 330 | { 331 | "title": "watch you sleep.", 332 | "album": "watch you sleep. - Single", 333 | "artist": "girl in red", 334 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music124/v4/6e/9a/c2/6e9ac283-4d8a-1e04-ff60-5f8cd943e03c/source/512x512bb.png", 335 | "plays": 40, 336 | "link": "https://song.link/us/i/1447239188" 337 | }, 338 | { 339 | "title": "Lucky Strike", 340 | "album": "Bloom", 341 | "artist": "Troye Sivan", 342 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 343 | "plays": 135, 344 | "link": "https://song.link/us/i/1396292383" 345 | }, 346 | { 347 | "title": "Seventeen", 348 | "album": "Bloom", 349 | "artist": "Troye Sivan", 350 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 351 | "plays": 120, 352 | "link": "https://song.link/us/i/1396292352" 353 | }, 354 | { 355 | "title": "all the good girls go to hell", 356 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 357 | "artist": "Billie Eilish", 358 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 359 | "plays": 51, 360 | "link": "https://song.link/us/i/1450695867" 361 | }, 362 | { 363 | "title": "1999", 364 | "album": "Charli", 365 | "artist": "Charli XCX & Troye Sivan", 366 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music114/v4/d8/eb/d7/d8ebd714-ffee-2720-bd80-ee525419d658/source/512x512bb.png", 367 | "plays": 70, 368 | "link": "https://song.link/us/i/1468263367" 369 | }, 370 | { 371 | "title": "Limousine", 372 | "album": "Cub Sport", 373 | "artist": "Cub Sport", 374 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/c4/b2/bf/c4b2bfb3-d68d-c7c3-bbcb-07fa18a0ba20/source/512x512bb.png", 375 | "plays": 49, 376 | "link": "https://song.link/us/i/1440011117" 377 | }, 378 | { 379 | "title": "Hallelujah", 380 | "album": "No One Else Can Wear Your Crown (Deluxe)", 381 | "artist": "Oh Wonder", 382 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/61/55/b3/6155b368-ce91-3bb3-cbe7-d755de47f1c8/source/512x512bb.png", 383 | "plays": 29, 384 | "link": "https://song.link/us/i/1487602469" 385 | }, 386 | { 387 | "title": "Video (feat. Mallrat)", 388 | "album": "Cub Sport", 389 | "artist": "Cub Sport", 390 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/c4/b2/bf/c4b2bfb3-d68d-c7c3-bbcb-07fa18a0ba20/source/512x512bb.png", 391 | "plays": 46, 392 | "link": "https://song.link/us/i/1440010928" 393 | }, 394 | { 395 | "title": "Dance to This (feat. Ariana Grande)", 396 | "album": "Bloom", 397 | "artist": "Troye Sivan", 398 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 399 | "plays": 177, 400 | "link": "https://song.link/us/i/1396292380" 401 | }, 402 | { 403 | "title": "everything i wanted", 404 | "album": "everything i wanted - Single", 405 | "artist": "Billie Eilish", 406 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/e1/02/be/e102be99-56f6-e19f-bfc5-bf06aacd172e/source/512x512bb.png", 407 | "plays": 54, 408 | "link": "https://song.link/us/i/1487502476" 409 | }, 410 | { 411 | "title": "1994", 412 | "album": "Narrated for You", 413 | "artist": "Alec Benjamin", 414 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 415 | "plays": 43, 416 | "link": "https://song.link/us/i/1441728859" 417 | }, 418 | { 419 | "title": "My My My!", 420 | "album": "Bloom", 421 | "artist": "Troye Sivan", 422 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 423 | "plays": 98, 424 | "link": "https://song.link/us/i/1396292353" 425 | }, 426 | { 427 | "title": "Gotta Be a Reason", 428 | "album": "Narrated for You", 429 | "artist": "Alec Benjamin", 430 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 431 | "plays": 39, 432 | "link": "https://song.link/us/i/1441728853" 433 | }, 434 | { 435 | "title": "Fantasy", 436 | "album": "DANCING ON THE PEOPLE - EP", 437 | "artist": "Sofi Tukker", 438 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/a7/67/cd/a767cdae-ecbf-e9d8-e357-a301b0d63746/source/512x512bb.png", 439 | "plays": 20, 440 | "link": "https://song.link/us/i/1454346888" 441 | }, 442 | { 443 | "title": "Fresh Laundry", 444 | "album": "Fresh Laundry - Single", 445 | "artist": "Allie X", 446 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/c6/f7/91/c6f791e5-fcd8-1ceb-15f4-cd988178f6c7/source/512x512bb.png", 447 | "plays": 42, 448 | "link": "https://song.link/us/i/1486659821" 449 | }, 450 | { 451 | "title": "The Only Thing", 452 | "album": "Carrie & Lowell", 453 | "artist": "Sufjan Stevens", 454 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music3/v4/ca/0b/5f/ca0b5f5f-22c0-4257-9a78-dc8fb9b857ca/source/512x512bb.png", 455 | "plays": 108, 456 | "link": "https://song.link/us/i/955572624" 457 | }, 458 | { 459 | "title": "Word Smith", 460 | "album": "Crystalline", 461 | "artist": "bülow", 462 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/e2/1c/ac/e21cacac-ff21-2f31-a92d-9f43dda6cbf6/source/512x512bb.png", 463 | "plays": 42, 464 | "link": "https://song.link/us/i/1457759941" 465 | }, 466 | { 467 | "title": "Sometimes", 468 | "album": "Cub Sport", 469 | "artist": "Cub Sport", 470 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/c4/b2/bf/c4b2bfb3-d68d-c7c3-bbcb-07fa18a0ba20/source/512x512bb.png", 471 | "plays": 41, 472 | "link": "https://song.link/us/i/1440011115" 473 | }, 474 | { 475 | "title": "break up with your girlfriend, i'm bored", 476 | "album": "thank u, next", 477 | "artist": "Ariana Grande", 478 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music114/v4/ee/7b/f4/ee7bf4cc-a3a4-406d-3367-6d871d54a87f/source/512x512bb.png", 479 | "plays": 41, 480 | "link": "https://song.link/us/i/1450330687" 481 | }, 482 | { 483 | "title": "Lift Me Up", 484 | "album": "Cub Sport", 485 | "artist": "Cub Sport", 486 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/c4/b2/bf/c4b2bfb3-d68d-c7c3-bbcb-07fa18a0ba20/source/512x512bb.png", 487 | "plays": 39, 488 | "link": "https://song.link/us/i/1440011120" 489 | }, 490 | { 491 | "title": "you should see me in a crown", 492 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 493 | "artist": "Billie Eilish", 494 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 495 | "plays": 31, 496 | "link": "https://song.link/us/i/1450695745" 497 | }, 498 | { 499 | "title": "Death of a Hero", 500 | "album": "Narrated for You", 501 | "artist": "Alec Benjamin", 502 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 503 | "plays": 35, 504 | "link": "https://song.link/us/i/1441728858" 505 | }, 506 | { 507 | "title": "ilomilo", 508 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 509 | "artist": "Billie Eilish", 510 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 511 | "plays": 44, 512 | "link": "https://song.link/us/i/1450695884" 513 | }, 514 | { 515 | "title": "Regulars", 516 | "album": "Regulars - Single", 517 | "artist": "Allie X", 518 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/67/d3/4f/67d34fe9-c007-1d7d-a6a3-bcab4cb5dec4/source/512x512bb.png", 519 | "plays": 25, 520 | "link": "https://song.link/us/i/1482800173" 521 | }, 522 | { 523 | "title": "Not so Bad in La", 524 | "album": "Super Sunset", 525 | "artist": "Allie X", 526 | "artwork": "https://is4-ssl.mzstatic.com/image/thumb/Music118/v4/e8/82/36/e88236ec-7ae8-8cfc-c74e-5167334d63c7/source/512x512bb.png", 527 | "plays": 109, 528 | "link": "https://song.link/us/i/1421851415" 529 | }, 530 | { 531 | "title": "Postcard (feat. Gordi)", 532 | "album": "Bloom", 533 | "artist": "Troye Sivan", 534 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 535 | "plays": 89, 536 | "link": "https://song.link/us/i/1396292372" 537 | }, 538 | { 539 | "title": "Wake Up", 540 | "album": "Crystalline", 541 | "artist": "bülow", 542 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/e2/1c/ac/e21cacac-ff21-2f31-a92d-9f43dda6cbf6/source/512x512bb.png", 543 | "plays": 42, 544 | "link": "https://song.link/us/i/1457759952" 545 | }, 546 | { 547 | "title": "Lost on You", 548 | "album": "Lost on You", 549 | "artist": "LP", 550 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music122/v4/6b/0f/79/6b0f7925-57ec-70bd-eedf-d9be8631891b/source/512x512bb.png", 551 | "plays": 67, 552 | "link": "https://song.link/us/i/1223076389" 553 | }, 554 | { 555 | "title": "Carrie & Lowell", 556 | "album": "Carrie & Lowell", 557 | "artist": "Sufjan Stevens", 558 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music3/v4/ca/0b/5f/ca0b5f5f-22c0-4257-9a78-dc8fb9b857ca/source/512x512bb.png", 559 | "plays": 96, 560 | "link": "https://song.link/us/i/955572625" 561 | }, 562 | { 563 | "title": "8", 564 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 565 | "artist": "Billie Eilish", 566 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 567 | "plays": 41, 568 | "link": "https://song.link/us/i/1450695875" 569 | }, 570 | { 571 | "title": "The Kids Don't Wanna Come Home", 572 | "album": "What Do You Think About the Car?", 573 | "artist": "Declan McKenna", 574 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music111/v4/9b/f3/96/9bf39631-58b0-cc75-c885-1f659b79ea44/source/512x512bb.png", 575 | "plays": 25, 576 | "link": "https://song.link/us/i/1208110314" 577 | }, 578 | { 579 | "title": "Butterflies", 580 | "album": "Cub Sport", 581 | "artist": "Cub Sport", 582 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/c4/b2/bf/c4b2bfb3-d68d-c7c3-bbcb-07fa18a0ba20/source/512x512bb.png", 583 | "plays": 40, 584 | "link": "https://song.link/us/i/1440011128" 585 | }, 586 | { 587 | "title": "What a Heavenly Way to Die", 588 | "album": "Bloom", 589 | "artist": "Troye Sivan", 590 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 591 | "plays": 123, 592 | "link": "https://song.link/us/i/1396292382" 593 | }, 594 | { 595 | "title": "Venice Bitch", 596 | "album": "Norman F*****g Rockwell!", 597 | "artist": "Lana Del Rey", 598 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/ac/68/63/ac6863d0-33a3-9846-587d-87b8adc9ec70/source/512x512bb.png", 599 | "plays": 23, 600 | "link": "https://song.link/us/i/1474669067" 601 | }, 602 | { 603 | "title": "Paracetamol", 604 | "album": "What Do You Think About the Car?", 605 | "artist": "Declan McKenna", 606 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music111/v4/9b/f3/96/9bf39631-58b0-cc75-c885-1f659b79ea44/source/512x512bb.png", 607 | "plays": 39, 608 | "link": "https://song.link/us/i/1208110341" 609 | }, 610 | { 611 | "title": "listen before i go", 612 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 613 | "artist": "Billie Eilish", 614 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 615 | "plays": 35, 616 | "link": "https://song.link/us/i/1450695888" 617 | }, 618 | { 619 | "title": "timekeeper", 620 | "album": "portraits", 621 | "artist": "Greyson Chance", 622 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music114/v4/59/81/79/59817969-c00e-0cd2-fc76-01f3cf13ba8c/source/512x512bb.png", 623 | "plays": 27, 624 | "link": "https://song.link/us/i/1451318012" 625 | }, 626 | { 627 | "title": "hope is a dangerous thing for a woman like me to have - but I have it", 628 | "album": "Norman F*****g Rockwell!", 629 | "artist": "Lana Del Rey", 630 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/ac/68/63/ac6863d0-33a3-9846-587d-87b8adc9ec70/source/512x512bb.png", 631 | "plays": 21, 632 | "link": "https://song.link/us/i/1474669296" 633 | }, 634 | { 635 | "title": "Feelings", 636 | "album": "~how i'm feeling~", 637 | "artist": "Lauv", 638 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music113/v4/b4/97/3b/b4973b6c-7328-94d4-fc6a-8cdb92057138/source/512x512bb.png", 639 | "plays": 23, 640 | "link": "https://song.link/us/i/1480846730" 641 | }, 642 | { 643 | "title": "Animal", 644 | "album": "Bloom", 645 | "artist": "Troye Sivan", 646 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/a8/34/0a/a8340a6b-6625-6f4b-a6a4-61f7884ccc1e/source/512x512bb.png", 647 | "plays": 124, 648 | "link": "https://song.link/us/i/1396292384" 649 | }, 650 | { 651 | "title": "Heaven", 652 | "album": "Heaven - Single", 653 | "artist": "FINNEAS", 654 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music62/v4/5c/48/49/5c4849f5-3c9b-11e6-0f57-7eceb38ddf24/source/512x512bb.png", 655 | "plays": 31, 656 | "link": "https://song.link/us/i/1353433766" 657 | }, 658 | { 659 | "title": "Empty", 660 | "album": "American Boyfriend: A Suburban Love Story", 661 | "artist": "Kevin Abstract", 662 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music71/v4/a6/d9/e7/a6d9e742-6a62-1b6b-338e-21ccd61c894d/source/512x512bb.png", 663 | "plays": 68, 664 | "link": "https://song.link/us/i/1171885144" 665 | }, 666 | { 667 | "title": "Mind", 668 | "album": "What Do You Think About the Car?", 669 | "artist": "Declan McKenna", 670 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music111/v4/9b/f3/96/9bf39631-58b0-cc75-c885-1f659b79ea44/source/512x512bb.png", 671 | "plays": 38, 672 | "link": "https://song.link/us/i/1208110334" 673 | }, 674 | { 675 | "title": "Jesus In LA", 676 | "album": "Jesus In LA - Single", 677 | "artist": "Alec Benjamin", 678 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/3c/3e/d0/3c3ed056-ab4d-352e-9703-9741e16f8f7e/source/512x512bb.png", 679 | "plays": 43, 680 | "link": "https://song.link/us/i/1470294505" 681 | }, 682 | { 683 | "title": "i love you", 684 | "album": "WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?", 685 | "artist": "Billie Eilish", 686 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music114/v4/ff/4a/eb/ff4aeb7c-7f2d-1d18-d7cc-51c107c70bad/source/512x512bb.png", 687 | "plays": 34, 688 | "link": "https://song.link/us/i/1450695895" 689 | }, 690 | { 691 | "title": "Brazil", 692 | "album": "What Do You Think About the Car?", 693 | "artist": "Declan McKenna", 694 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music111/v4/9b/f3/96/9bf39631-58b0-cc75-c885-1f659b79ea44/source/512x512bb.png", 695 | "plays": 30, 696 | "link": "https://song.link/us/i/1114619172" 697 | }, 698 | { 699 | "title": "Love It If We Made It", 700 | "album": "A Brief Inquiry Into Online Relationships", 701 | "artist": "The 1975", 702 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music128/v4/ed/74/65/ed74656a-b885-cbb0-6e0a-ceb65203b0d9/source/512x512bb.png", 703 | "plays": 57, 704 | "link": "https://song.link/us/i/1435546671" 705 | }, 706 | { 707 | "title": "John My Beloved", 708 | "album": "Carrie & Lowell", 709 | "artist": "Sufjan Stevens", 710 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music3/v4/ca/0b/5f/ca0b5f5f-22c0-4257-9a78-dc8fb9b857ca/source/512x512bb.png", 711 | "plays": 78, 712 | "link": "https://song.link/us/i/955572626" 713 | }, 714 | { 715 | "title": "Steve", 716 | "album": "Narrated for You", 717 | "artist": "Alec Benjamin", 718 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music128/v4/c2/66/5e/c2665ec4-d57c-a539-5133-22ee864ca6cb/source/512x512bb.png", 719 | "plays": 31, 720 | "link": "https://song.link/us/i/1441728851" 721 | }, 722 | { 723 | "title": "Seventeen", 724 | "album": "American Boyfriend: A Suburban Love Story", 725 | "artist": "Kevin Abstract", 726 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music71/v4/a6/d9/e7/a6d9e742-6a62-1b6b-338e-21ccd61c894d/source/512x512bb.png", 727 | "plays": 70, 728 | "link": "https://song.link/us/i/1171885184" 729 | }, 730 | { 731 | "title": "Euphoria", 732 | "album": "Crystalline", 733 | "artist": "bülow", 734 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/e2/1c/ac/e21cacac-ff21-2f31-a92d-9f43dda6cbf6/source/512x512bb.png", 735 | "plays": 41, 736 | "link": "https://song.link/us/i/1457759950" 737 | }, 738 | { 739 | "title": "seasons nineteen", 740 | "album": "portraits", 741 | "artist": "Greyson Chance", 742 | "artwork": "https://is2-ssl.mzstatic.com/image/thumb/Music114/v4/59/81/79/59817969-c00e-0cd2-fc76-01f3cf13ba8c/source/512x512bb.png", 743 | "plays": 34, 744 | "link": "https://song.link/us/i/1451317880" 745 | }, 746 | { 747 | "title": "Lines", 748 | "album": "Damaged, Vol. 1 - Single", 749 | "artist": "bülow", 750 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music118/v4/b6/05/8e/b6058e56-d920-dc91-1d88-0b070261435d/source/512x512bb.png", 751 | "plays": 29, 752 | "link": "https://song.link/us/i/1440784080" 753 | }, 754 | { 755 | "title": "Cinnamon Girl", 756 | "album": "Norman F*****g Rockwell!", 757 | "artist": "Lana Del Rey", 758 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/ac/68/63/ac6863d0-33a3-9846-587d-87b8adc9ec70/source/512x512bb.png", 759 | "plays": 29, 760 | "link": "https://song.link/us/i/1474669074" 761 | }, 762 | { 763 | "title": "F**k it I love you", 764 | "album": "Norman F*****g Rockwell!", 765 | "artist": "Lana Del Rey", 766 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/ac/68/63/ac6863d0-33a3-9846-587d-87b8adc9ec70/source/512x512bb.png", 767 | "plays": 29, 768 | "link": "https://song.link/us/i/1474669068" 769 | }, 770 | { 771 | "title": "Mariners Apartment Complex", 772 | "album": "Norman F*****g Rockwell!", 773 | "artist": "Lana Del Rey", 774 | "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/ac/68/63/ac6863d0-33a3-9846-587d-87b8adc9ec70/source/512x512bb.png", 775 | "plays": 29, 776 | "link": "https://song.link/us/i/1474669066" 777 | }, 778 | { 779 | "title": "Grow", 780 | "album": "Grow - Single", 781 | "artist": "Conan Gray", 782 | "artwork": "https://is3-ssl.mzstatic.com/image/thumb/Music118/v4/cf/cb/cd/cfcbcdb7-ebbe-04d2-73ff-9f789f4e02d9/source/512x512bb.png", 783 | "plays": 63, 784 | "link": "https://song.link/us/i/1441737736" 785 | }, 786 | { 787 | "title": "Better Now", 788 | "album": "No One Else Can Wear Your Crown (Deluxe)", 789 | "artist": "Oh Wonder", 790 | "artwork": "https://is5-ssl.mzstatic.com/image/thumb/Music113/v4/61/55/b3/6155b368-ce91-3bb3-cbe7-d755de47f1c8/source/512x512bb.png", 791 | "plays": 24, 792 | "link": "https://song.link/us/i/1487602467" 793 | } 794 | ] 795 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | const withMDX = require('@next/mdx')({ extension: /\.mdx?$/ }) 2 | module.exports = withMDX({ 3 | pageExtensions: ['js', 'mdx'], 4 | images: { 5 | domains: [ 6 | 'is1-ssl.mzstatic.com', 7 | 'is2-ssl.mzstatic.com', 8 | 'is3-ssl.mzstatic.com', 9 | 'is4-ssl.mzstatic.com', 10 | 'is5-ssl.mzstatic.com', 11 | ] 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@lachlanjc/2019", 3 | "description": "@lachlanjc’s 2019 year in review", 4 | "version": "1.0.0", 5 | "private": true, 6 | "author": "Lachlan Campbell ", 7 | "scripts": { 8 | "dev": "next", 9 | "build": "next build", 10 | "start": "next" 11 | }, 12 | "dependencies": { 13 | "@mdx-js/loader": "^1.6.22", 14 | "@next/mdx": "11.1.0", 15 | "@rehooks/component-size": "^1.0.3", 16 | "comma-number": "^2.1.0", 17 | "lodash": "^4.17.21", 18 | "next": "^13.0.3", 19 | "nprogress": "^0.2.0", 20 | "react": "^18.2.0", 21 | "react-dom": "^18.2.0", 22 | "react-feather": "^2.0.9", 23 | "react-github-calendar": "^3.0.1", 24 | "react-player": "^2.9.0", 25 | "react-song-embed": "^1.0.0", 26 | "recharts": "^2.1.0", 27 | "theme-ui": "^0.10.0" 28 | }, 29 | "license": "MIT" 30 | } 31 | -------------------------------------------------------------------------------- /pages/_app.js: -------------------------------------------------------------------------------- 1 | import { ThemeProvider } from 'theme-ui' 2 | 3 | import '../components/fonts.css' 4 | import theme from '../components/theme' 5 | import Meta from '../components/meta' 6 | import NProgress from '../components/nprogress' 7 | import Nav from '../components/nav' 8 | import Footer from '../components/footer' 9 | 10 | const App = ({ Component, pageProps }) => { 11 | return ( 12 | 13 | 14 | 15 |