Launch HN: Pagedraw (YC W18) – Compile UI Mockups to React Code

344 points by jpochtar ↗ HN
Hi HN! We're Jared and Gabe (YC W18), the founders of Pagedraw (https://pagedraw.io). Pagedraw is a UI builder that turns mockups into React code.

Pagedraw lets you annotate mockups with extra information (like how to connect to the backend, resize for different screens, etc.) to get full, presentational, React Components. They’re React Components just like any others, so they can be interleaved freely with handwritten ones. They don’t require any new dependencies and work well with any existing JSX build system.

You can import the mockups from Sketch or Figma, or draw them from scratch in Pagedraw.

Working as full stack devs, we constantly had to do this translation by hand. It was our least favorite part of our jobs, since the creative work had already been done by the mockup designer. It's so repetitive and mechanical that we decided to stop hand-coding divs and css and write a program to do it instead.

There have been many attempts to automate this stuff in the past. For 20 years, people have been trying to solve the problem with tools like Dreamweaver, Frontpage, and so on. Broadly speaking, they tended to fall into one of two buckets, each with their own problems. In one corner are tools like Dreamweaver, which can produce correct code but have to expose some of the underlying HTML model, making their users play a puzzle game to do something as simple as move an object around. In the other corner are freeform design tools that generate position:absolute code. That doesn’t work if you care about working on different screen sizes, or reflowing the layout around variable-length content as simple as “hello <username>”.

We think the problem is that you have to look at it like a compiler. Past tools never fully worked because they tried to unify two fundamentally different mental models: the designer’s mental model of a free form canvas like Sketch or Photoshop, and the DOM’s mental model of <div> followed by a <p> followed by an <img> and so on. What always happens is one of two things: either the computer’s mental model is imposed on the designer, or the designer’s mental model is imposed on the computer. The former results in a clunky design tool, and the latter results in position:absolute.

What we do instead is recognize that these are two fundamentally different models. Designers work with Sketch by saying “put this button at this pixel”. We can let them do that and still generate flexbox code without positon:absolute, and let everything resize and reflow correctly. Pagedraw does it by inferring constraints from the relative geometries in the mockup. For example, if object A is to the right of object B, we infer it should always remain to the right, regardless of resizing or content reflowing. Sometimes, the developer does have to ask the designer about their intent regarding resizing, which is why Pagedraw also needs you to annotate that information. We then compile those constraints, inferred and annotated, into HTML layout mechanisms like inline-block and flexbox.

It turns out that a lot of other nice things follow from a compiler-like architecture. For one, we separate codegen correctness from codegen prettiness by cleaning up the generated code in discrete optimization passes. Another is the ability to easily retarget for AngularJS, Backbone, React Native, and so on by just swapping the compiler backend. We even have some nice editor features that fell out from hacking a Lispy interpreter onto our internal representation.

We’re excited to see what you all think and hear about your experiences in this area! You can try it at https://pagedraw.io/

124 comments

[ 3.2 ms ] story [ 198 ms ] thread
Really awesome idea! Excited to try this out.

> Working as full stack devs, we constantly had to do this translation by hand. It was our least favorite part of our jobs, since the creative work had already been done by the mockup designer. It's so repetitive and mechanical that we decided to stop hand-coding divs and css and write a program to do it instead

This is definitely repetitive and annoying, just to add another data point to your own. I think people fundamentally want excellent WYSIWYG tools, it's just that the implementation leaves a lot to be desired usually (e.g. Frontpage). Really glad to see someone take another swing at this.

Quick nitpick: One of the links on your homepage ("Learn more") is broken (https://documentation.pagedraw.io/worfklow, looks like it's missing a trailing slash)

Thanks! Just fixed the link :)
Sounds phenomenal - hopefully you can spin up a few more servers so the home page will load under all this interest :)

UPDATE: the tutorials just loaded... looks AMAZING!

Doesn't work on Firefox
Also doesn't work on Safari. The "error" message tells you to use Chrome instead (or ask for an app download).
Safari doesn't support fancy pants features like telling which mouse button is held down (event.buttons on MouseMove, works everywhere else since IE9), which makes it a total pain in the behind for any kind of drawing app.

If I could drop support for it completely I would open up a bottle of champagne. It truly is the new IE of the web.

Exactly... But curiously Chrome is receiving all the hate instead...
This was tough for us, because we're big believers in the standards-based web. We 100% promise that all the code we generate works across all browsers.

