Skip to content

Instantly share code, notes, and snippets.

View leemartin's full-sized avatar

Lee Martin leemartin

View GitHub Profile
@leemartin
leemartin / spotify-waveform.js
Last active September 25, 2023 17:39
Spotify Waveform Data Generation from Audio Analysis API
const fs = require('fs')
const data = require('./track.json')
let duration = data.track.duration
let segments = data.segments.map(segment => {
return {
start: segment.start / duration,
duration: segment.duration / duration,
loudness: 1 - (Math.min(Math.max(segment.loudness_max, -35), 0) / -35)
@leemartin
leemartin / concert.json
Created June 23, 2020 17:37
Tour Data Concert
{
"id": "",
"artist_id": "",
"datetime": "",
"description": "",
"venue": {
"id": "",
"name": "",
"latitude": "",
"longitude": "",
@leemartin
leemartin / Scan.js
Created May 16, 2020 19:15
Basic Javascript hooks of Shelter In Space "Scanner" transition
methods: {
beforeEnter(el) {
el.style.cssText = "clip-path: inset(0 0 100% 0)"
},
enter(el, done) {
let scan = { percent: 100 }
anime({
targets: scan,
percent: 0,
@leemartin
leemartin / Typer.vue
Last active May 16, 2020 18:38
The "Hitchhiker Typer" component used on Shelter In Space
<template>
<p><span class="start">{{ start }}</span><span class="end">{{ end }}</span></p>
</template>
<script>
export default{
props: {
phrase: {
type: String,
required: true
@leemartin
leemartin / countdown.vue
Created October 6, 2019 12:37
Luxon Vue Countdown
<template>
<time>{{ remaining }}</time>
</template>
<script>
import { DateTime, Duration } from 'luxon'
export default{
data() {
return {
@leemartin
leemartin / msToTime.js
Created September 14, 2019 14:46
Milliseconds to Timecode
let msToTime = (milliseconds) => {
let ms = milliseconds % 1000
let s = (milliseconds - ms) / 1000
let secs = s % 60
if (secs < 10) {
secs = `0${secs}`
}
@leemartin
leemartin / forecast.js
Created August 21, 2019 12:20
A Dark Sky serverless function for Netlify
const fetch = require('node-fetch');
exports.handler = async (event, context) => {
try{
const latitude = event.queryStringParameters.latitude;
const longitude = event.queryStringParameters.longitude;
const response = await fetch(`https://api.darksky.net/forecast/${process.env.DARK_SKY_KEY}/${latitude},${longitude}`);
const data = await response.json();
@leemartin
leemartin / sign.js
Created August 10, 2019 20:08
Get presigned upload url for S3 compatible with Uppy and Netlify Functions
const AWS = require('aws-sdk')
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_KEY,
secretAccessKey: process.env.AWS_SECRET,
useAccelerateEndpoint: true
})
const getSignedUrlPromise = (operation, params) => {
return new Promise((resolve, reject) => {
@leemartin
leemartin / Static.vue
Last active August 8, 2019 13:23
Vue Static Component
<template>
<canvas ref="canvas"></canvas>
</template>
<script>
export default{
methods: {
generateNoise() {
this.noise = document.createElement('canvas')
this.noise.height = window.innerHeight * 2
@leemartin
leemartin / spotify-client-credentials.js
Created January 5, 2019 15:01
Generate Spotify client credentials
const axios = require('axios')
let CLIENT_ID="YOUR_CLIENT_ID"
let CLIENT_SECRET="YOUR_CLIENT_SECRET"
let auth = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString('base64')
axios({
method: 'post',
url: 'https://accounts.spotify.com/api/token',