Before Sameroom [1], we spent two years building Kato (<a href="https:&#x2F;&#x2F;kato.im" rel="nofollow">https:&#x2F;&#x2F;kato.im</a>), which became a Slack competitor once Slack launched. We did enjoy a brief pre-Slack honeymoon (at Techstars, no less).<p>For a few reasons, we chose Xamarin to build the Kato mobile apps. The end result was pretty good—great, even, considering the ridiculously tight timeline. We had a pretty elaborate common core with all the hard stuff (networking, caching, protocol, presence, etc), and custom UI code for Android and iOS.<p>In the end, since Kato was to be no more, the real benefit was seeing how much sense it makes to use a strongly-typed, object-oriented language for building complex user interfaces.<p>Many years ago, and for many years, we were C#&#x2F;C++ programmers, so it wasn&#x27;t exactly a revelation. But, we&#x27;d been working for quite some time with dynamically-typed Erlang and dynamically-typed Javascript (the Kato UI was built with Knockout.js).<p>Our server code was fairly straightforward and didn&#x27;t change very much, so Erlang was an excellent choice there. With JavaScript, we&#x27;d programmed our way into some serious debt.<p>When deciding on a stack for Sameroom, we embarked on a quest to replicate the Xamarin experience for the web. We eventually narrowed in on Flux, React, and TypeScript.<p>After some experimentation, we got a development workflow working with gulp, shrinkwrap, make, and no particular IDE (we use Atom, Sublime, and Vim).<p>The biggest crutch was lack of JSX support in TypeScript, so splicing together HTML elements was pretty cumbersome. We viewed this as a temporarly incovenience, which was a good decision—TypeScript 1.6 got React&#x2F;JSX in September 2015 [2].<p>We&#x27;re pretty conservative about adding dependencies, but the overwhelming majority of libraries we do use have TS support available from the DefinitelyTyped project [3]. The few libraries that weren&#x27;t supported (Stripe checkout and Intercom, if memory serves), we TypeScriptified ourselves.<p>As a result, working on the Sameroom UI is absolute joy.<p>It&#x27;s a little ironic that, unlike Kato, Sameroom basically doesn&#x27;t need a UI, since it&#x27;s just marketing copy and an administrative dashboard.<p>[1] <a href="https:&#x2F;&#x2F;sameroom.io&#x2F;blog&#x2F;from-pivot-to-140-paying-customers-in-ten-months&#x2F;" rel="nofollow">https:&#x2F;&#x2F;sameroom.io&#x2F;blog&#x2F;from-pivot-to-140-paying-customers-...</a><p>[2] <a href="http:&#x2F;&#x2F;blogs.msdn.com&#x2F;b&#x2F;typescript&#x2F;archive&#x2F;2015&#x2F;09&#x2F;16&#x2F;announcing-typescript-1-6.aspx" rel="nofollow">http:&#x2F;&#x2F;blogs.msdn.com&#x2F;b&#x2F;typescript&#x2F;archive&#x2F;2015&#x2F;09&#x2F;16&#x2F;announ...</a><p>[3] <a href="https:&#x2F;&#x2F;github.com&#x2F;DefinitelyTyped&#x2F;DefinitelyTyped" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;DefinitelyTyped&#x2F;DefinitelyTyped</a>