Unfortunately, while most of the editor works in all browsers, getting full support is really hard. We're doing a lot of things that get pretty deep in the browser, so we wanted to lock things down as much as possible.

We almost were electron-only to ensure consistency, and can still give you the electron app today. We felt it was better to launch with Chrome + Electron than just Electron for an optional installation-free experience, which is why we only support Chrome.

I'm personally really sorry as an engineer that we don't support Firefox, Safari, and other browsers yet. It's on our roadmap :)

As a basically-everything-except-Chrome user, I'm increasingly skeptical of excuses this. There's almost certainly some feature(s) that you've spent a lot of time on that provide less value than having the app working in Firefox and Safari.

As soon as I saw it was Chrome only, I closed out.

On the other hand think of it from their perspective if you want your odds of success to be higher you have to focus on the biggest user base, simple 80/20. I doubt that an additional feature vs friefox support is a fair comparison.
As someone who also made this difficult decision to launch a product with only Chrome support: don’t feel bad, and don’t feel responsible for haters. Supporting other browsers, even those that are standards compliant, is a nefarious class of technical debt: from verifying scrollbar sizing to performance degradations, you add a tremendous amount of overhead to ongoing QA - especially important when you have a small team without dedicated QA resources or processes, and a clientele with an eye towards aesthetic detail. We owe it to our respective missions to focus on what matters.

For my part, I look forward to trying the product!

> We 100% promise that all the code we generate works across all browsers.

By supporting only Chrome, you're showing that you consider Firefox/Safari/Edge as second class citizens, making it harder to trust that you will keep supporting non-Chrome browsers in your generated code.

Doesn't work on Edge, Firefox, or even Safari. I am sorry, your first sentence "big believers in standards" is just a lie. It is just developer laziness for supporting non standard stuff and doing User Agent sniffing.

Rule #1 is do feature detection not user agent detection. What are you doing that is "pretty deep in the browser"? NaCL? Experimental Chrome features?

Typescript support? (Please)
It's there! The main demo link goes to a simplified version of Pagedraw for the walkthrough, but if you sign in and use the full version from https://documentation.pagedraw.io/install/, you can choose between JSX, CoffeeScript, Javascript (React.createElement), and Typescript!

It's the same mechanism we'll use later to let you choose between React, Angular, React Native, ERB, etc.

I work at a shop that has to turn around a lot of simple SPAs very quickly, and a tool like this, if it works as advertised, could be a godsend. I will definitely be trying this out at some point in the next few days.
Awesome! Email us at team@pagedraw.io if you have any questions. Excited to see how it turns out for your SPAs.
I created a text field, deleted it, and added another ending up with a slightly mis-defined UI element.

The name in the UI is Text 4, the prop is text3 and the css class is text_4.

That said, I’m totally in love. Can I just ask for Typescript generation, please? (UPDATE: My god it’s already there in the full version - Thank you!)

We're working on simplifying the common case usage for props, but they are complicated right now because we're going for giving you the full flexibility of React. What that means for us is that props have 2 parts: their definition and their usage. Go into the CODE tab of the sidebar and you'll see the prop definitions on top and the usages below. When you create a new binding by clicking "make dynamic", we automatically create both a definition and a usage for you. We don't do a great job of keeping the names in sync because we expect you'll rename the prop (and update the usage).

https://documentation.pagedraw.io/data-binding/

I’ve installed the pagedraw-cli app but am getting crashes because my project is on the D:/ drive and it’s inheriting the drive specifier and looking for my C:/users folder under D:/users. Super excited to go deeper with this.
Thanks to PageDraw crew for helping with this... looks like it’s a bug in the upstream netrc package used for persisting user credentials locally. Workaround for now is to copy your project to the C:/ when playing with the command-line version of pagedraw.
Why don't you support Firefox?

> You can import the mockups from Sketch or Figma

How do I import Figma designs? I tried the Sketch import, doesn't work through that.

Excited to use this. Congrats on your launch.

We haven't launched the Figma integration yet, (it's behind a config flag,) but it's coming soon! Sketch should be working today. Could you email us at team@pagedraw.io if it's not?
Is Vue support planned?
yes, depending on demand. Get your friends / coworkers to message us if they need it too
I second this, mainly because the Angular to Vue transition is more straightforward than going completely to React, so would be of more immediate help to more people.

