Back to Projects

EarthSpell

What if you could see your name in the form of landscapes from various corners of Earth, in one frame? Now possible, at earthspell.aryab.in.

Python scraped NASA's image library and tagged every letter-shaped landscape
Next.js runs the site — routing, image proxy, and the poster download
Tailwind CSS styles the letter cards and keeps the layout responsive
Live Website

I found the idea while scrolling through Twitter. Someone had posted about NASA having satellite photos of Earth that naturally look like alphabet letters. It was one of those tiny facts that immediately sticks in your head.

My first thought was: what if I collected all of them and let people spell their own names with actual places on Earth?

That became EarthSpell. You enter a name, the site picks matching NASA Landsat images for each letter, and you get a little poster made out of real landscapes. You can open each card, see where that letter exists on the planet, download the result, or share it with friends. It is intentionally fun — the kind of thing people would want to screenshot and post.

ROHIT spelled out in NASA Landsat photos, each card labelled with its place and coordinates
A name spelled out, with the place and coordinates under every letter.
KEVIN spelled out in a different set of NASA Landsat photos
Different name, completely different set of landscapes.
Expanded view of a single letter card showing the full Landsat frame of Etosha National Park, Namibia
Open a card and you get the full satellite frame for that letter.
Share flow: every name gets its own URL, with the share button highlighted
Every name gets its own URL, so results can be shared as a link.
A NASA image library

I scraped the NASA Landsat alphabet gallery with Python, pulled the letter images, location names, and coordinates, then cleaned everything into a format the app could use.

Smaller, faster assets

The original files were too heavy for a quick website. I used Pillow to convert the large PNGs into WebP images and cut the total asset size by more than 70%.

The interactive site

The frontend uses Next.js and Tailwind. When someone submits a name, the page does a quick zoom into Earth and then brings the letter cards up one by one.

Custom posters

Users can download a high-res PNG poster with their name, the satellite cards, coordinates, index labels, and a small EarthSpell watermark.

Share previews

The app can generate a custom social preview image for a name, so links look good when shared instead of showing a generic thumbnail.

The project has two halves: a Python pipeline that prepares the data, and a Next.js app that turns that data into the actual experience.

Python scraper: uses BeautifulSoup to collect image metadata, places, and coordinate details from NASA's Landsat gallery.

Image processing: uses Pillow to convert high-res PNGs to lighter WebP files before upload.

Firebase: stores the images in Cloud Storage and keeps the letter data in Firestore.

API route: /api/letters looks up the images for a name and keeps a small memory cache to avoid unnecessary Firestore reads.

OG route: /api/og builds a 1200×630 share image with the actual letter cards for the name in the URL.

Canvas downloads kept breaking

The download feature draws Firebase images onto a canvas and exports the final poster. Browser security did not like that at all, because cross-origin images can taint a canvas. I fixed it by loading the images through Next.js's local image proxy first, so the canvas could safely export the PNG.

Repeated letters looked boring

Names like JEFFERSON can repeat the same letter a lot. If every E or R uses the same satellite image, the result feels flat. I added server-side selection logic that tracks which filenames were already used and picks a different image for the same letter whenever possible.