Show HN: A Visual IDE for React (dev.aspect.app)

479 points by tscepo ↗ HN
I made this because building UIs in a lexical medium like code is super annoying. I have to pre-render what I’m making in my head, and then jump between the browser and IDE to test. I was inspired by the developer console in chrome and safari since I end up editing css there because it’s ironically more convenient. Hope it’s useful!

147 comments

[ 2.8 ms ] story [ 173 ms ] thread
(comment deleted)
Thanks for submitting this it was interesting to see. Is this an old project because the video example uses React Classes rather than functional components and hooks.
Ah I used React classes out of habit—will update the exporter to output hooks instead. Thanks for the heads up!
Since you already have an exporter that produces class-style React components, it seems like it would be nice to have the option of class or functional components. I've worked on projects with strictly class-based components, strictly functional components, and a mix of both. Would certainly be nice to be able to select between the two flavours of exported components, and would make it easier to sell the decision to use Aspect-designed components in more codebases!

(Our reasons for preferring one flavour or another usually depends on some combination of legacy-ness of the project (older -> prefer class components for consistency), complexity (simpler -> prefer functional components), and experience of the team (more junior -> prefer functional). YMMV, etc.)

The video doesn't work

{ "error": { "code": 402, "message": "Quota has been exceeded for this project. Please visit the Firebase pricing page to learn more." } }

Ah thanks for the heads up, just fixed!
Best kind of error message.
Seems interesting. As a note, I am not able to view the video on an iPad. (Not complaining. Just FYI.)
I'm seeing a MIME type not supported for the video on Android Firefox
As someone who doesn't like to watch videos, i'd have loved some text content on this or any page explaining the proposition
Got it, added some explanatory copy. Accompanying image examples following soon.
This is a really cool idea. I'm not super into React, so take it with a grain of salt when i say I'm surprised I haven't seen something like this sooner. :)
Is it really that tough to Cmd+Tab then Cmd+R?

All jokes aside, good job. Creating tools to solve problems is always fun.

I even have the browser and code on the monitor at the same time. And with pretty much all modern web frameworks you have a dev server that automatically does hot module replacement, so you instantly see your changes without reloading anything yourself.
I've never seen a hot reload that worked fast enough to not be annoying.

React does it all quickly when all it's re processing is css but anything js related and it seems not to be able to treeshake down to bare minimum updates.

We're talking 750ms to 1.5s, and I admit it's still a marvel compared to things I used to have to deal with, but it's still enough to feel cludgy.

Flutter is another example of this. It's not _slow_ but if I'm sitting there waiting for even a bit I'm less likely to use the feature as an incremental tool rather than batch a bunch of things before looking or tabbing over.

> I've never seen a hot reload that worked fast enough to not be annoying.

Then you, my friend, have never used Vite.

I use a vue dev server daily (both with webpack previously and now with the way faster vite) and it's pretty much instant.

These projects only recompile the code that changes, then via chunking the browser only reloads a tiny specific .js file that contained that one component matching the vue-route, so usually 10-30kb refresh (and it loads about ~10x small .js files per page), which happens before I can tab back or notice when widescreened.

Previously when I used the slower Webpack without chunking it started to take time when the project grew large. But that was long ago (3 years ago?).

As a Svelte developer, I can’t remember the last time I had to work _without_ an instant HMR with optical state preservation. That sounds like a nightmare and a huge productivity killer.
Great idea. I think UI/UX designers would love a tool like this. Especially if they could import React components made by the development department.
It is not a unique concept, but there's absolutely room for another implementation/offering.

Some of the more popular existing ones Framer-X (funny landing page copy claiming it is entirely unique) and Modulz:

https://designcode.io/framer-x

https://www.modulz.app/

