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.
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.
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.
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.