
Show HN: Forms – Easy custom database applications - semperdark
https://www.sonadier.com
======
mistermann
It looks nice at first glance. Eventually someone, somewhere, is going to get
this right and it will be _extremely_ popular. Maybe it's you, who knows.

I bet there are hundreds of millions of dollars spent every year on full on
huge projects that are essentially a simple CRUD application.

Do you support writing event based code in some way?

~~~
semperdark
We're working on integration with Zapier at the moment, it should be ready for
the next major release. Do you have any suggestions for other event-based
systems? Zapier is the only one I'm familiar with.

~~~
mistermann
I was just thinking of the ability to have javascript responding to and
interacting with the form. Calling out to external services as well would be
huge as well. But if you can do the first, basically a _properly functioning_
"MS Access for the web", you would make an absolute killing.

I think current developers (and managers) either are too young to know of
Access/Delphi/PowerBuilder and how easy it was to build extremely useful
applications in them, or perhaps more likely their livelihood depends on them
not remembering it. Sure there are shortcomings, but for most in-house apps
built today, nothing that would be a show stopper. If you could bring that
rapid development to web apps....wow.

------
semperdark
We just finished releasing a new version, basically it's a frontend for
creating relational database applications. If anyone's familiar with Microsoft
Access, it's a lot like that, except it's web-based and comes with a
user/permissions management system. I'm looking for feedback, and can answer
any questions!

~~~
maxwin
please consider open sourcing it in the future when the time is right.

~~~
semperdark
Absolutely! I definitely want to give back when it's a bit more complete,
considering all of the open source libraries we took advantage of.

------
Oras
I do not intend to be negative but you could use your app to make a better
contact page rather than opening email client. This could be a good example on
how you can use your app.

~~~
semperdark
Not negative at all! That's a good idea, I'll put that together. Thank you

