Building a digital vigil for those we've lost

Sunday, November 19, 2023

This post is hard to write in a lot of ways. It's more personal than most I've written. This is presumptively a tech blog, and this piece is about so much more than technology. But it's important.

Making things, software or otherwise, is ultimately about people. One of the ways I express love for the people I care about is through making things. Whether that's a hot meal, a picture frame, or a piece of software, it's people who make making matter.

And so I made a Digital Vigil for Transgender Day of Remembrance. The rest of this post explains why and how. I hope you'll join me in this.

TDoR and what it means to me

Tomorrow is Transgender Day of Remembrance (or TDoR). It's a day to memorialize those who have died at the hands of transphobia. Some were murdered, some were lost to suicide.

This day has not been something that I was very conscious of in the past. It was relatively easy to stay detached. This year, that's a lot harder, for two reasons.

The first reason is that someone I know is on the list this time. She was a big influence on me during my internship. We worked on different teams, but she was the epitome of the engineer I wanted to become: she was the badass engineer that you could always turn to, and it felt like she would know the solution to your problem from half a sentence. She was the first engineer I'd worked with who I saw transition, from afar. I saw her continue her successful career, remaining respected by coworkers and thriving during and after her transition. Thank you to the former coworker who let me know about her passing; you mean the world to me, too, and I know her loss hit you hard.

The second reason is that I now hold a fear of someday ending up on this list myself. I'm a trans woman, and the world is not the friendliest to us. My lot in life is still relatively nice. I live in a small accepting town; my parents in another; my employer and coworkers have been grand; and the programming community I'm in is a warm hug. But attacks on all trans people are on the rise, and our access to medical care is at risk with the next general election. If I'm forced to medically detransition, I don't know how my mental health could survive intact. If we're all forced to medically detransition, the list of those we've lost will be much longer.

So this year I learned more about the day. I looked at the list of names that would be read this year, and I cried. And then I started looking to participate. There isn't a candlelight vigil that I can attend in person this year, because I will be traveling for Thanksgiving.

Since I cannot attend a vigil in person, I thought about other ways that I could participate. I toyed with the idea of doing something with software (because of course I did), and wasn't sure what I wanted to do. It crystallized this week after my therapy session, though.

Making my own vigil

It is deeply important to me to participate in TDoR, and making things is my most expressive way of showing love and care. Making something for TDoR would be a way to put my heart into the day, and a way to build the experience I cannot get in person. Plus, it is something that is very visual and user-focused, so a good way to stretch a little outside of my usual areas of focus.

So I started with a simple concept: give people the ability to read the list of names one by one, and experience lighting a candle for each name. Ideally we would add some nice styling, and make the candle look a little animated, but it would depend on time and getting help—I'm not very skilled at CSS.

This is a nice use-case for a frontend application. React was the obvious choice, but configuring React gives me a headache1 and it's been a while, so there was a lot of friction to starting. On a whim, I tried Yew instead. Yew is2 a framework for writing single-page apps using Rust and WASM. For such a simple application as this one, it was quite easy to get started.

The starter example, a counter that you click to increment, was the foundation of the application. We have a list of names, and each time we press a button it will advance through the list of names. What is this except a counter pointing to the index of which name is next to read? So I took the starter example and connected it up to a list of names, which will then render each one on the page.

After that it was a lot of polishing and tweaking the layout and the look. The primary task that intimidated me was making a candle in HTML/CSS, but we took the easy route and found a permissively-licensed example and adapted it. Trim out the taller candle, then scale the whole thing to the size we want, and we've got it. With some basic styling to make the candle sit with each name in a list, this was the core of the application.

The remaining work was to make it functional as more than a cute demo:

  • Your state is saved in localStorage, so if you refresh the page you can start reading from where you left off
  • There are multiple views for the introduction text, the credits, and the vigil itself
  • You can reset the state if you want to start over

There were a lot of little CSS tweaks, too. The most recent one was making the candles fade in. I'm sure there is more that can be done here, but this is emotional work for me.

Huge thanks to Erika and an anonymous Recurser who helped me with creating the candles, the layout, the application logic... really with all of it. It is much easier to complete an emotionally difficult project when you have friends to help you along the way ❤️.

The code is open-source, and contributions are welcome if you think of ways to improve it. One thing that I think would be nice is to add some more information with each name. This data is available, but I did not have the emotional bandwidth to work through adding it into the application.

Please read their names

Tomorrow is Transgender Day of Remembrance. Please join me in memorializing the day by participating in a vigil. This may be in person, or it may be by using the digital vigil that I built.

This is a very important time to keep all these people in your hearts, to hold them in the light. We are heading into Thanksgiving, and many will be gathering to share meals. Some seats will be empty.

Let's come together to remember those we've lost, and then work to make sure we don't lose more in the future.

And Catherine? You rock. I wish I'd gotten to tell you that.


JavaScript and TypeScript also do not spark joy for me, so if I can avoid them that would be nice.


My brain unhelpfully chimes in "no, you are."

If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts and support my work, subscribe to the newsletter. There is also an RSS feed.

Want to become a better programmer? Join the Recurse Center!
Want to hire great programmers? Hire via Recurse Center!