A better form builder

We’re featured on Apps Mirror!

Here’s our review on Apps Mirror. We’re just doing our best to get the word out there that our form builder can do things that other form builders can’t.

A better form builder Form Rules

My form builder does conditions, why would I switch to keenforms?

“My form builder already does conditional logic and calculations, there is no reason to use keenforms”

This was a comment made when we launched back in 2020. It is true that many other form builders can do some sort of conditional logic. However I can tell you exactly why Keenforms is special;

Keenforms does CONDITIONAL CALCULATIONS – lots of other form can do calculations, but with rare exception you can’t do conditional calculations.

For the 2 form builders we’re aware of that can do CONDITIONAL CALCULATIONS, Typeform and Jotform, both will not allow you to set a value more than once. So if you have a multi step operation to break down the math into more than one formula, you are out of luck with the other form builders.

Keenforms is designed to give you control over order of operations. That makes us unique compared to any other web based form builder. That’s because Keenforms is designed to be more like a Configure/Price/Quote application, as opposed to a plain old form builder.

Keenforms does conditional VALIDATION. Many form builders have the ability to make an input required conditionally. However you can’t set a minimum length conditionally. You can’t restrict certain answers or formats conditionally. That’s what makes Keenforms different.

Keenforms does dynamic HTML, a feature we’ve never seen any other form builder posses.

We also have a feature called metadata that allows you to add values to a select/drop down, checkbox, or radio button. You can then use those values for calculations and validations. It’s like making a list of selectable options into a spreadsheet. We used it for this form that sets the value of a custom butcher block countertop with different columns for different wood species selected.

Metadata plus conditional calculations and validations makes keenforms more powerful than your average form builder.

Here’s a car loan calculator that generates dynamic HTML to display the monthly payment for loans from 24-84 months long;

Keenforms car loan calculator

If you’re frustrated or disappointed with your current form builder we think we can be your new favorite app. Let us know how we can help. Send us a line at

A better form builder programming

We’re blogging again

Our last post was nearly a year ago. The last post turned into this article that got published on stack overflow.

The past few months we’ve been busy adding features and talking to customers. However after reading this article by Amy Hoy on stacking the bricks, I’m thinking we need to do a lot more on the marketing and promotion side;

From 5 Things I Wish Somebody Told Me Before I Founded My SaaS


Let’s just say its been a lot less than 90%. We’re going to change that going forward.

If you’ve ever been frustrated with a form builder we think Keenforms can be your new favorite form builder. It does things no other form builder does. And if you don’t want to build it yourself, Keenforms can help you.

We’re hoping to post some cool and unique demos. If you have a request we’re really interested in hearing from you.

Thanks for tuning in. Here we go.

javascript programming

Why the number input is the worst input

I recently shared a post on hacker news about the app I’ve been building (keenforms). It actually sparked a lively discussion, although the most heated issue was not really about my product. It was about the <input type=”number”>, or rather the fact that we’re not using it.

At some point early on I tried using the number input in the form rendering page, but I ran into so many problems that it was just easier and more predictable to avoid it completely. We just use the <input type=”text”> for number data types, and use javascript to validate the value.

*Please note that we actually do use <input type=”number”> inside our app. However we only use it in the dashboard, for fields form attribute files such as position and score multiplier, because those validations are unconditional.

I discovered a lot of odd behavior when you use <input type=”number”>, but it never occurred to me to share all the problems I ran into. That is, until the hacker news post comments.

The pro number input crowd was primarily focused on the accessibility argument. The number input has the native increment/decrement buttons. It has built in validation as well. Some mobile devices will show a number keypad instead of the full keyboard.

There were also some complaints about developers overusing Javascript (guilty!). Keenforms relies heavily on javascript and specifically React, and Javascript is critical to the dynamic interactions that can be created using our software. I understand some people’s aversion to JavaScript. However JavaScript is the only way to create a decent user experience with real time responses for the forms that Keenforms was built for. There is no other way to provide the kind of real time dynamic feedback I wanted for Keenforms without JavaScript. If you want a form builder that will render properly for users who have disabled JavaScript, then you shouldn’t use Keenforms.

However I was not alone in the anti-number input camp. One user posted an article issued by the UK Government detailing all the problems related to the number input.