If the components are headless. Otherwise it makes more sense to do it the other way around. Designers write components that just render stuff, which then gets wired up by devs to be state/effectful.
This is what I’m doing. I’ve been building a “programming language” for UI designers. The idea is that they just describe the visual behavior, and then devs can wire it up with business logic.
This isn't shown in the video, but does your editor comes with pre-set "styles" or is it something that you would import yourself ?

My experience is that typing the code for components nesting inside components is not really the big hurdle when designing React views ; rather, it's getting the "layout" part of the css right.

The big value in the video seems to be the simple fact that you have a "Form" parent component where adding a child gives it roughly the right look.

But maybe I have Stokholm syndrome, and forgot how simple it was to hook up in GUI in VB3 back in the days !

Nice work !

I set up super minimal preset styling, and yeah I think basic css import makes sense as a next feature. Hoping to avoid overly complex style inheritance.

I 100% agree, getting layout css right is the most annoying part of styling. I’m inspired by Apple’s stack views and Figma’s auto layout which make it a lot more intuitive so I think those can be the first “Aspect components” that will come out on next release.

Thanks for the feedback!

Tailwind support would be awesome. I often use Tailwind Play (https://play.tailwindcss.com/) when I'm "sketching out" the look of a new component since it's so quick to iterate and get immediate visual feedback, as you well know.
I've been wondering whether it would be possible to leverage ML/AI to "infer" a layout from a visual mockup. So like if two elements have the same X position, they're assumed to be left aligned with one another. If three elements are the same width and sit side-by-side with the same distance between them, they're assumed to be a 3-grid column. Etc etc.
We're actually in review on the Figma plugin store for exactly this. Should be out soon.
Very nice. One pain point I've noticed with AutoLayout is that once a layout is set, it's very difficult to "just shift something around", which is what's so nice about a visual editing tool to begin with. The benefit of an automated layout inference tool is that it could theoretically let you toggle the layout off, do your quick and easy shifting, then turn it back on and let the tool infer the changes you made.
It reminds me of Visual Basic or early versions of Dreamweaver to an extent (which is a huge compliment). That enabled a massive number of people to make apps who wouldn't otherwise have been able to, but after using it for a long time most users abandon the visual UI builder in favor of the code editor.

If you're a visually-driven person then this looks ace, but I think in the opposite way to the narrator. Rather than finding writing the code directly annoying and preferring an interactive way of editing components, I find visual interfaces to code really hard to work with. I suspect I think in abstractions too much for it to work for me.

This, very much so. One of the (few) things I genuinely love about modern frontend web development is the speed of the edit loop with React and hot reloading. Look, I'm an engineer; _writing code_ is my jam, not clicking pretty widgets in a (nice!) UI. It's genuinely faster for me to turn an image in my head into a functioning component by just writing out Typescript or CSS; the abstractions are less leaky, and the escape hatches are literally at my fingertips rather than requiring an extra jump or two.

Put another way: if I have to take my hands off the keyboard I've already lost.

(comment deleted)
Playing devil’s advocate here: if this graphical interface could be manipulated without mouse clicks, you’re still interested? Alternatively: if there were some high bandwidth, low latency feedback loop between you and this app, an order of magnitude faster than how you currently iterate on working with React, you’d consider it?
Look promising, but just logged in and poked around and couldn't figure out how to get elements on the canvas. Or do much of anything. Some of the interaction design seems quite odd and difficult to use (eg. all the sidebar accordions open on hover rather than on click. And clicking on elements in the "insert" dropdown doesn't insert them.).

Apologies for jumping to critical feedback! Rough prototypes are rough for good reason ;) Glad to see more of these GUI builders popping up and think this is a worthwhile avenue to explore. But might be worth spending a bit of time looking at interface design best practices. And/or getting a designer to come advise on the project.

I really appreciate the feedback, thanks! Talking to designer friends and updating UX as we speak, based on this.
I'm a bit fed up with those "IDE" for web attempts.

Every 9 Month or so , we get a new attempt at fixing Web Dev lack of Visual Feedback and productivity issues.

