Why I Built My Own Form Builder

We needed a form builder for the website of Tuwi, the company I work at. We went with OpnForm and used it for the forms on the site, and it did the job. But the more we leaned on it, the more it looked like something we would be better off owning ourselves.

So I took it on. A few evenings at home, and there was enough of a working project that we could start moving things onto it gradually instead of all at once. The first site actually running it was connextfactory.nl, another one I built for Tuwi.

What we wanted from it

Two things, mostly.

The first was that it should live where the rest of the site is managed. Not a separate product with its own login and its own place to remember, but a page in the admin we’re already in. So FormBuilder is a Laravel package. You install it, and the builder is just there, inside the admin you already have.

The second was that putting a form somewhere shouldn’t be a project. Pick how you want it out in the world, copy two lines, done. Inline in the page, in a popup, sliding in from the side, behind a plain link, or in an iframe when you want it sealed off from the surrounding CSS. Same snippet, different attribute.

The FormBuilder editor

Forms carry their own theme, so one looks the same wherever it ends up instead of inheriting whatever the page around it happens to do. If you want the full tour, that’s on the project page.

Building it with Claude

I used Claude a lot on this one, and the first version came together much faster than I expected. Schema, editor, renderer, submissions, all working, in the sort of time that would otherwise have gone into just the editor.

The catch is you spend some of the time you saved somewhere else. Code that looks right but isn’t takes a while to spot. I got better results asking for one small thing at a time with the relevant files open, instead of asking for a whole feature and hoping.

The parts I’m happiest with came out of talking through the design first. How the mobile layout should work, and using the same renderer for the editor canvas and the live form so they can’t drift apart.

Was it worth it

Yes, easily.

Every site we build gets a proper form builder now, without setting anything up. When something’s missing I add it instead of working around it. And a form is one of the few things on a site a visitor actually touches, so having that part be ours turned out to matter more than I expected going in.

It runs the contact form on this site too. You can try it on the contact page.