Blog

From Idea to MVP in Weeks: How A&C Consulting Built a SaaS Tender Platform

From Idea to MVP in Weeks: How A&C Consulting Built a SaaS Tender Platform

05/05/2025

<p>In 2024, <a href="https://www.ac-consulting.fr/" target="_blank">A&amp;C Consulting</a>, a company with more than three decades of experience delivering tailored ERP and CRM systems, faced a new challenge. One of their clients, operating within a complex ecosystem of referencing procedures and strict governance requirements, was losing time and accuracy because of manual workflows, inconsistent processes, and fragmented collaboration. Bids needed to be coordinated across multiple companies and stakeholders under intense deadlines, leaving little room for efficiency.&nbsp;</p><p>But A&amp;C Consulting didn’t want to spend a year building a custom tool from the ground up. Instead, they turned to <a href="https://qodly.com/platform" target="_blank"><strong>Qodly</strong></a>, a new <strong>hybrid low-code SaaS platform</strong> built to bring together the best of both traditional development and visual programming.&nbsp;</p><p>And in just a few weeks, their vision began to take shape.&nbsp;</p><p>&nbsp;</p><img src="/sites/default/files/How-AC-Consulting-Built-a-SaaS-MVP-Fast-with-Qodly-img-4.png" data-entity-uuid="2bd1306e-5872-441a-a594-a9703cbcdf48" data-entity-type="file" alt="" width="733" height="298"><p>&nbsp;</p><p>&nbsp;</p><h2>The Birth of BGA - Business, Governance, Automation&nbsp;</h2><p>BGA was more than just another internal tool. It was A&amp;C Consulting’s answer to a recurring pain point in the industry: how to streamline the lifecycle of referencing procedures, from sourcing to compliance to recruitment - while reducing human error and administrative burden.&nbsp;</p><p>For Hassan Ould, General Manager at A&amp;C Consulting, the mission was to transform the manual process into a digital workflow: reusable, collaborative, and built to scale. Qodly made it possible.&nbsp;</p><div class="container wysiwyg"><blockquote><p>We had a clear business need and a bold idea. But we didn’t want to wait months to validate our concept. With Qodly, we could move fast, iterate quickly, and test our model in the real market. We identified a business requirement and had a concept. With Qodly, we could act immediately, we simply created it.</p></blockquote></div><p>Their vision was clear: automate the chaos, speed up delivery, and enable multi-company collaboration, all while staying compliant.&nbsp;</p><p>&nbsp;</p><img src="/sites/default/files/How-AC-Consulting-Built-a-SaaS-MVP-Fast-with-Qodly-img-1.png" data-entity-uuid="15636d31-822d-481e-b0b6-717cb7c35c12" data-entity-type="file" alt="" width="1020" height="415"><h2>&nbsp;</h2><h2>Why Qodly Low-Code Was the Right Fit</h2><p>Qodly offered the perfect <strong>mix of speed and control</strong>.&nbsp;</p><p>As a hybrid low-code platform, it allowed A&amp;C Consulting to:&nbsp;</p><ul><li>Build quickly with drag-and-drop visual tools</li><li>Customize deeply the code via <strong>Qodly Script</strong></li><li>Host and scale efficiently in the <strong>Qodly Cloud</strong></li></ul><p><em>“With Qodly, we went from zero to a working MVP in just a few weeks,”</em> says Hassan.</p><p>&nbsp;</p><img src="/sites/default/files/How-AC-Consulting-Built-a-SaaS-MVP-Fast-with-Qodly-img-2.png" data-entity-uuid="8aef3012-4df2-4e6a-8dd4-596d59f41f39" data-entity-type="file" alt="" width="1020" height="415"><p>&nbsp;</p><p>A&amp;C Consulting developers already had experience in various stacks: 4D, PHP, Laravel, JavaScript, React, etc. But Qodly offered something different, a hybrid low-code environment that blended the accessibility of drag-and-drop UI with the power of custom scripting.&nbsp;</p><p><em>“For us, Qodly was a true accelerator,”</em> says Jean Graveline, a senior developer with deep experience in 4D.</p><div class="container wysiwyg"><blockquote><p><em>Qodly's scripting language felt natural, and it allowed us to translate our existing protocols directly from 4D into something new, without starting from scratch. Also because we use ORDA.</em></p></blockquote></div><p>Romain Vernhet, a full-stack developer with a JavaScript background, saw it from another angle: "Qodly Script felt close to JavaScript. It gave us freedom — and speed."</p><p>The combination of visual building and traditional coding meant everyone on the team — whether from a 4D or web background could contribute.&nbsp;</p><p>The platform empowered both longtime 4D developers and new web developers to collaborate. Qodly Script, with its syntax resembling 4D and JavaScript, made onboarding smooth.&nbsp;</p><p><em>“Qodly speaks both languages for app development, traditional and modern. That is what makes it powerful,</em>” adds Franck, who leads the product strategy at A&amp;C Consulting.&nbsp;</p><p>&nbsp;</p><h2>From MVP to Production in Weeks&nbsp;</h2><p>A&amp;C Consulting began prototyping BGA in September 2024, and by January 2025, the platform was in production with real clients.&nbsp;</p><p>Built around two core modules (Tenders Management and Information Technology Consulting), BGA is already delivering value.</p><p>And more is on the roadmap. Future versions will integrate deeper AI capabilities to draft technical files, flag inconsistencies, and assess company compliance, before tenders are even submitted.</p><p>&nbsp;</p><img src="/sites/default/files/How-AC-Consulting-Built-a-SaaS-MVP-Fast-with-Qodly-img-3.png" data-entity-uuid="e1646bac-1568-4942-97ca-8e8a421d4cd3" data-entity-type="file" alt="" width="1020" height="415"><h2>&nbsp;</h2><h2>Lessons from the Field: Speed, Simplicity &amp; Scalability&nbsp;</h2><p>While there were challenges, such as limitations in version control within the SaaS environment, the team was adapted with regular Git exports and shared workflows. They used manual backups through FTP. Debugging tools and DevOps integration are areas where the team sees room for Qodly to evolve, but overall, the experience was “<strong>productive and fast</strong>.” <em>“From a DevOps point of view, Qodly helped us avoid heavy infrastructure setup</em>,” said Hassan.&nbsp;</p><p><em>“Hosting and deployment were simplified, and we gained a lot of time.”</em> And thanks to Qodly’s component-based structure and use of REST APIs, the platform remains highly modular, ready to expand into new markets and adapt to other operational needs.</p><p>&nbsp;</p><h2>Looking Ahead: A Long-Term Vision&nbsp;</h2><p>What began as an MVP is now part of a much larger vision. A&amp;C Consulting wants to scale BGA across new client segments, and potentially replicate the model for other industries with similar needs. For Hassan and his team, the success of BGA validates a broader trend: low-code doesn’t have to mean limited capability.&nbsp;</p><p>With Qodly, they’re not just experimenting - they’re building tools with the power and longevity to last for years. Hassan notices&nbsp;</p><div class="container wysiwyg"><blockquote><p><em>We’ve seen massive enterprise systems built with older technologies. Now we see the same potential in Qodly. It’s just the beginning.</em>&nbsp;</p></blockquote></div><h2>Final Thoughts: Low-Code Without Limits&nbsp;</h2><p>The success of BGA speaks not only to A&amp;C Consulting’s vision but to Qodly’s promise as a next-generation hybrid low-code platform.&nbsp;</p><p><em>“It’s rare to find a tool that meets both your technical needs and your business urgency,” says Hassan. “With Qodly, we didn’t have to choose. We got both.”</em>&nbsp;</p><p>A&amp;C Consulting’s success with Qodly shows how traditional development teams can use <strong>modern low-code tools</strong>. They can create scalable, smart, cloud-native platforms without any compromise.&nbsp;</p><p>Whether you’re building for tenders, compliance, HR, or operations, <strong>Qodly</strong> lets you go from idea to impact, fast.</p><p>In a world where digital transformation can’t wait, Qodly empowers teams like A&amp;C Consulting to act on ideas - fast, and at scale.</p><div class="container wysiwyg"><p class="text-align-center"><a class="btn btn-violet" href="https://cloud.qodly.com/" target="_blank">Start creating your app now&nbsp;</a></p></div>

