The best Hacker News stories from Show from the past day

Go back

Latest posts:

Show HN: Marky – A lightweight Markdown viewer for agentic coding

Hey HN,<p>In this age of agentic coding I've found myself spending a lot of time reviewing markdown files. Whether it's plans or documentation that I've asked my agent to generate for me, it seems that I spend more time reading markdown than code.<p>I've tried a few different solutions to make it easier to read such as Obsidian however I've found their Vault system to be quite limiting for this use case and I've found TUI solutions to not quite be as friendly to read as I've wanted so I made Marky.<p>Marky is a lightweight desktop application that makes it incredibly easy to read and track your markdown files. It also has a helpful cli so you can just run marky FILENAME and have the app open to the md file that you pointed it at. I've been using the daily over the past week and I really enjoy it so I figured I'd share it.<p>Here's a video if you want to check out a demo: <a href="https://www.youtube.com/watch?v=nGBxt8uOVjc" rel="nofollow">https://www.youtube.com/watch?v=nGBxt8uOVjc</a>.<p>I have plans to add more features such as incorporating agentic tools such as claude code and codex into the UI as well as developing a local git diff reviewer to allow me to do local code review before pushing up to git.<p>I'd love to hear your thoughts and any feature suggestions you may have :)

Show HN: Marky – A lightweight Markdown viewer for agentic coding

Hey HN,<p>In this age of agentic coding I've found myself spending a lot of time reviewing markdown files. Whether it's plans or documentation that I've asked my agent to generate for me, it seems that I spend more time reading markdown than code.<p>I've tried a few different solutions to make it easier to read such as Obsidian however I've found their Vault system to be quite limiting for this use case and I've found TUI solutions to not quite be as friendly to read as I've wanted so I made Marky.<p>Marky is a lightweight desktop application that makes it incredibly easy to read and track your markdown files. It also has a helpful cli so you can just run marky FILENAME and have the app open to the md file that you pointed it at. I've been using the daily over the past week and I really enjoy it so I figured I'd share it.<p>Here's a video if you want to check out a demo: <a href="https://www.youtube.com/watch?v=nGBxt8uOVjc" rel="nofollow">https://www.youtube.com/watch?v=nGBxt8uOVjc</a>.<p>I have plans to add more features such as incorporating agentic tools such as claude code and codex into the UI as well as developing a local git diff reviewer to allow me to do local code review before pushing up to git.<p>I'd love to hear your thoughts and any feature suggestions you may have :)

Show HN: SmallDocs – Markdown without the frustrations