------
ssorc
FYI, the privacy link
([https://www.sonadier.com/privacy](https://www.sonadier.com/privacy)) is a
404.

~~~
semperdark
Thanks for letting me know, I'll get that up asap!

------
billyhoffman
From a tech side this is great, but your pricing model is all screwed up.
"Unlimited forms and fields" at the free tier? You need to align your pricing
to scale with your costs. Limit by users but also the number of rows in the
DB.

MailChimp is a good example of aligning pricing with costs

~~~
dkyc
_" You need to align your pricing to scale with your costs"_

I strongly disagree with that. You should align your pricing with the value
the user receives. To do this optimally, you need to have a good grasp of who
your user is, how much value he receives from the software and how the typical
purchasing process looks like. For an early stage company, all these questions
may not be answered yet, so it is best to wait and learn what the users do
with the product before prematurely optimizing pricing at an early stage.

~~~
billyhoffman
You are correct and I posted that prematurely. Your pricing should always
reflect the value you provide your customer. Helping a small company save 3%
is worth less than helping Walmart save 3% and your company should price
accordingly.

That said, if you have correctly priced your product, than the pricing should
also align and scale with your costs, so you can use that as a quick short cut
to evaluate a pricing model. When pricing doesn't scale with costs, it usually
means your having properly valued your product.

I would argue that seems to be the case with the pricing for this Show HN

------
steventhedev
It looks like your access control is table level. Have you considered what it
will take to provide row/column level controls?

Also, the report builder looks like it doesn't allow you to set up complex
reports (range queries). Can you add an abstract WHERE clause constructor?
That would let you do things like collect all orders in the last week that
were over 20 dollars, late on their delivery, or fulfilled by the new guy. You
might want to look at BI tools like Pentaho or Microstrategy to see if you can
build something similar on the analysis end.

Finally, do you offer change tracking and backups? No one wants to lose a LOB
database because someone ragequit.

~~~
thaumaturgy
> _Have you considered what it will take to provide row /column level
> controls?_

FWIW I did this for a client application and it wasn't real fun. Took a few
tries to come up with something that was reasonable at column-level
resolution.

Figure you need at least read and write permissions, you need to have table-
level granularity, you want to have column-level granularity, you want to make
it easy to manage groups of permissions (roles), but you also want it to be
easy to create users with exceptions to those roles. For example, how would
you create permissions for a group that gives you access to all of a table
except a specific column?

You need, basically, ACLs, and afaik there isn't a standard recommendation for
that yet (that I could find).

I settled on a roles table and a permissions table, with descriptors with
wildcards for different operations (like, "read-client-address", "write-
client-notes", "∗-client-∗"), and allow/disallow/inherit options. For
instance, a "demo" account has "disallow ∗, allow read-client-∗, disallow
read-client-name", etc. On login the permissions are loaded for the user
signing in and then each DB operation checks to see if the operation is
allowed() in a function that resolves wildcards and priority and does a few
other tricky things.

There are probably better ways to do it, but anyway, the moral is that there
should be a good reason for needing more granularity in permissions before
someone decides to implement it.

------
jradd
I really like this!

I was playing around and noticed "Number" field will return an "Internal
Error" upon saving if numbers are out of _undefined_ range.

(e.g. "0-99999999") and does not care whether the range is valid or not.

\- It is unclear what the meaning for "Regex" under 'Advanced' Number Form: Is
this _just_ a label, or does it provide functionality of some kind?

\- Seems like "Save" in the upper right corner should assume "Done" is True in
the lower left corner.

My questions are purely rhetorical btw.

~~~
semperdark
Ech, I will hotfix that number issue right now. Thank you!

The regex is probably more useful for the text fields, but it's a validation
regex for the content of the field. We check it both client and server side,
to make sure the user-entered content fits it.

The "Done" in the lower left is actually purely design at the moment, all it
does is take you back to the add fields menu. Someone suggested that we add it
in case users are confused about exiting the panel for an individual field.

------
fiatjaf
Thank you for your brave quest against the stupid CRUD apps that exist
everywhere.

------
inovica
This is impressive and a good implementation. Having dealt with large
databases for a while I'm curious about your technology stack and how have you
built the database to handle the variety of applications?

------
mrmondo
How does it work? Does it output your forms as SQL that can be run against say
PostgreSQL? Does it generate an HTML web form that you can save offline that
connects to a database?

~~~
semperdark
A lot of what we're trying to do is abstract some of the backend systems to
allow for quick building. When you make a form, we host it on our servers,
provide an accounts system for inviting team members and a permissions system
for controlling access. Right now we're working on securely implementing both
custom SQL queries and javascript-based scripting for backend validation and
frontend customization.

~~~
mrmondo
Ok, so for arguments sake it's a persistent form builder rather than anything
really to do with building things for databases?

~~~
semperdark
We're still working on exposing lower-level operations to advanced users. I'd
still say we're a database builder, since we provide a system for making
relational connections, and allow all CRUD operations on records. A form
builder would probably only provide Create.

The accepted keywords for this kind CRUD-application builder are pretty
generic, to be honest. The biggest one that I see used is "Online Database",
which is so broad it's nearly meaningless.

------
straws
The thing that always stops me from making something similar to this (other
than willpower and interest) is: how do you enforce constraints on the data?
How do you keep it from accumulating junk data if you're cutting out the role
of an application validating it?

It could be that this is really only for directly-mapped CRUD data, but I
haven't seen a lot of applications out there that don't require at least a
little bit of integrity checking.

~~~
semperdark
Which kind of junk data do you mean? We have quite a few constraints based on
fields, so a number field will only accept integers/decimals and it's
validated backend. We also have a regex system that is validated backend, so
you can force user input for a particular field to conform to it.

We're working on adding custom Javascript scripting partially for this
purpose. The idea is to set scripts that will run at different parts of the
submission process. For example, one script runs for the submission page and
you can control the frontend. Another would run backend in sandboxed NodeJS
with custom validation rules on each new submission.

------
tyingq
The forms part is a great start. There's a pretty ripe market to grab current
customers of Intuit's Quickbase product if you add the other online/rad
database app features. Quickbase's pricing model is terrible.

DabbleDB, before they were bought out and shut down, was on their way to doing
just that.

------
semperdark
We've also got a demo of the form creator up at
[https://forms.sonadier.com/forms/demo](https://forms.sonadier.com/forms/demo)

------
buckbova
This is great. I've been trying to create something similar with everything
stored key-val in postgres and a metadata table for relationships etc. It gets
out of hand quickly.

------
dharma1
Submitted, updated etc would probably benefit from time as well as date.

API endpoints for custom clients would be nice

------
jackweirdy
Great idea. Do you support custom styling?

------
reacweb
could you please initialise the date field with current date (at least when
the field is mandatory) ?

~~~
semperdark
We've been considering adding a "Now" link/icon above the field, which sets it
to the current datetime when clicked. What do you think?

~~~
reacweb
Perfect for me.

------
Omie6541
what is your tech stack like?

~~~
Jake232
Any kind of API / easy programattic access the results?

Ideal Scenario:

Can iFrame the form on own webapp (pass an ID iFrame in url), use it to
collect data through custom form. Then can access result of this data via an
API.

~~~
semperdark
We do have embedding support at the moment, still working on programmatic
access. It should be available soon, via a REST API.