Discover how A&C Consulting used Qodly’s hybrid low-code platform to build BGA.

Integrating DeepSeek API with Qodly: A Quick Guide

Integrating DeepSeek API with Qodly: A Quick Guide

04/09/2025

<p><span lang="EN-US">This guide provides a quick start to integrating <strong>DeepSeek API</strong> with<strong> Qodly</strong>. We’ll be using the Qodly’s HTTPRequest class to send user queries to DeepSeek and retrieve AI-generated responses effortlessly.</span></p><p>&nbsp;</p><h2>1. Request your API key:</h2><p><span lang="EN-US">Before getting started, you’ll need to request your API key from DeepSeek’s website to authenticate your requests in your application.</span></p><p><span lang="EN-US"><strong>Base URL:</strong></span></p><p><span lang="EN-US">The API url we’ll be using in this demo :</span><code><span lang="EN-US"> </span></code><a href="https://api.deepseek.com/v1/chat/completions"><code><span lang="EN-US">https://api.deepseek.com/v1/chat/completions</span></code></a></p><p class="text-align-justify"><span lang="EN-US"><sup>The /v1/chat/completions endpoint will allow us to send chat-like queries to DeepSeek's API and receive AI-generated responses, enabling interactive, dynamic conversations within our application.</sup></span></p><p class="text-align-justify">&nbsp;</p><h2 class="text-align-justify">2. Integrate DeepSeek with Qodly:</h2><p class="text-align-justify">We’ll demonstrate how to connect to DeepSeek using Qodly’s HTTPRequest class within a singleton pattern, ensuring efficient API usage.<span lang="EN-US"></span></p><pre><code class="language-4d language-plaintext">shared singleton constructor() this.apiKey = "your_api_key" this.apiUrl="https://api.deepseek.com/v1/chat/completions" exposed function chatbot(prompt : string):string var&nbsp;jsonBody,content : string var&nbsp;data : object&nbsp;= newObject() var&nbsp;request : 4D.HTTPRequest var&nbsp;requestOptions,jsonResponse:object data.model = "deepseek-chat" data.messages = [(newObject("role", "user", "content",prompt))] data.temperature = 0.1 data.max_tokens = 500 jsonBody = jsonStringify(data) requestOptions = {} requestOptions.method = "POST" requestOptions.headers = newObject("Authorization", "Bearer "+this.apiKey, "Content-Type", "application/json") requestOptions.body = jsonBody requestOptions.dataType = "text" request = 4D.HTTPRequest.new(this.apiUrl, requestOptions) request.wait() if&nbsp;((request.response.status == 200) &amp;&amp; (valueType(request.response.body) == kString)) try jsonResponse = jsonParse(request.response.body) content = jsonResponse.choices[0].message.content catch content = "Error : Parsing went wrong." end else content = "Error : HTTP status: "+string(request.response.status) end return content</code></pre><ul><li><span style="font-family:Symbol;" lang="EN-US"></span><span lang="EN-US">API Initialization: The singleton constructor sets up the API key and URL. The singleton pattern ensures that only one instance of the connection is used throughout the application.</span></li><li><p style="line-height:normal;"><span lang="EN-US">Sending Requests: The chatbot function sends a user prompt to DeepSeek’s API via a POST request, with necessary headers (Authorization, Content-Type).</span></p></li></ul><pre><code class="language-4d language-plaintext">data.model = "deepseek-chat" data.messages = [(newObject("role", "user", "content",prompt))] data.temperature = 0.1 data.max_tokens = 500</code></pre><p style="margin-left:.25in;"><span lang="EN-US">Here’s a breakdown of those lines:</span></p><ul><li><p style="line-height:normal;"><span lang="EN-US"><strong>data.model = "deepseek-chat"</strong></span><em><span lang="EN-US">:</span></em><span lang="EN-US"> Specifies the AI model to use for generating responses.</span></p></li><li><p style="line-height:normal;"><span lang="EN-US"><strong>data.messages = [(newObject("role", "user", "content", prompt))]:</strong> Defines the messages for the chat, with the user's input (prompt) being passed in as the message content. The "role" is set to "user" to indicate the sender.</span></p></li><li><p style="line-height:normal;"><span lang="EN-US"><strong>data.temperature = 0.1</strong>: Controls the randomness of the response. The lower the value, the more deterministic and focused the response becomes.</span></p></li><li><p style="line-height:normal;"><span lang="EN-US"><strong>data.max_tokens = 500</strong>: Sets the limit of the response ‘length.</span></p></li></ul><pre><code class="language-4d language-plaintext"> jsonBody = jsonStringify(data) requestOptions = {} requestOptions.method = "POST" requestOptions.headers = newObject("Authorization", "Bearer "+this.apiKey, "Content-Type", "application/json") requestOptions.body = jsonBody requestOptions.dataType = "text" request = 4D.HTTPRequest.new(this.apiUrl, requestOptions) request.wait()</code></pre><p style="line-height:normal;">&nbsp;</p><p style="line-height:normal;"><span lang="EN-US">The code snippet performs one main action:</span></p><ul><li><p style="line-height:normal;"><span lang="EN-US">&nbsp;Setting up and sending the request, where data is stringified, HTTP request options are configured (method, headers, body, and response type), and the request is sent via 4D.HTTPRequest.new(), followed by waiting for the response.&nbsp;</span></p></li><li><p style="line-height:normal;"><span lang="EN-US">It then handles the response by parsing it and extracting the chatbot's reply, with error handling for any HTTP or parsing failures.</span></p></li></ul><p style="line-height:normal;">&nbsp;</p><pre><code class="language-4d language-plaintext"> if&nbsp;((request.response.status == 200) &amp;&amp; (valueType(request.response.body) == kString)) try jsonResponse = jsonParse(request.response.body) content = jsonResponse.choices[0].message.content catch content = "Error : Parsing went wrong." end else content = "Error : HTTP status: "+string(request.response.status) end return content</code></pre><p style="line-height:normal;">&nbsp;</p><ul><li><p style="line-height:normal;"><span lang="EN-US">This approach efficiently manages API connections and allows easy integration with DeepSeek’s AI-driven chat responses.</span></p><p style="line-height:normal;"><span style="font-size:14.0pt;" lang="EN-US"></span></p></li></ul><h2>3. Building the Interface</h2><p><span lang="EN-US">For the interface, you can create a simple layout with:</span><span style="font-size:14.0pt;line-height:115%;" lang="EN-US"></span></p><ul><li><span lang="EN-US">A <strong>Text Input</strong> that captures the user's question, which is then sent to the DeepSeek API.</span></li><li><span lang="EN-US">A <strong>Button</strong> that triggers the function from the singleton class. When clicked, it initiates the API call, sending the user input to the DeepSeek service and retrieving the response.</span></li><li><p><span lang="EN-US">A simple <strong>Text&nbsp;</strong>to show the API response.</span></p><p><span lang="EN-US">This ensures easy interaction with DeepSeek, allowing users to input questions and view results.</span></p></li></ul><img src="/sites/default/files/deepseek-qodly-integration.png" data-entity-uuid="fc25f7df-7906-4455-af8a-be4027900e72" data-entity-type="file" alt="" width="1020" height="415"><h2>4. Demo</h2><img src="/sites/default/files/deepSeekQodly.webp" width="906" height="428"><p>&nbsp;</p><h2>5. Conclusion</h2><p><span lang="EN-US">By integrating DeepSeek’s AI capabilities with Qodly, you can easily enhance your application’s data analysis features. The HTTPRequest class and singleton pattern streamline the process, making it easier to build scalable, data-driven solutions.</span></p>

This guide provides a quick start to integrating DeepSeek API with Qodly. We’ll be using the Qodly’s...