<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: Martinsos</title><link>https://news.ycombinator.com/user?id=Martinsos</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 25 Jun 2026 21:25:54 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Martinsos" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Martinsos in "Blogging can just be stating the obvious"]]></title><description><![CDATA[
<p>In a meta way, this blog post itself is example of that: sounds obvious that blogging can just be stating the obvious, but I still enjoyed reading it, and it served as a good reminder. I guess part of what makes it feel good is confirmation bias, but it can also be nice to read something that confirms your beliefs especially if the other side(s) are very loud online.
I would also add that it is just expressing oneself, and therefore it is ok for it to be non-original thought: you are not publishing a scientific article, you are expressing your opinion, adding to the general discourse online, making your voice be heard, and also just capturing your thoughts into something concrete.</p>
]]></description><pubDate>Thu, 25 Jun 2026 06:18:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48669673</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=48669673</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48669673</guid></item><item><title><![CDATA[New comment by Martinsos in "[dead]"]]></title><description><![CDATA[
<p>Hey all, Martin here, co-founder of Wasp, a batteries-included full-stack JS/TS framework!<p>A unique thing about Wasp is that we built it around the central "specification" language (DSL) that lets you express the high-level of your app, for which we wrote our own compiler and language server in Haskell. You write 90% of logic in popular web tech (React, Node.js, Prisma), but specify the "full-stack" part of it in the DSL.<p>While we loved the idea of a custom language for optimal ergonomics and declarative nature of it, and had great time building it, we realized with time how hard it is to develop all the tooling around it while also building the framework, and also started getting constrained by its simplicity for some of the new ideas we have developed through time, of where we wanted to take Wasp.<p>So, 5 years since the start (wow feels like 2y), we made a big change: we replaced our custom DSL with the eDSL (embedded DSL, a library) in TypeScript!<p>So Wasp still has its spec(ification), stack-agnostic and standalone (runtime), but now you write it in TypeScript, with all the Turing-complete and side-effect goodiness, which allows things like splitting spec into multiple files, writing helpers, checking env vars, implementing your own file-based routing if you want, ... . And, also enables a lot of exciting stuff we plan to build upon it, like extensible spec, and full-stack modules.<p>For the full-story, please check out the attached blog post I wrote, and I am happy to answer any questions here!</p>
]]></description><pubDate>Mon, 15 Jun 2026 13:50:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48541272</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=48541272</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48541272</guid></item><item><title><![CDATA[Open Vibe: agent tutors you as you vibe code your SaaS app]]></title><description><![CDATA[
<p>Article URL: <a href="https://wasp.sh/blog/2026/04/29/introducing-open-vibe">https://wasp.sh/blog/2026/04/29/introducing-open-vibe</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48035573">https://news.ycombinator.com/item?id=48035573</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 06 May 2026 12:44:58 +0000</pubDate><link>https://wasp.sh/blog/2026/04/29/introducing-open-vibe</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=48035573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48035573</guid></item><item><title><![CDATA[New comment by Martinsos in "I moved my blog from Jekyll to Emacs Lisp"]]></title><description><![CDATA[
<p>Glad to hear, let me know if you will have any feedback :)!</p>
]]></description><pubDate>Sat, 02 May 2026 21:25:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47990709</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=47990709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47990709</guid></item><item><title><![CDATA[New comment by Martinsos in "I moved my blog from Jekyll to Emacs Lisp"]]></title><description><![CDATA[
<p>I started working on this a couple of months ago in the spare time and have finally gotten it to the state where I am ready to pronounce it done! It was great fun and I love the result, I hope you find it interesting. Would also love any feedback on what I could do better. Thanks!</p>
]]></description><pubDate>Sat, 02 May 2026 15:17:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47987154</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=47987154</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47987154</guid></item><item><title><![CDATA[I moved my blog from Jekyll to Emacs Lisp]]></title><description><![CDATA[
<p>Article URL: <a href="https://martinsos.com/posts/my-blog-in-elisp">https://martinsos.com/posts/my-blog-in-elisp</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47987153">https://news.ycombinator.com/item?id=47987153</a></p>
<p>Points: 28</p>
<p># Comments: 3</p>
]]></description><pubDate>Sat, 02 May 2026 15:17:06 +0000</pubDate><link>https://martinsos.com/posts/my-blog-in-elisp</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=47987153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47987153</guid></item><item><title><![CDATA[New comment by Martinsos in "Comparison of two frameworks: 4.0M vs. 2.5M tokens for the same app"]]></title><description><![CDATA[
<p>Martin from Wasp here -> you are right that we kind of went overly into DSL, we are actually switching it to TS at the moment (experimental version already out for some time but now making it the main way to use Wasp), but not because of the AI, instead because we found it was too hard to maintain and develop. We thought custom ergonomics of it will be worth it, but turned out we didn't get much on that side, while we lost a lot by not using existing ecosystem of well known language.<p>Btw, AI actually works great for it. I am sure part is that the Wasp's DSL exists for some time now, but it actually worked well for the very start, because the DSL was quite simple (similar to JSON) and AI knows how to generalize very well.<p>So I wouldn't discourage people from writing DSLs because of AI -> AI can understand them very well -> but for the reasons of missing out on all of the benefits of using a strong host language and doing it as an embedded DSL in it. If you are doing your own, completely standalone DSL, you will need to implement a compiler, editor extensions, LSP, maybe module system if you need it, maybe package system/manager if you need it, ... . Although when I think about it, that is also easier now with AI, than it was before! Hm yeah actually maybe custom DSLs are a good idea these days, with AI doing most of the job for you. I still wouldn't go back to custom DSL for Wasp however because biggest thing for us is probably familiarity -> custom DSL just scares people off.</p>
]]></description><pubDate>Fri, 27 Mar 2026 15:31:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47543944</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=47543944</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47543944</guid></item><item><title><![CDATA[Comparison of two frameworks: 4.0M vs. 2.5M tokens for the same app]]></title><description><![CDATA[
<p>Article URL: <a href="https://wasp.sh/blog/2026/03/26/nextjs-vs-wasp-40-percent-less-tokens-same-app">https://wasp.sh/blog/2026/03/26/nextjs-vs-wasp-40-percent-less-tokens-same-app</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47540823">https://news.ycombinator.com/item?id=47540823</a></p>
<p>Points: 2</p>
<p># Comments: 4</p>
]]></description><pubDate>Fri, 27 Mar 2026 10:08:30 +0000</pubDate><link>https://wasp.sh/blog/2026/03/26/nextjs-vs-wasp-40-percent-less-tokens-same-app</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=47540823</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47540823</guid></item><item><title><![CDATA[New comment by Martinsos in "How we rebuilt Next.js with AI in one week"]]></title><description><![CDATA[
<p>Shilling a bit but maybe check out wasp.sh, we are conceptually very similar to "Rails for JS"! Just don't tell Claude to completely copy us hehe (pls)</p>
]]></description><pubDate>Wed, 25 Feb 2026 08:32:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47148896</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=47148896</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47148896</guid></item><item><title><![CDATA[New comment by Martinsos in "The One-Person Framework in Practice"]]></title><description><![CDATA[
<p>Wasp! Still in Beta, but aiming for that RoR / Laravel DX, in JS.</p>
]]></description><pubDate>Tue, 29 Apr 2025 10:03:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=43830583</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=43830583</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43830583</guid></item><item><title><![CDATA[The Importance of Naming in Programming]]></title><description><![CDATA[
<p>Article URL: <a href="https://wasp.sh/blog/2023/10/12/on-importance-of-naming-in-programming">https://wasp.sh/blog/2023/10/12/on-importance-of-naming-in-programming</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43364929">https://news.ycombinator.com/item?id=43364929</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 14 Mar 2025 17:33:10 +0000</pubDate><link>https://wasp.sh/blog/2023/10/12/on-importance-of-naming-in-programming</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=43364929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43364929</guid></item><item><title><![CDATA[On Importance of Naming in Programming]]></title><description><![CDATA[
<p>Article URL: <a href="https://wasp-lang.dev/blog/2023/10/12/on-importance-of-naming-in-programming">https://wasp-lang.dev/blog/2023/10/12/on-importance-of-naming-in-programming</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=37856419">https://news.ycombinator.com/item?id=37856419</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Thu, 12 Oct 2023 12:46:36 +0000</pubDate><link>https://wasp-lang.dev/blog/2023/10/12/on-importance-of-naming-in-programming</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=37856419</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37856419</guid></item><item><title><![CDATA[New comment by Martinsos in "Rust vs. Haskell"]]></title><description><![CDATA[
<p>I can confirm this! We had no problem getting a very decent number of applications for Haskell position, both from very experienced Haskell devs, and from junior Haskell devs, all very motivated.<p>As for getting somebody on-board -> we hired a couple senior / intermediate devs that had no or introductory knowledge of Haskell, and all of them so far got up to speed in a month or so, while not learning exclusively Haskell but also the rest of the codebase at the same time, so normal learning process in the new company. So I wouldn't say at all that learning Haskell for them was an issue, but I am certain that big factor here was that they are generally experienced in other languages. That said, we do keep our codebase pretty tidy and simple (no super crazy Haskell features).</p>
]]></description><pubDate>Tue, 14 Feb 2023 16:37:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=34791867</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=34791867</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34791867</guid></item><item><title><![CDATA[New comment by Martinsos in "Rust vs. Haskell"]]></title><description><![CDATA[
<p>And shellcheck!</p>
]]></description><pubDate>Tue, 14 Feb 2023 16:31:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=34791778</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=34791778</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34791778</guid></item><item><title><![CDATA[New comment by Martinsos in "Rust vs. Haskell"]]></title><description><![CDATA[
<p>I know it is common to think that Haskell is used only in academia and side/weird-projects, but there is a decent amount of companies using Haskell - e.g. we use Haskell in production for developing a DSL / web framework for building web apps (<a href="https://github.com/wasp-lang/wasp">https://github.com/wasp-lang/wasp</a>)!<p>I participated teaching students Haskell on my alma mater this year and "what can Haskell be used for" was a common question, with genuine expectation that the answer will be it is limited to only specific use cases. I would answer that it can be used anywhere where languages like Java, C#, Go, and similar can be used -> it is a general programming language that uses garbage collector! And while somewhat harder to learn due to abstractions that we are all not used to, it is a delight to express business logic in it once you get to know it well.<p>The biggest factor for deciding if Haskell is a good fit for the problem is probably ecosystem support -> are there enough libraries and tools to support efficient development in a specific problem domain. In our case, we are building a compiler/transpiler, and Haskell is well-known for great support in that area, so it was a no-brainer. We were actually also considering Rust, but we just had no need for that level of memory control and rather decided to go with language where we don't have to think about that (Haskell).</p>
]]></description><pubDate>Tue, 14 Feb 2023 14:06:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=34789411</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=34789411</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34789411</guid></item><item><title><![CDATA[New comment by Martinsos in "Show HN: Wasp – DSL/framework for building full-stack web apps – now in beta"]]></title><description><![CDATA[
<p>And installer tells you where it installed it!</p>
]]></description><pubDate>Fri, 09 Dec 2022 14:39:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=33921637</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=33921637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33921637</guid></item><item><title><![CDATA[New comment by Martinsos in "Show HN: Wasp – DSL/framework for building full-stack web apps – now in beta"]]></title><description><![CDATA[
<p>Our compiler is split into Analyzer which produces AppSpec, which is the central intermediate representation, and then Generator, that based on AppSpec produces the react / node web app.<p>So yes, you could use just Analyzer to produce AppSpec, and then write your own generator that will based on that AppSpec generate your own code!
AppSpec currently exists only as Haskell in-memory data structure, but it could be relatively easy serialized via JSON and then imported in some other language.<p>You can see more about this in this README, there is a nice diagram showing parts of compiler (Analyzer, AppSpec, Generator): <a href="https://github.com/wasp-lang/wasp/tree/main/waspc#readme" rel="nofollow">https://github.com/wasp-lang/wasp/tree/main/waspc#readme</a> .<p>The reason why we already ensured this split was because the plan is in the future to have multiple different Generators, and also to allow users to write either their whole Generators or plugins that modify AST (AppSpec).
We haven't explored this further yet, and probably won't push much in this direction until we get to Wasp 1.0, but we certainly want to work on it more in the future!</p>
]]></description><pubDate>Fri, 09 Dec 2022 14:38:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=33921621</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=33921621</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33921621</guid></item><item><title><![CDATA[Permissions (access control) in web apps]]></title><description><![CDATA[
<p>Article URL: <a href="https://wasp-lang.dev/blog/2022/11/29/permissions-in-web-apps">https://wasp-lang.dev/blog/2022/11/29/permissions-in-web-apps</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=33804475">https://news.ycombinator.com/item?id=33804475</a></p>
<p>Points: 6</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 30 Nov 2022 17:45:52 +0000</pubDate><link>https://wasp-lang.dev/blog/2022/11/29/permissions-in-web-apps</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=33804475</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33804475</guid></item><item><title><![CDATA[We picked PrismaJS as a database layer for our full-stack JavaScript framework]]></title><description><![CDATA[
<p>Article URL: <a href="https://wasp-lang.dev/blog/2022/11/28/why-we-chose-prisma">https://wasp-lang.dev/blog/2022/11/28/why-we-chose-prisma</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=33774996">https://news.ycombinator.com/item?id=33774996</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 28 Nov 2022 15:46:12 +0000</pubDate><link>https://wasp-lang.dev/blog/2022/11/28/why-we-chose-prisma</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=33774996</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33774996</guid></item><item><title><![CDATA[Let's reason about client-server state management in web apps]]></title><description><![CDATA[
<p>I am developing an open-source web app DSL/framework and I would like to find the best abstraction for the client-server state management (SPA + API server, what we use Redux, MobX, Apollo and similar for).<p>The fact that it is a DSL gives me a lot of freedom to implement whatever might be the best solution, so I am trying to think about it from the ground up.<p>Below are my thoughts so far, to start the discussion - I would love to hear yours!<p>1. Where is complexity coming from?<p>The problem arised with SPAs because UI logic moved from the server to the client, while server remains the source of the data. Therefore, we are sending more data over the network, and we have to be smart about what we fetch, and we need to cache it -> so complexity happens there.<p>2. Solutions: Implicit vs explicit cache<p>Implicit (Apollo, react-query): focus on operations, cache is implementation detail.
Explicit (Redux, MobX): focus on the cache which you have to explicitly model.<p>3. RPC + meta data as a core solution?<p>Insight #1 -> Before the SPAs, we were dealing with the data via just logic on the server -> function calls.<p>Insight #2 -> Implicit cache solutions are becoming more popular than explicit ones -> operations > cache ~> functions.<p>So, currently best solutions seem to be converging toward how it was in the past, before the problem ever arised.
Can we abstract the client-server state management to again feel like just calling functions?<p>If so, some form of RPC might be the solution. However we can't just ignore additional complexity, but maybe we can solve that by adding some meta-data to our functions, and that is it? It sounds true to the core problem and relatively simple.<p>This is somewhat abstract, here is how I implemented this specifically in the DSL for now: https://wasp-lang.dev/docs/language/basic-elements#queries-and-actions-aka-operations .<p>This is it shortly, let me know how you see it!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=26401748">https://news.ycombinator.com/item?id=26401748</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 09 Mar 2021 18:20:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=26401748</link><dc:creator>Martinsos</dc:creator><comments>https://news.ycombinator.com/item?id=26401748</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26401748</guid></item></channel></rss>