RW
Published on

First month building typescriptjobs.io

Authors

TLDR:

  • I got Next.js, Supabase, Material UI, Plausible, and MailerLite to all play nicely together. Typescriptjobs.io pulls data from remoteok.com's and jsjobbs.com's JSON APIs. The data is displayed in a big list on the homepage and single job pages when you click through.

Figuring out how to get data in:

  • From what I could find, most folks building job boards are doing web scraping of public data, finding rss feeds, or finding APIs to pull the initial job posts from. I did not want to do web scraping to start with, as that would take more development time.
  • RSS feeds seem like a good option, but the ones I found did not have all the data in the initial request. I'd need to follow every job post link to search the description. Again, maybe later, but not for now.
  • Then the search for APIs. I started with remoteok.com's API. That site was kind of the inspiration for typescriptjobs.io anyway and I really like the way that Petier Levels is doing things.
  • Pretty simple, call the API endpoint, search all the job descriptions for "typescript", add it to a local Supabase instance. BOOM, I have typescript jobs!

Displaying the initial typescript jobs:

  • I knew I was going to use Next.js from the beginning. I've used it a bunch and I really like it. I wanted to use a component library or a css framework to help with the styling, basically I wanted some sensible defaults so I could implement quickly.
  • New project syndrome set in. I started looking at all the options: Chakra UI, MUI, Tailwind, Theme UI, probably some more.... I reeeeeeaaallly want to like Tailwind, I've heard so much good stuff about it from folks online.
  • But I chose Material UI. I've used it before. I know how it works. It's a component library. It has theming built in.
  • And Tailwind is not those things. My goal was to implement things quickly, not learn a new (to me) CSS framework.

Deploying to production

  • Now to make all the things play nice together in a live environment.
  • The first step, get my local Supabase migrations on a Supabase instance. Supabase makes this really easy with their CLI tool.... and even easier if you read the documentation....
  • I did have issues using supabase link . Turns out when you pass the --project-ref argument, it does indeed mean project ref and not project name. I will forever remember this goofy mistake of mine 😅
  • Next up, getting the code deployed to Vercel. Luckily, this site was already deployed to Vercel and the github integration already installed.
  • The only thing to do was to go in and give the Vercel app permission to see the typescriptjobs repo. After making the project in Vercel.
  • Then I added the Supabase and Plausible env vars to the Vercel project.
  • Once that was done, I made a commit, pushed to github, and the code base auto-magically deployed to Vercel!
  • I did need to go into Plausible and set up a new site. Then made sure everything was reporting correctly.
  • Then all the DNS stuff. I changed the nameservers to the Vercel ones, instead of Namecheap. Still not sure this is the right path, but here we are.

Shipping small improvements

  • Some small incremental updates here.
    • Updated slug creation with some regex I found
    • added pagination to the home page and ordered the jobs by the created_at date
    • nested single jobs under /jobs
    • found out that the remote ok jobs API updated.... and broke the integration... So spent some time fixing that.

Email lists, oh my

  • Someone signed up to the typescriptjobs.io newsletter!
  • The initial set up was a simple text input and a button that put the text into a table in Supabase. Simple and I was able to capture emails, but was unsure on how I was going to send them.
  • So down the rabbit hole I went. I looked at/signed up for substack, convertkit, mailchimp, constant contact, tiny letter and mailer lite.
  • My goals for the email integration are an easy API to integrate with and the ability to send emails to people. I did NOT want a full blown Marketing Automation Website Builder Customer Tracking System.
  • I dug into Mailchimp and it is more than I need for now. It does too much and I did not want to sort through what I needed and did not need. Actually, the biggest deal breaker was not being able to "delete" a subscriber. I wanted to test the sign up flow with the same email, but I couldn't figure out a way to sign up with an email, go through the confirmation flow, remove that email in the Mailchimp ui and repeat. 🤷🏼
  • Tiny Letter looks really promising! It's really simple but the API is not documented.
  • Finally I landed on MailerLite. Functionality wise, it's somewhere between Tiny Letter and Mailchimp. (maybe better to think of that as how much stuff there is in the ui)

What I learned

  • Quite a bit about SEO and finding job board APIs 😅
Sign up to get more stuff like this in your inbox