I was thinking for a long time to create a data storage just for myself. The idea would be to create a simple data structure, which will allow for me to push any kind of data into it with some tags and then I could search solely by utilizing those tags added.
Not in my wildest dreams I thought, that this project is going to be such a neat experience and experiment of working with agentic AI.
We are in the era of different AI solutions. At the time of wiriting this entry, agentic AI systems are starting to creep into our lives. I was blown away, when I was creating a new Github repository, and there was a new box to describe, what I want the repository to be about, and Copilot agent will try to set it up for me. I tried it, and in a few minutes I received a pull request, having a fully startable Spring Boot application. That blew me away.
For the past year or so I was using Visual Studio Code instead of my beloved Eclipse, and was trying out it's newest and greatest feature: Copilot code completion. To be honest, it bugs me occasionally, especially when I don't know what is already written by me and what is just a suggestion. There was also a chat, which I found out to be great for longer chats regarding solutions or when I needed some help.
As I was fiddeling with my newly created project I asked something basic (don't remember what it was) and it didn't just answered, it really DID it. I was, once again, blew away. Then I noticed, that it is in the 'Agent' mode, not just 'Chat'. And this is how my project got created.
The project itself started small. I only wanted a storage for plaintext data and some tags. That was done in literally a few minutes. Then I gradually moved on and started adding things. Search for data based on tags. Then user authentification, data ownership, JWT tokens, registration, admin users, categories, containerization, multi DB support etc. So the whole system grew. I could do this in the way, that I was browsing the internet, reading news etc. and Copilot was doing his thing with some occasional prompts of letting the application build, run, test and so on.
At the moment the project is taking it's shape and I am really happy, how this setup is working. My plan would be to have a first version ready and then focus on the visual representation. That is going to be a harder nut to crack (at least for me, who is not a UI developer). There are still a lot of features open, which I would like to implement. The current state of the project can be found on Github.
My main goal is to have a project, which I can easily deploy and provdes a feature rich platform for data storage. I am focusing on JSON structures. At the moment they are stored in a single database table. Logically the are categorized into a tree structure. Sharing is possible at the tree-node level. User access is only on read and write levels for the given node. Every entry and sub-node is automatically configured as shared. Also every newly created entry or node is shared as well.
Currently there is no structure check for the JSON data uploaded. What I am planning to do in the future is to add content processing features. Like JSON schema defined on the node level. Indexing the given entry by extracting entries based on JSON path defined on the given node next to the JSON schema, thus improving the data search dramatically.
What I am also missing at the moment is a nice UI. There is a simple web interface (btw also generated by Copilot), it is just something I asked Copilot to generate out of curiosity. What I would like to have is a web UI and a smartphone app. My goal would be to create a fully featured app, where the user can create it's own 'data buckets' and push data into it. The data bucket should be able to define the structure of the data (thus the JSON schema on the node level) and also indexing options (like when storing a refuiling bill we could extract the amount of fuel, price we paid and distance from last re-fuiling extracted and leave the rest of the information sitting in the JSON). I think this would make the app unique, user friendly and highly customizable.
On the security front, there is a custom JWT implementation. It works, but it smells like something welded together in an old garage out of necessity, like Tony Starks first Iron Main suit. I would like to have at least a few options and choose based on the configuration, which one to go with. First: leave the current one. It works fine for a single instance application. Second: use Oauth2-based external applications, like Google. Three: active directory. In corporate world that's still the biggest player, so why not including it here as well?
On a technical level I still need to create DDL SQL files for all the supported databases. I am not sure if I want to include Flyway or Liquibase to the project, but probably that would be the best option. However, I want to have the DB structures in a final state for the first stable version, so I don't have to alter my scripts all the time. There is no email service at the moment present. I am also not a fan of having emails sent around for the registration in the current solution. But there is no other way around, I guess. It is just something I'm not a fan of.
Well, as you can see, the backlog is still huge. No time to wase.
AI tools are here to stay. That's for sure. I just visited the Open Slava 2025 conference, where AI was the hottest topic of them all. The main idea was, that you will not be replaced by AI, but by someone, who utilizes AI. That idea is really the essence of this revolution and I fully agree with it. I don't think that not understanding the code that is getting created is a risk no custom is going to accept. Same as it was with the self-driving cars. We could have self driving cars, but who is responsible for the accidents. The best answer the automotive industry was able to come up with is that the responsibility lies with the person sitting behind the wheel. It doesn't matter what kind of automation and AI-powered decision making is under the hood. Ultimately it is still the driver who is chosing to enable/disable them (as long as that's an option) and is still in the driving seat who decided to get the car in motion. Same goes for the AI tools. Creating an program and letting it run is the decision of a person, team, company etc. So the resonsibility, what the program does and how it is doing it's job, lies with them as well. Ultimately, it will boil down to the person, who "created" the code. Maybe it's a naive thing to hold on to, and maybe it's just some deeply rooted fear that's working inside of me, but I don't think that Microsoft / Open AI / Google / IBM will take the responsibility, if your code blows up a car's engine, kills a patient with radiation or does something other horrible. We can all argue, that some low risk applications will be created by AI. And I fully agree, that it is going to be possible and maybe that's the future for greater apps as well. I'm by no mean a fortune teller, so I am not predicting the future. I rather try not to be paranoic or overly optimistic, but rather to apply common sense and analogies from the past. We'll see, how that goes.
But the chapter promissed lessons learned. So here they are. Copilot is smart. Like, really smart. And then it does dumb things occasionally. Like starting the application and then killing the app in the terminal just to run a curl request on it. After the 2nd try it realized this and altered it's action. So I guess we're back to smart. It also picked up changes I did. In a given moment it started writing changelog documents. When it was too much of those documents, I moved them to the changelog folder leaving only the README.md and BACKLOG.md in the root project folder. Copilot picked the change up automatically. I was impressed. Then I asked Copilot to create an endpoint for creating sub-categories. It did that with flying colors in a few minutes. The only thing it forgot to check if the given user has access to the given category (e.g. is owner of, or is shared with him). Pointing this out in the second prompt, it was corrected within a minute or two.
So is it smart. Kinda. Does it work? Absolutely. Will I trust AI for any application to fly without going through the code at least partially? No, not yet. Maybe in a few months. I am really excited about where this will lead us. Probably the biggest lessons learned for me was, that for the AI and I think basically for most of the tools working with code, structure and class categorization is not a huge deal. Everything could be in the same package (assume Java here) and maybe in a few service classes. Readability is not something the AI models are concerned about. And that is a huge advante when writing classes like controllers with the annotations including Open API documentation. Those things are really hard for me to read, since there is so many ballast going on with so many different indentation, that I often lose focus, or just get unmotivated to read/write it. AI did that without any issues and the text it generates was correct. But, the controller logic was building up, making service calls from controllers etc. It is working, but it's not really a nice structure. For us, humans, that is getting messy, realy quick. So I asked Copilot to refactor the code. Interestingly, it was aware, what I was asking and did it real nicely. So we have to be specific, when working with AI and act as a guard, so it remains human readable. At the end, our source files doesn't just describe the solution, but it is also a way of communication with our fellow programmers. Let's keep it that way.