The mind blowing thing about this article is;

  • The article didn’t mention the biggest problems I personally experienced AND
  • The article mentioned a lot of problems I wasn’t even aware of until I read it, such as;
    • It cannot be dictated or selected when using Dragon Naturally Speaking
    • Certain browsers will round off large numbers
    • Scrolling with scroll wheel on the mouse

    At one point I stated that the number input was more trouble than it’s worth, and I could write an article why the number input was quantifiably terrible. The response I got was actually great;

    “please do write an article. Although I’m skeptical, I would read it with an open mind + in good faith.”

    So here is a short list of all the reasons the number input is terrible.

    The number input allows for invalid number values

    This by itself, while undesirable, is not the biggest issue, but it’s required information to understand the next problem.

    When the number input contains an invalid number value, and you retrieve the value via JavaScript you will get a BLANK STRING, (not actual contents displayed)

    Dealbreaker (30 Rock)

    There are a couple of ways you might go about retrieving the value. Could be on an event listener, which would mean Or through the DOM element. Either way you can’t get the value that’s actually in the <input type=”number”>

    const numberInput = document.getElementById('id_here');
    console.log(numberInput.value); // will return empty string if invalid

    The inability to see what the text input actually contains is a massive problem. It makes client side validation using Javascript impossible.

    number input with invalid value

    While validation of form inputs on the back end is a must, client side form validation via Javascript is a critical tool to be able to provide better UX. If you’re just making sure the number is a number you might be ok with the built in number validation. However the reason I built my own form builder is that I wanted something better than that. As a programmer I routinely get requests to build forms with complex and conditional validations. Getting a blank string for an invalid number value is a deal breaker.

    It’s WAY TOO EASY to enter invalid number values into the number input

    The accepted characters when typing in the number input varies from browser to browser. Let’s start with the best case scenarios,

    Chrome and (surpise!) Microsoft Edge;

    The following characters are permitted (based on my hastily done first hand testing)

    • numbers 0-9
    • decimal point
    • “-” (minus for negative values)
    • “+” (plus because ¯\_(ツ)_/¯ ​​)
    • the letter ‘e’ – for exponential notation

    Both of these browsers will prevent you from entering the accepted non-numeric characters more than once. You can however place those symbols anywhere in the input, i.e. putting the minus symbol in between digits, which of course would make the number invalid.

    For browsers Firefox and Safari;

    There are no limits whatsoever, you can type whatever you want.

    All of these browsers will show a built-in popup to indicate that the value you’ve entered is not a valid number, and the submit button will not work without the user fixing those input values to be valid. The built in validation though is visually inconsistent when you are building dynamic responsive apps.

    The letter ‘e’ thing is annoying. The value 2.3e4, represents 2.3 times 10 to the power of 4, aka 23,000. Under most circumstances you don’t want exponential notation. If you enter a number big enough the number input will automatically convert your number to this format. For numbers that big it would seem HTML forms are not the best way to handle it, but that’s not my business. If you don’t know this already you should never use a number input for things like credit cards or phone numbers.

    Lastly there is one more stumbling block with the number input.

    Number input attributes like min and max help keep the value within range when typing or pressing native increment/decrement buttons. However out of range numbers can be copied/pasted into the input.

    The ability to set the minimum and maximum number values in the number input is a nice to have feature. The increment/decrement buttons will keep the number value within these range parameters. However you can copy/paste a value that is beyond those limits.

    If you are reading this last issue and saying this seems petty, I want you to know I totally agree with you. However it’s not always my call.

    Imagine a software tester finding this issue and logging a bug. Imagine the client product manager hearing about the bug. Imagine discussing this during sprint planning, but then pleading your case to that said product manager “this is an edge case and the number will be validated on the back end”. And besides, you said this was MVP and this “bug” is actually standard behavior of the number input. Imagine losing that battle and having to fix it anyway. All I’m saying is it’s not always the developers choice. Hypothetically of course.

    I suspect there’s stuff I don’t even know about. If you know another issue with the number input not cited here or the UK article we’d love to hear about it. I hope you learned something. Thanks for listening. And thanks to folkhack for prodding me into writing this article.

A better form builder

There are 200+ form builders, but none of them can do what a programmer can do. So I built my own.

So according to G2 there are 225 form builders. I have not tried every single one, but I did try the top 20 with a free plan. None of them could do what I needed them to do, which was build a form that could produce a quote or estimate for a service or product.

While many form builders have something that you can do a calculation, very few can do conditional calculations. None of them seem capable of giving you control over order of operations. None of them allow you to set the value of an input more than once, so if you needed to apply a discount or an upcharge it’s either difficult and labor intensive, or it’s impossible. None of them can do dynamic HTML.

Also while there are less at least 2 form builders that I know of that can do conditional calculations, it still requires a great deal of work on the part of the admin. It would be incredibly beneficial to be able to create a drop down or select tag or checkboxes that had more than just a one dimensional list of data. If you could create multiple columns for your selectable options, and then use those options values in other columns, that would be a game changer.

So I built my own. It’s called Keenforms.

It’s a form builder with a built in No Code Rules Engine. The rules engine give you greater control over the order of operations and allows you to set complex conditions to determine if those rules run. It also has a feature called metadata that allows you do create additional values that can be association with your selectable options (drop downs, checkboxes, radio buttons, etc). It makes it possible for users to create the kinds of forms that I as a programmer can build, but without writing code from scratch.

