Looking for a no-code app builder that can tie into a small robot project

I’m helping with a small after-school robotics club here in Chicago, and we’ve got a basic ROS 2 setup running on a couple of little wheeled robots. The kids want a simple phone app so parents can see a camera feed and send a few commands, but none of us want to hand-code the whole interface from scratch.

I keep seeing no-code and AI app builders mentioned, and I’m trying to figure out whether any of them can realistically talk to a ROS 2 node over a websocket or REST bridge. My worry is that most of these tools are aimed at generic apps and won’t handle a persistent connection or a video stream well, and I don’t want to spend weeks discovering that.

Has anyone here used one of these builders for a hobby or club robotics project? I’d like to hear what actually worked, especially around connecting to a robot’s API without a lot of custom code.

Indeed, they are not well suited for video. You and your students can read about the pros and cons of various approaches for streaming video here: 5 Ways to Stream Video from Robots and Why You Should Use WebRTC | Transitive Robotics

There are Transitive capabilities for the things you want to achieve, and they don’t require (much) coding. You can try them for free to see whether they help with what you need and when the trial runs out you can contact me and we can work something out. I’d like to support students.

Apart from that, for “connecting to a robot’s API” you’ll probably find this useful:

It’s a web SDK for ROS. For instance, you can use it to add buttons to a web page that will trigger a ROS service call on the robot when pressed, or subscribe to a topic, say the pose, and display it live on the page from a React state variable without writing any other code.

  useEffect(() => {
      if (isReady?.()) {
        // subscribe to a ROS 2 topic on the robot
        subscribe(2, '/amcl_pose');
      }

      // unsubscribe when React component unmounts
      return () => {
        unsubscribe?.(2, '/amcl_pose');
      }
    }, [isReady, subscribe])

  // get the pose from the reactively updating device data
  const pose = deviceData?.ros?.[2].messages?.amcl_pose?.pose.pose;
  if (!pose) return <div>Connecting..</div>;

  // Show pose x and y on page as text:
  return <div>
      x: {pose.position.x},
      y: {pose.position.y}
    </div>