Blog
All Blog Posts | Next Post | Previous Post
A hands-on AI coding experience and comparison between Claude, ChatGPT and Gemini on a real data backend : StellarDS.io
Today

Most AI coding demos avoid the hard part: integrating with a real cloud backend, with real OAuth, and real data shape inconsistencies. This experiment did the opposite. The experiment was done to learn what AI can already reach today, learn how we can effectively improve the flow ourselves and how we can improve the context we provide to improve the process, because:
Were entering a phase where developers who understand how to collaborate with AI will move faster, experiment more boldly, and ship more confidently.
Not because AI replaces engineering
but because it amplifies it.
- Build the same responsive JavaScript + Bootstrap multi-tenant TodoList app
- Use https://stellards.io as the cloud data backend
- Authenticate users through https://stellards.io OAuth2
- List active tasks (Status=0), edit task fields, and create new tasks
- Use the same initial prompt for all three AI CLI tools : Claude Code, OpenAI Codex and Google's Antigravity each using their latest model offerings.
Original generation prompt
"Create a responsive JavaScript Bootstrap using web client todolist application using StellarDS.io as a backend. You find the StellarDS.io backend REST API swagger at https://stellards.io/Documentation/Swagger. Your REST API key and secret are in keys.txt. This is a multitenant todolist app. Let the user login via the StellarDS.io OAuth access. The main screen should list all active todolist items. The status of a todolist item is set via the Status field. This is an integer field where 0=active and 1=done. On this main screen have an Edit button from where a new page is shown to allow to edit all fields of the todoitem. A dropdown should allow to select the status. Add also a button on the main screen from where a new screen is shown where a new todolist item can be added. The overall UI style should be modern classic Bootstrap business style."
First round
In a first round, we noticed that for all 3 AI providers, there was a considerable struggle to generate the code to use the StellarDS.io REST API based on the Swagger documentation. We noticed that it made too many false assumptions, for example on the meaning of parameter lists and subtle differences in the expected JSON. We were in fact disappointed that each of the AI providers did not seem to come to results. So, we took a step back and decided to improve our StellarDS.io Swagger documentation. We fixed a couple of links and we improved and extended the information available especially for request parameters. After having done that, we erased all history and restarted from scratch.
Criteria
Claude iterations
Iteration 1 When I login, the login button does not disappear, i see the list of todo items under this login screen. Further, when I click on "add new todo" nothing happens. When i click on logout nothing happens as well Iteration 2 The login screen is still not disappearing after login, secondly the REST API call to create a new todoitem is wrong. The payload should contain a "records" array of todo items, also when only one todo item is inserted. See the swagger doc at https://api.stellards.io/swagger/v1/swagger.json Iteration 3 The delete todo item REST API call is wrong, it should be a HTTP DELETE command with query parameter "record" specifying the ID of the item to delete
Gemini via Antigravity iterations
Iteration 1 You should be able to use callback URL https://www.tmssoftware.com/bruno/todolist/gemini/auth.html Iteration 2 The list of items displayed shows "untitled" everywhere , it should display the todo item "Name" property. Also add on this list the capability to delete an item. First prompt to ask user consent before an item is deleted Iteration 3 The delete REST API is documented at https://stellards.io/Documentation/Swagger, it should use the request parameter record=ID to delete the specified record with the HTTP DELETE command Iteration 4 Your request to delete a todo item was https://api.stellards.io/v1/data/table?project=a1199fd7-f074-4f8d-7177-08dcc1018cd1&table=523&record=undefined but the record query param should have the todoitem ID and not "undefined"!
OpenAI Codex iterations
Iteration 1 Your REST API call to create a new todo item is wrong. In the swagger doc https://stellards.io/Documentation/Swagger it is explain this should be a POST call where the JSON contains the "records" element that is an array of the new todo items to be created. Please correct accordingly Iteration 2 The rest api call for editing a single item is also wrong. please refer to swagger https://stellards.io/ Documentation/Swagger for the data GET call where you'll need to use the whereQuery param to specify to get the item based on todo item id Iteration 3 Payload for the updateTodo() function is also not matching the requirement as found in swagger https://stellards.io/ Documentation/Swagger. Also here, the JSON should have an array of item IDs and a record JSON object containing the todo item properties Iteration 4 ok, finally also add in this list for every item a delete button. When the user clicks the delete button, first prompt the user to query if it is allowed to continue to delete the item and when answered Yes, then proceed to call the REST API to delete the selected item Iteration 5 The REST API call to delete a todo item is wrong. The id of the item to be deleted is passed as query parameter "record" of a HTTP DELETE command. See https://stellards.io/Documentation/Swagger
Result comparison
So, let's see now what UI the 3 AI offerings came up with, with an after-all basic prompt instruction about the UI. In other words, the AI had a reasonable freedom to create the UI
Claude final app


Gemini via Antigravity final app


OpenAI Codex app


Architecture and UI comparison
Claude Code
Gemini
- Uses same API client IDs at multiple places in code!
OpenAI Codex
Side-by-side summary
What This Says About StellarDS.io as a Vibe-Coding Backend
Explore yourself
Bruno Fierens
This blog post has not received any comments yet.
All Blog Posts | Next Post | Previous Post