Xavi Smith

Experienced Professional | Transitioning from Tech to Education

Author: Xavi Smith

  • Introducing Friendly Alien

    I am so beyond excited to share the first few designs for Friendly Alien! Friendly Alien is my new little side-project to make soft, comfy, and size-inclusive clothing (and maybe some other knick knacks) for geeks, stoners, and queers. I deeply believe that fat people deserve great things, and so it’s been my priority to find soft and comfy shirts that go up to 5XL.

    I’ll be launching a pre-order soon, so get on the newsletter to find out about it first! Oh, and uh… you’ll get 15% off when we launch if you do. No shenanigans. I respect your privacy, and will only send emails when there’s something cool to share.

    Be a friend, share with a friend!

  • Four Corners Reports on Pattern of Abuse Cover Up within Jehovah’s Witnesses Religion

    As some of you may know, I was raised a Jehovah’s Witness. In 2019, I decided to leave this organization after finding serious abuse cover up and coming across factual information that disproves the religion’s doctrine.

    One of the stories this report touches on is of a young man that committed suicide after being disfellowshipped for being gay. The young man turns out to be a nephew of one of the leaders of this organization, Stephen Lett. This is an issue that hits particularly close to home since my own coming out.

    All in all, it’s a scathing report. It reveals the Jehovah’s Witness religion (contrary to what its members believe) to be a man-made and human-led organization with policies and procedures that create a ripe breeding ground for all types of abuse.

    I’ve never been happier to have distanced myself from this toxic organization. The leadership’s dogmatic and arrogant attitude has led to the ruin of countless lives without even an apology from the organization. Although thankfully, some victims have won cases against the organization resulting in a settlement.

    Whether you’ve ever been a Jehovah’s Witness or not, I recommend you watch the video.

  • Finding My Self

    2019 and 2020 have been some of the most influential years in my life. I left the religious cult I grew up in, had some pretty life-changing breakthroughs in therapy, and I’m slowly finding a political voice I wasn’t allowed to have previously.

    It’s a strange thing to have one’s whole belief system and sense of reality challenged. It’s disorienting; full of grief, sobbing, and deep emotional pain. While many of my former religion would say I’ve taken the easy way out, I can say confidently that there hasn’t been anything easy about it. As I explained last year, death has been an incredibly difficult thing to grapple with now that I don’t believe in an afterlife.

    And yet, I’ve found happiness. Not a happiness rooted in rose-colored glasses, or without challenges. I’m lonely. I feel as if I have no close friends or family who truly know me except for my partner. People who claimed to love me don’t talk to me anymore. That’s tough to deal with in a normal year, I can’t begin to describe what it’s been like in a pandemic.

    But for me it’s always been about truth. Was what I believed true? Not does it make me feel good, not does it surround me with mostly loving (albeit conditional) people, not because it would dissappoint my family if I didn’t.

    Is it the truth?

    The answer for me is a resounding no.

    Ultimately, going into 2021, I’m a completely different person to who I was just two years ago. It’s change at a magnitude I didn’t expect, but as the storm in my head settles, I’m a person I love deeply and accept fully. I know who I am, what I stand for, and the values that guide my life. I want to live a loving and thoughtful life, and I’m doing my best to do so.

    Happy New Year y’all.

  • Does God Really Hate Queers?

    Here’s a fascinating, heartwarming, and heartbreaking video about being queer and whether it’s also possible to have a faith.

    Interestingly, my former religion makes an appearance just to show the world how horrible it is. Jehovah’s Witnesses are not accepting of LGBTQ people. Joshua, a gay man that is featured in the video, explains how he was disfellowshipped (or excommunicated) and subsequently completely shunned by his family. The story of the muslim woman is just as disturbing as she tries to find a marriage of convenience so that her family doesn’t disown her.

    It’s stories like these that push me towards agnosticism and atheism. How could a loving god expect you to shun someone because of who they love? Why would a loving god punish someone for something so deeply personal and intrinsic to who they are, such as their sexuality?

    So does god really hate people who are LGBTQ? I have no interest in a god that does.

  • Respect Frontend Dev

    Jens Oliver Meiert:

    In order to become a better frontend developer you don’t become a backend developer, you become a better designer and advocate for the user—in a sense of acquiring an understanding of design as well as empathy for users.

    When other developers look and talk down on frontend developers they don’t only show ignorance of the scope and size of frontend development, they then also distract frontend developers from their mission—because that mission is not to walk further into the server room, but to open the windows and look at the users out there.

    First off, Tobi’s comments that spurred this article are moronic, and I’m sure frontend devs at Shopify were delighted to see the CEO disparage their profession. I think it’s important to point out that when challenged on his ignorant comments, he didn’t retract or apologize.

    In general though, frontend development has been the subject of many hot-takes about its worthlessness. Jens does a fantastic job of not only defining how important the work we do is, but also challenging us to do this work better. It is a reminder that the quality of my work is not determined by how much JavaScript I can write, or the fancy things I can do with CSS, but how my work impacts the people on the other end of the screen.

  • Jimmy Dore: ‘Nobody Who Voted for the Iraq War Should Become the President’

    While all the results aren’t in, it looks likely that Joe Biden will win the Presidency. This is a man who promised to veto Medicare for All during a pandemic, wants to give more money to police after summer-long protests against police brutality, and won’t commit to banning fracking as we’re facing the impending doom of our species because of the climate crisis.

    As Jimmy talks about in the video, the left needs to grow its power. I believe it no longer makes sense to work within the Democratic party, but I’m not yet sure what that looks like. One thing is for sure: we need leaders that will fight for universal healthcare, fight for our beautiful planet, fight to defund (and eventually abolish) policing as we know it, and put an end to the endless wars.

    There’s much work to be done.

  • On Death

    Death is something I think about often. It might be my anxiety disorder, but most days, the thought enters my mind, Am I dying?” I mean, technically, the answer is always yes. We’re all dying every day. The pandemic makes this that much worse. Add to that my no longer being religious and, therefore, no longer believing what I used to, and you’ve got yourself quite the cocktail of anxiety.

    I’m barely beginning to explore how other people view death. It wasn’t something I gave much thought to for most of my life, and I arrogantly thought that anyone not belonging to my religion was without hope when it came to death. See, I thought I had all the answers. That death is temporary; that it’s like sleep—you’re asleep one moment and then awake again the next.

    Religion can be exceptionally comforting in that way. I didn’t think about my mortality or what the future entailed. Most belief systems convince you that you never die.

    But I don’t believe that anymore. And it’s tough. I feel as if I’ve been robbed of something. The afterlife was always representative of an ideal life. A life in which I was perfectly healthy, I had a home without a mortgage on the beach somewhere, and I could enjoy my life away from the suffocating grasp of capitalism.

    I don’t mean to be reductive, but believing in an afterlife is kind of like believing in Santa Claus. It would be fantastic if it were real, but there’s just no evidence to prove it factual. And honestly, it’s hard for me to accept it. It is the realization that there is no perfect life, and that just as so many before me, one day I will cease to exist and my life will be over.

    But truth matters to me, and from my research, this is the reality. Living in truth means accepting difficult things that defy what I thought to be true. And I don’t want to be dogmatic about it either; I don’t know 100 percent what will happen when I die. But coming to terms with the finality of life also gives it a beautiful new purpose. It helps me center and be present and appreciate every moment. It helps me remember that I need to tell the people I love that I love them. It helps me be mindful of the impact I have on others and how they feel in my presence.

    So while this new understanding of death has been difficult (and will continue to be), I’m ultimately grateful that I have the chance to accept it and grieve it now. That reality will influence everything I do with the rest of this wonderful life that I have. And that is a gift.

  • How I Made My Badass ‘Listening To’ Section

    I listen to music most of the day while I work. It helps me focus, and it makes me happy. When thinking of ideas for my new site, I wanted to show off my recently played tracks to give visitors a sense of my musical taste. After spending some time looking into the Apple Music API, I decided it would be easier to use the Last.fm API instead.

    Installing Our Packages

    First, let’s install two packages we’ll need to make this work.

    npm install @11ty/eleventy-cache-assets dotenv

    First, @11ty/eleventy-cache-assets will let us fetch data from an external API and cache the results so that we’re not requesting data every time we build the site.

    Second, dotenv will make it easy to handle our local environment variables. Last.fm requires us to send an API key with each request. Which reminds me, get your API key here. If you’re using Netlify, you can read the documentation on how to set environment variables.

    Setup Your API Key

    Before we begin, you’ll need to get your API key. Next, create a .env file in the root of your project and put your key in it. For example:

    API_KEY=token_goes_here

    Remember to add your API key to the server where you host your site. If you’re using Netlify, you can read the documentation on how to set environment variables to do it.

    Fetching Data

    Create a file in your _data folder. I called mine lastfm.js. We’ll add the following to it:

    // _data/lastfm.js
    
    const Cache = require('@11ty/eleventy-cache-assets');
    require('dotenv').config();
    
    const API_KEY = process.env.LASTFM_KEY;
    const USERNAME = 'timothybsmith';
    const API = 'http://ws.audioscrobbler.com/2.0/'
    
    module.exports = async () => {
     try {
     const json = await Cache(
     `${API}?method=user.getrecenttracks&user=${USERNAME}&limit=10&api_key=${API_KEY}&format=json`,
     {
     duration: '2h',
     type: 'json',
     }
     );
     return json;
     } catch (ex) {
     console.log(ex);
    
     return [];
     }
    };

    And just like that, we have access to the last ten recently played tracks in JSON form. I have the cache set to two hours, but you can set it to whatever you’d like. I couldn’t find the rate limit for Last.fm, but I don’t want to hit the API multiple times while I work.

    Displaying the Data

    Now that we have our data, we can render it in our template. I created a partial called recently-played.html in the _includes/partials folder. Now we’ll add the following:

    <!-- _includes/partials/recently-played.html -->
    {% set recentlyPlayed = lastfm.recenttracks.track %}
    
    {% if recentlyPlayed.length %}
    <ul class="recently-played">
     {% for item in recentlyPlayed %}
     <li class="recently-played__track">
     <a href="{{ item.url }}" class="track__url">
     <div class="track__media">
     <img
     src="{{ item.image[3]['#text'] }}"
     alt="Album artwork for {{ item.name }} by {{ item.artist['#text'] }}" />
     </div>
     <span class="track__name">{{ item.name }}</span>
     <span class="track__artist">{{ item.artist['#text'] }}</span>
     </a>
     </li>
     {% endfor %}
    </ul>
    {% endif %}

    So we’re doing a few things here. We’re using Nunjucks to set which array we want to loop over. lastfm is the name of the data file, recenttracks is the object that contains our tracks, and each track has our necessary items. From there, we only render the rest of the template if there are songs to display.

    You’ll then want to include this partial in your template like this:

    {% include "partials/recently-played.html" %}

    Conclusion

    And just like that, we’ve fetched our data and rendered it in our template! Now it’s your turn to add some style. This is the moment I felt like a total badass, hope you’re feeling it too.

    If you need some help or end up using this on your site, please let me know! You can find me on Twitter as @smithtimmytim. Happy coding!

  • Show Off Your Letterboxd Film Diary with Eleventy

    One of my favorite new parts of my site is my Film Diary. I love to watch movies, and I thought it would be fun to prominently display diary entries from Letterboxd.

    Letterboxd is a wonderful film community where you can keep track of films you want to watch and one’s you’ve watched, rate and review films, create lists of films, and the list goes on.

    While Letterboxd does have an API, I found the authentication methods a bit more advanced than what I knew how to do. I found a cool NPM package that parses the RSS feed that Letterboxd creates for public profiles and returns that information in JSON.

    Let’s make this thing.

    Install the Package

    Oops! I forgot to do this in the video, but you’ll need to first install the package in your terminal.

    npm i letterboxd

    Pulling in Our Data

    Let’s create a new data file. I store mine in ./src/_data/. We’ll call it letterboxd.js. Inside this file, we’ll write the following:

    // ./src/_data/letterboxd.js
    
    const letterboxd = require('letterboxd');
    
    module.exports = async () => {
     const items = letterboxd('ttimsmith', (error, items) => {
     if (error) {
     return console.log(error);
     }
     });
    
     return items;
    };

    First, we’re pulling in our package into the file by requiring it at the top. Then, we create a constant that’ll contain our items. We call the letterboxd() function and pass in our username. You’ll want to substitute ttimsmith for your username.

    Next, if there’s an error, we’re printing out the error with console.log(). If everything goes well, we return our items.

    Displaying the Films

    Now let’s create a partial for our film diary. I put my partials in ./src/_includes/partials/. We’ll call it film-diary.html. Inside this file, we’ll write the following:

    <!-- ./src/_includes/partials/film-diary.html -->
    
    {% set letterboxdItems = letterboxd.slice(0,5) %}
    
    <div class="film__items">
     {% for item in letterboxdItems %}
     <article class="film__entry">
     <a href="{{ item.uri }}" class="film__url">
     <div class="film__media">
     <img
     src="{{ item.film.image.tiny }}"
     alt="Poster for {{ item.film.title }}">
     </div>
     <div class="film__info">
     <span class="film__title">{{ item.film.title }}<span class="film__rating">{{ item.rating.text }}</span></span>
     <span class="film__watched-date">{{ item.date.watched }}</span>
     </div>
     </a>
     </article>
     {% endfor %}
    </div>

    First, we’re creating a variable called letterboxdItems which returns the first five entries. The function gives us the last fifty entries, and that’s way too many for our homepage.

    Next, we loop letterboxdItems and display the poster, the title of the film, the rating, and the date it was watched.

    You’ll want to include this partial in your template like this:

    {% include 'partials/film-diary.html' %}

    Wrapping Up

    And there you have it! You’re pulling in your last five diary entries from Letterboxd and displaying them on your site. Now’s the time to add your own styles and make it look great.

    If you need help, or end up using this tutorial to create your own film diary, please let me know! I’m @smithtimmytim on Twitter.

  • Now Listening: JAGUAR by Victoria Monét

    Victoria Monét has quickly become one of my favorites. Her voice is angelic, and she’s a talented lyricist too. As it turns out, one of my favorite Ariana Grande songs is written by her too. I recommend you give JAGUAR a listen.

    My favorites:

    1. Jaguar
    2. Experience
    3. Touch Me