Launch HN: Vendo (YC S26) – Let users build features on top of your product (github.com)
Demo: https://www.youtube.com/watch?v=VdpHehY64ls
We built Vendo because every SaaS eventually faces the same problem: every customer needs something slightly different. One wants a new report and another needs a workflow that only makes sense for their team. These requests either sit on the roadmap, become one-off engineering work, or force the customer into spreadsheets and external tools. We wanted the user to be able to create the missing feature themselves, without leaving the product.
Here is how it works:
- npx vendo init reads the product's API surface, theme, routes, and more. These are used so that the apps Vendo creates (1) look on-brand and native and (2) have the ability to read data and perform actions directly through the company's API
- When a user asks for a feature, we have a custom Vendo harness that writes a React component with a bunch of Vendo add-ons and guardrails (ex. ability to make calls to the host API + our component library). Every save is compiled, type-checked, run against real API responses, and rendered before the user sees it. We just released a benchmark and write-up here with more info for anyone interested: https://vendo.run/blog/generating-product-ui-measured
- We use QuickJS to make sure that anything the agent creates is sandboxed and can't mess with the company's site. Vendo compiles the component and runs it with Preact inside a QuickJS VM with no access to the DOM, network, or clock. The VM returns a UI tree, which the host renders using the product’s registered components. When the user clicks something, QuickJS emits a tool call; the host executes it through Vendo’s guard and passes the result back into the same VM, preserving the screen’s local state.
There's a lot of generative UI right now: streaming developer-written components into a chat (Vercel AI SDK, CopilotKit, Thesys), or rendering your app inside someone else's assistant (OpenAI Apps SDK, MCP Apps). We differ on two things. Vendo lives in your product and acts through your API as the signed-in user, so what it makes is durable: real apps users keep, pin, and run on triggers while they're away, and not components that are merely confined to a chat. Plus, it's not capped at putting together a bunch of prebuilt components: the agent can build arbitrary apps, from a quick dashboard out of your own components to real custom code running in a sandbox, and either way data only ever comes from tool calls to your API.
Here are some things customers are using Vendo for today:
- Letting their users create custom dashboards and reports. These are mainly UI-based and focused on letting the user see the exact graphs and metrics they care about
- Letting their customers create recurring automations. A big thing as well that has been used for these automations is the fact that we connect to external connections, so users have been automating many of their inter-tool workflows (ex. an automation that sends a slack alert based off of something in the product)
- B2B customers letting their customers customize the product with specific business logic. Often this is simple things like an extra field on a form, or an extra permission, but it is hard for a business to keep up with them otherwise.
- Creating and sharing custom dashboards/apps across an organization. Since the apps Vendo creates are durable, they can be shared, reused, and forked (which can’t be done with many of the other in-chat generative UI s...
22 comments
[ 4.0 ms ] story [ 42.0 ms ] threadI often find my users want to throw their Claude at it and have everything handled. Users have even developed their own local UIs using Claude Design. As long as they are within the bounds of the MCP I already provide access to, no problem.
Edit: Congrats on the launch and thanks for open sourcing!
I think you bring up a good point though on how consumption of software will evolve (and the possibility of Claude just being the entrance to everything), and I think this is soemthing we have been thinking a lot about as well.
As a data point, our users are going a step further. We gave away our desktop software as OSS and our users fork and vibe code on top with the entire stack. They get the benefit of not having JavaScript powering a media heavy app since we wrote it in Rust. Now we have users making their own tutorials about it.
I think non experts will appreciate engineers solving for smoothness, distributed systems, and all the hard parts. Then they want to fill in the UX / workflow pieces themselves.
I would also encourage you to take a look at our benchmarks (linked in the post), that show how the gaurdrails we have in-place allow us to deliver pretty strong results to our users. And as a last point, most of our users are not creating business-critical features with Vendo right now. For a lot of them, it is an additional feature that they wished they had but didn't. And for the companies we work with, the benefit of providing their customers with this level of customization outweigths the possible risk that you mention.
Would love to hear more of your thoughts, thanks for the feedback!
Frankly I don’t think this is that relevant. When software breaks, most people don’t want to get support from another piece of software. They want human support. As the models get better, I’d wager the problems that fall through will get increasingly messy by nature of a) being hard enough to stump the model or b) the model running in circles making changes that obscure or worsen the problem. Especially if you have non-technical users who can’t accurately describe what they want or the problem with the current state.
Benchmarks and guardrails are nice and all, but as you said problems will never be 100% self correctable. Models are good enough until they aren’t. I like to take a “what’s the worst that could happen” approach to planning support. Murphy’s law and all that.
> And as a last point, most of our users are not creating business-critical features with Vendo right now.
Just give it some time… you’d be surprised what becomes business critical in the eyes of a customer. Sooner or later a report will become part of an accounting workflow etc, and it’ll break on the wrong day and suddenly payroll is late. You know how many Excel sheets are “business critical”? Same thing.
An alternative model you might consider is selling direct to the end user companies and taking a partnership approach to the apps you work with. End users come straight to you for help, you have a list of integrated apps you already support with the required plan/license from that vendor plus custom MCP support and features that don’t need an API, then sell professional services engagements if an end user client wants you to work with one of their vendors to set up a new integrated app. That way you reduce support friction, and your end users are aligned with your buyers.
Software vendors should be providing the platform, including any hard-to-build widgets, and "stock" look-and-feel so that the software is usable out of the box, but then the customers should be able to send their product feature requests directly to a chatbot, whether it is embedded into the platform (i.e. same vendor) or rides on top (i.e. different vendor).
And yes, the LLM safety judge is not in general access right now. Still experimenting, and it is not being used by any customers currently.
The future of this is having a API (with CLI, MCP) and then a SKILL.md file for other system to integrate with it.
Basically like yourapp.com/api/openapi.json and yourapp.com/api/skill.md.
This is the universal integration interface. Any app that wants to expose itself to be used by others to build things on top can do this. AI is the integration layer, avoids the integration hell.
I have tried similar things before. It works.
We use Dart and Go (front/backend) to allow users to render widgets/mini-apps on Maxint (Finsight). And hence, the speed (virtually instant) and overall quality of the output mostly depends on the LLM/inference endpoint that they choose.
In general, most users are happy with the existing features, however more advanced users have a playground to ship enhancements on-the-fly.
Both Apple and Google appeared to be making the contrary bet: define an MCP-like API layer (AppIntents and Appfunctions) that apps can implement so that the platform's agent, or in some cases maybe third-party agents, can manipulate those apps.
That's going to be very attractive by making automations on demand. I like to say agents automate automation. An automatic on demand saw sharpener.
I'm working on a project in which I have created an AppFunctions layer and tested it with the test agent Google provides. It's really pretty magical, weaving together information extracted from the app I'm creating with travel time estimates and information about nearby businesses, for example. Generating that non-trivial example was a piece of cake. The agent got it right on the first try.
The consequence is that there is a whole class of features that would've depended on bespoke integrations, protocols, APIs, inter-app communication, etc. that, not only do I not have to implement, but I should refrain from implementing because the usage patterns are going to rely on agents.