Also I think that Vue is arguably more straightforward than React in the minimal model-view one-way binding use case. Whereas React is a subset of the more general functional reactive programming model and will probably be outpaced at some point with something language-agnostic.

React-Native-Web plz :D
Congrats on the launch guys! Really excited to play around with this.
Cool! Let us know what you think =)
Have you fully consider the Designer's side of this? I feel that to be successful and bridge the gaps between those two mental models you also need to onboard the designers so they can help with generating the right type of mockup (or at least the kind that will help a developer using Pagedraw get the closest to a 1 to 1 code export).

The reason why I ask is that I tried importing several semi-complex but not uncommon (structure wise) files and I got an error saying that I should make sure that the file is correctly formed.

That right away is bad UX. If the designers need to reformat or change the behavior of their files, then they need to be part of the user journey. Right now there's nothing of that as far as I can tell.

Pagedraw doesn't impose any organizational requirements on your Sketch files! You're right that requiring certain structures is bad UX; we agree and care deeply about following that principle. The incorrect file formatting error means we don't recognize your upload as a Sketch file at all.

Probably a bug on our side. Could you try emailing the Sketch file to team@pagedraw.io and we'll see if we can debug it?

Cool. I can't really send it because I'll be violating the infosec policy of my company (I was already violating it trying to upload it, lol)...

I feel that eventually, you will need to set a certain standard. Not because is required on your side, but because this is how every designer/developer relationship should work. People just don't know how to do it because there's no standard or methodology. Think how horrible would be if developers didn't have Git to collaborate... Well, that's basically the state of developer-designer collaboration. I think with this product you guys are in a good position to help solve this problem.

> Sorry, our editor is optimized for Chrome

Internet Explorer all over again. ‍️

And inevitable considering the pace of technology. Nothing is perfect, and IMO, its best to just get on the with it.
If you just get on with it, you're contributing to make Chrome a monopoly, and that will in turn slow down the pace of technology. Google/Chrome won't act differently from Microsoft/IE6. There's no reason to invest in improving a browser if there's no one left to compete against you.
Worst thing is it all seems to work fine in Safari as soon as I change my user agent string to Chrome, so it doesn't even seem to using any Chrome specific features…
A highly specialized Web app doesn’t need to support more than one browser. If you’re a Firefox user, consider it as though it said “please download the Spotify app to use our service on your machine.”
Then why is it a web app? What happened to open standards? Why not just make it a standalone application, following your logic?
You’re right, it’s not a web app. It is a stand-alone application built on top of Chrome the way that other apps are built on Qt or WPF.
Right, and I'm saying I fundamentally disagree with this vendor-locking approach. Qt doesn't lock me into a particular environment and is cross-platform. It's a view framework, not an entire browser. Huge difference.
If your product is useful enough people will install what they need to, like Photoshop and Excel.
I agree also its an early iteration of the product. I think you would prefer to get a working version out there earlier and get feedback about the product rather than wait a month and get it right in every browser.
Hey sorry about that! Could an Electron app work for you instead? We have some betas at https://documentation.pagedraw.io/electron/
My Mac won't open it, is it because I need to change some preference or because its an unregistered app?
You can open it by right-clicking and then clicking "Open" instead of the regular double click, because it's an unregistered app.
(comment deleted)
Yup and closed tab. Either make your product work in the major browsers or don't make it at all. Not acceptable here.
>> Either make your product work in the major browsers or don't make it at all. Not acceptable here.

I don't agree. Especially for a startup trying to get an MVP out the door.

If your product is aimed at a technically oriented audience then its a reasonable assumption that they have Chrome installed.

That is how the IE only path started, getting MVP out of the door by supporting IE 5.
Those are the same arguments that Microsoft attempted to make as IE was pushed to the masses, and that was a disaster for the web and everyone involved.

If you don't learn the history of technology, you will be doomed to repeat it.

This is very cool and a very tricky problem to solve. Will you support webcomponents one day? Also, please hire a designer :)
Looks really cool! If it actually generate nice code, it will be awesome! I’m gonna play with it this weekend!

How does it work with CSS?

You never have to write CSS for a Pagedraw generated component. If you must use custom css, you can mark a block in Pagedraw as a handwritten component coming from a designated file. In that component (done entirely by hand, outside Pagedraw), you can of course use whatever CSS you want. Pagedrawn components and handwritten components play nicely together; the CSS we generate shouldn't interfere at all with the CSS you write by hand for non-Pagedraw components.
How does it work with incremental Sketch imports?

