Cover for Azania by Entity Musiq
Azania, Entity Musiq

Marlon Baatjes

I build full-stack web apps and Python tools, and I design album covers for South African artists.

  • Self-taught
  • TypeScript and Python
  • South Africa
Cover for The Whole Truth by Cargo
The Whole Truth, Cargo
Rows of second-hand vinyl records in a record shop crate

Give it a track

Spots is my Python CLI on PyPI. Name a song and it finds it across Spotify, Deezer and YouTube, downloads it and tags it.

It began as a Flask API with a React front end. I rebuilt the core as one install with one command, then put the API and a new web UI back on top. It saves videos too.

Artist: Kelsey Lynn

Title: Modern Day Marilyn Monroe

Resolve it with the metadata providers

Match it to a YouTube video

Download, convert, tag

Store it in your library

spots_cli setup

Asks a few questions

Writes your config folder

Turns Spotify, YouTube and the other providers on or off

spots_cli migrate-likes

Reads your liked songs on Spotify

Finds each one on YouTube

Likes it there too

More providers to come

spots_cli add-to-history

Points at a music folder

Records every song in it

So nothing downloads twice

spots_cli remove-duplicates

Scans a folder

Finds the same song saved twice

Keeps one copy

Under the hood

A cache, so repeat searches skip the API

Retries when the network drops

Falls back when a provider fails

Scores matches across platforms

Selected work

Spots

Python CLI on PyPI

A music library tool that resolves a song across Spotify, Deezer and YouTube, then downloads and tags it with cover art and lyrics. I took a Flask API and React UI that needed several services running and turned them into one installable package, with caching, download history and retries.

Python · Typer · Flask · yt-dlp · Spotipy · Deezer API · Lyrics Genius · Mutagen · pytest · React · esbuild

Trivia Mania

Full-stack game

A multi-page trivia game with accounts, a record of every answered question and hundreds of questions by category and difficulty. I ported it from Next.js to SvelteKit, moved storage from JSON files to a database, and cut the client bundle by sending each answer straight to the server.

Typescript · SvelteKit · Sequelize.js · Headless UI · Tailwind CSS

Random Stuff

Next.js and public APIs

Rock Paper Scissors against the computer, poems, recipes and more, each fed by a public API behind one fast, accessible interface. Built with Next.js, Prisma and Tailwind, rendered on the server for quick first loads and search engines, and tested end to end with Cypress.

Typescript · Next.js · Prisma.js · Framer Motion · Tailwind CSS · Cypress

E-commerce store

Next.js and Stripe

A shop with product listings, cart, wish list, accounts, purchase history and a dashboard for stock. Checkout runs through Stripe, state lives in Zustand, data goes through Prisma, and loading skeletons and tooltips cover the details.

Typescript · Next.js · Zustand · Stripe.js · Prisma.js · Framer Motion · Tailwind CSS

BMW i5 eDrive40

Front end and motion

A showcase page for the BMW i5 eDrive40, built to learn front-end motion. Parallax scrolling with Framer Motion, a Headless UI menu, React and a Vite build.

Framer Motion · Headless UI · React.js · Tailwind CSS · Vite · Typescript

Clones and exercises

Before my own projects I rebuilt pages I admired and worked through the freeCodeCamp certificates.

AirBnB Clone

A full stack clone of the Airbnb site.

Clone · Next.js, Express.js, Node.js, MySQL

9 small projects, and every other build, are on the projects page.

Illustrated portrait of Marlon

A note from me

I taught myself to code because I love computers, and I've kept going because I like building things people can use. I started with the freeCodeCamp certificates and the Google IT Support certificate, then rebuilt sites I admired until my own ideas were worth building.

On the front end I reach for SvelteKit, React and Next.js. On the server it's Python first: everyday scripts, automation, and APIs in Flask. Spots came out of an obsession with a perfect music library, and it taught me caching, retries and how to ship a package.

I run the machine too. My daily driver is Debian Linux, tuned for coding; I dual boot Windows for Photoshop and games, and my phone is rooted with Magisk.

Away from code I design cover art and flyers for musicians around me. Some of it is further down this page.

Marlon Baatjes

Full-stack developer

Cover art

Album, single and mix covers, artist cards and event flyers, made in Photoshop for musicians in my circle.

  • Mix cover for Halaal Flavour #042 by Fiso El Musica

    Halaal Flavour #042

    Fiso El MusicaMix cover

  • Album cover for The Whole Truth by Cargo

    The Whole Truth

    CargoAlbum cover

  • Artwork for ProjeXxx 6 by Mdesigns

    ProjeXxx 6

    MdesignsArtwork

  • Mix cover for Siya Jaiva Vol. 01 by Vista SA

    Siya Jaiva Vol. 01

    Vista SAMix cover

  • Single cover for A Short Story by Cargo

    A Short Story

    CargoSingle cover

  • Single cover for Broken Ghetto Child by Proof

    Broken Ghetto Child

    ProofSingle cover

  • Artwork for Reading Room by Mdesigns

    Reading Room

    MdesignsArtwork

  • Artist card for Migi D6ix by Migi D6ix

    Migi D6ix

    Migi D6ixArtist card

  • Event flyer for Friday Session by DJ Msindo

    Friday Session

    DJ MsindoEvent flyer

  • Mix cover for Restricted Collections Vol. 3 by Papsie Papsie

    Restricted Collections Vol. 3

    Papsie PapsieMix cover

  • Album cover for Another Short Story by Cargo

    Another Short Story

    CargoAlbum cover

  • Artwork for Open Field by Mdesigns

    Open Field

    MdesignsArtwork

Let's make something

A developer role, a project, or a cover for your next release. Write to me and I'll answer by email.