The typical coder behind this type of project get "Mental Fatigue/ Coder Exhaust" after 6 Months as they generally ignore the complexity behind building such product and end up abandoning the project....

There is a google graveyard , but we should also build an "Front IDE / Webviewer" graveyard.

The only one I recall without googling anything : Deco[0] and PreVue[1]

[0]https://www.decoide.org/ [1]https://github.com/open-source-labs/PreVue

HN could you complete my comment with others "Front IDE / Webwiever" that have been abandoned ?

Pretty sure there is more than a dozen.

Where exactly is now your problem with IDE's for webs?
Do you also have concrete criticism of this project or just generic general complaints about the topic?

Yes, there are many attempts trying to fix the problem, that designing requires coding and yes, that is a very, very hard problem to do right.

But just shitting on something because you feel bitter about the topic (or whatever your motivation is) probably won't lead to anything interesting.

Well, is says that the website itself was build by the tool. Non-semantic tags, divs instead of links, buttons instead of links, a lot of inline styles (which is a bad practice), deep nesting. So inline styles will make caching css impossible, so high load times, not good for performance. Deep nesting makes the problem even worse. So the result is a slow bloated inaccessible code, but the result may look ok. If all you want is a pretty picture - than yeah, it is a great tool.

I prefer this approach - https://github.com/seek-oss/playroom Just create your components and add them to the sandbox and allow your designers to play with them.

Think he's point was that GUI products in this space is extremely difficult to get it right due to the explosion of edge cases and general complexity.

There have been other React IDEs in the past, and they've faded off into obscurity because of factors I am not familiar with but one in which parent's comment is alluding to, the hidden rise of technical debt for last mile problems and custom requirements.

Think we are dealing really with RAD vs traditional waterfall coding approaches. Both have ups and downs but the big drawdown is the stockholm syndrome effect that comes with relying on some other party for RAD.

It's not just fatigue. I also have such a project. It allows you to build using bootstrap, but with expressions, loops, conditions and a data store. It would be pretty easy to make a Vue version of it. It's a structural editor though, but it offers a graphical preview with limited interaction. But it's not good enough for the general public, and I'm not going to finish it, only to see the project linger somewhere in a obscure corner of the internet, or –worse- attract some attention and get a bunch of idiots making demands and threats.
Despite your negative tone, I think you have a point. There are many project like this. I'm working on another one at the moment and I have compiled a long list of similar projects. There is definitely a need for a tool that can create UIs visually. IMO such a tool needs to have interoperability with code, as in changes to the code reflect in the tool and changes in the tool make reflect back in the code.

We haven't succeeded in creating an intuitive and robust enough tool that accomplishes this, but that doesn't mean that it's impossible. It's a technical challenge which can be overcome.

I don't think the criticism is wrong.

Though it would seem that something in this space will eventually attract a decent user base.

I'm basing that thought off the idea that Dreamweaver and others were once useful to different groups.

At face value this seems like it could apply to a bunch of different categories (e.g., another text editor, another todo list, another chat app, etc...)? Yes, most new software in every category fails, but every once in awhile one succeeds, and that's how we make progress. The failures along the way just seem like a necessary byproduct of progress.
>Yes, most new software in every category fails, but every once in awhile one succeeds, and that's how we make progress.

+100

Also, I'm rather uncomfortable when a "Show HN" gets dumped upon - furthermore with no actual specific criticism, let alone advice on how to improve.

What happened to that "Be kind. Don't be snarky." from the guidelines?

It was never my intention to be "shitting" on anyone.

Just a feeling of exasperation when seeing the product.

Someone in the comments confirmed what I said

Created an equivalent for bootstrap but abandoned it for the reasons I have written.

> Just a feeling of exasperation when seeing the product.

Well maybe you're not the target market then? It looks like a no-code rather than low-code effort, and I'm hazarding a guess that you're a dev and so ...

