[{"data":1,"prerenderedAt":393},["ShallowReactive",2],{"project-48038019":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":43,"post_text":46,"what":47,"said":103,"maker_in_thread":228,"shape":236,"grid":241,"attempts":355,"same_week":356,"maker_shows":38,"maker_hidden":385,"reader_version":386,"card":387},"48038019","Templatical","An open-source email builder, alternative to Beefree\u002FUnlayer","title","Show HN: I built an open-source email builder, alternative to Beefree\u002FUnlayer","https:\u002F\u002Fplay.templatical.com","play.templatical.com","oahmadov",1778084400,2026,169,48,364,4366,9,"notable","productivity","email template builder","library",[24,25,26,27],"email builder","mjml","email template editor","open source email","loved",0.556,{"positive":31,"neutral":32,"mixed":33,"critical":34},16,7,0,2,25,{"execution":37,"idea":39,"docs":40,"design":41,"privacy":42},{"positive":34,"critical":38},1,{"positive":18,"critical":33},{"positive":34,"critical":33},{"positive":38,"critical":33},{"positive":33,"critical":33},[44,33,44,33,44,38,33,33,44,33,45,33,44,33,44,44,44,33,44,44,44,33,45,33,45,33,45,45,33,44,33,44,33,44,44,33,45,33,33,45],5,3,null,{"problem":48,"audience":58,"pricing":65,"motivation":72,"time_to_build":46,"stack":79,"openness":100,"stage":101,"team_size":102},{"value":49,"source":50,"evidence":51},"Marketers need to build HTML emails without code, and hand-written email HTML breaks across clients","maker",[52,55],{"id":53,"by":11,"text":54},"48040642","Thanks — this is exactly the audience I built it for. The cross-client rendering thing is why Templatical outputs MJML instead of raw HTML. MJML was built to abstract all the…",{"id":56,"by":11,"text":57},"48075729","Believe me, writing HTML for email that works for most clients is notoriously hard, no amount of code experience can help with that :) This was exactly the reason I went with…",{"value":59,"source":50,"evidence":60},"Marketing teams and developers embedding email editing in their apps",[61,62],{"id":53,"by":11,"text":54},{"id":63,"by":11,"text":64},"48042996","Amazing to hear :) If you ship your app with it, send a link — happy to feature it on the showcase page. Also, if you have existing HTML-based templates, try the…",{"value":66,"source":50,"evidence":67},"SDK is free and open source; a subscription Cloud version is planned for infrastructure features",[68,69],{"id":53,"by":11,"text":54},{"id":70,"by":11,"text":71},"48039306","No — and this is actually one of the real architectural differences from the closed-source competitors like Beefree and Unlayer. No, this is actually what The SDK is fully…",{"value":73,"source":50,"evidence":74},"Vendor lock-in and high SaaS prices for email builders",[75,76],{"id":53,"by":11,"text":54},{"id":77,"by":11,"text":78},"48039214","Thanks. Honestly, I hadn't heard of Maily until your comment :) Just spent a few minutes with it. Looks like a clean React-first editor. I can't directly compare it with Maily,…",[80,86,90,96],{"value":81,"source":50,"evidence":82},"Vue 3",[83],{"id":84,"by":11,"text":85},"48041739","Thanks. No — built from scratch on Vue 3 + TipTap, no React anywhere. Output is MJML, not the React-component-to-HTML approach React Email takes. Adjacent category but no shared…",{"value":87,"source":50,"evidence":88},"TipTap",[89],{"id":84,"by":11,"text":85},{"value":91,"source":50,"evidence":92},"MJML",[93],{"id":94,"by":11,"text":95},"48041022","Thanks — yes on both, and both already exist today. 1. Custom block extensibility: full. You define a custom block as a schema — typed fields displayed in the editor (text,…",{"value":97,"source":50,"evidence":98},"Liquid templates for custom blocks",[99],{"id":94,"by":11,"text":95},"open_source","beta","unknown",{"praise":104,"objections":147,"requests":159,"questions":171,"alternatives":194},[105,121,136],{"value":106,"source":107,"evidence":108},"Fills a real gap; email builders are hard and SaaS is expensive","commenter",[109,113,117],{"id":110,"by":111,"text":112},"48040402","mushufasa","This is cool! I looked for this in the past. This is the main reason we bothered with mailchimp\u002Fhubspot -- simply the ability for nontechnical marketing people to put together…",{"id":114,"by":115,"text":116},"48040204","rtaylorgarlock","I got you a gold star ;) Excited to use this, as I've been frustrated by vendor lock-in for this exact use case.",{"id":118,"by":119,"text":120},"48042443","acallaghan","This is great, i've been wanting someone to do this for a while, and was tempted to myself",{"value":122,"source":107,"evidence":123},"MJML output is a good choice for cross-client rendering",[124,128,132],{"id":125,"by":126,"text":127},"48040736","shimi1000","Picking MJML as the output format instead of raw HTML is the move. That's the layer where the cross-client pain has already been solved by people more patient than any of us. Two…",{"id":129,"by":130,"text":131},"48046597","artf","As someone who built a similar open source project (grapesjs), this looks really good Even with LLMs, generating raw HTML emails that render correctly across major email clients…",{"id":133,"by":134,"text":135},"48042902","MPiccinato","This looks great! So glad the output is MJML. I will have to see how I can embed it in the project I am working on as I have been wanting to add the feature for clients to build…",{"value":137,"source":107,"evidence":138},"Migration page helps users leave Unlayer",[139,143],{"id":140,"by":141,"text":142},"48045827","isaisabella","The migration page is so good. Being stuck in Unlayer is a real thing, and seeing a clear path out makes this much more tempting to adopt.",{"id":144,"by":145,"text":146},"48044998","recroad","I was thinking this is so nice but too bad I can't use it because I'm so deep into Unlayer. Then I see the the migration page :)",[148,155],{"value":149,"source":107,"evidence":150},"Email rendering still needs testing across clients even with MJML",[151],{"id":152,"by":153,"text":154},"48045639","stefanfisk","Even when using mjml you must do render tests of your templates using litmus or a similar service. Mjml is WAY better than hand rolling templates but there are foot guns to be…",{"value":156,"source":107,"evidence":157},"Sustainability of the project is uncertain",[158],{"id":110,"by":111,"text":112},[160,167],{"value":161,"source":107,"evidence":162},"MCP or API support for managing templates",[163],{"id":164,"by":165,"text":166},"48043875","ksajadi","Looks good! Do you have an MCP or API in your roadmap? The reason: managing a lot of templates and their placeholders can get out of hand pretty quickly and agents can be a good…",{"value":168,"source":107,"evidence":169},"Headless server-side rendering path",[170],{"id":125,"by":126,"text":127},[172,179,190],{"value":173,"source":107,"evidence":174},"Whether data is stored on the maker's server",[175],{"id":176,"by":177,"text":178},"48038970","pratyaksh10","does it store our data persistently on your server\u002Fsystem",{"value":180,"source":107,"evidence":181},"Whether the project was built by hand or with AI",[182,186],{"id":183,"by":184,"text":185},"48051325","trulayer","did you build it yourself or by AI?",{"id":187,"by":188,"text":189},"48078638","gnabgib","Not hand-rolled, since you used AI: https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=48061257",{"value":191,"source":107,"evidence":192},"How extensible custom blocks are",[193],{"id":125,"by":126,"text":127},[195,202,206,210,217,224],{"value":196,"source":107,"evidence":197},"Beefree",[198],{"id":199,"by":200,"text":201},"48038952","mannanj","Hi looks nice. I am in the process of building a email management system for a client with a small coaching base, and decided to go with Maily to integrate with the React and…",{"value":203,"source":107,"evidence":204},"Unlayer",[205],{"id":140,"by":141,"text":142},{"value":207,"source":107,"evidence":208},"Maily",[209],{"id":199,"by":200,"text":201},{"value":211,"source":107,"evidence":212},"GrapesJS",[213],{"id":214,"by":215,"text":216},"48039189","aeagentic","Looks like a grapes fork?",{"value":218,"source":107,"evidence":219},"React Email",[220],{"id":221,"by":222,"text":223},"48041653","RyanZhuuuu","Really cool work. Quick question: is this built on top of React Email?",{"value":225,"source":107,"evidence":226},"Mailchimp",[227],{"id":110,"by":111,"text":112},{"comments":229,"answered":32,"key":230},20,[231,232,235],{"id":94,"text":95},{"id":233,"text":234},"48045240","Thanks for the star :) And yeah — at this stage every star is statistically significant, so anyone reading: appreciated.",{"id":53,"text":54},{"commenters":237,"max_depth":238,"maker_replies":229,"first_comment_mins":239,"lifespan_hours":240},27,4,70,78,[242,244,246,250,252,253,255,257,260,264,266,269,271,273,274,276,278,282,283,284,286,288,291,293,295,297,299,303,305,307,311,313,315,317,318,322,325,326,330,332,336,338,341,343,345,347,349,352],[125,33,44,243,126,33],"maker\u002Fpositive\u002Fexecution",[94,33,33,245,11,38],"project\u002Fneutral\u002Fnone",[247,38,44,248,249,33],"48045176","project\u002Fpositive\u002Fidea","julianeon",[233,38,33,251,11,38],"commenter\u002Fneutral\u002Fnone",[110,34,44,248,111,33],[53,34,33,254,11,38],"project\u002Fpositive\u002Fdesign",[152,34,38,256,153,33],"project\u002Fcritical\u002Fexecution",[258,34,33,259,11,38],"48073578","project\u002Fneutral\u002Fexecution",[261,34,33,262,263,33],"48044345","other\u002Fneutral\u002Fnone","d0100",[129,45,44,265,130,33],"project\u002Fpositive\u002Fexecution",[267,45,33,268,11,38],"48052951","commenter\u002Fpositive\u002Fnone",[270,45,33,251,130,33],"48060564",[199,238,45,272,200,33],"project\u002Fneutral\u002Fidea",[77,238,33,245,11,38],[140,44,44,275,141,33],"project\u002Fpositive\u002Fdocs",[277,44,33,251,11,38],"48047497",[279,280,44,248,281,33],"48064850",6,"FrogHire",[56,280,33,248,11,38],[114,32,44,248,115,33],[133,285,44,248,134,33],8,[63,285,33,287,11,38],"project\u002Fneutral\u002Fdocs",[289,18,44,248,290,33],"48044257","SHaD0S",[292,18,33,254,11,38],"48045225",[118,294,44,248,119,33],10,[144,296,44,275,145,33],11,[298,296,33,251,11,38],"48045074",[300,301,45,287,302,33],"48039268",12,"roh26it",[304,301,33,287,11,38],"48039468",[187,301,38,306,188,33],"maker\u002Fcritical\u002Fnone",[308,309,44,254,310,33],"48051732",13,"popalchemist",[312,309,33,245,11,38],"48060455",[164,314,45,272,165,33],14,[221,316,45,272,222,33],15,[84,316,33,245,11,38],[319,31,44,320,321,33],"48040004","project\u002Fpositive\u002Fnone","eptityri",[176,323,45,324,177,33],17,"project\u002Fneutral\u002Fprivacy",[70,323,33,324,11,38],[327,328,44,248,329,33],"48059294",18,"joinoasis",[331,328,33,251,11,38],"48061134",[333,334,44,248,335,33],"48047799",19,"karangosrani",[337,334,33,251,11,38],"48060457",[339,229,44,320,340,33],"48065774","ksvarma",[342,229,33,251,11,38],"48078595",[214,344,45,272,215,33],21,[346,344,33,272,11,38],"48039360",[348,344,33,262,215,33],"48039658",[350,344,33,351,11,38],"48039816","project\u002Fneutral\u002Fdesign",[183,353,45,354,184,33],22,"maker\u002Fneutral\u002Fnone",[],[357,362,367,371,376,381],{"id":358,"name":359,"points":360,"category":361},"47972511","WhatCable",566,"hardware",{"id":363,"name":364,"points":365,"category":366},"48038257","Hallucinopedia",317,"creative",{"id":368,"name":369,"points":370,"category":366},"48026342","PaletteInspiration",215,{"id":372,"name":373,"points":374,"category":375},"48037724","Tilde.run",205,"dev_tools",{"id":377,"name":378,"points":379,"category":380},"47995037","ml-sharp-web",185,"ai",{"id":382,"name":383,"points":384,"category":380},"47990708","hnup.date",168,false,"v2",{"id":388,"name":5,"line":6,"ai":385,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":389,"top":18,"kw":390,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":391,"url":9,"mix":392,"praise":106,"objection":149,"sub":21},48038019,0.56,[24,25,26,27],"5050510050305055505550303033050505503003",[31,32,33,34],1794036700553]