HNHacker News
TopNewBestAskShowJobs

vanyaland

87 karma · joined December 15, 2017

Mobile developer. iOS, Android, KMM. Open-sourcerer. AI whisperer.
submissionscomments
vanyaland··on Ruff v0.16.0 – Significant new updates – 413 default rules up from 59
ran 0.16 on a file with no config, it flags unsorted imports and `except Exception` by default now
vanyaland··on I Tried Building a Real App with AI. It Took a Year
llms write bad core data sync code by default, so that icloud bug tracks. merge policies and conflict resolution i still end up doing by hand
vanyaland··on Code mode yields a 99.2% cost reduction in our systems
makes sense
vanyaland··on Escape IntelliJ: Scala and Kotlin LSPs on Emacs Eglot
worth noting the kotlin-lsp here is jetbrains own, basically intellij analysis engine running headless. you're just dropping the intellij gui
vanyaland··on Code mode yields a 99.2% cost reduction in our systems
you lose the per-call approvals though. one script hitting ten tools is harder to gate than ten separate calls
vanyaland··on Show HN: Ex Situ – Open-source spatial index of displaced cultural artifacts
How well does the fuzzy matcher resolve provenance text to origin sites? Curious what share of the 200k in the README needed hand correction.
vanyaland··on Orion Browser by Kagi
Safari has used the same WebExtensions API as Chrome and Firefox since Safari 14. So is the hard part API coverage rather than three engines?
vanyaland··on SQLite should have (Rust-style) editions
On iOS most apps link Apple's prebuilt libsqlite3, so compile-time defaults are out of reach.
vanyaland··on Cursor 0day: When Full Disclosure Becomes the Only Protection Left
thx
vanyaland··on Show HN: Grepathy – Claude made a decision nobody approved
Your .ai/why/main.md is at 97KB and 148 entries. Does anything prune that, or does a long-lived branch keep growing?
vanyaland··on Cursor 0day: When Full Disclosure Becomes the Only Protection Left
Does the git lookup run before the trust check, or ignore it?
vanyaland··on YouTrackDB is a general-use object-oriented graph database
Worth clicking into .claude/agents/ in this repo. There are 25 agent definitions, 10 of them code-review dimensions.
vanyaland··on RubyLLM: A Ruby framework for all major AI providers
thx
vanyaland··on RubyLLM: A Ruby framework for all major AI providers
Does 2.0 expose explicit capability negotiation, or does it infer capabilities from the selected model?
vanyaland··on [dead]
Hey, short story behind this.

At previous jobs I was building iOS apps with an embedded code editor. The only solution at the time was Highlightr, a Swift wrapper around highlight.js. It worked, but you paid for a JS bridge.

Over winter break I had time to revisit the problem. On iOS that gap is now closed. There are working tree-sitter Swift bindings, dedicated syntax-highlighting libraries, and full code-editor components. I assumed Android was the same, but it wasn't. The Kotlin tree-sitter bindings weren't usable at the time (may have changed since), and there were no real grammar engines. What I saw was ad-hoc regex per language or a few natively-supported languages.

So I wrote one, a pure-Kotlin port of Microsoft's vscode-textmate. Real .tmLanguage grammar support (600+ grammars the VS Code ecosystem already maintains) and Compose AnnotatedString renderer for Android.

Repo, architecture notes, and benchmarks all in the link.

vanyaland··on Show HN: Diffmode – Tool that builds custom growth tactics for bootstrapped SaaS
Hey HN - Ivan here, founding engineer at Diffmode.

We built Diffmode for bootstrapped founders who are tired of hearing the same growth advice: write content, run paid ads, build a community, post on LinkedIn.

That advice is not wrong. It is just crowded. If every competitor is running the same playbook, a smaller team usually loses.

Anton, our founder, was previously growth lead at JetBrains Academy. He kept seeing the same pattern: useful products would get early traction, then stall. Not because the product was bad. Because the next growth channel was not obvious.

So he started collecting mechanisms behind growth wins from real companies. Not "use TikTok" or "launch on Product Hunt." More like: counter-cyclical timing, pre-validation economics, audience borrowing, trust through curation.

That database is now 576 documented mechanisms: 347 demand-gen vectors and 229 CRO vectors.

Diffmode cross-references those mechanisms against your constraints: budget, team size, stage, skills, customer type, and channel saturation. Then it combines 2–3 mechanisms into tactics for your specific situation.

The important part: the output is not a list of ideas. It is a plan.