> It was never my intention to be "shitting" on anyone.

I'm sure that you didn't.

Here's the thing: this is a "Show HN" - somebody has been brave enough to show their new thing to the community. People vary - some are much more sensitive than average, particularly in a community like this that self-identifies as not-average, and will take the mildest criticism very personally.

If something's not for you, there's always the option of not commenting, or at least starting out by saying something encouraging to soften the blow.

https://news.ycombinator.com/newsguidelines.html#comments

(comment deleted)
These visual tools never clicked with me. There is always a point that you need to code something "manually" and then switching back and forth is just tedious (and if you are lucky that your code doesn't break the tool) to the point it makes no sense to use such a visual tool. Maybe this is different though. I wish it was possible to try without having to set up an account.
Would be nice to be able to try it out or see a demo without having to create an account and log in
Hey, well done for getting something functional working and in the public eye.

> I made this because building UIs in a lexical medium like code is super annoying. I have to pre-render what I’m making in my head

I'd call the pre-rendering in your head a benefit, tbh. Also.. watching your vid, the property editor being "far away" from the selected item renders this tool much less useful to me than writing code. My eyesight's bad, so I can't keep the editor and the selected object in focus at the same time. The head & eye switching is probably more annoying to someone in my position than switching apps because at least I know I'm changing context when I switch apps (although I admit, I've put up with that for 20 years so perhaps I just don't notice).

> I was inspired by the developer console in chrome and safari since I end up editing css there because it’s ironically more convenient.

Conversely, I agree with this entirely. I don't like having to bob my head around the screen when I edit CSS in the browser, but it's still MUCH faster and intuitive than doing it in a separate code editor. I strongly dislike Tailwind and similar tools because they prevent this kind of coding/debugging. A similar tool got shown here on HN recently, and the conversation circled the idea that a visual tool to edit CSS is a) so handy but b) really hard to build because it's not programmatically obvious which file to make updates too... it's still easier to keep the file hierarchy in your head (even though that's quite hard). I guess focusing on React components lets you assume the CSS is "beside" the given component.

> I strongly dislike Tailwind and similar tools because they prevent this kind of coding/debugging

No they don't? I use the inspector all the time to figure out what values to set. Granted, I then translate those to Tailwind in my head, so there is an extra step compared to directly copying the style but that's a very small price to pay for all the advantages that I get from Tailwind.

What are the advantages, really? I used to use tailwind for my site, but then I realized I was essentially writing plain CSS in some DSL. Writing the plain CSS directly and using a few CSS variables for things like color and spacing simplified the whole thing greatly.
For personal projects it might be overkill depending on the scope. But if 2+ people are working on a constantly evolving system, shipping new features, and want consistency in the design system? It’s a solid foundation.
Have you tried talking with your colleagues?

I mean… i know it’s hard. I’ve tried discussing patterns and our self-made “dialect”, and it’s a hard conversation. Using some 3rd party’s tooling makes it easier because you can all defer to the higher authority. But what if you actually agreed on some patterns and made that part of your process? To start with, it would feel like you were writing an overly prescriptive style guide and people would look at you funny… but what’s the difference between using using a 3rd party dialect and making up your own?

>> A similar tool got shown here on HN...a visual tool to edit CSS is a) so handy but b) really hard to build because it's not programmatically obvious which file to make updates too...

Can you point me to the post so that I can study more details? As mentioned about, the idea of my http://liveditor.com is not to edit the css for you but points you to the line of the css file so that you can edit the styles in the code editor and see the result instantly.

Is it via class or functional components ?

Keep up the good work - maybe jetbrains will buy / fund you!

Right now we export class components, but the option to export functional components is coming soon. Will likely default to functional component export.

Thanks!

This reminds me of the Ext Designer tool from many years ago that was very useful in building forms with the Ext.js framework.
(comment deleted)
No design principle, no explicit constraints on code base, no explicit supported scope.

