Skip to content

Instantly share code, notes, and snippets.

View skylarmb's full-sized avatar
๐Ÿฅ‘
nice

Skylar skylarmb

๐Ÿฅ‘
nice
View GitHub Profile
@skylarmb
skylarmb / workflow_editor.md
Last active November 10, 2025 19:13
Search workflow editor design thoughts

Goal

Build a simple, type-safe workflow system where users compose basic building blocks to build their own search experience.

Data Types System

Simplicity and strong typing are explicit goals, and are prioritized over infinite flexibility.

  • All interfaces use discriminated / tagged unions for identity
  • Primitive data types that flow between nodes are limited, although internal/intermediate data types within processing steps may diverge.
  • All types are serializable (no function or map types etc)
  • Both structured and unstructured data should be supported as inputs and outputs.
@skylarmb
skylarmb / verify_webhook.py
Created January 15, 2020 22:46
Example implementation of Plaid webhook verification
import hashlib
import hmac
import time
import requests
from jose import jwt
# Plaid client credentials.
CLIENT_ID = 'PLAID_CLIENT_ID'
SECRET = 'PLAID_SECRET'

Keybase proof

I hereby claim:

  • I am skylarmb on github.
  • I am skylarmb (https://keybase.io/skylarmb) on keybase.
  • I have a public key ASBR1mgH2bTq4DdVDlCoLErQEWEOuteyb0xPxsx0SCO_AQo

To claim this, I am signing this object:

๐Ÿ˜๐Ÿ˜‚๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‹๐Ÿ˜Œ๐Ÿ˜๐Ÿ˜๐Ÿ˜’๐Ÿ˜“๐Ÿ˜”๐Ÿ˜–๐Ÿ˜˜๐Ÿ˜š๐Ÿ˜œ๐Ÿ˜๐Ÿ˜ž๐Ÿ˜ ๐Ÿ˜ก๐Ÿ˜ข๐Ÿ˜ฃ๐Ÿ˜ค๐Ÿ˜ฅ๐Ÿ˜จ๐Ÿ˜ฉ๐Ÿ˜ช๐Ÿ˜ซ๐Ÿ˜ญ๐Ÿ˜ฐ๐Ÿ˜ฑ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿ˜ต๐Ÿ˜ท๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜บ๐Ÿ˜ป๐Ÿ˜ผ๐Ÿ˜ฝ๐Ÿ˜พ๐Ÿ˜ฟ๐Ÿ™€๐Ÿ™…๐Ÿ™†๐Ÿ™‡๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ™‹๐Ÿ™Œ๐Ÿ™๐Ÿ™Ž๐Ÿ™โœ‚โœ…โœˆโœ‰โœŠโœ‹โœŒโœโœ’โœ”โœ–โœจโœณโœดโ„โ‡โŒโŽโ“โ”โ•โ—โคโž•โž–โž—โžกโžฐ๐Ÿš€๐Ÿšƒ๐Ÿš„๐Ÿš…๐Ÿš‡๐Ÿš‰๐ŸšŒ๐Ÿš๐Ÿš‘๐Ÿš’๐Ÿš“๐Ÿš•๐Ÿš—๐Ÿš™๐Ÿšš๐Ÿšข๐Ÿšค๐Ÿšฅ๐Ÿšง๐Ÿšจ๐Ÿšฉ๐Ÿšช๐Ÿšซ๐Ÿšฌ๐Ÿšญ๐Ÿšฒ๐Ÿšถ๐Ÿšน๐Ÿšบ๐Ÿšป๐Ÿšผ๐Ÿšฝ๐Ÿšพ๐Ÿ›€โ“‚๐Ÿ…ฐ๐Ÿ…ฑ๐Ÿ…พ๐Ÿ…ฟ๐Ÿ†Ž๐Ÿ†‘๐Ÿ†’๐Ÿ†“๐Ÿ†”๐Ÿ†•๐Ÿ†–๐Ÿ†—๐Ÿ†˜๐Ÿ†™๐Ÿ†š๐Ÿ‡ฉ๐Ÿ‡ช๐Ÿ‡ฉ๐Ÿ‡ช๐Ÿ‡ฉ๐Ÿ‡ช๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡ฏ๐Ÿ‡ต๐Ÿ‡ฏ๐Ÿ‡ต๐Ÿ‡ฏ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ท๐Ÿ‡ฐ๐Ÿ‡ท๐Ÿ‡ฐ๐Ÿ‡ท๐Ÿ‡ซ๐Ÿ‡ท๐Ÿ‡ซ๐Ÿ‡ท๐Ÿ‡ซ๐Ÿ‡ท๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ฎ๐Ÿ‡น๐Ÿ‡ฎ๐Ÿ‡น๐Ÿ‡ฎ๐Ÿ‡น๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡ท๐Ÿ‡บ๐Ÿ‡ท๐Ÿ‡บ๐Ÿ‡ท๐Ÿ‡บ๐Ÿˆ๐Ÿˆ‚๐Ÿˆš๐Ÿˆฏ๐Ÿˆฒ๐Ÿˆณ๐Ÿˆด๐Ÿˆต๐Ÿˆถ๐Ÿˆท๐Ÿˆธ๐Ÿˆน๐Ÿˆบ๐Ÿ‰๐Ÿ‰‘ยฉยฎโ€ผโ‰#โƒฃ#โƒฃ#โƒฃโ„ขโ„นโ†”โ†•โ†–โ†—โ†˜โ†™โ†ฉโ†ชโŒšโŒ›โฉโชโซโฌโฐโณโ–ชโ–ซโ–ถโ—€โ—ปโ—ผโ—ฝโ—พโ˜€โ˜โ˜Žโ˜‘โ˜”โ˜•โ˜โ˜บโ™ˆโ™‰โ™Šโ™‹โ™Œโ™โ™Žโ™โ™โ™‘โ™’โ™“โ™ โ™ฃโ™ฅโ™ฆโ™จโ™ปโ™ฟโš“โš โšกโšชโšซโšฝโšพโ›„โ›…โ›Žโ›”โ›ชโ›ฒโ›ณโ›ตโ›บโ›ฝโคดโคตโฌ…โฌ†โฌ‡โฌ›โฌœโญโญ•ใ€ฐใ€ฝใŠ—ใŠ™๐Ÿ€„๐Ÿƒ๐ŸŒ€๐ŸŒ๐ŸŒ‚๐ŸŒƒ๐ŸŒ„๐ŸŒ…๐ŸŒ†๐ŸŒ‡๐ŸŒˆ๐ŸŒ‰๐ŸŒŠ๐ŸŒ‹๐ŸŒŒ๐ŸŒ๐ŸŒ‘๐ŸŒ“๐ŸŒ”๐ŸŒ•๐ŸŒ™๐ŸŒ›๐ŸŒŸ๐ŸŒ ๐ŸŒฐ๐ŸŒฑ๐ŸŒด๐ŸŒต๐ŸŒท๐ŸŒธ๐ŸŒน๐ŸŒบ๐ŸŒป๐ŸŒผ๐ŸŒฝ๐ŸŒพ๐ŸŒฟ๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿ…๐Ÿ†๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐ŸŽ€๐ŸŽ๐ŸŽ‚๐ŸŽƒ๐ŸŽ„๐ŸŽ…๐ŸŽ†๐ŸŽ‡๐ŸŽˆ๐ŸŽ‰๐ŸŽŠ๐ŸŽ‹๐ŸŽŒ๐ŸŽ๐ŸŽŽ๐ŸŽ๐ŸŽ๐ŸŽ‘๐ŸŽ’๐ŸŽ“๐ŸŽ ๐ŸŽก๐ŸŽข๐ŸŽฃ๐ŸŽค๐ŸŽฅ๐ŸŽฆ๐ŸŽง๐ŸŽจ๐ŸŽฉ๐ŸŽช๐ŸŽซ๐ŸŽฌ๐ŸŽญ๐ŸŽฎ๐ŸŽฏ๐ŸŽฐ๐ŸŽฑ๐ŸŽฒ๐ŸŽณ๐ŸŽด๐ŸŽต๐ŸŽถ๐ŸŽท๐ŸŽธ๐ŸŽน๐ŸŽบ๐ŸŽป๐ŸŽผ๐ŸŽฝ๐ŸŽพ๐ŸŽฟ๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿ†๐Ÿˆ๐ŸŠ๐Ÿ ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿฐ๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ‘๐Ÿ’๐Ÿ”๐Ÿ—๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ๐Ÿฝ๐Ÿพ๐Ÿ‘€๐Ÿ‘‚๐Ÿ‘ƒ๐Ÿ‘„๐Ÿ‘…๐Ÿ‘†๐Ÿ‘‡๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘Š๐Ÿ‘‹๐Ÿ‘Œ๐Ÿ‘๐Ÿ‘Ž๐Ÿ‘๐Ÿ‘๐Ÿ‘‘๐Ÿ‘’๐Ÿ‘“๐Ÿ‘”๐Ÿ‘•๐Ÿ‘–๐Ÿ‘—๐Ÿ‘˜๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ‘œ๐Ÿ‘๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿ‘ ๐Ÿ‘ก๐Ÿ‘ข๐Ÿ‘ฃ๐Ÿ‘ค๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿ‘จ๐Ÿ‘ฉ๐Ÿ‘ช๐Ÿ‘ซ๐Ÿ‘ฎ๐Ÿ‘ฏ๐Ÿ‘ฐ๐Ÿ‘ฑ๐Ÿ‘ฒ๐Ÿ‘ณ๐Ÿ‘ด๐Ÿ‘ต๐Ÿ‘ถ๐Ÿ‘ท๐Ÿ‘ธ๐Ÿ‘น๐Ÿ‘บ๐Ÿ‘ป๐Ÿ‘ผ๐Ÿ‘ฝ๐Ÿ‘พ๐Ÿ‘ฟ๐Ÿ’€๐Ÿ’๐Ÿ’‚๐Ÿ’ƒ๐Ÿ’„๐Ÿ’…๐Ÿ’†๐Ÿ’‡๐Ÿ’ˆ๐Ÿ’‰๐Ÿ’Š๐Ÿ’‹๐Ÿ’Œ๐Ÿ’๐Ÿ’Ž๐Ÿ’๐Ÿ’๐Ÿ’‘๐Ÿ’’๐Ÿ’“๐Ÿ’”๐Ÿ’•๐Ÿ’–๐Ÿ’—๐Ÿ’˜๐Ÿ’™๐Ÿ’š๐Ÿ’›๐Ÿ’œ๐Ÿ’๐Ÿ’ž๐Ÿ’Ÿ๐Ÿ’ ๐Ÿ’ก๐Ÿ’ข๐Ÿ’ฃ๐Ÿ’ค๐Ÿ’ฅ๐Ÿ’ฆ๐Ÿ’ง๐Ÿ’จ๐Ÿ’ฉ๐Ÿ’ช๐Ÿ’ซ๐Ÿ’ฌ๐Ÿ’ฎ๐Ÿ’ฏ๐Ÿ’ฐ๐Ÿ’ฑ๐Ÿ’ฒ๐Ÿ’ณ๐Ÿ’ด๐Ÿ’ต๐Ÿ’ธ๐Ÿ’น๐Ÿ’บ๐Ÿ’ป๐Ÿ’ผ๐Ÿ’ฝ๐Ÿ’พ๐Ÿ’ฟ๐Ÿ“€๐Ÿ“๐Ÿ“‚๐Ÿ“ƒ๐Ÿ“„๐Ÿ“…๐Ÿ“†๐Ÿ“‡๐Ÿ“ˆ๐Ÿ“‰๐Ÿ“Š๐Ÿ“‹๐Ÿ“Œ๐Ÿ“๐Ÿ“Ž๐Ÿ“๐Ÿ“๐Ÿ“‘๐Ÿ“’๐Ÿ““๐Ÿ“”๐Ÿ“•๐Ÿ“–๐Ÿ“—๐Ÿ“˜๐Ÿ“™๐Ÿ“š๐Ÿ“›๐Ÿ“œ๐Ÿ“๐Ÿ“ž๐Ÿ“Ÿ๐Ÿ“ ๐Ÿ“ก๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ค๐Ÿ“ฅ๐Ÿ“ฆ๐Ÿ“ง๐Ÿ“จ๐Ÿ“ฉ๐Ÿ“ช๐Ÿ“ซ๐Ÿ“ฎ๐Ÿ“ฐ๐Ÿ“ฑ๐Ÿ“ฒ๐Ÿ“ณ๐Ÿ“ด๐Ÿ“ถ๐Ÿ“ท๐Ÿ“น๐Ÿ“บ๐Ÿ“ป๐Ÿ“ผ๐Ÿ”ƒ๐Ÿ”Š๐Ÿ”‹๐Ÿ”Œ๐Ÿ”๐Ÿ”Ž๐Ÿ”๐Ÿ”๐Ÿ”‘๐Ÿ”’๐Ÿ”“๐Ÿ””๐Ÿ”–๐Ÿ”—๐Ÿ”˜๐Ÿ”™๐Ÿ”š๐Ÿ”›๐Ÿ”œ๐Ÿ”๐Ÿ”ž๐Ÿ”Ÿ๐Ÿ” ๐Ÿ”ก๐Ÿ”ข๐Ÿ”ฃ๐Ÿ”ค๐Ÿ”ฅ๐Ÿ”ฆ๐Ÿ”ง๐Ÿ”จ๐Ÿ”ฉ๐Ÿ”ช๐Ÿ”ซ๐Ÿ”ฎ๐Ÿ”ฏ๐Ÿ”ฐ๐Ÿ”ฑ๐Ÿ”ฒ๐Ÿ”ณ๐Ÿ”ด๐Ÿ”ต๐Ÿ”ถ๐Ÿ”ท๐Ÿ”ธ๐Ÿ”น๐Ÿ”บ๐Ÿ”ป๐Ÿ”ผ๐Ÿ”ฝ๐Ÿ•๐Ÿ•‘๐Ÿ•’๐Ÿ•“๐Ÿ•”๐Ÿ••๐Ÿ•–๐Ÿ•—๐Ÿ•˜๐Ÿ•™๐Ÿ•š๐Ÿ•›๐Ÿ—ป๐Ÿ—ผ๐Ÿ—ฝ๐Ÿ—พ๐Ÿ—ฟ๐Ÿ˜€๐Ÿ˜‡๐Ÿ˜ˆ๐Ÿ˜Ž๐Ÿ˜๐Ÿ˜‘๐Ÿ˜•๐Ÿ˜—๐Ÿ˜™๐Ÿ˜›๐Ÿ˜Ÿ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜ฌ๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ด๐Ÿ˜ถ๐Ÿš๐Ÿš‚๐Ÿš†๐Ÿšˆ๐ŸšŠ๐Ÿš๐ŸšŽ๐Ÿš๐Ÿš”๐Ÿš–๐Ÿš˜๐Ÿš›๐Ÿšœ๐Ÿš๐Ÿšž๐ŸšŸ๐Ÿš ๐Ÿšก๐Ÿšฃ๐Ÿšฆ๐Ÿšฎ๐Ÿšฏ๐Ÿšฐ๐Ÿšฑ๐Ÿšณ๐Ÿšด๐Ÿšต๐Ÿšท๐Ÿšธ๐Ÿšฟ๐Ÿ›๐Ÿ›‚๐Ÿ›ƒ๐Ÿ›„๐Ÿ›…๐ŸŒ๐ŸŒŽ๐ŸŒ๐ŸŒ’๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒš๐ŸŒœ๐ŸŒ๐ŸŒž๐ŸŒฒ๐ŸŒณ๐Ÿ‹๐Ÿ๐Ÿผ๐Ÿ‡๐Ÿ‰๐Ÿค๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿ…๐Ÿ†๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹๐Ÿ๐Ÿ๐Ÿ“๐Ÿ•๐Ÿ–๐Ÿช๐Ÿ‘ฅ๐Ÿ‘ฌ๐Ÿ‘ญ๐Ÿ’ญ๐Ÿ’ถ๐Ÿ’ท๐Ÿ“ฌ๐Ÿ“ญ๐Ÿ“ฏ๐Ÿ“ต๐Ÿ”€๐Ÿ”๐Ÿ”‚๐Ÿ”„๐Ÿ”…๐Ÿ”†๐Ÿ”‡๐Ÿ”‰๐Ÿ”•๐Ÿ”ฌ๐Ÿ”ญ๐Ÿ•œ๐Ÿ•๐Ÿ•ž๐Ÿ•Ÿ๐Ÿ• ๐Ÿ•ก๐Ÿ•ข๐Ÿ•ฃ๐Ÿ•ค๐Ÿ•ฅ๐Ÿ•ฆ๐Ÿ•ง
@skylarmb
skylarmb / scss_loops.md
Last active January 9, 2017 22:54
Loop for generating padding and margin classes

Loop for generating padding and margin classes

/* Margins and Padding */
$sizes: (
  xs: 5px,
  s: 8px,
  m: 10px,
  l: 20px,
  xl: 25px,