---
title: "FetchMoji.com | Sam Carlton"
source: "https://samcarlton.com/portfolio/fetchmoji/"
---

# FetchMoji.com

June 2026

> Have you ever gotten frustrated searching for the right emoji? You know you’ve seen the emoji but you don’t know the exact name.

FetchMoji lets you search for the emoji you want without knowing its exact name. Type “shout” and you get 🗣️ 📢 📣 — the things that actually represent shouting — instead of nothing. “Apple’s a $4 trillion company and they cannot figure out semantic search, so I did. I did it in a web browser, just for fun.”

## Links

-   **Site:** [fetchmoji.com](https://fetchmoji.com/)
-   **GitHub:** [ThatGuySam/emoji-search](https://github.com/ThatGuySam/emoji-search)

## Highlights

-   **All in the browser** — “It does all the semantic processing browser side, no server required.”
-   **Real AI, not a prompt wrapper** — “I want to learn real AI.” It encodes ~4,000 emojis as vector embeddings, then vectorizes your search the same way and finds the closest matches, so it can match words it’s never seen before.
-   **Made to run on a phone** — “What’s the point of an emoji search if it doesn’t work on an iPhone?” Getting it to fit an iPhone’s memory meant dropping WebGPU and doing vector search in plain JavaScript.
-   **Pushing the browser** — “I love the browser and I love pushing… what can we actually do with just HTML and JavaScript?”
-   **Honest about limits** — “It’s not perfect — at the time of writing, it crashes a lot on mobile — but it’s a lot of progress for the constraints we’re working under.”

## How It’s Built

-   **Frontend** — Astro with React islands, the Cloudflare adapter, Tailwind CSS, Radix primitives, and Lucide icons.
-   **Search engine** — PGlite (Postgres compiled to WebAssembly, via ElectricSQL) running pgvector-style search in the browser, over emojilib data with curated synonyms.
-   **ML runtime** — Hugging Face Transformers.js with the Xenova `gte-small` ONNX model; WASM SIMD, optional threads, and WebGPU when the device supports it.
-   **Artifacts & hosting** — generated SQLite/vector tarballs served from a CDN, with COOP/COEP headers to enable SharedArrayBuffer on Cloudflare.
-   **Validation** — Vitest in browser mode via Playwright, plus Lighthouse and Pa11y checks.

## Screenshots

![FetchMoji.com desktop semantic emoji search results](/project-screenshots/fetchmoji/fetchmoji-desktop.png)

Desktop semantic search results for a plain-language emoji query.

![FetchMoji.com mobile emoji results](/project-screenshots/fetchmoji/fetchmoji-mobile.png)

Mobile results grid with tap-to-copy emoji buttons.