Surely there is some kind of React component that won't work well with this, the unsuspecting will discover this too late.

(comment deleted)
> © Metacode, Inc. dba Aspect

Is this the Metacode that got YC funding?

Yes. I’m super passionate about software that creates software.
Kindred spirits...I would like to get in touch, my email is in my profile.
Out of topic, are you worried that Meta might target you at some point?
First, congrats to your new project! Secondly, although it's not for react, but that's exactly the same reason why I have developed http://liveditor.com some years ago! The idea was that the css inspector/tweaker and the code editor should be combined together and working together seamlessly.

PS, I know the software might have some little issues but I'm going to update it soon ;)

This feels like home to me, as I was once a Dreamweaver.
https://utopia.app/ also does this
Utopia doesn't "also" do this, they are doing something far more useful (bidirectional visual editing of the code) that could actually end up making its way into many people's workflow (it's just a shame that they don't support Typescript yet).

There are plenty of drag and drop visual React builders, but as long as they follow an unidirectional export-once workflow, they are about as useful as a Figma mockup.

Can I bring my own component library? And CSS variable files?
I want this - but mobile first.

Whenever I’m sitting on a bus or train for a short trip that doesn’t warrant bringing a laptop but there is a simple little tweak that could be made in 10 mins. I would like to use a tool like this designed to be used on a mobile device.

Also I think then people who only have mobile devices could also create their own software.

It grates on me that in order to build mobile web applications you need a laptop or desktop.

Sorry, I could not go farther in the video after watching the narrator trying to accurately click on all those inputs, dropdowns etc. simultaneously saying "writing this in code would be annoying".

In my opinion using mouse pointer to click things on screen is annoying when it comes to programming.

I think it comes down to preference, but ultimately I agree with you. There are a lot of misconceptions about "code", and when people talk about how code is either slow, hard, annoying etc, they're speaking in the abstract and not being specific. At the end of the day, "code" is really just typing what you want instead of dragging around a mouse. It's like saying "I like to use my mouse to copy and paste instead of typing cmd+c cmd+v, it's faster". It doesn't make any sense.
I find mocking things up is better done visually. Whether that’s pen/paper, Illustrator, or a GUI builder like this. I think they serve the same purpose. The only difference is that with this, you’re closer to getting a final asset you can tweak with code. GUI builders have a long history. But the best of them produce code you can commit to git.

But, I guess the real question of usefulness is how good (or sane) the generated code is.

To use an example from a different comment, if it is closer to Dreamweaver, that at least produced workable code. If it is closer to FrontPage… good luck.

FrontPage only has one thing to say to you in response to this insult:  
I find that mocking is best done by product/designers and not engineers, and that the skills to make a wonderful user experience are about as opposite from the skills of being a talented js/typescript/react/redux/devos etc engineer as can be.

When I get a feature to implement in react, I expect the mocks to completed. We do our design work in figma and it's already a wonderful tool for mocking up our react app.

The point of an 'all-in-one' mock and code tool seems strange. Is it to get rid of designers (which is bad because UX/accessibility/design is yet another skill to add ontop of the devops pile that will not be handled at a high level) or is it to get rid of the engineer (so that the product team can create a react app without an expensive coder, which is bad because shit is going to break and no one is going to know how to fix it).

Perhaps this is intended for very small companies (~single person shops) where like it or not you're doing everything so anything that simplifies the process is a value add.

The project looks very cool though, and he can definitely put together a form faster with this tool than I can writing it all out by hand. I wonder how the experience gets when you're in the weeds of custom components, hooks, props and all of the sauce that makes react complicated.

Generally when I watch a code demo I appreciate if the demonstrator doesn't use keyboard shortcuts, because I'm trying to focus on the actions not the way you get to those actions. And having a mouse move around gives you a moment to think about the last thing they said and how it fits with your projects.
(comment deleted)