[HN Gopher] Show HN: Motor Admin - No-code admin panel
___________________________________________________________________
Show HN: Motor Admin - No-code admin panel
Author : petems
Score : 177 points
Date : 2021-11-02 13:21 UTC (9 hours ago)
(HTM) web link (www.getmotoradmin.com)
(TXT) w3m dump (www.getmotoradmin.com)
| ttymck wrote:
| I see a few comments asking about supported database backends,
| suggesting they understand _how_ Motor Admin works. From reading
| the website and the github Readme, I still don 't know _how_ it
| works. Surely it must connect directly to my database, but I
| couldn 't find anything to actually confirm that. It just tells
| me how to run a binary or docker image. I'm sure I missed
| something, but I thought this information would be obvious.
| petems wrote:
| Thanks that's a good point. It requires to connect to the
| database (postgresql or mysql) and the tool automatically build
| an admin UI on top of the existing data.
|
| You can try it yourself locally on macOS, Ubuntu or in docker
| if you're on windows:
|
| https://www.getmotoradmin.com/installation
| ttymck wrote:
| Ah, the docker section indeed states that, thanks:
|
| > Docker Run docker container image by specifying
| DATABASE_URL and SECRET_KEY_BASE
|
| I glossed over that instruction, and since the CLI commands
| are scrollable overflow, I didn't see the variables in the
| command.
| shaicoleman wrote:
| What tool did you use to pack it to a binary?
| petems wrote:
| https://github.com/motor-admin/ruby-packer - had to create a
| fork because the upstream repo is not maintained anymore.
| jcmontx wrote:
| Looks nice. I'll give it a try. Does it support SQL Server?
|
| Edit: I installed it. It only supports MySql and Postgres. It
| would be nice if your website mentioned this. :(
| toolshi wrote:
| Internal.io does something similar and supports SQL Server (as
| well as MySql, Postgres, Snowflake, DynamoDB, MongoDB and
| more..). It's a bit more like Retool with the visual builder
| but easier to use without code. Comparison vid with Retool
| here: https://www.youtube.com/watch?v=7GgBnbHF8Rg
|
| Full disclosure: I currently work for Internal but if you have
| any questions on our platform let me know!
| petems wrote:
| Unfortunately It doesn't support SQL Server yet.
|
| But SQL Server might come in the future - stay tuned!
|
| https://discord.com/invite/mFFJKSTgw3 - feel free to join Motor
| Admin discord server to get notified once SQL Server support is
| added.
| jereees wrote:
| +1 to SQL Server. That's where the crust of userbase will be
| because nobody wants to mess with MS's ridiculously complex
| tooling :)
| slig wrote:
| Congrats on shipping! Suggestion: make it available as a 1-click
| install on DigitalOcean marketplace.
| petems wrote:
| Good point, thanks! Will add it shortly!
| jokethrowaway wrote:
| Neat tool!
|
| After my startup failed and I found myself with a bunch of admin
| panel code I thought of building something like this but the
| number of competitors (both paid like retool, forest or OSS
| rails-admin, keybase) always deterred me.
|
| Building your own is not what makes or break a startup: small
| startup would love this but they would not want to spend the
| money and just deal with things manually, building only what they
| need; bigger companies already have their system in place, built
| slowly over the years.
|
| I'd be curious to know how you're planning to sell this.
| petems wrote:
| Thanks, yeah I hope new/small startups could find this tool
| useful. Large companies could also use it to manage some part
| of their business while keeping their old admin UI in place.
| derefr wrote:
| I always thought the most clever thing that could be done in this
| app category, would be to design and _standardize_ a microformat
| for presentation customizations, that could be written into the
| SQL-standard "comment" metadata field that's attached to almost
| every SQL-standard DDL object (tables, views, procedures,
| triggers, etc.)
|
| Then, admin panels could all interoperate in terms of showing
| e.g. "pretty" names for things; and could also pick up
| presentation metadata burned into the DB's objects at creation
| time (by e.g. your app's DB migration logic), even if the admin
| panel is not able to change the data itself.
|
| (Of course, you could use something like this for more than
| presentation metadata; you could use it to encode type-binding
| hints for particular ORMs, for example. Think of it as the
| equivalent of the old macOS "resource fork" for the object -- an
| unstructured thing that _could_ be informally structured into a
| sort of user xattrs storage _if_ people are willing to
| cooperate.)
| notreallyserio wrote:
| Sounds sort of like "the semantic web", perhaps with slightly
| less interoperability outside of the organization.
| derefr wrote:
| My own personal comparison would be to how many Helm charts
| for various Kubernetes resources bundle Prometheus-metrics
| endpoint resources, and Grafana-dashboard definition
| resources alongside them; such that if you're using the
| k8s-resource-aware Grafana (e.g. the one in the Prometheus
| operator), it'll pick those declared dashboards up
| automatically and show you the metrics for the thing you're
| running.
|
| In this case, the "Helm chart" is an app like Wordpress that
| runs DB migrations; the "monitoring resources" it deploys are
| the SQL-comment microformat data created by those migrations;
| and "Grafana" here is the DB admin panel, taught to look for
| that data.
| [deleted]
| nitrogen wrote:
| Ages ago there was a company trying to do this kind of auto-
| discoverable UI through their proprietary protocol for
| controlling and monitoring audio/video processing equipment. It
| seems like it should be possible, but for some reason hasn't
| caught on yet in any industries I'm aware of.
| tailspin2019 wrote:
| I like where this idea is going. I've always eyed up that
| comment field with a desire to use it for something clever like
| this!
| joejohnston wrote:
| How does this compare to Budibase?
|
| For me, this looks like a concept to retool, tooljet. Was that
| your inspiration?
| mritchie712 wrote:
| Nice work. I've been exploring an idea in the same space with a
| very different angle.
|
| You need other, non-technical users at a company to use this type
| of tool for it to be useful and it's really tough to get a team
| to adopt a new tool. My solution? Build it on top of something
| they're already using: Google Sheets.
|
| Not ready for a formal launch, but would love to chat with anyone
| that wants to try it out: https://www.wax.run/
| iamstupidsimple wrote:
| Interesting idea, though I am somewhat skeptical on the
| business model. Users building something _that_ complex over
| spreadsheets are probably the "shadow IT" types, so how does
| one get their company to pay for this without getting
| roadblocked?
| voiper1 wrote:
| Wow the demo video looks amazing. I'm a programmer, but coding
| that would take much longer than those few clicks.
|
| I wonder if you could use a "standard" REST backend as a data
| source?
|
| You lose the ability to use raw SQL queries, but then you could
| use this for any API and use the full CRUD with whatever actions
| and safeguards the server has programmed.
|
| Specifically, I'm thinking about feathersjs with it's hooks
| instead of just accessing the database directly.
| petems wrote:
| Currently it's not possible to use REST backend - direct
| database connection is required for motor admin to build
| internal rest json-api on top of the database to power the
| admin UI.
|
| My concern is that with REST backend it would become a much
| complex tool and will make it harder to build an admin panel -
| Retool does a good job building internal tools with visual
| builders and connecting APIs - but that definitively takes more
| time to build admin panel with it than with Motor Admin.
| zekenie wrote:
| This looks _fantastic_. I've sort of wanted these features in
| Metabase, but alas, it's really more of a BI tool. Audit log and
| custom forms are amazing. It'd be really cool if you could build
| reactive state based on custom forms. Almost like a no-code/low-
| code event sourcing system
| petems wrote:
| Thanks!
|
| >reactive state based on custom forms.
|
| I'd say there is something like that already in Motor Admin.
|
| So for custom forms it's possible to use conditions to display
| certain fields based on other field values.
|
| Also it's possible to feed form field with selector options via
| SQL queries and those queries-options are "reactive" via
| variables as well.
|
| You can learn more about it here: https://github.com/motor-
| admin/motor-admin-rails/blob/master...
|
| Here is an example of complex forms: https://motor-
| admin.herokuapp.com/demo/forms/2
|
| Hope that's something similar to what you expected to achieve
| with the admin tool.
| cykod wrote:
| This looks great - some more in-depth documentation vs. just a
| feature list would be helpful.
|
| What's the configuration / deployment story? How do you move a
| configured Motor Admin configuration from development to staging
| and then production?
| petems wrote:
| Thanks, proper documentation will come really soon.
|
| All configurations are stored in motor.yml file which is
| automatically generated in root directory.
|
| There might be two ways handling configurations: 1. Use git to
| create commits with new configurations in motor.yml and
| deploy/pull that git repo on the production host in order to
| update the configs.
|
| 2. rake motor:sync to sync configurations directly to
| production app host via API.
|
| There a bit of info about configurations sync between
| environment here:
|
| https://github.com/motor-admin/motor-admin-rails#configurati...
| dusted wrote:
| I can't figure out how self-hosted and "deploy on cloud" are not
| mutually exclusive. Unless you've gone through the trouble of
| setting up enough machines at home to have a viable cloud
| infrastructure.
| adamrt wrote:
| I think self-hosted refers to it not being a SAAS. Deploy to
| "your" cloud servers. I'm just assuming though.
| petems wrote:
| Yes, that's correct.
| junon wrote:
| "self-hosted" just means you host it yourself. Where and how is
| up to you, but the instance is entirely in your control.
|
| "Deploy to cloud" is just an answer to the "where and how" - a
| singular option.
|
| This is (typically, though not always) different from SaaS and
| on-prem, the former being hosted/managed/monitored by a third
| party, and the latter meaning hosted by you, usually managed
| and monitored by a third party - often for regulatory or
| whitelabelling reasons.
| adrianthedev wrote:
| Good job with motor admin! We're doing a Show HN right now too
| and we're in the same space. That's so random
| https://news.ycombinator.com/item?id=29081054
| nodesocket wrote:
| Couldn't find on the site, does Motor Admin only support
| PostgreSQL? What about a GraphQL API server endpoint?
| petems wrote:
| It supports PostgreSQL and MySql.
|
| GraphQL API is not supported yet.
|
| Motor Admin generates json-rest API under the hood on top of
| the database - I might be wrong but I don't know any good use
| case where Graphql API server as a proxy between the data and
| the admin UI could be useful.
| TedDoesntTalk wrote:
| > I don't know any good use case where Graphql API server as
| a proxy between the data and the admin UI
|
| If you want a view that consists of multiple entities.
| Example: a view that displays a customer with his last 5
| orders and current inventory count for the items in those
| orders. That's probably 3 entities (customer, orders,
| inventory). Sure, you can do this with REST but typically it
| will require calls to 3 different endpoints to gather that
| data. A graphQL server can serve the same data with 1
| endpoint using a custom graphQL query. I'm not saying one is
| better than the other; just trying to give you an example.
| petems wrote:
| Personally, I think that Graphql is overcomplicated and
| Facebook marketing efforts did a pretty good job for its
| adoption by developers and companies.
|
| The example you mentioned can be easily implemented in
| Motor Admin via SQL queries or admin UI configurations with
| direct connection to the database and the performance would
| be probably better than it could have been with Graphsql.
| petems wrote:
| Hello everyone, Motor Admin creator here
|
| Last year I've been searching for some administration engine for
| my Rails side project and I was not able to find a suitable
| option. I hate writing a ton of custom code for internal
| admin/tools so I decided to write even more code to build a
| general-purpose, no-code Motor Admin
|
| Motor Admin allows to convert raw data into a powerful admin
| panel to cover almost every operation needed for most businesses.
|
| Features:
|
| - CRUD out of the box with many customization options
|
| - Custom data reports with SQL
|
| - Business intelligence dashboards with fields and variables
|
| - Forms builder for custom workflows to integrate with API
|
| - Report alerts via Email or Slack
|
| - User roles and permissions
|
| - Audit log
|
| - English, Spanish, Portuguese UI languages
|
| - Works nicely on mobile screens
|
| Motor Admin is distributed as a single executable binary - it can
| be easily self-hosted on Heroku or via Docker. Also, it's
| possible to try it locally with binaries for macOS and Ubuntu
| Linux.
|
| Would be glad to receive any feedback or answer any questions
| regarding the project.
|
| GitHub: https://github.com/motor-admin/motor-admin/
| jimkleiber wrote:
| I'm excited to try and yet can't seem to get it working.
|
| I followed the steps to install it on MacOS from the GitHub
| page and I'm thinking maybe I ran the curl command from the
| wrong directory, as when I try to run ./motor-admin, it gives
| two dlyd errors:
|
| 1) "lazy symbol binding failed: Symbol not found:
| ___darwin_check_fd_set_overflow"
|
| 2) "Symbol not found: ___darwin_check_fd_set_overflow"
|
| And it shows the "Referenced from:" being my current directory,
| somewhere in my Documents folder, and then "Expected in:
| /usr/lib/libSystem.B.dylib"
|
| Any idea what might be causing the error?
|
| Thanks!
| mathnmusic wrote:
| Thanks for building this! It seems to cover most features I'd
| want.
|
| The Dockerfile is simply downloading a release from GitHub.
| Docker Compose file is referring to an existing image on
| DockerHub. How can I build a Docker image for myself starting
| from the code?
|
| It would be nice to see Motor Admin listed in CapRover's (open-
| source PaaS for self-hosting) "One Click Apps" catalog:
| https://github.com/caprover/one-click-apps/
| petems wrote:
| Thanks!
|
| Regarding your question - Motor Admin Ruby/Rails code is
| available under: https://github.com/motor-admin/motor-admin -
| so you can dockerize this Rails app from here.
|
| But binaries still should be a much better option - you can
| join https://discord.com/invite/mFFJKSTgw3 if you have any
| questions.
| mathnmusic wrote:
| What I meant to ask is: Why is the Dockerfile that
| generates https://hub.docker.com/r/motoradmin/motoradmin
| not available in the repo? It makes it hard to verify
| exactly what went into the image or to dockerize on my own.
| I don't see any instructions for building the binary
| executable either.
| petems wrote:
| Docker file is available in the repo:
| https://github.com/motor-admin/motor-
| admin/blob/master/Docke...
| mathnmusic wrote:
| This simply downloads a 65MB binary executable "motor-
| admin-Linux-x86_64" from GitHub and does not build from
| the code given in the repo. There's no visibility into
| what the binary actually contains or how to build it on
| my own.
| petems wrote:
| Oh got it, here is a Docker file to build rails app from
| source without downloading binary:
|
| https://github.com/motor-admin/motor-
| admin/blob/08ba1e4e339a...
|
| Will add it back to the repository in case others need it
| too.
| javajosh wrote:
| Great. BTW how were you planning on updating the binaries
| of your project without this file?
| petems wrote:
| Binaries are build with https://github.com/motor-
| admin/ruby-packer - they do not require docker - this
| repo contains all instructions in order to pack a binary.
| gingerlime wrote:
| This looks awesome. How difficult would you estimate migrating
| from ActiveAdmin to Motor? (beyond CRUD stuff ideally... i.e.
| we have quite a bit of custom code into various actions,
| screens etc)
|
| ActiveAdmin serves us well, although shows its age, and
| recently it feels a bit abandoned (don't want to say anything
| bad, it's a tremendous piece of open source and we got a ton of
| value from it).
| petems wrote:
| There is a ruby gem for rails projects:
| https://github.com/motor-admin/motor-admin-rails
|
| It's hard to say how difficult it could be but some companies
| already migrated from activeadmin to motor admin gem for
| their rails projects and they claim that it was worth it :)
| gingerlime wrote:
| Thank you! we will definitely look into it. It looks very
| promising!
| bound008 wrote:
| @petems do you have plans to attach a license to your component
| library? https://github.com/omohokcoj/view3
| petems wrote:
| thanks will do, it's MIT either way.
| kristianpaul wrote:
| How this compares with Retool?
| petems wrote:
| Retool is focused more on visual builders and requires more
| configurations/code to set everything up via custom
| dashboards.
|
| Motor Admin has a simple unified Admin UI without the need of
| actually building the UIs unlike in Retool WYSIWYG.
|
| The versatility of Motor Admin can be achieved via in-app UI
| configurations, custom forms, reports, and dashboards.
|
| Btw, here is a short demo:
| https://www.youtube.com/watch?v=ZD4Six8ZEP8
|
| Also, Motor Admin has a simple self-hosted deployment option.
| kevsim wrote:
| Or ForestAdmin
| petems wrote:
| The biggest difference is that Motor Admin has a convenient
| self-hosted option with a single click deploy. Self-hosted
| comes with many benefits like custom domain, ability to
| host under VPN, and faster UI due to lower network
| roundtrip and CORS avoidance.
|
| Also, Motor Admin open-source version has powerful business
| intelligence features with custom SQL reports, BI
| dashboards with variables and fields, and automated email
| reports.
|
| Also Motor Admin's UI is optimized on mobile and the UI is
| faster in general.
|
| In terms of available features open-source, self-hosted
| Motor Admin could become a much better option than
| ForestAdmin SaaS for an admin interface.
| mule1 wrote:
| Looks awesome, are there places to contribute? I.e support for
| other databases/ knowledge sources like elastic search?
| petems wrote:
| Thanks, it's possible to contribute into
| https://github.com/motor-admin/motor-admin-rails it's a ruby
| gem which powers motor admin app - support for new data
| sources and more data visualization options (cohort) are
| welcomed :)
| TedDoesntTalk wrote:
| This is awesome. Is there any way to add custom hooks to a
| create/update/delete operation? For example, I want to call run a
| script or program every time a user is created; for example to
| add that user to an LDAP directory or remote server.
|
| Do the hooks have to be Ruby code?
| petems wrote:
| It's possible to override default CRUD with custom
| actions/forms and so all additional data processing will be
| handled on the product back end API side.
|
| So let's say to want to add user to some LDAP directory once
| the user is created in Motor Admin.
|
| In order to do that you need to override the default user
| creation form and send data from that form to your API back end
| so you can handle user creation in LDAP from there:
| https://monosnap.com/file/3CD1qKgNoTBOhwTwzLiNJXTUNgi8yH
|
| All those API requests are sent with JWT header - so it's
| possible to validate them on the back end.
| TedDoesntTalk wrote:
| Thanks. Would my backend also handle the database changes or
| does Motor Admin still do that with a custom form?
| petems wrote:
| For custom forms and actions everything should be handled
| on the backend API including the DB changes.
| admin786 wrote:
| Thanks
| Multrex wrote:
| How does it compare with tools like AppSmith?
| petems wrote:
| AppSmith is aimed more on building UIs when Motor Admin has a
| single unified admin UI which can be configured and extended
| via simple configurations without visual builders.
|
| Due to this approach it should be much easier to build admin
| panels using Motor Admin.
| Multrex wrote:
| Can you run javascript like appsmith does in its widgets
| fields? From Dashboards can you create live polling /
| refreshing panels to show stats updating real time something
| like that?
| petems wrote:
| The question is - do you actually need to run javascript to
| build an admin interface for your company?
|
| With Motor Admin you don't need to - you can achieve almost
| everything AppSmith/Retool does with simpler configurations
| using the unified motor admin UI.
| Multrex wrote:
| I will try it soon with Docker. Thanks!
| petems wrote:
| Thanks! Feel free to ask any questions via Github issues
| or in Discord: https://discord.com/invite/mFFJKSTgw3
| divan wrote:
| I see a lot of people are doing similar projects, so it's clear
| that demand for ability to easily create apps for data management
| are on rise.
|
| I've stumbled upon this too, tried over time many web frameworks
| and tools like retool, and I had two biggest complaints: a) there
| is no one-size-fits-all solution; b) web stack sucks.
|
| A) The classic dilemma of using general-purpose solution vs
| custom-tailored solution. Creating admin panel with 3 screens
| with basic CRUD functionality should be a no brainer in 2021, but
| the complexity of underlying stack is so high, that there is
| virtually no choice except of using general purpose solutions.
|
| To be clear, I'm talking about "I should be able to make such an
| app alone in couple of hours max" essential complexity levels.
|
| B) Web is based on 3 pillars - HTML/JS/CSS, and I don't know how
| we ended up here, but those components were okay for linked text
| documents in 90s. They have never been designed for making modern
| reliable UI apps, and they are really bad design choices if we
| were building fullstack framework nowadays from scratch. No
| amount of complexity stuffed on top of this can solve the
| underlying nature of browser's stack. In short, it sucks at the
| fundamental level. And as more and more generations of
| programmers start their careers in the web world, objections to
| those stack choices are not answered, because they are no longer
| even raised.
|
| Personally I find it hard to maintain projects I did with all
| possible web frameworks after a year or so. And the amount of
| security issues, amount of accidental complexity it brings to the
| development framework and the ever growing frustration with the
| technical limitations of this stack makes me invest a lot into
| abandoning this "modern web stack".
|
| Plus, after 20+ years of writing SQL, I still find it suboptimal
| language for interaction with DB, and it contributes to the
| slowdown of development (and the need for general purpose
| solutions) too.
|
| --- So, instead of doing yet another framework, I decided to go
| the different path for my projects. First, I rethink the stack
| from the ground up and choose tech with the least amount of
| accidental complexity and cognitive overhead. Second, I do
| template the typical CRUD functionality, so I can quickly create
| new admin-like project and add new screens/entities (while
| keeping it independent source from the tool that generates the
| code).
|
| My current stack now is EdgeDB+Go+gRPC+Flutter.
|
| - EdgeDB has fantastic tooling and decades of PostgreSQL engine
| reliability under the hood, but the real magic for me is in their
| query language - you don't want to return to SQL ever again after
| EdgeQL.
|
| - Go - no comments, easy to write, easy to read, extremely fast
| (I almost never have to scale server for performance reasons) and
| the code I wrote 6 years ago works and compiles today and easy to
| maintain.
|
| - gRPC solves the single point of truth for API,
| serialization/deserialization and other API things, that has
| never been in the original thought of the typical JSON/REST/HTTP
| stack. It's super mature and saves me a lot of time in the
| syncing backend and frontend API code.
|
| - Flutter is a game changer many people not aware about. I write
| admin and user facing code in Flutter for almost 3 years now (2
| of them using their Flutter for Web), and it's just insanely
| good. In one go I get native iOS/Android/Windows/Mac/Linux and
| Web apps that are indistinguishable in the look and feel. The
| best thing that happen in UI development in the last 20 years, as
| for me (I've made Qt apps in the early 2000, and Qt was the
| previous best thing). I also develop my own admin UI library for
| my typical apps, that has all the "must have" features and
| design.
|
| So with this stack in mind, I simple wrote a command line tool in
| Go that does initial bootstrapping for new projects and adds new
| entities to the app with predefined templates (db schema, db
| code, conversion code, grpc handlers implementation, protobuf,
| flutter screens and API code). It takes around 2 seconds to
| generate a new screen given the fields definition. I then modify
| generated code as much as I want, not being "tied" to the tool.
| There is not a single line of JS/HTML/CSS there too, which is
| fantastic.
|
| I'm still polishing the tool and admin UI lib, and it's not
| opensource yet, but I can't describe how great it feels to have
| this tool in my toolkit. Some apps built with it are already in
| production (including web apps) and work amazingly, and I'm
| mostly working solo on them.
| Ciantic wrote:
| Interesting, you use EdgeDB but not GraphQL instead of gRPC? I
| looked in to EdgeDB and GraphQL seems to be a big part of it.
|
| With gRPC and UI side of things I think there is some issues,
| like no standard way to handle validation errors (e.g. email
| field has incorrect value), so everyone reinvents the wheel.
|
| Edit: Also this EdgeQL seems like nice way to interact also
| from UI. gRPC is not mentioned in the EdgeDB at all.
| divan wrote:
| Yes, EdgeDB has native GraphQL layer, but I'm not sure I need
| it. I still want to have a precise control over the the
| communication, memory usage and DB performance, plus as soon
| as you add new functionality on top of basic CRUD, it's not
| enough to talk directly from frontend to DB anymore.
|
| I'm not sure if those are my biases, but I still try to keep
| things into separated layers (i.e. DB, backend, communication
| and frontend), so I can change them without affecting the
| overall design too much.
___________________________________________________________________
(page generated 2021-11-02 23:01 UTC)