Open source

Tools I build for the community.

Focused packages I use in production, shared under MIT. No paywalls, no telemetry, no open-core bait — just components I wanted to exist.

v0.1.0MITVue 3.5+0 dependencies
Package
pullcord-vue
A ceiling pull-cord theme switch
v0.1.0
bun add pullcord-vue

pullcord-vue

A ceiling pull-cord for Vue 3 with a real rope. Grab it, pull it, and it swings back — a theme switch with actual physics. This site uses it.

A real rope

Verlet nodes and distance constraints. It hangs under gravity, swings when grabbed, and goes to sleep when it settles — so an idle cord costs nothing.

Accessible by default

A real button with click and Enter support, aria-pressed state, and a focus ring. The drop-in and the pull gesture are disabled under reduced motion.

Small surface area

One component, one CSS file, zero runtime dependencies. Vue 3.5+ is the only peer dependency. MIT licensed, forever.

Credit: a Vue port of pullcord by iisac. The physics, geometry and timing are carried over; the Vue plumbing, pointer handling and per-instance SVG ids are new.
Install
bun add pullcord-vue
Use it
<script setup lang="ts">
import { PullCord } from 'pullcord-vue'
import 'pullcord-vue/pullcord.css'

const light = ref(false)
</script>

<template>
  <PullCord :pulled="light" @pull="light = !light" />
</template>

Desktop note: this portfolio uses the package as its theme switch. Pull the cord in the top-right corner.

Need something custom?

I build production components and design systems for teams. If you need a piece that does not exist yet, let's talk.

Or send an email