I often get a new version of a sketch file now and then and would need to import that new version while keeping/updating the old components I already have

You can keep working on your Sketch file after importing it into Pagedraw. Subsequent uploads will merge your changes in Sketch with your edits in Pagedraw.

We're pretty proud of the mechanism (it fell out almost for free from our live collaboration mechanism!) and will almost certainly blog about it when we have time.

https://documentation.pagedraw.io/sketch/#bring-in-future-in...

Looks really nice.

Can I get this on my desktop? (In other words: Can I work on this from a plane?)

I don't see anything about pricing in there, so using a web service (and having to log in...) to use this, I'm not super happy about. Balsamiq has a good system: They have both a desktop and a web version, let you import/export between the two, and charge you for licenses and online storage.

[edit: And furthermore, if you do a desktop version, you can also do it as a vscode extension, that'd be super cool]

I'm a designer, so definitely interested in this. But I got a 'Sorry, our editor is optimised for Chrome' message.

I'm using the latest version of Firefox... what features does Chrome have that FF hasn't?

I get it's early stage, so you might have just done a blanket 'If not Chrome show message' check.

If the latest version of FF can support, I would do a more fine grained check.

Will check with Chrome later...

From the site: "Pagedraw generates code guaranteed to work correctly and in all browsers".

So luckily they can fix this issue by re-generating their site, using their site.

Actually, yes! All the parts of our site which are made in Pagedraw are fully cross-browser supported. That includes our landing page, dashboard, and parts of our editor.

Based on the feedback in this thread we're going to bump up the priority of this concern. Getting this kind of feedback is why we're doing this launch thread, so we really appreciate it.

I will sound harsh but I'm really curious so I have to ask:

- What was the thinking behind supporting only Chrome?

- For a tool that support cross-browser, wouldn't it expected that tool itself runs on multiple browsers?

- Is it really reasonable not to spend time to support multiple browsers and have let possible first adapters to have bad taste with the product ?

I just tried spoofing my user-agent with Firefox, editor and preview worked but the designer was pretty broken. It seems Firefox and Chrome still have slightly different ideas about how layout is supposed to work, would be curious to hear what the differences are.

Super excited for the Figma + React-native support, I think ~20% of my time this past month was converting our designer's figma sketches into react native!

We had a good conversation about this before down at https://news.ycombinator.com/item?id=16468276.

tl;dr: would you like the Electron app instead? It's available at https://documentation.pagedraw.io/electron/

It was tough for us, because we're big believers in the standards-based web. We 100% promise that all the code we generate works across all browsers.

Our editor was almost electron-only, but felt it was better to launch with Chrome + Electron than just Electron. Our editor isn't a normal webpage; it's doing all kinds of crazy nonstandard things webpages shouldn't do. It's only in the browser at all so we can re-use a web engine as our editor's rendering engine, since we occasionally show you snippets of compiled code.

I'm personally really sorry as an engineer that we don't support Firefox, Safari, and other browsers yet. It's on our roadmap :)

Do you mind sharing some of the primary reasons this is required by your editor?

>all kinds of crazy nonstandard things webpages shouldn't do

- until recently, there wasn't a universal cross-browser API for pinch zoom support. Not sure if that's still the case.

- we do a lot of work with the selection/focus browser API, which doesn't always work the same / have the same APIs

- until recently, Firefox had a different opinion about where an outline should go wrt positon:absolute children

...and what seems like a million more little things. We decided it was more practical to do Chrome + Electron (basically the same) than try to cover every browser where the standards don't exist or aren't met, since we're touching a lot of surface area and weird corners of the browser.

Thanks. I think it’s a good decision, it seems like a classic example of needing to recognize sometimes going against conventional wisdom makes the most sense given particular circumstances, like gaining critical mass in a start up. As to where the right decision might be different for a later stage company.
Hey thanks for explaining and like I said - I get it's early stage - was just curious what was missing in FF.

Anyway, will try out the Electron version and definitely be keeping an eye on this one...

Very cool! I particularly like the integration between the web app and the CLI. That seems like a clever way to solve the "browser sandbox border" problem between projects that are edited in the browser yet need to be represented in the file system constantly.

I've worked on React Studio (https://reactstudio.com), which is pretty similar. We also used the compiler metaphor to describe it. The original codegen targets were iOS + Obj-C and Android + Java, and later we built Tizen + C (at a customer's request on their bill) and then React + JS in an attempt to reach a larger audience through a free app. My regret is that we ended up with a sprawling native Mac codebase at a time when a lightweight cloud solution would be more suitable for the average interested potential customer. Oh well. It seemed like the right choice back when generating Xcode projects was the target...

