How artificial intelligence is transforming the way we write code
Introduction
In today’s technological landscape, artificial intelligence is radically redefining how we develop software. At Biomine S.r.l., we embraced this transformation by adopting an approach that the developer community has dubbed “Vibecoding“: a collaborative development methodology between human programmer and AI assistant.
In this article, we share our firsthand experience developing CLISpoofing, an enterprise application built entirely using this new paradigm.
The Context: Fighting Phone Spoofing in Italy
Before discussing the development experience, it’s essential to understand the context in which CLISpoofing was born.
CLI spoofing (Calling Line Identification) is a fraudulent practice where a caller masks their real phone number, making a different number appear on the recipient’s display—often that of banks, institutions, or legitimate companies. This technique is used for scams, phone phishing, and other illicit activities that cause significant damage to citizens and businesses every year.
To combat this phenomenon, AGCOM (the Italian Communications Regulatory Authority) promoted an initiative involving all major Italian telecom operators: TIM, Vodafone, WindTre, Fastweb, Iliad, PostePay, and many others. The goal is to create a real-time verification system that validates the authenticity of the calling number before the call reaches the recipient.
To achieve this objective, an interconnection network was built among all participating operators, based on standardized REST APIs. Each operator exposes verification endpoints and queries other operators to validate that the calling number actually belongs to the declared originating network.
CLISpoofing is the system that Biomine S.r.l. developed to manage this infrastructure: a gateway that orchestrates verifications between operators, handles routing logic, implements resilience mechanisms (circuit breaker, load balancing), and collects detailed metrics for monitoring the entire ecosystem.
What is Vibecoding?
The term “Vibecoding” describes a software development approach where the programmer works in symbiosis with an AI assistant, communicating intentions in natural language and collaborating iteratively to translate them into working code.
It’s not about completely delegating code writing to AI, nor using it as simple autocomplete. Rather, it’s a continuous conversation where:
- The developer maintains the architectural vision and strategic decisions
- The AI contributes implementations, suggestions, and patterns
- Both iterate rapidly on problems and solutions
Our Stack Tools
To implement this methodology, we used:
- Claude Code CLI: Anthropic’s command-line interface for interacting with Claude directly in the terminal — the main tool in our workflow
- Visual Studio Code with Remote SSH: for working on a dedicated Linux development server
Initially, we also experimented with Roo Code (a VSCode extension), but we quickly discovered that working directly with Claude Code CLI offered greater control and flexibility. The simplicity of the command line, combined with the model’s power, proved to be the winning combination.
This configuration allowed us to keep all projects on an Ubuntu 22.04 server, leveraging Claude’s power directly in the development environment.
The CLISpoofing Project
From a technical standpoint, CLISpoofing is a complex enterprise system comprising:
- Node.js Backend for business logic, REST APIs, and orchestration of verifications between operators
- React Frontend with TypeScript for the management and configuration interface
- RTG System (Real-Time Gateway) for managing each operator’s endpoints, with load balancing and circuit breaker
- InfluxDB for high-frequency metrics and telemetry collection
- Grafana Dashboards for real-time monitoring of performance and system health
The application must handle thousands of verifications per second, ensuring response times in the millisecond range and high reliability. Each operator has different configurations, multiple endpoints for redundancy, and specific policies to comply with.
The Development Experience
Phase 1: Architecture and Setup
The first challenge was defining the architecture. Here, Vibecoding immediately showed its value: we could discuss architectural options with the AI, exploring pros and cons of different solutions before writing a single line of code.
The AI not only suggested patterns but contextualized them according to our specific needs, considering factors like scalability, maintainability, and integration with existing systems.
Phase 2: Iterative Development
The heart of Vibecoding is rapid iteration. A typical development cycle worked like this:
- Objective description in natural language
- Implementation proposal from the AI
- Review and feedback on generated code
- Refinement based on tests and actual behavior
- Automatic documentation of work completed
This approach proved particularly effective for:
- Flux queries for InfluxDB: Flux syntax can be challenging; the AI dramatically accelerated writing complex queries for dashboards
- React components: from basic structure to custom hooks, frontend code was developed with very fast iterations
- REST APIs: endpoint definition, validation, error handling
Phase 3: Testing and Debugging
An underestimated aspect of Vibecoding is debugging support. When behavior wasn’t as expected, we could describe the problem and get:
- Hypotheses about possible causes
- Test code to isolate the problem
- Proposed solutions with rationale explanations
We also integrated Playwright for automated E2E tests, allowing the AI to autonomously verify if changes resolved the issues encountered.
Phase 4: Documentation
The application’s User Guide was created directly in Markdown, integrated into the React frontend for contextual reference. The AI supported both content structure and the visualization component implementation.
Benefits Observed
Development Speed
Features that would have taken days were completed in hours. Not because the AI writes code faster, but because it drastically reduces “context switching” and research time.
Code Quality
The AI acts as a constant “second pair of eyes,” suggesting best practices, identifying potential issues, and maintaining stylistic consistency across the codebase.
Integrated Documentation
Code is born already documented. Conversations with the AI naturally produce explanations that become comments, READMEs, and technical documentation.
Learning Curve
For less familiar technologies (like Flux or specific React patterns), the AI functioned as an on-demand mentor, accelerating learning without sacrificing understanding.
Challenges and Considerations
Context Management
Vibecoding sessions can consume many tokens. We learned to structure conversations efficiently, using CLAUDE.md files to maintain context between sessions.
Constant Verification
AI-generated code always requires review. Not everything proposed is optimal, and final responsibility remains with the human developer.
Learning Curve… for Prompting
Communicating effectively with AI is a skill that develops over time. The first days were less productive than later ones, as we refined how to formulate requests.
Conclusions
The experience with CLISpoofing convinced us that Vibecoding is not a passing fad, but a paradigm shift here to stay. It doesn’t replace the developer but significantly amplifies their capabilities.
For those approaching this methodology, our advice is:
- Start gradually: not all code needs to be “vibecoded”
- Maintain control: AI is a collaborator, not a replacement
- Invest in setup: a good environment configuration pays enormous dividends
- Document the process: tracking sessions helps improve over time
The future of software development is collaborative, and we’re excited to be part of this evolution.
Biomine S.r.l. is a company specializing in technological infrastructure, with expertise ranging from cryptocurrency mining to AI systems consulting. For more information about our services, contact us.