Here are some forms I’ve built;

Car loan calculator comparison with different payments based on loan amount and length of loan, from 24 to 84 months
Inches/Centimeters converter – editing one input will change the other similar to google
Chipotle Burrito builder with nutritional info like calories/fat/carbs/protein and sticky footer via dynamic HTML and metadata
Car Make and Model dynamic filtering, i.e. show models of cars based on makes of cars selected
Mortgage calculator

Here’s an iframe view of a form that changes the embedded youtube video based on the selected value;

If you’ve ever wanted to be able to use a web based form builder, but were disappointed by the limitations, you might want to give Keenforms a try. You can create an account and create up to 5 forms for free, no credit card required.

If you’ve ever been frustrated with a form builder we’d love to hear about your problems. If Keenforms doesn’t have the features you need from a form builder, we’d like to know about it and solve that problem as soon as possible. You can create an account by clicking here.

Here’s our first video tutorial;

Form Rules tutorials

Keenforms screencast 1 – Creating a Form Rule

We’ve posted our first screencast video on Youtube on how to create a form rule in keenforms! Check it out;

A better form builder

Why Keenforms can succeed when other form builders fail

So you use a form builder. For marketing, for surveys, maybe to build a form for a WordPress site, whatever.

And the form builder you’re using is good… or good enough… or maybe not?

For those of us that use form builders, it can be frustrating. That’s because sometimes your form builder isn’t quite good enough to do what you need it to do.

It says it does conditional logic, but it cant do the kinds of conditions you need. It says it does calculations, but it can’t do multi step operations, or conditional calculations, and there’s no way to control the order of operations.

Even something as simple as lead scoring, so you can figure out the value of each submission, is impossible. It shouldn’t be this painful.

That’s why we built Keenforms – it’s a different kind of form builder, because it has a NO CODE RULES ENGINE.

A RULES ENGINE is a kind of software that lets users create logic or rules, that would normally be written in the code of a program, and lets you save that logic to a database. That means you can create forms that have the dynamic interactions of a custom coded form, but without the hassle of writing code from scratch.

Typically a RULES ENGINE is hard to use, and is only available for large companies with experienced technology professionals. That’s why Keenforms built our RULES ENGINE with a NO CODE interface, so that it’s easy for anyone to use.

Keenforms is built to do the things your form builder can’t do, because it’s been built for professionals who need more from their form builder. If you’ve ever been frustrated by your current form builder, we think you should try out Keenforms. And you can do it for free.

Keenforms – it’s forms made smarter.

A better form builder

New Features: Webhooks and API

We’ve been coding away building out the API as well as an outbound webhooks. We’ve started testing integration with Zapier. Hope within the next couple of weeks to publish it. We’re really excited about it.

A better form builder

New Feature: Email notifications on submission

We deployed a new feature last night – email notification on submission. It’s pretty easy to set up.

First login to your account, and go to your dashboard.

Next select the keenform you want to set up email notification.

Then scroll down to the section for “After Submit”, and click “Customize Response”

Then toggle the switch for sending email, and submit.

More features are on the way. Thanks for checking us out!

A better form builder

Keenforms Post Launch Retro

So first the good news – By making the front page on Hacker News and posting on Indie Hackers we had over 1800 page views on the first day of our launch, and over 100 users signed up to try it out. Most of those people created a form. Also received quality feedback, some of which we’ve deployed within 48 hours of launch (we added the for tag for labels to make it easier to read on screen readers for those who are visually impaired).

Next the areas to improve;

While most new sign ups created a form, few created a form rule. The form rules are the biggest differentiator for keenforms. Compared to other form builders there are lots of things we don’t have – easily copied templates, a date picker, a 1-5 star ranking, the ability to upload your logo, multi column layout, etc. Some of those features will be added as time goes on, but this is the MVP.

However while keenforms doesn’t have all the features that the bigger more established form builders have, we do something that no other form builder I’ve seen is capable of – the ability to create dynamic on the fly interactions in a form, with complex conditional, with no code.

Your current form builder may claim it does conditions, but there’s only one form builder that I’m aware of that does anything like conditional calculations. You cannot do compound conditional calculations. No one is doing conditional validations. That is a hard sell though, and many form builder users don’t know that they might want conditional calculations and validations. They just know they can’t do what they want with their current form builder.

There is also a learning curve to using a rules engine. We’re going to need to provide better documentation on how to do the more complex stuff. It might mean a wiki, perhaps videos, and maybe a tutorial.

It’s a work in progress. There’s a long way to go, however I’m really proud of how keenforms is coming along. I hope you will check us out.