If you don't mind the question, what's your monetization strategy? Right now Pagedraw looks to be completely free, and that's where we ended up with React Studio too. Business-wise, the only thing that's sort of worked for React Studio has been to make customized enterprise editions for large customers. I'm curious if you have something in mind that doesn't involve enterprise sales hell :)

This is awesome I hope a company like Webflow considers buying you out or building something similar.
I am impressed, but it really needs to be portable across all major browsers.
I'm a Pagedraw customer, and I'm really excited to see their HN launch! Congratulations, team! :)
I think this is cool, but ultimately I think the dream of developing bespoke applications without having to code will be just that ... at least until the singularity occurs and artificial life forms take over the job of building APIs and presentation layers.

Having said that, this looks like it could provide a great starting point for development.

Do you see this product as a tool for developers or a tool for designers to publish their creations directly to the web?

Yes! I completely agree. Thanks for posting this, it needs to be brought up in any conversation about code-free tools.

Pagedraw is not a code free tool. It never will be. I don't think it's possible either.

Programming needs to happen in language. Even if you did something like Scratch, (to which I prefer typing,) you still need the arbitrary constructs of language in order to express whatever you want.

Pagedraw is not programming, which only works because we don't really think HTML and CSS are either.

You will absolutely still need to write code to make novel algorithms and custom business logic until the AGI revolution comes. Pagedraw is meant to be used side by side with code implementing the business logic, state management, and anything else novel about your app. Pagedraw will take over more and more of the non-turing complete parts.

Today, with Pagedraw you write state management and API code just like you did before.

> Do you see this product as a tool for developers or a tool for designers to publish their creations directly to the web?

Yes. Both, eventually :) Today the product is a strict replacement for HTML and CSS, so it's something a developer would use to bring designs into production after the designer's done with them.

> Pagedraw is not programming, which only works because we don't really think HTML and CSS are either.

I'd beg to differ; I don't think the scenario is as clear cut as you suggest, because there are a huge number of ways of developing FE for a design. Lots of compromises inevitably need to be made, and lots of choices need to be taken.

Humans are great at filtering and choosing based on experience, instinct and an understanding of industry norms / best practice .. and are able to continuously update their 'mental model' of the options available.

Having said that, tools that help to take the repetitive strain out of developing for FE are a great idea. I just wouldn't look to such a tool as a panacea.

The robo dog asking me if I know John Connor is giving me bad vibes. I do like what I see. I don't understand the demo though what am I supposed to do?
Hah! I didn't even know we had Terminator quotes in there. Our adorable little Pagedog's inspired by a different... uh... buuuurp.. uh, high concept, sci-fi comedy universe ;)

Did you get to https://pagedraw.io/tutorials/basics? It's the button in the first section that says "Continue to demo"

Yeah I did. I like it. I just can't afford the 2k a month price :( I wish there was a yearly individual license for say 75$/month
>> Another is the ability to easily retarget for AngularJS, Backbone, React Native, and so on by just swapping the compiler backend.

I couldn't find any reference to this in your documentation. Exactly how easy and/or do you have any samples projects I can check out? ReactNative would be my primary use and I assume alot of other potential users as well.

Right now our compiler has 4 different targets: JSX, CoffeeScript, Javascript (React.createElement), and Typescript. Support for React Native, Angular, and others is coming soon.
You talk a lot about the compiler backend. Suppose we use a different UI library other than the big ones like React and Angular. How can I plug in my custom backend ?

Do you have plans to open source the backend ? So devs over time can make it even smarter for all sorts of use cases ?

Open source and profitable are orthogonal things. You can still be profitable and build a solid product with a raving community.

Definitely! I'm glad to see this is on other people's minds :)

We're huge on backwards compatibility (and think everyone should be), which is why we don't want to expose something we haven't stabilized yet. We'll have a way to export our just-before-codegen internal representation (shame on me for forgetting the PL term) once it settles down a bit. It's very much like a DOM, so there's not too much craziness there.

We'll be launching a bunch more backends in the coming weeks, so there's a good chance we'll have first-party support for your favorite framework anyway :)

Will be definitely be looking out for it.

This is a great first minimum delightful product. Good job.