We coded a simple monitoring and alerting system on a Parisian transport line with Cursor in a few hours. A test to analyze AI’s agent capabilities for the code.
Will AI replace the developers? If the question is not yet decided, the many vibe-coding tools are already gaining many hours for developers. A concept previously requiring several days of development now takes only a few hours (even a few minutes for the simplest). To experiment with the possibilities of AI, we have tried to develop a complete visual monitoring system and alerting in the event of an anomaly on the transilian line P (yes, this is the one that brings us back to us). The goal? Have a simplely used visual system than usual transport applications (IDF Mobility, Bonjour RATP) while having a personalized alerting system.
1. The choice of ideal IDE
To launch us, we have chosen to use Cursor because the IDE offers the best model of Software Engineering of the moment: Claude 4. Windsurf (now owned by Openai) does not offer the model in its subscriptions (the company explains that Anthropic refuses it).
2. A first code base with Claude 4
But before launching Cursor, we generated Claude 4 opus via the anthropic chatbot a first version of the interface without the backend part. The goal is to have a code base to then advance in Cursor. We have uploaded the code to a remote server (dedicated KIMSUFI server at OVH) to be able to view future changes live in the web browser.
We use the following prompt with Claude 4:
Créez le code source complet et fonctionnel d'une interface web responsive pour un tableau d'affichage numérique des trains en temps réel, spécifiquement configuré pour présenter les départs de la ligne P du RER entre les gares d'Esbly et de Paris Gare de l'Est, en utilisant les technologies HTML5, CSS3 et JavaScript moderne pour garantir une compatibilité maximale et des performances optimales sur tous les appareils. L'interface doit afficher de manière claire et hiérarchisée les informations essentielles suivantes pour chaque train : l'heure de départ prévue, la destination finale, le numéro du train, le quai d'embarquement, ainsi que le statut en temps réel avec un système de codage couleur précis utilisant le vert (#28a745) pour les trains à l'heure, l'orange (#ffc107) pour les trains retardés avec indication du retard en minutes, et le rouge (#dc3545) pour les trains supprimés ou annulés. Le design doit respecter une esthétique épurée et moderne avec des cartes individuelles blanches (#ffffff) présentant des ombres portées subtiles pour créer de la profondeur, disposées sur un fond gris clair (#f8f9fa), organisées dans une grille responsive adaptative qui affiche deux colonnes sur les écrans de bureau et tablettes (min-width: 768px) et une colonne unique sur les appareils mobiles, avec des transitions fluides entre les breakpoints et une typographie lisible utilisant une police sans-serif système pour optimiser la lisibilité à distance. L'interface doit inclure un en-tête fixe affichant le nom de la ligne, l'heure actuelle mise à jour en temps réel, un indicateur de dernière mise à jour des données tout en intégrant des données d'exemple réalistes pour démontrer les différents états possibles et en prévoyant une structure modulaire permettant une extension future vers d'autres lignes de transport.
We then reworked the interface little by little with Cursor and his assistant in “agent” mode. This mode allows the model to act independently by modifying the code, by adding files and even by performing bash commands. The agent has, for example, installed missing outbuildings using UNIX system installation controls (APT-GET Install). On the other hand, you have to enter your password for SODO orders (UNIX administrator equivalent).
3. Use of the most efficient LLMs and at a lower cost
For the Backend part (heart of the functioning of the application), we used the Ile-de-France Mobilité APIs Prim. The latter provides via different APIs all the data necessary for the operation of the application. To work the structure and operation of the code, we preferred to deactivate the automatic selection of the model by Cursor to use more efficient or less expensive models. Thus, for complex generation tasks of new features or for the backend part of the system, we used Claude 4 Sonnet Thinking (reasoning). The anthropic model is perfect for Software Engineering and was then on promotion (a request being equal to 0.8 credit).
For the simple code publishing part we used Claude 4 SONNET in classic version without thinking mode. The model was then billed 0.5 credit. Finally to question the code base without modification (to understand the different interactions between the files), we used Gemini 2.5 Flash which (still in June 2025) does not consume any credit. It is perfect for generating code documentation. We were thus able to question AI about additional functions generated beforehand and understand their impact on the main business code.
4. Testing and debugging
Once the functional code is, we proceeded, with the Cursor agent, to the generalized testing and debugging of the whole code. Cursor, for example, detected a problem in filtration of API data by our system and corrected it. Finally, we have fabricated the code and generated unit tests and complete documentation.
The end result is visually simple but functional. The interface makes it possible to display the next trains on line P from the stations chosen by us and to display any deletions or train delays. The alerting part allows it to alert the user to delete a train or a delay in a given time slot (7 a.m. to 8:30 p.m. / 5.30 p.m. to 6:30 p.m. Monday to Thursday). In the event of problems, the system sends an SMS to the user using the Free Mobile API (the user being a customer) and an email using the PHPMAILER bookstore.
The index.php file is the input point of the application. He charges config.php (parameters), functions.php (utility functions) and logic.php (business logic). The user interface uses three components in the Partials/: Header.PHP, Controls.php and Journey_Card.Php. The monitoring system includes monitor.php and monitoring_config.php. The outbuildings are managed by composing: Twilio SDK (ultimately not used) and phpmailer for emails. Two test scripts validate the features: test_email_indep.php and test_monitor.php.
All these elements have been created gradually thanks to simple prompt with AI, such as “testing the mail by using Phpmaler” to generate the email test, for example.
The alerting surveillance script is executed automatically thanks to a CRON in the background on the server. The latter runs during the monitoring hours desired by the user.
The limits of vibe-coding
To make this interface and the alert part, we took about two hours. Without the assistance of Cursor, the task could have asked between one and several days (we are not developers). The time saving is really there. However, the exercise showed us the limits of vibe-coding. Sometimes the model can generate certain functions of buggy or hallucinate certain functions. It is therefore essential to understand the structure of the code to apply changes or return to orders made by AI. Without a concept of code, it seems unthinkable for the time being to develop a complex application in a few hours.
On the other hand, Cursor, and more generally the IDE AI native, drastically reduce the global time of production, for the benefit of productivity and creativity. The developer goes from the role of simple performer to conductor.




