├── .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 |
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 |
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 |
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 |
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 |
16 |
17 |
18 |
19 | )
20 | }
21 |
22 | export default App
23 |
--------------------------------------------------------------------------------
/pages/_document.js:
--------------------------------------------------------------------------------
1 | import { Html, Head, Main, NextScript } from 'next/document'
2 | import { InitializeColorMode } from 'theme-ui'
3 |
4 | export default function Document() {
5 | return (
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | )
20 | }
21 |
--------------------------------------------------------------------------------
/pages/activity.js:
--------------------------------------------------------------------------------
1 | import { Box, Container, Grid, Heading } from 'theme-ui'
2 | import Meta from '../components/meta'
3 | import Header from '../components/header'
4 | import Stat from '../components/stat'
5 | import Repos from '../components/activity/repos'
6 | import Movement from '../components/activity/movement'
7 | import Rings from '../components/activity/rings'
8 | import GitHub from 'react-github-calendar'
9 |
10 | const ActivityPage = () => (
11 |
12 |
16 |
17 |
23 |
24 |
25 |
26 |
27 |
28 |
36 |
37 | GitHub
38 |
39 |
40 |
41 |
42 |
43 | Daily steps
44 |
45 |
46 |
49 |
50 | Activity rings
51 |
52 |
53 |
54 |
55 | )
56 |
57 | export default ActivityPage
58 |
--------------------------------------------------------------------------------
/pages/index.mdx:
--------------------------------------------------------------------------------
1 | import Story, { Banner } from '../components/story'
2 | import { Photo, Pano, YouTube } from '../components/blocks'
3 | import { Grid } from 'theme-ui'
4 |
5 |
6 |
7 |
8 |
9 | [@lachlanjc](https://lachlanjc.com)’s
10 |
11 | # 2019 in Review
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Each year in my recent life seems to double the scope of the last. In
20 | [2017](https://lachlanjc.me/2017), I started my [high school coding
21 | club](https://twitter.com/zachlatta/status/955522122750701568?s=20), came out
22 | (twice), went to San Francisco for the first time, went to my first hackathon,
23 | got my black belt, and started working at [Hack Club](https://hackclub.com). In
24 | 2018, I organized my [first hackathon](https://hackhappyvalley.com), opened
25 | gender-neutral bathrooms at my school, moved to San Francisco for the summer to
26 | [build Hack Club
27 | Bank](https://medium.com/hackclub/a-bank-for-student-hackers-e5d894ea5375),
28 | [traveled](https://hackchicago.io)
29 | [more](https://www.instagram.com/p/BmI9vIqnRqP/), helped [teach sex
30 | ed](https://gasp.now.sh), went to my [first concert](https://www.instagram.com/p/Bop7pA2nova/).
31 |
32 | The last few years of my life were transformative beyond belief—I feel like with
33 | each passing year I became an entirely new person. 2017 was the first year as a
34 | teenager I experienced really being happy in my life, and in 2018 I did work I’m
35 | really proud of. 2019 was by far my most productive year (not being in high
36 | school sure helped!), and I found my adventures incredibly gratifying. I
37 | traveled more than I ever have, had a ton of new experiences, and arrived at
38 | real peace with my identity/image. I’m moving into a new phase of my life now
39 | (being in college), but I couldn’t have asked for a better, more Lachlan way to
40 | cap off my real “teenage years.”
41 |
42 | I’ve assembled this website primarily in January 2020 & finished in December
43 | 2020, to archive some of my story & experiences & projects & favorite things
44 | of 2019. Enjoy looking at my life, if you’re into that!
45 |
46 |
53 |
60 |
67 |
68 |
69 | ---
70 |
71 | ## Winter
72 |
73 | This year started off with a bang. In January, I graduated high school (a
74 | semester) early. Balancing intense creative work with high school had long
75 | become an utterly draining juggling act of sleep deprivation, dealing with
76 | grades, and trying to build anything in the world. Though my teachers were
77 | pretty across-the-board great, leaving seemed uniquely liberating, like I could
78 | finally take flight.
79 |
80 | The day after leaving high school, I hosted [Hack
81 | Pennsylvania](https://hackpenn.com), the culmination of thousands of hours of
82 | work on the part of me & my incredible co-organizers
83 | ([Matthew](https://matthewstanciu.me/), Joy, [Zane](https://zane.sh/),
84 | [Theo](https://tmb.sh/), & Jasmine). As two feet of snow fell throughout the
85 | weekend, 111 students grades 6-12 descended on my hometown in central
86 | Pennsylvania to build 40+ incredible games, robots, apps, & more. We raised $15k
87 | to make it happen, and the weekend was truly unforgettable. Our town has no real
88 | opportunities for teenagers in tech—nearly half of attendees were entirely new
89 | to coding—and helping unlock the doors to coding brought my high school coding
90 | club to a new peak. We had ice cream at midnight, a 2am dance party, & lots
91 | more…
92 |
93 | figure:first-of-type': { gridRow: [null, 'span 2'] }
101 | }}
102 | >
103 |
109 |
116 |
123 |
124 |
125 | The next day, I left for LA (first time!) for a retreat with the [Hack Club](https://hackclub.com)
126 | team. (Hack Club is a nonprofit network of high school makers & coding club
127 | leaders around the world.) At the retreat, in the mountains of Idyllwild, CA,
128 | our remote team finally got to bond & spend a week in offline discussion mode,
129 | planning another year of work for the community.
130 |
131 |
137 |
138 | Briefly back at home, I had the privilege to model for a pop-up fashion show put
139 | on by my LGBTQ+ youth group, opening a trans clothing exchange at a local café.
140 | It was a blast.
141 |
142 | ---
143 |
144 | ## Spring
145 |
146 | Never one to waste time, [Zach Latta](https://zachlatta.com/), the founder of
147 | Hack Club & my dear friend, called me about coming back to San Francisco. I
148 | packed up & moved out for 1.5 whirlwind months. In short order, based partly off my
149 | experiences running Hack Pennsylvania, we entirely [redesigned & launched
150 | Hack Club Bank](https://medium.com/hackclub/hack-club-bank-is-now-live-for-everyone-including-you-884f7f54836f),
151 | our tool for high schoolers to get nonprofit bank accounts to run hackathons & nonprofits.
152 | I also stayed up for 55 hours attending [Los Altos Hacks](https://www.losaltoshacks.com/)
153 | with the Hack Club team, Theo, & [Kat](https://katmh.com). I went to my first
154 | Conan Gray concert. I visited Zane in Sacramento & [Dynamicland](https://dynamicland.org)
155 | in Oakland. I had an unforgettable evening with [Amanda Southworth](https://twitter.com/amndasuthwrth).
156 |
157 | One standout memory from my time in San Francisco was my close friend
158 | Matthew visiting. Over a nighttime hike in the Castro, we realized our mutual
159 | affection, a night which sparked a relationship that’s made me incredibly happy
160 | all year.
161 |
162 | figure:nth-of-type(3)': { gridRow: [null, 'span 2'] }
170 | }}
171 | >
172 |
178 |
185 |
191 |
198 |
204 |
205 |
206 | But for all the advantages of being surrounded by tech, I found living in SF
207 | rather isolating and overwhelming. I was just working and sleeping, and had
208 | little to ground me as a person outside that. I returned home to take a break
209 | and see some friends, before leaving for Indiana to briefly visit Matthew and
210 | heading to a second Hack Club team retreat in Idyllwild.
211 |
212 | Though compressed periods of stress can lead to bursts of creativity, extended
213 | periods of rested focus have few parallels. Back at home, I continued working
214 | for Hack Club, designing new pages such as
215 | [Hack Camp](https://hackclub.com/camp/), a design I’m incredibly proud of.
216 | Meanwhile, after starting late February, organizing heated up for
217 | [Windy City Hacks](https://windyhacks.com), a June hackathon in Chicago led by
218 | Matthew. Matthew came for a visit, and anticipating a summer of
219 | traveling & personal time, I said goodbye to my teammates at Hack Club for
220 | the rest of the year. Attending my high school’s prom & graduation felt like a
221 | final farewell to that chapter of my life.
222 |
223 | ---
224 |
225 | ## Summer
226 |
227 | Soon, I headed to Chicago for Windy City Hacks. After thousands more hours of
228 | organizing by Matthew, me, & the [whole team](https://2019-site.windyhacks.com/#leadership),
229 | raising nearly $14k, and days of local preparation, 160 students came from Chicago
230 | & across the Midwest for another remarkable event. It’s always deeply gratifying
231 | to watch the event finally come to fruition, but at the same time, hackathons
232 | are truly the most physically draining thing I regularly do, and always require
233 | at least the event’s duration for recuperation.
234 |
235 | Afterwards I joined Hack Clubbers from across the country in descending on San
236 | Francisco for Hack Club/Make School’s Flagship conference, where I gave a
237 | talk on [starting your first hackathon](https://notebook.lachlanjc.com/2020-01-19_how_to_start_your_first_hackathon/).
238 |
239 |
245 |
246 | The rest of July I flew all across the Midwest: I headed to Cincinnati, OH to
247 | teach, mentor, & judge at [Hack Cincinnati](https://hack-cincinnati.netlify.app),
248 | visited family in Minneapolis, MN, made a final visit to Matthew for the year,
249 | & headed home. Free from my previous commitments but still with a month before
250 | college began, I focused on improving my JavaScript & UI skills, learning how to
251 | use [Theme UI](https://theme-ui.com/home) & [MDX](https://mdxjs.com)
252 | (with which I’m writing this), familiarizing myself with serverless, & making a
253 | steady stream of sites, from the [Hack Pennsylvania wrapup](https://hackpenn.com)
254 | to my [Notebook](https://notebook.lachlanjc.com) & an open source
255 | [Songlink embed component](https://lachlanjc.github.io/react-song-embed/)
256 | powering this site’s [Music section](/music). It’s a rare privilege to get to
257 | work on creative projects & personal learning without financial or professional
258 | pressure.
259 |
260 |
266 |
267 | To end the summer, I loaded up my parents’ car and headed to New York City
268 | to start at NYU, where I’m majoring in “Interactive Media Arts” (making art with
269 | tech/code/building). At the beginning of high school I wasn’t sure if college
270 | was the right move for me, but I decided to go for 1) the social experience
271 | (”networking”) & 2) enrichment I wouldn’t get otherwise. Though I’m not
272 | going to school to learn what I want to do professionally, art school didn’t
273 | feel right, & personally I find computer science pretty uninteresting. Visiting
274 | IMA felt more like stepping into a hackathon, where I could make things I
275 | genuinely care about, so [I applied](https://nyu.lachlanjc.com) last fall.
276 |
277 |
283 |
284 | ---
285 |
286 | ## Fall
287 |
288 | I’ve long dreamed of living in New York, & that I’m just casually writing
289 | this from the IMA building in Brooklyn is amazing. Getting to [meet Tim Cook](https://twitter.com/lachlanjc/status/1175484567752495106?s=20),
290 | hang out with [so many friends](https://twitter.com/lachlanjc/status/1175075858643656704?s=20),
291 | & [randomly meet people](https://twitter.com/lachlanjc/status/1166825269845528589?s=20)
292 | in Washington Square Park. [Attending Adulting.dev](https://twitter.com/lachlanjc/status/1170469462480474113?s=20),
293 | the [NYC Design Systems Coalition](https://designsystems.nyc) meetup, & seeing
294 | Conan Gray live (again!) were all highlights, as well as just exploring the city
295 | & taking the subway to new places. I spent one day getting lost on Long Island
296 | Rail Road & judging at [TeenHacks LI](https://teenhacksli.com), another day
297 | mentoring at CodeDay NYC with [Melody](https://melody.dev) & [TJ](https://tjhorner.dev).
298 | One especially standout weekend was a trip to
299 | Frost Valley, NY with the NYU LGBTQ+ Center. Nestled in the forest, we had deep
300 | discussions, amazing workshops, & ended the days with campfires.
301 |
302 |
309 |
315 |
322 |
329 |
330 |
331 | [My coursework](https://ima.lachlanjc.com) (all open source) has been incredibly stimulating. I’m
332 | incredibly proud of (link cw: sexual abuse) [“One Day This Kid Will Talk,”](https://ima.lachlanjc.com/one_day_this_kid/)
333 | an interactive essay I wrote about queer coming-of-age. I also wrote
334 | [“Imagining Worlds Post-Human”](https://ima.lachlanjc.com/imagining_worlds_post_human/),
335 | short posts about [digital storytelling](https://ima.lachlanjc.com/2019-09-15_cl_scott_mccloud_and_digital_storytelling/),
336 | tried my hand at [digital animation](https://ima.lachlanjc.com/2019-10-30_cl_midterm_animation_project/),
337 | [made a Janelle Monáe visualizer](https://ima.lachlanjc.com/2019-09-29_cc_week_4_project/),
338 | [projection-mapped shoes](https://ima.lachlanjc.com/2019-11-15_cl_projection_project/),
339 | & lots more.
340 |
341 | The semester ended with my department’s Winter Show, where undergrads & grad
342 | students present their best work. I helped create [Autovendor](https://ima.lachlanjc.com/2019-12-02_cl_final_project/),
343 | a subversive, interactive vending machine. I primarily exhibited [Gun Funded](https://gunfunded.com),
344 | a website [I made](https://ima.lachlanjc.com/2019-11-26_cc_final_project/)
345 | visualizing the gun lobby’s funding of U.S. Congress.
346 |
347 | figure:nth-of-type(2)': { gridRow: [null, 'span 2'] }
354 | }}
355 | >
356 |
362 |
368 |
372 |
373 |
374 | With that (& finals), I headed home to Pennsylvania after my first semester of
375 | college, to spend the holidays with my family before heading to Indiana to visit
376 | Matthew & friends for the New Year. I spent my last day of 2019 watching Cats.
377 |
378 | ---
379 |
380 | I’m honestly the happiest I’ve ever been, getting to do creative work & travel
381 | all over the country, surrounded by amazing people who support me:
382 | Matthew, Superclub, Plum, Elliot, David, Elvin, Christine, Zach, Zoë,
383 | my family, & so many more. And thank you for caring about me enough to read this :)
384 |
385 |
386 |
--------------------------------------------------------------------------------
/pages/music.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react'
2 | import { Box, Container, Heading, Grid } from 'theme-ui'
3 | import { Artist, Album } from '../components/music/awards'
4 | import Meta from '../components/meta'
5 | import Header from '../components/header'
6 | import SongList from '../components/music/song-list'
7 | import Player from '../components/music/player'
8 |
9 | import topSongs from '../data/top-songs.json'
10 | import monthlySongs from '../data/monthly-songs.json'
11 | import spring from '../data/spring-songs.json'
12 | import summer from '../data/summer-songs.json'
13 | import fall from '../data/fall-songs.json'
14 | import { capitalize } from 'lodash'
15 |
16 | const seasons = { spring, summer, fall }
17 |
18 | const MusicPage = () => {
19 | const [url, setUrl] = useState(null)
20 |
21 | return (
22 |
23 |
24 |
25 |
26 |
27 | Awards
28 |
29 |
30 |
35 | Conan is hands-down my favorite new artist—stand-out style &
36 | songwriting. Seeing him live twice this year was a joy.
37 |
38 |
44 | This song isn’t super deep or groundbreaking, but it’s perfect pop, & I’m a sucker for that.
45 |
46 |
52 |
53 |
59 |
60 |
61 |
62 | Songs of the month
63 |
64 |
65 |
66 |
67 | Seasonal playlists
68 |
69 |
70 | {Object.keys(seasons).map(season => (
71 |
72 |
73 | {capitalize(season)}
74 |
75 |
76 |
77 | ))}
78 |
79 |
80 |
81 | Top 99 songs
82 |
83 |
84 |
85 | setUrl(null)} />
86 |
87 | )
88 | }
89 |
90 | export default MusicPage
91 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | singleQuote: true,
3 | trailingComma: 'none',
4 | printWidth: 80,
5 | semi: false,
6 | arrowParens: 'avoid'
7 | }
8 |
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #ffffff
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/card.png
--------------------------------------------------------------------------------
/public/cover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/cover.jpg
--------------------------------------------------------------------------------
/public/fall/autovendor.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/fall/autovendor.jpeg
--------------------------------------------------------------------------------
/public/fall/elvin.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/fall/elvin.jpeg
--------------------------------------------------------------------------------
/public/fall/plum.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/fall/plum.jpeg
--------------------------------------------------------------------------------
/public/fall/show.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/fall/show.jpeg
--------------------------------------------------------------------------------
/public/fall/subway.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/fall/subway.jpeg
--------------------------------------------------------------------------------
/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/favicon-16x16.png
--------------------------------------------------------------------------------
/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/favicon-32x32.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/favicon.ico
--------------------------------------------------------------------------------
/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/mstile-150x150.png
--------------------------------------------------------------------------------
/public/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@lachlanjc/2019",
3 | "short_name": "2019",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#5bc0de",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/public/spring/amanda.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/spring/amanda.jpeg
--------------------------------------------------------------------------------
/public/spring/conan.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/spring/conan.jpeg
--------------------------------------------------------------------------------
/public/spring/lah_stage.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/spring/lah_stage.jpeg
--------------------------------------------------------------------------------
/public/spring/sf_night.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/spring/sf_night.jpeg
--------------------------------------------------------------------------------
/public/spring/sf_sunset.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/spring/sf_sunset.jpeg
--------------------------------------------------------------------------------
/public/summer/dorm_pano.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/summer/dorm_pano.jpeg
--------------------------------------------------------------------------------
/public/summer/flagship_superclub.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/summer/flagship_superclub.jpeg
--------------------------------------------------------------------------------
/public/summer/matthew_cute.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/summer/matthew_cute.jpeg
--------------------------------------------------------------------------------
/public/winter/hackpenn_ceremony.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/winter/hackpenn_ceremony.jpg
--------------------------------------------------------------------------------
/public/winter/hackpenn_team.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/winter/hackpenn_team.jpg
--------------------------------------------------------------------------------
/public/winter/hackpenn_working.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/winter/hackpenn_working.jpg
--------------------------------------------------------------------------------
/public/winter/retreat.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/winter/retreat.jpeg
--------------------------------------------------------------------------------
/public/zoe_glasses.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/zoe_glasses.jpeg
--------------------------------------------------------------------------------
/public/zoe_hair.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lachlanjc/2019/6e1ecf21dc580a8b38757a477672468ace300c4a/public/zoe_hair.jpeg
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "public": true,
3 | "github": { "silent": true }
4 | }
5 |
--------------------------------------------------------------------------------