<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: vanyaland</title><link>https://news.ycombinator.com/user?id=vanyaland</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 19 Jun 2026 23:56:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=vanyaland" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by vanyaland in "[dead]"]]></title><description><![CDATA[
<p>Hey, short story behind this.<p>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.<p>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.<p>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.<p>Repo, architecture notes, and benchmarks all in the link.</p>
]]></description><pubDate>Sat, 16 May 2026 10:14:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48158757</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=48158757</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48158757</guid></item><item><title><![CDATA[New comment by vanyaland in "Show HN: Diffmode – Tool that builds custom growth tactics for bootstrapped SaaS"]]></title><description><![CDATA[
<p>Hey HN - Ivan here, founding engineer at Diffmode.<p>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.<p>That advice is not wrong. It is just crowded. If every competitor is running the same playbook, a smaller team usually loses.<p>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.<p>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.<p>That database is now 576 documented mechanisms: 347 demand-gen vectors and 229 CRO vectors.<p>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.<p>The important part: the output is not a list of ideas. It is a plan.<p>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.<p>There is a public sample report here: <a href="https://diffmode.app/reports/sample" rel="nofollow">https://diffmode.app/reports/sample</a><p>Two things I would love feedback on:<p>1. Run the free Audit on your own product and tell me where it gets things wrong, generic, or overconfident.<p>2. Is the day-by-day format useful for a bootstrapped operator, or would you rather get something shorter and more strategic?</p>
]]></description><pubDate>Thu, 14 May 2026 13:22:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48135037</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=48135037</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48135037</guid></item><item><title><![CDATA[Show HN: Diffmode – Tool that builds custom growth tactics for bootstrapped SaaS]]></title><description><![CDATA[
<p>Article URL: <a href="https://diffmode.app/">https://diffmode.app/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48134954">https://news.ycombinator.com/item?id=48134954</a></p>
<p>Points: 2</p>
<p># Comments: 2</p>
]]></description><pubDate>Thu, 14 May 2026 13:14:18 +0000</pubDate><link>https://diffmode.app/</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=48134954</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48134954</guid></item><item><title><![CDATA[New comment by vanyaland in "Five Things I Learned About Making AI Coding Agents Work"]]></title><description><![CDATA[
<p>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:<p>- 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.<p>- Project structure: Independent benchmarks consistently show that 60–80% of tokens go toward figuring out where things are.<p>- 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.<p>- Self-verification: Anthropic calls giving the agent runnable tests "the single highest-leverage thing" for agent performance.<p>- 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.</p>
]]></description><pubDate>Wed, 15 Apr 2026 15:14:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47780283</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47780283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47780283</guid></item><item><title><![CDATA[Five Things I Learned About Making AI Coding Agents Work]]></title><description><![CDATA[
<p>Article URL: <a href="https://ivanmagda.dev/posts/five-things-ai-coding-agents-actually-work/">https://ivanmagda.dev/posts/five-things-ai-coding-agents-actually-work/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47780158">https://news.ycombinator.com/item?id=47780158</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 15 Apr 2026 15:06:43 +0000</pubDate><link>https://ivanmagda.dev/posts/five-things-ai-coding-agents-actually-work/</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47780158</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47780158</guid></item><item><title><![CDATA[New comment by vanyaland in "Claude Code's source code has been leaked via a map file in their NPM registry"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 31 Mar 2026 15:32:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47588877</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47588877</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47588877</guid></item><item><title><![CDATA[New comment by vanyaland in "Building a coding agent in Swift from scratch"]]></title><description><![CDATA[
<p>Interesting observation on package definitions. Languages borrow good ideas from each other all the time, and the ecosystem is better for it.<p>On the naming fair point, already renamed the CLI binary after an earlier comment here. The repo name is more about discoverability.</p>
]]></description><pubDate>Thu, 26 Mar 2026 06:25:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47527205</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47527205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47527205</guid></item><item><title><![CDATA[New comment by vanyaland in "Building a coding agent in Swift from scratch"]]></title><description><![CDATA[
<p>It's the harness/orchestration layer — the part that runs the agent loop, dispatches tool calls, and manages context.</p>
]]></description><pubDate>Thu, 26 Mar 2026 06:15:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47527157</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47527157</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47527157</guid></item><item><title><![CDATA[New comment by vanyaland in "Building a coding agent in Swift from scratch"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Wed, 25 Mar 2026 19:47:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47522249</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47522249</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47522249</guid></item><item><title><![CDATA[New comment by vanyaland in "Building a coding agent in Swift from scratch"]]></title><description><![CDATA[
<p>Good point, I'll rename the binary. Thanks for actually going through the repo.</p>
]]></description><pubDate>Wed, 25 Mar 2026 15:27:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47518673</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47518673</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47518673</guid></item><item><title><![CDATA[New comment by vanyaland in "Building a coding agent in Swift from scratch"]]></title><description><![CDATA[
<p>Yeah, this is basically what I ran into too. I actually wrote about this in Stage 6 (<a href="https://ivanmagda.dev/posts/s06-context-compaction/" rel="nofollow">https://ivanmagda.dev/posts/s06-context-compaction/</a>) 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.<p>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.<p>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.</p>
]]></description><pubDate>Wed, 25 Mar 2026 15:14:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47518470</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47518470</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47518470</guid></item><item><title><![CDATA[Building a coding agent in Swift from scratch]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/ivan-magda/swift-claude-code">https://github.com/ivan-magda/swift-claude-code</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47515605">https://news.ycombinator.com/item?id=47515605</a></p>
<p>Points: 98</p>
<p># Comments: 21</p>
]]></description><pubDate>Wed, 25 Mar 2026 10:45:40 +0000</pubDate><link>https://github.com/ivan-magda/swift-claude-code</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47515605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47515605</guid></item><item><title><![CDATA[New comment by vanyaland in "Hypura – A storage-tier-aware LLM inference scheduler for Apple Silicon"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 24 Mar 2026 18:41:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47507259</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47507259</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47507259</guid></item><item><title><![CDATA[New comment by vanyaland in "So where are all the AI apps?"]]></title><description><![CDATA[
<p>I think part of the mismatch is that people are still looking for “more apps” as the output metric.<p>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.</p>
]]></description><pubDate>Tue, 24 Mar 2026 18:40:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47507238</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47507238</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47507238</guid></item><item><title><![CDATA[New comment by vanyaland in "The more AI I used, the worse my code got"]]></title><description><![CDATA[
<p>The only thing that’s helped me is adding hard constraints: spec, architecture, small verifiable steps, and explicit decision logs.</p>
]]></description><pubDate>Tue, 24 Mar 2026 14:54:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47503538</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47503538</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47503538</guid></item><item><title><![CDATA[New comment by vanyaland in "The more AI I used, the worse my code got"]]></title><description><![CDATA[
<p>agree, I also used Ralph loop /umputun/ralphex on GitHub</p>
]]></description><pubDate>Tue, 24 Mar 2026 14:53:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47503520</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47503520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47503520</guid></item><item><title><![CDATA[New comment by vanyaland in "Show HN: Claude-replay – Video-like player for AI coding sessions (web UI)"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 24 Mar 2026 14:46:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47503402</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47503402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47503402</guid></item><item><title><![CDATA[New comment by vanyaland in "What are the best headless browsers?"]]></title><description><![CDATA[
<p>I’d separate “best engine” from “best developer experience”.
If you want something that mostly just works, Playwright is still the easiest default.</p>
]]></description><pubDate>Tue, 24 Mar 2026 14:43:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47503359</link><dc:creator>vanyaland</dc:creator><comments>https://news.ycombinator.com/item?id=47503359</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47503359</guid></item></channel></rss>