Skip to content

Application

Small software that does one thing and then gets out of your way. Browser tools and toys, with no accounts and no ulterior motives.

Ghost Themes

Stock Ticker

Add a ticker once, find it there forever.

Your tickers

    Live quotes could not load β€” this usually means a browser privacy extension is blocking TradingView, or the site’s content-security-policy has not yet been updated to allow it. Your saved symbols are safe.
    Quotes and charts by TradingView. Data may be delayed. Saved in your browser only

    The watchlist

    The page opens on five defaults: Meta, Apple, Nvidia, Google, Microsoft. Make it yours. The field above the list searches about 9,500 US-listed stocks, funds, FX pairs and crypto by ticker or company name; pick a match and it lands in the list. Each symbol gets its own cell: price, day change, a sparkline. The row of ranges above the cells, 1D through ALL, redraws every sparkline at that span. The header checkbox turns the scrolling strip off.

    Tap a cell and it pushes a detail screen: the day's numbers, market cap, P/E, EPS, dividend yield, and a bigger chart with its own range tabs from one day to everything. The address bar carries #s=NASDAQ:AAPL while the screen is open, and that link reopens the same screen, on any symbol, listed or not.

    Housekeeping lives behind Edit. It reveals Γ— to remove and ≑ to reorder: drag with a pointer, or on the keyboard, where space lifts a row, arrows move it, and space drops it. Edit is also where watchlists are managed. Up to eight named lists, one showing at a time; the switcher stays out of the way until a second list exists.

    The lists live in localStorage. They survive reloads and restarts in this browser, on this device, and go no further: no account, no sync, no database on my end. Clearing site data clears them. There is no export either, so a list built on a laptop stays on that laptop.

    None of which makes it private from TradingView. Every symbol you add is passed to them to draw, so they see the list, your address, and the page you came from. The honest version of the claim is that nothing reaches a server of mine, because I don't have one.

    Symbol formats

    Search covers the US listings, cap-ranked so the match you meant comes up first. The same field still takes anything TradingView can resolve, typed raw: exchange-prefixed forms like NYSE:BRK.B and AMEX:VOO, FX pairs (EURUSD), crypto (BTCUSD, COINBASE:ETHUSD). A bare ticker the directory knows is upgraded to its listed form on the way in: aapl becomes NASDAQ:AAPL.

    Outside the directory, bare tickers are first match, not canonical, and the first match is not always the famous one. SPX gets you SpaceX, not the S&P 500. Index and futures symbols mostly don't resolve at all on the free tier: ask for SP:SPX or CME_MINI:ES1! and the cell says the symbol is only available on TradingView, which is their way of saying that data costs money. TradingView's search gives the canonical form.

    The cap is 25 symbols a list. That is a rendering budget, not a philosophy: each one is its own frame.

    Where the numbers come from

    TradingView, through its free embeddable widgets. No key, no account. That is also the constraint. US equity prices run about fifteen minutes behind, more on some exchanges, and TradingView decides what happens inside the frames. This is a glance, not a trading desk, and not advice.

    Every free quote API I checked, Alpha Vantage and Finnhub and Polygon and Twelve Data, either restricts redisplaying quotes on a public page or charges for the right. An embed is the honest way to do this for nothing.

    If the quotes don't load

    A short note takes the place of the quotes. Usually that means a privacy extension or a network filter is blocking TradingView. It can also mean this site's content-security-policy hasn't been told to allow them, which is my fault rather than yours. Either way your saved symbols are untouched, and they come back when the quotes do.

    Typing Test

    Speed trial

    Words per Minute

    A word is five characters, by decree. The clock does the rest.

    Test

    Type the presented text. The clock starts on your first key. Tab then Enter restarts. Escape opens settings.

    shiftenter counts you in. Esc for settings.

    Modes

    • Time. 15, 30, 60 or 120 seconds against a stream of common words, with punctuation and numbers as optional seasoning.
    • Words. A fixed count: 10, 25, 50 or 100.
    • Quote. Passages from Austen, Melville, Fitzgerald and friends. All of it published before 1931, all of it public domain, so the only thing being stolen is your time.
    • Code. Real snippets in seven languages. Enter is a newline, indentation is skipped for you, and nothing auto-closes brackets, because your editor will not be there for you on a whiteboard.
    • Blog. Excerpts from this site. Type the words you were going to skim.
    • Custom. Paste anything. The draft is kept for next time.
    • Drill. Generated from your own mistakes. See below.

    The numbers

    The headline wpm counts characters in correctly typed words, divided by five, per minute, the same definition this site's glossary uses. Around it: raw speed, keystroke accuracy, real accuracy of the final transcript (the two disagree when you correct a lot), a consistency score, and a per-second chart of the whole run.

    Deeper in the stats: a keyboard heat map of your slowest and most-missed keys, your slowest cross-hand letter pairs, rollover (how often the next key goes down before the last one comes up, the strongest single predictor of speed in the Aalto 136-million-keystroke study), keystrokes per character, and an activity calendar with streaks. Every stat's label opens its exact formula. No mystery numbers.

    Practice

    The test remembers which keys are slow, which pairs stall, and which words you flub. Drill mode generates practice text weighted toward exactly those, with the weakest key present in every word. After a bad run, one click turns the words that cost you into their own drill. Monkeytype forgets your weak spots after every test; this one holds a grudge.

    Your data

    Everything lives in this browser. Nothing leaves it. Export the whole history as JSON or CSV, import it on another machine, and imports merge by id instead of overwriting, so combining two machines' histories is safe to do twice. Personal bests are kept per exact configuration, and a run under fifteen seconds saves as practice rather than polluting the record.

    Colophon

    The word list is derived from the MIT-licensed wikipedia-word-frequency dataset, Β© 2015 Ilya Semenov, an Ilya who is not me. Quotes are verbatim from pre-1931 editions. Code snippets are original. For which finger owns which key, the Home Row guide is next door.

    Diff Viewer

    Two versions in, every real change out. Reordered keys and trailing whitespace don't count.

    Compare

    Drop, paste, or type two versions. The differences appear below as you type.

    Differences

    Markdown preview (rendered, sandboxed)
    Reference
    How to use it
    1. Load two documents. Type or paste into the left and right panes, or drop a file onto either side.
    2. Pick a format, or let it guess. Auto-detect reads the file extension and a quick content sniff. Override it from the Format menu when you know better.
    3. Read the diff. Side-by-side on desktop, stacked and unified on a phone. Additions are green, deletions are red, and the changed words inside a line are tinted.
    4. Tune what counts. Toggle off whitespace, case, or blank-line changes. Switch between word-level and character-level highlighting.
    5. Take it with you. Copy or download a unified .patch, or hit Share link to put the whole comparison in a URL.

    Keyboard: Alt+↓ and Alt+↑ jump to the next and previous change.

    What β€œsmart” means

    The viewer picks a strategy per format instead of treating everything as text:

    • JSON parses both sides and compares structure, so key order and indentation never register. One changed value is one changed line.
    • YAML parses to the same canonical, key-sorted form before diffing. Reordering a mapping is a no-op.
    • XML and HTML are pretty-printed by the browser’s own parser, then compared line by line.
    • CSV is parsed into a table and diffed cell by cell, so a single edited field doesn’t flag the whole row.
    • Markdown gets a line-and-word diff plus a live rendered preview.
    • Source code β€” 25+ languages (Python, C, C++, Java, Go, Rust, C#, TypeScript, Ruby, PHP, SQL, and more) get per-language syntax highlighting on every line, including the changed ones, auto-detected from the file extension or pasted content. Optional toggles ignore comment-only edits and treat reordered imports as unchanged, and long runs of unchanged lines fold into expandable, function-labelled separators.
    • Plain text falls back to a classic line diff with word-level highlights.

    If a document won’t parse as its claimed format, the viewer says so and compares it as plain text instead. Nothing throws.

    Privacy

    Everything runs in your browser. The two documents, the diff, the patch, the share link: none of it is uploaded, because there is no server to upload to. The libraries are bundled into the page, so it works offline and keeps working if this site ever goes away. Close the tab and the only trace left is whatever you copied to your own clipboard, plus a draft saved to your browser’s localStorage so the panes survive a reload.

    FAQ
    Does it send my files anywhere?

    No. The diff is computed locally in JavaScript. There are no network requests after the page loads.

    How big a file can it handle?

    Drops are capped at 2 MB, and binary files are rejected. Past about 2,000 lines the viewer drops intra-line highlighting and re-diffs when you click away rather than on every keystroke, to stay responsive.

    Why does reordering JSON keys show no change?

    Because JSON objects are unordered by definition. The viewer compares the parsed structure, not the text. Turn off β€œSort keys” if you want key order to count.

    What does the Share link contain?

    Both documents and your current options, compressed into the URL after the #. The link never hits a server, so very large inputs can make it too long for some apps to pass around.

    Can I diff two different formats?

    You can, but it is rarely useful. The viewer detects one format for the pair. Set it explicitly from the Format menu if auto-detect guesses wrong.

    Does it highlight source code?

    Yes β€” 25+ languages, detected from the file extension (.py, .cpp, .rs, .go, …) or, for pasted snippets, from the content. Both the unchanged context and the changed lines are syntax-highlighted; changed lines also keep the word-level diff. Pick a language by hand from the Format menu if auto-detect guesses wrong. (A .h header is treated as C β€” switch it to C++ if you need C++-only keywords.)

    What do β€œIgnore comments” and β€œIgnore import order” do?

    β€œIgnore comments” drops comment-only edits, so a reworded comment isn’t flagged β€” line and single-line block comments, with multi-line blocks handled best-effort. β€œIgnore import order” treats a run of import / #include / use lines as a set, so reordering them shows nothing (it canonicalizes their order in the view).

    What is β€œFold unchanged”?

    Long stretches of unchanged lines collapse into one separator, labelled with the enclosing function or class, so a small change in a large file stays readable β€” click a separator to expand it. It also keeps very large files fast.

    Flap Flap

    Press Space or tap to flap