Sanoja — English ↔ Finnish word lookup
A tiny Chrome/Edge extension. Select or double-click any word (or short phrase)
on any webpage. If it's English, you'll see it in Finnish; if it's Finnish,
you'll see it in English — detected automatically, no language picker needed.
Click the speaker icon to hear the Finnish word spoken aloud.
Landing page & screenshots
How to install (unpacked, for testing)
- Get the code onto your computer, permanently — Chrome loads the extension
directly from these files, so don't delete the folder after installing:
- From GitHub: click the green Code button on the
repo page →
Download ZIP → unzip it. You'll get a folder like
sanoja-app.github.io-main.
- Or clone it:
git clone https://github.com/sanoja-app/sanoja-app.github.io.git
- Open
chrome://extensions in Chrome.
- Turn on Developer mode (top-right toggle).
- Click Load unpacked and select that folder — the same one that has
manifest.json, background.js, content.js, etc. directly inside it
(not the docs or store-assets subfolders — those are the website and
screenshots, not the extension itself).
- Pin the extension (puzzle-piece icon in the toolbar → pin "Sanoja") so you
can quickly open its popup to toggle it on/off or turn on auto-speak.
How to use
- Double-click a word on any page, or highlight a short phrase, and a card
pops up labeled with the source language and the translation — English word
selected shows Finnish, Finnish word selected shows English.
- Click the 🔊 button in the card to hear the Finnish side spoken aloud —
always Finnish, whether that's the word you selected or its translation,
since the audio is there to help with Finnish pronunciation specifically.
It doesn't speak automatically by default — turn that on from the toolbar
popup if you want it.
- Click anywhere else, scroll, or press Escape to dismiss the card.
- Open the extension's toolbar icon to turn the extension off, or turn
"Speak automatically" on.
- Every word you look up is saved automatically. Click "Practice" / "Browse
words" in the toolbar popup to open your word log, which is built around
two views: Practice (the quiz) and Words (a list, with a toggle
for a word-cloud view — bigger word = you've looked it up more often). It
opens straight into Practice whenever something's ready to review, since
that's the point of the tool; otherwise it opens on Words. Neither the
popup nor the word log shows a due-count number anywhere — just a small
dot on the Practice tab when something's ready, and a plain sentence
("A few words are ready to review" / "Nothing to review right now — nice
work") instead of a "12 due" backlog counter.
- The quiz uses spaced repetition (a Leitner box system): get a word right
and it comes back in 3 days, then a week, then two weeks, then a month;
get it wrong and it resets to review again tomorrow — and you'll see it
again before the current session ends. "Practice all words" runs an
untimed session through everything you've saved without affecting that
schedule, for casual review any time nothing's due yet. Finishing a real
(non-practice-all) session on a new day builds a streak, shown next to the
word count — skip a day and it resets.
- Get a word right twice in a row once it's reached the top box, and it
graduates to known — it stops coming up for review and moves into a
collapsed "N words you know well" section at the bottom of the Words view,
separate from the words you're still actively learning. The header stat
line reflects this too ("6 words · 2 known" instead of a due count). If
you want a known word back in rotation, expand that section and hit its
book icon to send it back to review from the start; the × next to it
deletes it entirely, same as any other word.
- Search, sort, export, and delete all live in the Words view; less-common
actions (Export CSV, Clean up sentences, Clear all) are tucked behind the
"•••" menu instead of sitting on-screen permanently.
- Tap "Practice on phone" in the toolbar popup and scan the QR code with your
phone's camera to pull your word list onto a phone-friendly flashcard page,
which you can add to your home screen and use offline afterward. See
"Practice on your phone" below.
Features
- Spaced-repetition quiz (a Leitner box system) — get a word right and it comes back in a few days, then a week, then a couple weeks, then a month; get it wrong and it comes back tomorrow.
- Get a word right consistently and it graduates to a "known words" section, separate from what you're still actively learning.
- A word list and word-cloud view of everything you've saved, searchable and sortable.
- A daily streak for finishing your reviews.
- Practice on your phone via QR code — no app install needed.
Practice on your phone
The toolbar popup has a "Practice on phone" button. Tapping it syncs a slim
copy of your word list (Finnish word, English translation, known status —
nothing else) to Sanoja's own server and shows a QR code. Scan it with your
phone's camera to open a flashcard page at
sanoja-app.github.io/flashcards.html
pre-loaded with your words. Add it to your home screen (Share → Add to Home
Screen on iOS, or the browser's install prompt on Android) for a full-screen
app-like view. Once synced, it keeps working offline — re-open the popup and
tap the button again any time you want to push newer words to it.
This is the only thing in Sanoja that leaves your computer, and only happens
when you explicitly tap that button — see Privacy below.
About the voice
Pronunciation uses Google Translate's Finnish voice, the same natural voice
you hear on translate.google.com. It plays in a hidden extension page
(offscreen.html), because a service worker can't play audio and many
websites block audio from other domains.
If that voice can't be reached (offline, blocked network, or Google changes
the endpoint), Sanoja falls back to your operating system's built-in Finnish
voice. That one is usually more robotic. On macOS you can improve it:
System Settings → Accessibility → Spoken Content → System Voice → Manage
Voices… → "Finnish" → download an Enhanced or Premium voice, then restart
Chrome.
Notes / limitations (read before relying on this)
- Translation source: this uses Google Translate's public web endpoint
(the same one translate.google.com's website itself calls) rather than a
paid API, so there's no API key or cost — but it's an unofficial endpoint
Google could rate-limit or change without notice. If translations suddenly
stop working, that's the likely cause.
- Pronunciation: uses Google Translate's public text-to-speech endpoint,
which, like the translation endpoint, is unofficial and could change
without notice. If it stops working, Sanoja falls back to the browser's
built-in voice; see "About the voice" above.
- Word log: saved locally in the browser's extension storage on this
computer only — it doesn't sync to other devices or upload anywhere,
unless you explicitly use "Practice on phone" (see above), which sends a
slim copy of your word list to Sanoja's own server so it can reach your
phone.
- The extension itself is desktop only: this is a Chrome extension, and
Chrome extension APIs don't run in Chrome/Safari on iOS or in Chrome on
Android the same way — it works on desktop Chrome/Edge/Brave. There's no
mobile version of the lookup/quiz features themselves (Kiwi Browser on
Android supports Chrome extensions if you want to try it there). The
phone flashcard page (see "Practice on your phone" above) is a separate,
lighter companion view for on-the-go review, not the full extension.
- If you haven't published this to the Chrome Web Store yet, this is a
personal/unpacked install — if you want it on another computer, copy
this folder over and repeat the install steps. See
PUBLISHING.md for
how to put it on the Web Store instead.
Language pair
Locked to English ↔ Finnish only, on purpose — no language picker, no other
languages. Direction is auto-detected from whatever text you select.
Privacy
See PRIVACY.md for exactly what data this extension
touches (short version: your word list stays on your computer, the
translation lookup is the only automatic network request, and the only
other network activity is the word list you explicitly send via "Practice
on phone").
License
MIT — see LICENSE.