A few weeks ago I was debugging a TypeScript file on my phone and pasted it into three different AI tools trying to get a clean syntax check. Every one of them reformatted something. One introduced a line break mid-string. Another quietly changed a variable name.
I didn't need AI to fix my code. I needed something to read it and tell me what was wrong. So I built PasteCheck — a dark-themed, mobile-optimised linter that runs entirely in the browser. No backend. No login. No reformatting.
I built the whole thing from my Android phone using SPCK Editor, Termux, and GitHub. No laptop. No desktop. That constraint turned out to matter more than I expected — but more on that later.
This is the story of v1.6, and what I learned building it.
The problem with being too clever
By v1.5, PasteCheck was linting JavaScript, TypeScript, Python, HTML, and CSS with decent accuracy. Session history was live. The core loop worked.
Then I started getting false positives.
The duplicate variable checker I shipped in v1.6 was supposed to catch const and let redeclarations — a real, common mistake. But without scope awareness, it was flagging perfectly valid code where the same variable name appeared in two separate functions. Technically the same name. Semantically completely different things.
The fix was a scope stack — push on function and block entry, pop on exit. Simple in principle. Fiddly to get right. The checker now correctly ignores cross-scope reuse and only flags genuine same-scope redeclarations.
The lesson: a linter that's wrong loudly is worse than no linter at all. Developers learn to ignore noisy tools. Once you've trained someone to dismiss your warnings, you've lost them.
The large file problem
The same issue appeared from a different angle with TypeScript detection.
PasteCheck uses acorn with an acorn-typescript plugin to parse TS files. For small files, this worked cleanly. Then someone pasted a 974-line linter.ts file and it misdetected as Python — because the file contained import * and print, both of which pattern-match as Python syntax.
The fix was ordering: TypeScript detection now runs before Python detection. Obvious in retrospect. But it only surfaced because the file was large enough to contain Python-shaped TS patterns.
I also capped the duplicate variable checker and TS regex fallbacks at 200 lines. Not because large file support isn't worth building — it is, and it's in the roadmap — but because a wrong answer on a 500-line file does more damage than a "file too large, try a smaller snippet" message. Honest limitations beat confident mistakes.
What else shipped in v1.6
Beyond the scope-aware duplicate variable detection and the language detection fix:
Python pass check. A pass statement inside a non-empty block is redundant — the block runs fine without it. v1.6 flags these as warnings by looking ahead for sibling lines at the same or deeper indent level. Small thing, but it catches a specific habit that creeps into refactored Python.
CSS missing units. Non-zero numeric values on dimension properties — margin, padding, width, height, font-size, border-radius, and 20+ others — flagged as warnings with a "did you mean 16px?" suggestion. Zero values are correctly ignored. This one came from my own mistakes more than anything else.
The Android constraint
I mentioned building PasteCheck entirely from an Android phone. This isn't a gimmick — it's the actual development environment.
Every commit, every deploy, every debug session happened on a phone screen. Termux for the terminal. SPCK Editor for the code. GitHub for version control. Vercel for deployment via GitHub sync.
The constraint has a real effect on what gets built. When your own testing surface is mobile, mobile UX problems surface immediately. The v1.4 scroll fix — removing a fixed maxHeight on the results panel that was creating a box-within-a-page scroll nightmare — would have taken much longer to catch on a desktop.
Building from the same device your users are likely using isn't a limitation. It's a feedback loop.
Where PasteCheck is now
Five languages. Real syntax detection. Session history. 54 users across five countries in the first five days — US, UK, Canada, Türkiye, and others showing up in Analytics.
The roadmap has a Pro tier on the horizon — GitHub integration as the proposed anchor feature, so PasteCheck runs on every push rather than requiring manual paste. That's a Week 2 research problem. Right now the free tier is the product, and it's earning its keep.
If you work with code on mobile — or just want a clean, instant paste-and-check tool without an AI trying to improve your work — give it a try.
Building in public, solo, from Android. Follow along if that sounds interesting.
Top comments (0)