You get competitor landscape, buyer JTBD, channel gaps, prioritized tactics, day-by-day execution, templates, tools, and kill criteria. The goal is to tell a solo founder what to do Monday morning, and when to stop if the signal is not there.

There is a public sample report here: https://diffmode.app/reports/sample

Two things I would love feedback on:

1. Run the free Audit on your own product and tell me where it gets things wrong, generic, or overconfident.

2. Is the day-by-day format useful for a bootstrapped operator, or would you rather get something shorter and more strategic?

vanyaland··on Five Things I Learned About Making AI Coding Agents Work
I've been building a coding agent from scratch in Swift and using Claude Code, Cursor, and similar tools daily. This post distills five scaffolding lessons:

- Instruction files: Anthropic recommends <200 lines for CLAUDE.md. The "lost in the middle" problem shows 30%+ accuracy drop for information in the middle of the context window.

- Project structure: Independent benchmarks consistently show that 60–80% of tokens go toward figuring out where things are.

- Session length: There’s a strong intuition that longer sessions are better — the agent “already knows” our codebase, we don’t need to re-explain anything. In practice, the opposite is true.

- Self-verification: Anthropic calls giving the agent runnable tests "the single highest-leverage thing" for agent performance.

- Scaffolding: When an agent produces bad output, our first instinct is usually “the model is dumb.” But almost every time, the problem is in the scaffolding.

vanyaland··on Claude Code's source code has been leaked via a map file in their NPM registry
This leak is actually a massive win. Now the whole community can study Claude Code’s architecture and build even better coding agents and open-source solutions.
vanyaland··on Building a coding agent in Swift from scratch
Interesting observation on package definitions. Languages borrow good ideas from each other all the time, and the ecosystem is better for it.

On the naming fair point, already renamed the CLI binary after an earlier comment here. The repo name is more about discoverability.

vanyaland··on Building a coding agent in Swift from scratch
It's the harness/orchestration layer — the part that runs the agent loop, dispatches tool calls, and manages context.
vanyaland··on Building a coding agent in Swift from scratch
Agreed. That's the core hypothesis behind this learning project — model is the magic, and the agent loop is just a thin, transparent wrapper around it. The goal of building it stage-by-stage was to prove you don't need a massive, complex framework to get good agentic behavior.
vanyaland··on Building a coding agent in Swift from scratch
Good point, I'll rename the binary. Thanks for actually going through the repo.
vanyaland··on Building a coding agent in Swift from scratch
Yeah, this is basically what I ran into too. I actually wrote about this in Stage 6 (https://ivanmagda.dev/posts/s06-context-compaction/) I went with your option (1): once history crosses a token threshold, the agent asks the model to summarize everything so far, then swaps the full history for that summary. Keeps the context window clean, though you do lose the ability to go back and reference exact earlier tool outputs.

The hard part was picking when to trigger it. Too early and you're throwing away useful context. Too late and the model's already struggling. I ended up just using a simple token count — nothing clever, but it works.

And yeah, the Swift angle was genuinely fun. Defining tool schemas as Codable structs that auto-generate JSON schemas at compile time, getting compiler errors instead of runtime API failures is a huge win.

vanyaland··on Hypura – A storage-tier-aware LLM inference scheduler for Apple Silicon
For a lot of local workloads, sub-1 tok/s is useless in foreground and perfectly acceptable in background. If the choice is “this crashes” vs “this finishes overnight,” that’s still a meaningful capability jump.
vanyaland··on So where are all the AI apps?
I think part of the mismatch is that people are still looking for “more apps” as the output metric.

A lot of the real value shows up as workflow compression instead. Internal tools, one-off automations, bespoke research flows, coding helpers, things that would never have justified becoming a product in the first place.

vanyaland··on The more AI I used, the worse my code got
The only thing that’s helped me is adding hard constraints: spec, architecture, small verifiable steps, and explicit decision logs.
vanyaland··on The more AI I used, the worse my code got
agree, I also used Ralph loop /umputun/ralphex on GitHub
vanyaland··on Show HN: Claude-replay – Video-like player for AI coding sessions (web UI)
This is a good direction. With longer coding sessions, the final diff is only part of the story. The hard part is making the replay readable enough that we can spot the important moments quickly instead of scrubbing through noise.
vanyaland··on What are the best headless browsers?
I’d separate “best engine” from “best developer experience”. If you want something that mostly just works, Playwright is still the easiest default.