June 19, 2025

Watch Later is a 100% client-side web app you can use to save a list of YouTube videos without logging into YouTube itself. It syncs across devices using the Nostr protocol and relays, making it fairly decentralized.

screenshot.png

You can find the app at mccormick.cx/apps/watch-later. Because it's a 100% client-side web app, you can self-host it on any static web hosting provider. You can get the source code on my GitHub at chr15m/watch-later, and you can download a zip file of the app too.

How to Use It

To add a video, simply paste the URL into the input at the top. The video will be added to your watch list. Click on any video to watch it, and the playback position will be saved as you watch so you can resume again later from the same place. You can also mark videos as watched and they'll go into the watched tab, and you can delete videos from your list permanently.

Cross-Device Sync

You can sync your watch list and video playback positions easily across devices without logging in. The data is encrypted and synced using the Nostr protocol on public Nostr relays. The sync works across different devices by sharing the Nostr key or nsec.

To get the key, go to the settings page by clicking on the cog in the top right hand corner. Then you can use the copy button to copy the key. You can optionally encrypt the key with a password for extra safety. Once you've copied the key, you can transfer it to your other device and paste it in on the settings page. That will immediately sync your video list across as well as any playback positions.

The Technology

Watch Later is about 800 lines of code written in ClojureScript. It syncs your video list across multiple devices without any backend code, and that means it can be hosted on static web hosting. It was super fun building this on the Nostr protocol and not needing to build or maintain any server infrastructure or accounts or anything like that. The sync seems to be fast and reliable, and I haven't had any issues so far.

Deployment is fun because I can just use a tiny bash script to rsync the front-end files up to my static web server. That's much simpler and less error-prone than deploying a full service with a backend. I also like that people can use the app without logging in. I don't have to collect any personal data to enable the network features.


So that's Watch Later. I hope the app's useful to you, and I can highly recommend building stuff on the Nostr protocol. Enjoy!

June 12, 2025

A way to make sense of it is this. The universe can be a cold hard place. Sometimes it seems meaningless and harsh. But we are a part of the universe. We are woven into it's fabric. We are made of the same stuff as the whole, not separate, and it is made of us.

Because we think, the universe can think. Because we love the universe can love. It's because we exist that meaning and compassion and love and kindness and humour and brilliance are properties of the universe itself.

We are a way for the universe to love itself. We make it all bearable for each other. Because of us it's not just a cold harsh meaningless place. We have the power to make it something more than that.

So be excellent to each other. Prove that there is meaning by finding it. Prove that there is love by loving each other. Prove there is courage by being courageous. This is the way.

May 6, 2025

The good folks at defn podcast recently had me on as a guest for some reason.

Topics we covered:

  • Laziness as a core developer value.
  • Preferring Node.js over JVM with Clojure(Script).
  • Deployment tools like Piku.
  • Using nbb for scripting.
  • The Nostr decentralized social media protocol.
  • Different meanings of "crypto".
  • Using LLMs for code generation.
View on Zencastr

April 22, 2025

CodeShow is a code presentation tool I just released. It's a simple open-source static frontend web app with no backend that you can self-host.

CodeShow screenshot

Visit mccormick.cx/apps/codeshow in your browser to use it.

Get the sourcecode on GitHub.

Features

  • Syntax highlighting (CodeMirror)
  • Adjustable color themes (CodeMirror)
  • Full-screen display
  • Filename display (optional)
  • Window dots decoration (optional)
  • Config is auto-saved to localStorage

Usage

  • Click anywhere outside the code box to toggle the config interface.
  • Use the built-in browser zoom if you want bigger or smaller code.
  • Take a screenshot to get an image you can re-use.
  • To self-host, upload index.html, style.css, and main.cljs to your server.

Technology

Video

March 12, 2025

cdc080274d2c5476f02846d80167f04b.png

Your thumb depresses the microphone button with a soft click. You speak:

"Beep loudly if the pot boils over."

"Send me an SMS when you see the fox in the back yard."

"Count the number of people who walk past every hour and email me a spreadsheet."

"Email me any updates made on the whiteboard."

Watch It For Me is an AI device that can watch things for you. It's a camera you talk to. You press the button and tell it what to do when it sees something happen. It speaks to confirm your request.

Ideally it runs the AI model on-device and doesn't upload anything to the cloud.

I'm not going to make this, but if you want to take the idea and run with it, go for it. This idea belongs to the public domain. If you want implementation or design advice I'm happy to consult. An ideal outcome would be Eric Migicovsky building this!