Hi HN, I’d like to introduce you to SmallDocs (<a href="https://sdocs.dev" rel="nofollow">https://sdocs.dev</a>). SDocs is a CLI + webapp to instantly and 100% privately elegantly preview and share markdown files. (Code: <a href="https://github.com/espressoplease/SDocs" rel="nofollow">https://github.com/espressoplease/SDocs</a>)<p>The more we work with command line based agents the more `.md` files are part of our daily lives. Their output is great for agents to produce, but a little bit frustrating for humans: Markdown files are slightly annoying to read/preview and fiddly to share/receive. SDocs was built to resolve these pain points.<p>If you `sdoc path/to/file.md` (after `npm i -g sdocs-dev`) it instantly opens in the browser for you to preview (with our hopefully-nice-to-look-at default styling) and you can immediately share the url.<p>The `.md` files our agents produce contain some of the most sensitive information we have (about codebases, unresolved bugs, production logs, etc.). For this reason 100% privacy is an essential component of SDocs.<p>To achieve this SDoc urls contain your markdown document's content in compressed base64 in the url fragment (the bit after the `#`):<p><a href="https://sdocs.dev/#md=GzcFAMT...(this" rel="nofollow">https://sdocs.dev/#md=GzcFAMT...(this</a> is the contents of your document)...<p>The cool thing about the url fragment is that it is never sent to the server (see <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/URI/Reference/F...</a>: "The fragment is not sent to the server when the URI is requested; it is processed by the client").<p>The sdocs.dev webapp is purely a client side decoding and rendering engine for the content stored in the url fragment. This means the contents of your document stays with you and those you choose to share it with, the SDocs server doesn't access it. (Feel free to inspect/get your agent to inspect our code to confirm this!)<p>Because `.md` files might play a big role in the future of work, SDocs wants to push the boundaries of styling and rendering interesting content in markdown files. There is much more to do, but to start with you can add complex styling and render charts visually. The SDocs root (which renders `sdoc.md` with our default styles) has pictures and links to some adventurous examples. `sdoc schema` and `sdoc charts` provides detailed information for you or your agent about how how make the most of SDocs formatting.<p>If you share a SDocs URL, your styles travel with it because they are added as YAML Front Matter - <a href="https://jekyllrb.com/docs/front-matter/" rel="nofollow">https://jekyllrb.com/docs/front-matter/</a> - to the markdown file. E.g.:<p><pre><code> --- styles: fontFamily: Lora baseFontSize: 17 ... --- </code></pre> At work, we've been putting this project to the test. My team and I have found SDocs to be particularly useful for sharing agent debugging reports and getting easily copyable content out of Claude (e.g. a series of bash commands that need to be ran).<p>To encourage our agents to use SDocs we add a few lines about them in our root "agent files" (e.g. ~/.claude/CLAUDE.md or ~/.codex/AGENTS.md). When you use the cli for the first time there is an optional setup phase to do this for you.<p>I'm of course very interested in feedback and open to pull requests if you want to add features to SDocs.<p>Thank you for taking a look!

Show HN: SmallDocs – Markdown without the frustrations

Hi HN, I’d like to introduce you to SmallDocs (<a href="https://sdocs.dev" rel="nofollow">https://sdocs.dev</a>). SDocs is a CLI + webapp to instantly and 100% privately elegantly preview and share markdown files. (Code: <a href="https://github.com/espressoplease/SDocs" rel="nofollow">https://github.com/espressoplease/SDocs</a>)<p>The more we work with command line based agents the more `.md` files are part of our daily lives. Their output is great for agents to produce, but a little bit frustrating for humans: Markdown files are slightly annoying to read/preview and fiddly to share/receive. SDocs was built to resolve these pain points.<p>If you `sdoc path/to/file.md` (after `npm i -g sdocs-dev`) it instantly opens in the browser for you to preview (with our hopefully-nice-to-look-at default styling) and you can immediately share the url.<p>The `.md` files our agents produce contain some of the most sensitive information we have (about codebases, unresolved bugs, production logs, etc.). For this reason 100% privacy is an essential component of SDocs.<p>To achieve this SDoc urls contain your markdown document's content in compressed base64 in the url fragment (the bit after the `#`):<p><a href="https://sdocs.dev/#md=GzcFAMT...(this" rel="nofollow">https://sdocs.dev/#md=GzcFAMT...(this</a> is the contents of your document)...<p>The cool thing about the url fragment is that it is never sent to the server (see <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/URI/Reference/F...</a>: "The fragment is not sent to the server when the URI is requested; it is processed by the client").<p>The sdocs.dev webapp is purely a client side decoding and rendering engine for the content stored in the url fragment. This means the contents of your document stays with you and those you choose to share it with, the SDocs server doesn't access it. (Feel free to inspect/get your agent to inspect our code to confirm this!)<p>Because `.md` files might play a big role in the future of work, SDocs wants to push the boundaries of styling and rendering interesting content in markdown files. There is much more to do, but to start with you can add complex styling and render charts visually. The SDocs root (which renders `sdoc.md` with our default styles) has pictures and links to some adventurous examples. `sdoc schema` and `sdoc charts` provides detailed information for you or your agent about how how make the most of SDocs formatting.<p>If you share a SDocs URL, your styles travel with it because they are added as YAML Front Matter - <a href="https://jekyllrb.com/docs/front-matter/" rel="nofollow">https://jekyllrb.com/docs/front-matter/</a> - to the markdown file. E.g.:<p><pre><code> --- styles: fontFamily: Lora baseFontSize: 17 ... --- </code></pre> At work, we've been putting this project to the test. My team and I have found SDocs to be particularly useful for sharing agent debugging reports and getting easily copyable content out of Claude (e.g. a series of bash commands that need to be ran).<p>To encourage our agents to use SDocs we add a few lines about them in our root "agent files" (e.g. ~/.claude/CLAUDE.md or ~/.codex/AGENTS.md). When you use the cli for the first time there is an optional setup phase to do this for you.<p>I'm of course very interested in feedback and open to pull requests if you want to add features to SDocs.<p>Thank you for taking a look!

Show HN: SmallDocs – Markdown without the frustrations

Hi HN, I’d like to introduce you to SmallDocs (<a href="https://sdocs.dev" rel="nofollow">https://sdocs.dev</a>). SDocs is a CLI + webapp to instantly and 100% privately elegantly preview and share markdown files. (Code: <a href="https://github.com/espressoplease/SDocs" rel="nofollow">https://github.com/espressoplease/SDocs</a>)<p>The more we work with command line based agents the more `.md` files are part of our daily lives. Their output is great for agents to produce, but a little bit frustrating for humans: Markdown files are slightly annoying to read/preview and fiddly to share/receive. SDocs was built to resolve these pain points.<p>If you `sdoc path/to/file.md` (after `npm i -g sdocs-dev`) it instantly opens in the browser for you to preview (with our hopefully-nice-to-look-at default styling) and you can immediately share the url.<p>The `.md` files our agents produce contain some of the most sensitive information we have (about codebases, unresolved bugs, production logs, etc.). For this reason 100% privacy is an essential component of SDocs.<p>To achieve this SDoc urls contain your markdown document's content in compressed base64 in the url fragment (the bit after the `#`):<p><a href="https://sdocs.dev/#md=GzcFAMT...(this" rel="nofollow">https://sdocs.dev/#md=GzcFAMT...(this</a> is the contents of your document)...<p>The cool thing about the url fragment is that it is never sent to the server (see <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/URI/Reference/F...</a>: "The fragment is not sent to the server when the URI is requested; it is processed by the client").<p>The sdocs.dev webapp is purely a client side decoding and rendering engine for the content stored in the url fragment. This means the contents of your document stays with you and those you choose to share it with, the SDocs server doesn't access it. (Feel free to inspect/get your agent to inspect our code to confirm this!)<p>Because `.md` files might play a big role in the future of work, SDocs wants to push the boundaries of styling and rendering interesting content in markdown files. There is much more to do, but to start with you can add complex styling and render charts visually. The SDocs root (which renders `sdoc.md` with our default styles) has pictures and links to some adventurous examples. `sdoc schema` and `sdoc charts` provides detailed information for you or your agent about how how make the most of SDocs formatting.<p>If you share a SDocs URL, your styles travel with it because they are added as YAML Front Matter - <a href="https://jekyllrb.com/docs/front-matter/" rel="nofollow">https://jekyllrb.com/docs/front-matter/</a> - to the markdown file. E.g.:<p><pre><code> --- styles: fontFamily: Lora baseFontSize: 17 ... --- </code></pre> At work, we've been putting this project to the test. My team and I have found SDocs to be particularly useful for sharing agent debugging reports and getting easily copyable content out of Claude (e.g. a series of bash commands that need to be ran).<p>To encourage our agents to use SDocs we add a few lines about them in our root "agent files" (e.g. ~/.claude/CLAUDE.md or ~/.codex/AGENTS.md). When you use the cli for the first time there is an optional setup phase to do this for you.<p>I'm of course very interested in feedback and open to pull requests if you want to add features to SDocs.<p>Thank you for taking a look!

Show HN: SmallDocs – Markdown without the frustrations

Hi HN, I’d like to introduce you to SmallDocs (<a href="https://sdocs.dev" rel="nofollow">https://sdocs.dev</a>). SDocs is a CLI + webapp to instantly and 100% privately elegantly preview and share markdown files. (Code: <a href="https://github.com/espressoplease/SDocs" rel="nofollow">https://github.com/espressoplease/SDocs</a>)<p>The more we work with command line based agents the more `.md` files are part of our daily lives. Their output is great for agents to produce, but a little bit frustrating for humans: Markdown files are slightly annoying to read/preview and fiddly to share/receive. SDocs was built to resolve these pain points.<p>If you `sdoc path/to/file.md` (after `npm i -g sdocs-dev`) it instantly opens in the browser for you to preview (with our hopefully-nice-to-look-at default styling) and you can immediately share the url.<p>The `.md` files our agents produce contain some of the most sensitive information we have (about codebases, unresolved bugs, production logs, etc.). For this reason 100% privacy is an essential component of SDocs.<p>To achieve this SDoc urls contain your markdown document's content in compressed base64 in the url fragment (the bit after the `#`):<p><a href="https://sdocs.dev/#md=GzcFAMT...(this" rel="nofollow">https://sdocs.dev/#md=GzcFAMT...(this</a> is the contents of your document)...<p>The cool thing about the url fragment is that it is never sent to the server (see <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/URI/Reference/F...</a>: "The fragment is not sent to the server when the URI is requested; it is processed by the client").<p>The sdocs.dev webapp is purely a client side decoding and rendering engine for the content stored in the url fragment. This means the contents of your document stays with you and those you choose to share it with, the SDocs server doesn't access it. (Feel free to inspect/get your agent to inspect our code to confirm this!)<p>Because `.md` files might play a big role in the future of work, SDocs wants to push the boundaries of styling and rendering interesting content in markdown files. There is much more to do, but to start with you can add complex styling and render charts visually. The SDocs root (which renders `sdoc.md` with our default styles) has pictures and links to some adventurous examples. `sdoc schema` and `sdoc charts` provides detailed information for you or your agent about how how make the most of SDocs formatting.<p>If you share a SDocs URL, your styles travel with it because they are added as YAML Front Matter - <a href="https://jekyllrb.com/docs/front-matter/" rel="nofollow">https://jekyllrb.com/docs/front-matter/</a> - to the markdown file. E.g.:<p><pre><code> --- styles: fontFamily: Lora baseFontSize: 17 ... --- </code></pre> At work, we've been putting this project to the test. My team and I have found SDocs to be particularly useful for sharing agent debugging reports and getting easily copyable content out of Claude (e.g. a series of bash commands that need to be ran).<p>To encourage our agents to use SDocs we add a few lines about them in our root "agent files" (e.g. ~/.claude/CLAUDE.md or ~/.codex/AGENTS.md). When you use the cli for the first time there is an optional setup phase to do this for you.<p>I'm of course very interested in feedback and open to pull requests if you want to add features to SDocs.<p>Thank you for taking a look!

Show HN: CodeBurn – Analyze Claude Code token usage by task

Built this after realizing I was spending ~$1400/week on Claude Code with almost no visibility into what was actually consuming tokens.<p>Tools like ccusage give a cost breakdown per model and per day, but I wanted to understand usage at the task level.<p>CodeBurn reads the JSONL session transcripts that Claude Code stores locally (~/.claude/projects/) and classifies each turn into 13 categories based on tool usage patterns (no LLM calls involved).<p>One surprising result: about 56% of my spend was on conversation turns with no tool usage. Actual coding (edits/writes) was only ~21%.<p>The interface is an interactive terminal UI built with Ink (React for terminals), with gradient bar charts, responsive panels, and keyboard navigation. There’s also a SwiftBar menu bar integration for macOS.<p>Happy to hear feedback or ideas.

Show HN: CodeBurn – Analyze Claude Code token usage by task

Built this after realizing I was spending ~$1400/week on Claude Code with almost no visibility into what was actually consuming tokens.<p>Tools like ccusage give a cost breakdown per model and per day, but I wanted to understand usage at the task level.<p>CodeBurn reads the JSONL session transcripts that Claude Code stores locally (~/.claude/projects/) and classifies each turn into 13 categories based on tool usage patterns (no LLM calls involved).<p>One surprising result: about 56% of my spend was on conversation turns with no tool usage. Actual coding (edits/writes) was only ~21%.<p>The interface is an interactive terminal UI built with Ink (React for terminals), with gradient bar charts, responsive panels, and keyboard navigation. There’s also a SwiftBar menu bar integration for macOS.<p>Happy to hear feedback or ideas.

Show HN: CodeBurn – Analyze Claude Code token usage by task

Built this after realizing I was spending ~$1400/week on Claude Code with almost no visibility into what was actually consuming tokens.<p>Tools like ccusage give a cost breakdown per model and per day, but I wanted to understand usage at the task level.<p>CodeBurn reads the JSONL session transcripts that Claude Code stores locally (~/.claude/projects/) and classifies each turn into 13 categories based on tool usage patterns (no LLM calls involved).<p>One surprising result: about 56% of my spend was on conversation turns with no tool usage. Actual coding (edits/writes) was only ~21%.<p>The interface is an interactive terminal UI built with Ink (React for terminals), with gradient bar charts, responsive panels, and keyboard navigation. There’s also a SwiftBar menu bar integration for macOS.<p>Happy to hear feedback or ideas.

Tell HN: 48 absurd web projects – one every month

A year ago I posted here about a small experiment: <a href="https://news.ycombinator.com/item?id=44162363">https://news.ycombinator.com/item?id=44162363</a><p>I build one absurd web project every month and publish it on <a href="https://absurd.website" rel="nofollow">https://absurd.website</a><p>I kept going.<p>There are now 48 projects.<p>The idea is still the same - I build mostly unnecessary web projects that sit somewhere between experiments, jokes, products, and art.<p>But over time they’ve started moving more toward net art than just experimental web.<p>Some recent ones:<p>VandalAds - a banner format you can destroy instead of just viewing Type Therapy - instead of talking affirmations, you type your thoughts to change them Slow Rebranding - branding changes so slowly you don’t notice it Guard Simulator - a crime appears for 15 seconds per day, if you catch it you win<p>I also started releasing some projects only to members, so not everything is public anymore.<p>What I like most is the rhythm: one public project and one private project each month. It forces me to realize ideas instead of leaving them in notes.<p>The core is still always the idea and concept - not polish, not execution, not even usefulness.<p>It’s also interesting to see whether people understand the thought inside a project, discover something else in it, or see nothing at all.<p>I’m still going, and at this point absurd.website has become a big part of my life.<p>Thanks.

Show HN: MacMind – A transformer neural network in HyperCard on a 1989 Macintosh

I trained a transformer in HyperCard. 1,216 parameters. 1989 Macintosh. And yes, it took a while.<p>MacMind is a complete transformer neural network, embeddings, positional encoding, self-attention, backpropagation, and gradient descent, implemented entirely in HyperTalk, the scripting language Apple shipped with HyperCard in 1987. Every line of code is readable inside HyperCard's script editor. Option-click any button and read the actual math.<p>The task: learn the bit-reversal permutation, the opening step of the Fast Fourier Transform. The model has no formula to follow. It discovers the positional pattern purely through attention and repeated trial and error. By training step 193, it was oscillating between 50%, 75%, and 100% accuracy on successive steps, settling into convergence like a ball rolling into a bowl.<p>The whole "intelligence" is 1,216 numbers stored in hidden fields in a HyperCard stack. Save the file, quit, reopen: the trained model is still there, still correct. It runs on anything from System 7 through Mac OS 9.<p>As a former physics student, and the FFT is an old friend, it sits at the heart of signal processing, quantum mechanics, and wave analysis. I built this because we're at a moment where AI affects all of us but most of us don't understand what it actually does. Backpropagation and attention are math, not magic. And math doesn't care whether it's running on a TPU cluster or a 68030 from 1989.<p>The repo has a pre-trained stack (step 1,000), a blank stack you can train yourself, and a Python/NumPy reference implementation that validates the math.

Show HN: MacMind – A transformer neural network in HyperCard on a 1989 Macintosh

I trained a transformer in HyperCard. 1,216 parameters. 1989 Macintosh. And yes, it took a while.<p>MacMind is a complete transformer neural network, embeddings, positional encoding, self-attention, backpropagation, and gradient descent, implemented entirely in HyperTalk, the scripting language Apple shipped with HyperCard in 1987. Every line of code is readable inside HyperCard's script editor. Option-click any button and read the actual math.<p>The task: learn the bit-reversal permutation, the opening step of the Fast Fourier Transform. The model has no formula to follow. It discovers the positional pattern purely through attention and repeated trial and error. By training step 193, it was oscillating between 50%, 75%, and 100% accuracy on successive steps, settling into convergence like a ball rolling into a bowl.<p>The whole "intelligence" is 1,216 numbers stored in hidden fields in a HyperCard stack. Save the file, quit, reopen: the trained model is still there, still correct. It runs on anything from System 7 through Mac OS 9.<p>As a former physics student, and the FFT is an old friend, it sits at the heart of signal processing, quantum mechanics, and wave analysis. I built this because we're at a moment where AI affects all of us but most of us don't understand what it actually does. Backpropagation and attention are math, not magic. And math doesn't care whether it's running on a TPU cluster or a 68030 from 1989.<p>The repo has a pre-trained stack (step 1,000), a blank stack you can train yourself, and a Python/NumPy reference implementation that validates the math.

Show HN: MacMind – A transformer neural network in HyperCard on a 1989 Macintosh

I trained a transformer in HyperCard. 1,216 parameters. 1989 Macintosh. And yes, it took a while.<p>MacMind is a complete transformer neural network, embeddings, positional encoding, self-attention, backpropagation, and gradient descent, implemented entirely in HyperTalk, the scripting language Apple shipped with HyperCard in 1987. Every line of code is readable inside HyperCard's script editor. Option-click any button and read the actual math.<p>The task: learn the bit-reversal permutation, the opening step of the Fast Fourier Transform. The model has no formula to follow. It discovers the positional pattern purely through attention and repeated trial and error. By training step 193, it was oscillating between 50%, 75%, and 100% accuracy on successive steps, settling into convergence like a ball rolling into a bowl.<p>The whole "intelligence" is 1,216 numbers stored in hidden fields in a HyperCard stack. Save the file, quit, reopen: the trained model is still there, still correct. It runs on anything from System 7 through Mac OS 9.<p>As a former physics student, and the FFT is an old friend, it sits at the heart of signal processing, quantum mechanics, and wave analysis. I built this because we're at a moment where AI affects all of us but most of us don't understand what it actually does. Backpropagation and attention are math, not magic. And math doesn't care whether it's running on a TPU cluster or a 68030 from 1989.<p>The repo has a pre-trained stack (step 1,000), a blank stack you can train yourself, and a Python/NumPy reference implementation that validates the math.

Show HN: MacMind – A transformer neural network in HyperCard on a 1989 Macintosh

I trained a transformer in HyperCard. 1,216 parameters. 1989 Macintosh. And yes, it took a while.<p>MacMind is a complete transformer neural network, embeddings, positional encoding, self-attention, backpropagation, and gradient descent, implemented entirely in HyperTalk, the scripting language Apple shipped with HyperCard in 1987. Every line of code is readable inside HyperCard's script editor. Option-click any button and read the actual math.<p>The task: learn the bit-reversal permutation, the opening step of the Fast Fourier Transform. The model has no formula to follow. It discovers the positional pattern purely through attention and repeated trial and error. By training step 193, it was oscillating between 50%, 75%, and 100% accuracy on successive steps, settling into convergence like a ball rolling into a bowl.<p>The whole "intelligence" is 1,216 numbers stored in hidden fields in a HyperCard stack. Save the file, quit, reopen: the trained model is still there, still correct. It runs on anything from System 7 through Mac OS 9.<p>As a former physics student, and the FFT is an old friend, it sits at the heart of signal processing, quantum mechanics, and wave analysis. I built this because we're at a moment where AI affects all of us but most of us don't understand what it actually does. Backpropagation and attention are math, not magic. And math doesn't care whether it's running on a TPU cluster or a 68030 from 1989.<p>The repo has a pre-trained stack (step 1,000), a blank stack you can train yourself, and a Python/NumPy reference implementation that validates the math.

Show HN: GNU grep as a PHP extension

Show HN: I rebuilt a 2000s browser strategy game on Cloudflare's edge

I grew up in Germany in the early 2000s playing a browser game called Inselkampf. You built up an island, mined gold and stone, cut down trees for wood, raised armies, sent fleets across an ocean grid, joined alliances and got betrayed by them. Same genre as OGame or Travian. It shut down in 2014 and I never found anything that replaced that feeling of checking in before school to see if your fleet had arrived and your alliance was still alive.<p>I finally built the version I wanted to play. Kampfinsel is live at kampfinsel.com right now with real players on it. It's not a straight copy of the old game. I gave it its own world. No magic, no gunpowder – just ballistas, fire pots, and slow ships crossing huge distances. Three resources: gold, stone, wood. Travel between islands takes hours, not seconds. It's slow on purpose.<p>The whole thing runs on Cloudflare's edge. Workers for the game logic and API, D1 for the database, KV for sessions and caching, R2 for assets and Durable Objects for per-island state and the tick system (fleet arrivals, combat, resource generation). There's no origin server at all. Making a stateful multiplayer game work inside Workers' CPU limits and D1's consistency model meant some non-obvious choices: resources are calculated on-read from timestamps instead of being ticked into the database, fleet movements live in Durable Object alarms and combat writes are batched. This helped me a lot!<p>The look is intentionally rough and text-heavy (Hi HN!): server-rendered HTML, tables, a parchment color palette, Unicode icons, no frontend framework, no build step. The only JavaScript is for countdown timers and auto-refresh. I wanted it to feel the way I remember these games looking, not how they actually looked. Honestly, it looks a lot like HN itself - tables, monospace, no chrome. If you like how this site looks, you'll probably feel at home.<p>No signup wall, no premium currency, no pay-to-win. Feedback very welcome, especially from anyone who played this kind of game back in the day or has opinions on running stateful stuff on Workers + D1 + Durable Objects. I'll be around for the next few hours.

Show HN: I rebuilt a 2000s browser strategy game on Cloudflare's edge

I grew up in Germany in the early 2000s playing a browser game called Inselkampf. You built up an island, mined gold and stone, cut down trees for wood, raised armies, sent fleets across an ocean grid, joined alliances and got betrayed by them. Same genre as OGame or Travian. It shut down in 2014 and I never found anything that replaced that feeling of checking in before school to see if your fleet had arrived and your alliance was still alive.<p>I finally built the version I wanted to play. Kampfinsel is live at kampfinsel.com right now with real players on it. It's not a straight copy of the old game. I gave it its own world. No magic, no gunpowder – just ballistas, fire pots, and slow ships crossing huge distances. Three resources: gold, stone, wood. Travel between islands takes hours, not seconds. It's slow on purpose.<p>The whole thing runs on Cloudflare's edge. Workers for the game logic and API, D1 for the database, KV for sessions and caching, R2 for assets and Durable Objects for per-island state and the tick system (fleet arrivals, combat, resource generation). There's no origin server at all. Making a stateful multiplayer game work inside Workers' CPU limits and D1's consistency model meant some non-obvious choices: resources are calculated on-read from timestamps instead of being ticked into the database, fleet movements live in Durable Object alarms and combat writes are batched. This helped me a lot!<p>The look is intentionally rough and text-heavy (Hi HN!): server-rendered HTML, tables, a parchment color palette, Unicode icons, no frontend framework, no build step. The only JavaScript is for countdown timers and auto-refresh. I wanted it to feel the way I remember these games looking, not how they actually looked. Honestly, it looks a lot like HN itself - tables, monospace, no chrome. If you like how this site looks, you'll probably feel at home.<p>No signup wall, no premium currency, no pay-to-win. Feedback very welcome, especially from anyone who played this kind of game back in the day or has opinions on running stateful stuff on Workers + D1 + Durable Objects. I'll be around for the next few hours.

Show HN: Libretto – Making AI browser automations deterministic

Libretto (<a href="https://libretto.sh" rel="nofollow">https://libretto.sh</a>) is a Skill+CLI that makes it easy for your coding agent to generate deterministic browser automations and debug existing ones. Key shift is going from “give an agent a prompt at runtime and hope it figures things out” to: “Use coding agents to generate real scripts you can inspect, run, and debug”.<p>Here’s a demo: <a href="https://www.youtube.com/watch?v=0cDpIntmHAM" rel="nofollow">https://www.youtube.com/watch?v=0cDpIntmHAM</a>. Docs start at <a href="https://libretto.sh/docs/get-started/introduction" rel="nofollow">https://libretto.sh/docs/get-started/introduction</a>.<p>We spent a year building and maintaining browser automations for EHR and payer portal integrations at our healthcare startup. Building these automations and debugging failed ones was incredibly time-consuming.<p>There’s lots of tools that use runtime AI like Browseruse and Stagehand which we tried, but (1) they’re reliant on custom DOM parsing that's unreliable on older and complicated websites (including all of healthcare). Using a website’s internal network calls is faster and more reliable when possible. (2) They can be expensive since they rely on lots of AI calls and for workflows with complicated logic you can’t always rely on caching actions to make sure it will work. (3) They’re at runtime so it’s not interpretable what the agent is going to do. You kind of hope you prompted it correctly to do the right thing, but legacy workflows are often unintuitive and inconsistent across sites so you can’t trust an agent to just figure it out at runtime. (4) They don’t really help you generate new automations or help you debug automation failures.<p>We wanted a way to reliably generate and maintain browser automations in messy, high-stakes environments, without relying on fragile runtime agents.<p>Libretto is different because instead of runtime agents it uses “development-time AI”: scripts are generated ahead of time as actual code you can read and control, not opaque agent behavior at runtime. Instead of a black box, you own the code and can inspect, modify, version, and debug everything.<p>Rather than relying on runtime DOM parsing, Libretto takes a hybrid approach combining Playwright UI automation with direct network/API requests within the browser session for better reliability and bot detection evasion.<p>It records manual user actions to help agents generate and update scripts, supports step-through debugging, has an optional read-only mode to prevent agents from accidentally submitting or modifying data, and generates code that follows all the abstractions and conventions you have already in your coding repo.<p>Would love to hear how others are building and maintaining browser automations in practice, and any feedback on the approach we’ve taken here.

Show HN: Libretto – Making AI browser automations deterministic

Libretto (<a href="https://libretto.sh" rel="nofollow">https://libretto.sh</a>) is a Skill+CLI that makes it easy for your coding agent to generate deterministic browser automations and debug existing ones. Key shift is going from “give an agent a prompt at runtime and hope it figures things out” to: “Use coding agents to generate real scripts you can inspect, run, and debug”.<p>Here’s a demo: <a href="https://www.youtube.com/watch?v=0cDpIntmHAM" rel="nofollow">https://www.youtube.com/watch?v=0cDpIntmHAM</a>. Docs start at <a href="https://libretto.sh/docs/get-started/introduction" rel="nofollow">https://libretto.sh/docs/get-started/introduction</a>.<p>We spent a year building and maintaining browser automations for EHR and payer portal integrations at our healthcare startup. Building these automations and debugging failed ones was incredibly time-consuming.<p>There’s lots of tools that use runtime AI like Browseruse and Stagehand which we tried, but (1) they’re reliant on custom DOM parsing that's unreliable on older and complicated websites (including all of healthcare). Using a website’s internal network calls is faster and more reliable when possible. (2) They can be expensive since they rely on lots of AI calls and for workflows with complicated logic you can’t always rely on caching actions to make sure it will work. (3) They’re at runtime so it’s not interpretable what the agent is going to do. You kind of hope you prompted it correctly to do the right thing, but legacy workflows are often unintuitive and inconsistent across sites so you can’t trust an agent to just figure it out at runtime. (4) They don’t really help you generate new automations or help you debug automation failures.<p>We wanted a way to reliably generate and maintain browser automations in messy, high-stakes environments, without relying on fragile runtime agents.<p>Libretto is different because instead of runtime agents it uses “development-time AI”: scripts are generated ahead of time as actual code you can read and control, not opaque agent behavior at runtime. Instead of a black box, you own the code and can inspect, modify, version, and debug everything.<p>Rather than relying on runtime DOM parsing, Libretto takes a hybrid approach combining Playwright UI automation with direct network/API requests within the browser session for better reliability and bot detection evasion.<p>It records manual user actions to help agents generate and update scripts, supports step-through debugging, has an optional read-only mode to prevent agents from accidentally submitting or modifying data, and generates code that follows all the abstractions and conventions you have already in your coding repo.<p>Would love to hear how others are building and maintaining browser automations in practice, and any feedback on the approach we’ve taken here.

Show HN: Libretto – Making AI browser automations deterministic

Libretto (<a href="https://libretto.sh" rel="nofollow">https://libretto.sh</a>) is a Skill+CLI that makes it easy for your coding agent to generate deterministic browser automations and debug existing ones. Key shift is going from “give an agent a prompt at runtime and hope it figures things out” to: “Use coding agents to generate real scripts you can inspect, run, and debug”.<p>Here’s a demo: <a href="https://www.youtube.com/watch?v=0cDpIntmHAM" rel="nofollow">https://www.youtube.com/watch?v=0cDpIntmHAM</a>. Docs start at <a href="https://libretto.sh/docs/get-started/introduction" rel="nofollow">https://libretto.sh/docs/get-started/introduction</a>.<p>We spent a year building and maintaining browser automations for EHR and payer portal integrations at our healthcare startup. Building these automations and debugging failed ones was incredibly time-consuming.<p>There’s lots of tools that use runtime AI like Browseruse and Stagehand which we tried, but (1) they’re reliant on custom DOM parsing that's unreliable on older and complicated websites (including all of healthcare). Using a website’s internal network calls is faster and more reliable when possible. (2) They can be expensive since they rely on lots of AI calls and for workflows with complicated logic you can’t always rely on caching actions to make sure it will work. (3) They’re at runtime so it’s not interpretable what the agent is going to do. You kind of hope you prompted it correctly to do the right thing, but legacy workflows are often unintuitive and inconsistent across sites so you can’t trust an agent to just figure it out at runtime. (4) They don’t really help you generate new automations or help you debug automation failures.<p>We wanted a way to reliably generate and maintain browser automations in messy, high-stakes environments, without relying on fragile runtime agents.<p>Libretto is different because instead of runtime agents it uses “development-time AI”: scripts are generated ahead of time as actual code you can read and control, not opaque agent behavior at runtime. Instead of a black box, you own the code and can inspect, modify, version, and debug everything.<p>Rather than relying on runtime DOM parsing, Libretto takes a hybrid approach combining Playwright UI automation with direct network/API requests within the browser session for better reliability and bot detection evasion.<p>It records manual user actions to help agents generate and update scripts, supports step-through debugging, has an optional read-only mode to prevent agents from accidentally submitting or modifying data, and generates code that follows all the abstractions and conventions you have already in your coding repo.<p>Would love to hear how others are building and maintaining browser automations in practice, and any feedback on the approach we’ve taken here.

< 1 2 3 4 ... 968 969 970 >