<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ladipo Samuel</title>
    <description>The latest articles on DEV Community by Ladipo Samuel (@ladipo_samuel_7cfaa827bf5).</description>
    <link>https://dev.to/ladipo_samuel_7cfaa827bf5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg</url>
      <title>DEV Community: Ladipo Samuel</title>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ladipo_samuel_7cfaa827bf5"/>
    <language>en</language>
    <item>
      <title>The adrenaline of a new month: Merlin!</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Fri, 01 May 2026 18:05:52 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/the-adrenaline-of-a-new-month-merlin-2564</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/the-adrenaline-of-a-new-month-merlin-2564</guid>
      <description>&lt;p&gt;“I want to earn $10B every second this month. I want to build Jumia in 3 hours… &lt;strong&gt;MERLINNNN!&lt;/strong&gt;”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujo9lf9ea8op6pad15ef.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujo9lf9ea8op6pad15ef.jpeg" alt=" " width="800" height="625"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, if that energy could actually be sustained 24 hours a day for the entire month, maybe it works. But you’re not a robot, so let’s be real about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dwh4ldzplsf84619gdc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dwh4ldzplsf84619gdc.jpeg" alt=" " width="362" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have 31 days this month. That’s a lot of time to achieve meaningful progress, but still not enough to do everything at once. Habits don’t form in a day, and hobbies don’t stick in 3 hours. If you want to be productive, consistency in the right direction is what matters. This applies to developers and honestly anyone trying to get better at something.&lt;/p&gt;

&lt;p&gt;In April, I tried this approach, almost all of it. What stood out was that no matter how tough some days were, I showed up about 99% of the time. That alone made a difference. It’s not easy, and if you want to reach a new level, it won’t come from scrolling all day. It comes from intentional effort and some level of planning.&lt;/p&gt;

&lt;p&gt;A lot of people will tell you to create a timetable. Then you pack everything into it. Day one, you’re fully energized. Day two, still going. By day three, reality starts to hit. The plan is too heavy. It becomes overwhelming, then procrastination sets in. Before you know it, the month is gone and you’re relating a little too much to “successfully wasted the month.” It sounds like a joke, but it’s real for a lot of people.&lt;/p&gt;

&lt;p&gt;So what actually works? Start doing. Start small but be intentional. Set a plan you’re sure you can follow. Not something that looks impressive, but something realistic. Let each day end with you doing or learning something, no matter how small. After a week, adjust slightly. Add just a little more. Build gradually.&lt;/p&gt;

&lt;p&gt;You might not do something huge by the end of the month, but you would have made real progress. And that counts.&lt;/p&gt;

&lt;p&gt;Some days, you won’t feel like doing anything. That’s normal. Rest if you need to, but don’t abandon the plan. Keep it simple enough that you can always return to it.&lt;/p&gt;

&lt;p&gt;Rooting for you this month. You can do more than you think, just start small and stay consistent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse58tf02stf8u3soqly4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse58tf02stf8u3soqly4.jpeg" alt=" " width="377" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>productivity</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Cencori: A Serverless Infrastructure Layer for Secure and Scalable AI Applications</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Thu, 30 Apr 2026 16:32:17 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/cencori-a-serverless-infrastructure-layer-for-secure-and-scalable-ai-applications-1go9</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/cencori-a-serverless-infrastructure-layer-for-secure-and-scalable-ai-applications-1go9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The rapid adoption of large language models (LLMs) has accelerated the development of intelligent applications across domains such as healthcare, finance, and customer service. However, building production-grade AI systems remains a complex engineering challenge due to fragmented tooling, security vulnerabilities, and the operational overhead of orchestrating multi-model workflows. This paper presents &lt;strong&gt;Cencori&lt;/strong&gt;, a serverless infrastructure layer designed to unify model routing, persistent memory, agent orchestration, and security enforcement within a single backend platform. Unlike existing solutions that address these concerns in isolation, &lt;strong&gt;Cencori&lt;/strong&gt; integrates them at the infrastructure level, enabling developers to build reliable and scalable AI systems with reduced complexity. We analyze the system architecture of &lt;strong&gt;Cencori&lt;/strong&gt;, evaluate its core components, and position it within the broader AI tooling ecosystem. Our findings suggest that infrastructure-centric approaches significantly improve system robustness, developer productivity, and security in modern AI applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I. Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Large language models (LLMs) have evolved from experimental research artifacts into foundational components of modern software systems. Their ability to generate, reason, and interact using natural language has enabled a new class of applications, including conversational agents, automated decision systems, and intelligent assistants.&lt;/p&gt;

&lt;p&gt;Despite this progress, deploying LLM-based systems in production introduces significant challenges. Real-world AI applications are not composed of isolated model calls; rather, they operate as distributed systems requiring reliability, scalability, and security. Developers must manage multiple model providers, handle latency and failure scenarios, maintain conversational context, and protect systems against vulnerabilities such as prompt injection and data leakage.&lt;/p&gt;

&lt;p&gt;Current development practices rely on a combination of independent tools: model routers, orchestration frameworks, vector databases, and security filters. While effective in isolation, these tools collectively increase system complexity and operational overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori&lt;/strong&gt; addresses this fragmentation by introducing a unified infrastructure layer for AI systems. It abstracts core concerns such as routing, memory, orchestration, and security into a single platform, enabling developers to focus on application logic rather than system integration.&lt;/p&gt;

&lt;p&gt;This paper presents the design and architecture of &lt;strong&gt;Cencori&lt;/strong&gt;, evaluates its capabilities, and discusses its implications for building production-grade AI systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;II. Background and Related Work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The ecosystem of AI development tools can be broadly categorized into three areas: model access layers, orchestration frameworks, and frontend integration tools.&lt;/p&gt;

&lt;p&gt;Model access platforms provide unified interfaces for interacting with multiple LLM providers, enabling flexibility and redundancy. However, they are typically limited to request forwarding and lack deeper integration with application state or workflow logic.&lt;/p&gt;

&lt;p&gt;Orchestration frameworks enable developers to chain model calls and construct multi-step workflows. While powerful, these frameworks often require extensive configuration and do not inherently address system reliability or security concerns.&lt;/p&gt;

&lt;p&gt;Frontend-focused AI tools simplify the integration of AI into user interfaces but depend heavily on backend systems that developers must implement separately.&lt;/p&gt;

&lt;p&gt;Existing research has also highlighted emerging risks in LLM systems, particularly prompt injection attacks and data leakage [1], [2]. These challenges underscore the need for infrastructure-level solutions that incorporate security by design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori&lt;/strong&gt; differentiates itself by combining routing, memory, orchestration, and security into a unified backend abstraction. This approach aligns with principles from distributed systems design, where complexity is managed through layered architectures and well-defined interfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;III. System Architecture&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A. Architectural Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori&lt;/strong&gt; adopts a layered architecture that separates concerns while maintaining tight integration between system components. The overall structure is illustrated as follows:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Client Applications (Web, Mobile, APIs)&lt;/em&gt;&lt;br&gt;
                ↓&lt;br&gt;
        &lt;em&gt;Unified API Gateway&lt;/em&gt;&lt;br&gt;
                ↓&lt;br&gt;
        &lt;em&gt;Intelligent Routing Engine&lt;/em&gt;&lt;br&gt;
                ↓&lt;br&gt;
        &lt;em&gt;Multi-Provider LLM Layer&lt;/em&gt;&lt;br&gt;
                ↓&lt;br&gt;
        &lt;em&gt;Memory and State Management&lt;/em&gt;&lt;br&gt;
                ↓&lt;br&gt;
        &lt;em&gt;Security and Policy Enforcement&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This architecture enables modularity while ensuring that critical functions such as routing and security are consistently applied across all interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Core Components&lt;/strong&gt;&lt;br&gt;
1) API Gateway&lt;/p&gt;

&lt;p&gt;The API gateway serves as the primary interface between client applications and the platform. It is designed to be compatible with widely adopted APIs, allowing developers to integrate Cencori with minimal changes to existing systems.&lt;/p&gt;

&lt;p&gt;2) Routing Engine&lt;/p&gt;

&lt;p&gt;The routing engine dynamically selects LLM providers based on factors such as latency, cost, and availability. It supports fallback mechanisms, ensuring continuity of service in the event of provider failure.&lt;/p&gt;

&lt;p&gt;This dynamic selection process improves system resilience and enables cost-performance optimization at runtime.&lt;/p&gt;

&lt;p&gt;3) Memory Layer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori&lt;/strong&gt; incorporates a persistent memory system that allows applications to maintain context across interactions. This transforms inherently stateless model interactions into stateful experiences, improving coherence and usability in conversational systems.&lt;/p&gt;

&lt;p&gt;4) Security Layer&lt;/p&gt;

&lt;p&gt;Security is integrated directly into the infrastructure. The platform includes mechanisms for prompt injection detection, PII redaction, and input/output validation.&lt;/p&gt;

&lt;p&gt;By embedding these protections within the request pipeline, Cencori reduces the likelihood of vulnerabilities and ensures consistent enforcement across applications.&lt;/p&gt;

&lt;p&gt;5) Agent Orchestration&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori&lt;/strong&gt; supports the construction of multi-step workflows through agent orchestration. This enables developers to define structured processes involving multiple model interactions, external tools, and conditional logic.&lt;/p&gt;

&lt;p&gt;IV. Key Features&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori’s&lt;/strong&gt; design emphasizes the integration of multiple capabilities into a cohesive system.&lt;/p&gt;

&lt;p&gt;A. Dynamic Model Routing&lt;/p&gt;

&lt;p&gt;The platform enables seamless switching between model providers, improving reliability and enabling fault tolerance in distributed environments.&lt;/p&gt;

&lt;p&gt;B. Persistent Context Management&lt;/p&gt;

&lt;p&gt;The memory layer supports context retention across sessions, allowing applications to deliver more coherent and personalized interactions.&lt;/p&gt;

&lt;p&gt;C. Integrated Security Mechanisms&lt;/p&gt;

&lt;p&gt;Built-in protections ensure that applications are safeguarded against common vulnerabilities without requiring additional implementation effort.&lt;/p&gt;

&lt;p&gt;D. Workflow Automation&lt;/p&gt;

&lt;p&gt;Agent orchestration enables the development of complex AI systems that go beyond simple prompt-response interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;V. Implementation and Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cencori is designed for ease of adoption. Its compatibility with existing APIs allows developers to integrate the platform by modifying configuration parameters rather than rewriting codebases.&lt;/p&gt;

&lt;p&gt;The serverless architecture eliminates the need for infrastructure management, enabling automatic scaling and reducing operational overhead. This design aligns with modern cloud-native development practices and supports rapid deployment of AI applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VI. Applications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori’s&lt;/strong&gt; capabilities make it suitable for a wide range of applications:&lt;/p&gt;

&lt;p&gt;Conversational AI systems with persistent memory&lt;br&gt;
Healthcare applications requiring secure data handling&lt;br&gt;
Financial systems leveraging AI for analysis and automation&lt;br&gt;
Customer support platforms handling complex, multi-step queries&lt;/p&gt;

&lt;p&gt;In each case, the platform enhances reliability, scalability, and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VII. Evaluation&lt;/strong&gt;&lt;br&gt;
A. Advantages&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cencori&lt;/strong&gt; offers several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduced architectural complexity through unified infrastructure&lt;/li&gt;
&lt;li&gt;Improved reliability via dynamic routing and failover mechanisms&lt;/li&gt;
&lt;li&gt;Enhanced security through integrated protections&lt;/li&gt;
&lt;li&gt;Scalability enabled by serverless design
B. Limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite its advantages, certain limitations remain:&lt;/p&gt;

&lt;p&gt;Dependence on a centralized platform introduces vendor lock-in&lt;br&gt;
Abstraction may limit low-level customization&lt;br&gt;
Usage-based pricing models require cost monitoring at scale&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VIII. Future Work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Future developments may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for multimodal AI systems&lt;/li&gt;
&lt;li&gt;Edge deployment for latency-sensitive applications&lt;/li&gt;
&lt;li&gt;Advanced routing strategies driven by real-time metrics&lt;/li&gt;
&lt;li&gt;Integration with model training and fine-tuning pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;IX. Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The development of AI applications is increasingly defined by system-level challenges rather than model capabilities alone. Cencori addresses this shift by introducing a unified infrastructure layer that integrates routing, memory, orchestration, and security.&lt;/p&gt;

&lt;p&gt;By abstracting these concerns, the platform reduces development complexity while improving system reliability and scalability. As AI systems continue to evolve, infrastructure-driven approaches such as &lt;strong&gt;Cencori&lt;/strong&gt; are likely to play a critical role in enabling robust and production-ready applications.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>security</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Am I Really in Tech or Just Learning Languages?</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Fri, 17 Apr 2026 14:16:19 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/am-i-really-in-tech-or-just-learning-languages-4a8o</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/am-i-really-in-tech-or-just-learning-languages-4a8o</guid>
      <description>&lt;p&gt;Am I really in tech or not?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0dsa6sr0ux0zl94ltpx.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0dsa6sr0ux0zl94ltpx.jpeg" alt=" " width="366" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Honestly, there’s no “in between” in tech. You are either building, learning, or you are just… watching from the sidelines.&lt;/p&gt;

&lt;p&gt;A lot of people quietly struggle with this question. What actually qualifies someone as a developer? Do I need 10 languages? A big job title? A fancy GitHub?&lt;/p&gt;

&lt;p&gt;Let’s clear that up.&lt;/p&gt;

&lt;p&gt;To be in tech simply means you are specialized in a direction and actively building within it. Even systems that look like they “know everything” are still built on deep specialization under the hood.&lt;/p&gt;

&lt;p&gt;Now the real confusion usually starts here:&lt;/p&gt;

&lt;p&gt;“Is Python enough to call myself a developer?”&lt;br&gt;
“Do I need TypeScript, Go, Rust, Java, and maybe one alien language?”&lt;/p&gt;

&lt;p&gt;The honest answer is yes… Python is enough. TypeScript is enough. But not in the way most people think.&lt;/p&gt;

&lt;p&gt;And this is where people start entering what I call the “language hopping loop” 😄&lt;/p&gt;

&lt;p&gt;You learn Python.&lt;br&gt;
You build a few projects.&lt;br&gt;
Then someone says “JavaScript is where the jobs are.”&lt;br&gt;
You switch.&lt;br&gt;
Then another person says “Go is better for scalability.”&lt;br&gt;
You switch again.&lt;/p&gt;

&lt;p&gt;At that point, you are not learning deeper systems anymore, you are basically doing load balancing… but for your attention span 😭&lt;/p&gt;

&lt;p&gt;And the result?&lt;/p&gt;

&lt;p&gt;You might even land interviews, but when they ask deeper questions like system design, caching strategies, or how your API handles concurrency, things start feeling… blurry.&lt;/p&gt;

&lt;p&gt;Because the issue was never the language.&lt;/p&gt;

&lt;p&gt;There is no “best language”. There is only context.&lt;/p&gt;

&lt;p&gt;Python is not better than TypeScript. TypeScript is not better than Python. They are just tools optimized for different workloads, like how caching, indexing, and database choice depend on the system you are building.&lt;/p&gt;

&lt;p&gt;So how do you actually get into tech properly?&lt;/p&gt;

&lt;p&gt;Not the usual “learn a language, build a todo app, become senior engineer in 2 weeks” story 😄&lt;/p&gt;

&lt;p&gt;The real path is deeper than that.&lt;/p&gt;

&lt;p&gt;Start with a language. Yes.&lt;br&gt;
But don’t stay at surface level.&lt;/p&gt;

&lt;p&gt;Go beyond syntax:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understand how memory is managed&lt;/li&gt;
&lt;li&gt;learn how APIs actually handle requests under the hood&lt;/li&gt;
&lt;li&gt;explore scalability concepts like load balancing and caching&lt;/li&gt;
&lt;li&gt;break things, fix them, rebuild them better&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like mathematics.&lt;/p&gt;

&lt;p&gt;You don’t stop at BODMAS and call it a day. You move into algebra, calculus, and eventually deeper problem solving where everything connects.&lt;/p&gt;

&lt;p&gt;Tech is the same.&lt;/p&gt;

&lt;p&gt;Once you pick a path, start building real things. Then revisit them as your knowledge grows. Improve the architecture. Refactor the design. Optimize performance. That is where growth actually happens.&lt;/p&gt;

&lt;p&gt;And over time, something interesting happens.&lt;/p&gt;

&lt;p&gt;You stop saying “I know Python” and start saying “I understand systems.”&lt;/p&gt;

&lt;p&gt;That shift is what I like to call the transition from learning mode to improvement mode.&lt;/p&gt;

&lt;p&gt;It’s a bit like solo leveling 😄&lt;/p&gt;

&lt;p&gt;And here’s the final truth:&lt;/p&gt;

&lt;p&gt;Once you deeply understand one stack, moving to another becomes easier. Not because it is similar, but because your thinking has already adapted to complexity.&lt;/p&gt;

&lt;p&gt;That’s when you are truly in tech.&lt;/p&gt;

&lt;p&gt;Not because you know everything, but because you know how to learn anything.&lt;/p&gt;

&lt;p&gt;Every week, I will be sharing more of these, focused on practical technical growth, deeper understanding of systems, and lessons that actually help you become a better builder in tech.&lt;/p&gt;

&lt;p&gt;If you’re on the same journey, stick around. There’s more coming!!!&lt;/p&gt;

</description>
      <category>techtalks</category>
    </item>
    <item>
      <title>Testing API Security with Cencori: A Case Study Using InsecurePay</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Fri, 03 Apr 2026 19:25:10 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/testing-api-security-with-cencori-a-case-study-using-insecurepay-2lae</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/testing-api-security-with-cencori-a-case-study-using-insecurepay-2lae</guid>
      <description>&lt;p&gt;Before running any security scans, I needed something meaningful to test. So I built &lt;strong&gt;InsecurePay&lt;/strong&gt;, a simple payment API designed to mirror real-world payment systems, but intentionally implemented with relaxed security.&lt;/p&gt;

&lt;p&gt;At its core, InsecurePay handles three main functions:&lt;/p&gt;

&lt;p&gt;Authentication — a basic login endpoint that returns a token&lt;br&gt;
Payments — an endpoint that processes card payments&lt;br&gt;
Transactions — an endpoint to view processed payments&lt;/p&gt;

&lt;p&gt;The project is built with Node.js and Express, and it follows a structure that reflects many real backend systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routes handle incoming requests&lt;/li&gt;
&lt;li&gt;Controllers manage the business logic&lt;/li&gt;
&lt;li&gt;A mock database simulates data storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How InsecurePay Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a user sends a payment request, the API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accepts card details and payment information&lt;/li&gt;
&lt;li&gt;Simulates processing (no real payment gateway is used)&lt;/li&gt;
&lt;li&gt;Stores the transaction&lt;/li&gt;
&lt;li&gt;Returns a response containing the transaction details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first glance, everything works as expected. You can log in, make a payment, and receive a successful response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2h3ry87e6w4gxx6p6ftg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2h3ry87e6w4gxx6p6ftg.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r95ewyqlsq4h4qrns33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r95ewyqlsq4h4qrns33.png" alt=" " width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, despite being functional, the API had some serious security concerns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sensitive data like card numbers and CVV were exposed in responses&lt;/li&gt;
&lt;li&gt;Secrets were hardcoded directly into the codebase&lt;/li&gt;
&lt;li&gt;Critical routes, such as payments, lacked proper protection&lt;/li&gt;
&lt;li&gt;Logging exposed more information than necessary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these issues broke the application, but they violated basic security expectations. That was intentional.&lt;/p&gt;

&lt;p&gt;InsecurePay wasn’t designed to be perfect. It was built to reflect real-world flaws so they could be identified and addressed.&lt;/p&gt;

&lt;p&gt;At this point, I had a working API, but I already knew it wasn’t secure. So I decided to test it using &lt;strong&gt;Cencori Scan&lt;/strong&gt;, an AI-powered tool that detects security issues in codebases and suggests fixes. It can identify hardcoded secrets such as API keys and passwords, flag PII leaks like emails and card details, and detect vulnerable routes and unsafe coding practices.&lt;/p&gt;

&lt;p&gt;The goal was simple: could this tool detect real vulnerabilities in my project, and more importantly, help fix them?&lt;/p&gt;

&lt;p&gt;I ran the scan using:&lt;/p&gt;

&lt;p&gt;npx @cencori/scan&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisvxb93ha4ybdvqlyfwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisvxb93ha4ybdvqlyfwy.png" alt=" " width="427" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Results from the Scan&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57bfmi29eikm6fu2x2ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57bfmi29eikm6fu2x2ai.png" alt=" " width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cencori flagged several critical issues:&lt;/p&gt;

&lt;p&gt;Secrets in code — API keys and passwords were hardcoded&lt;br&gt;
PII exposure — card numbers, CVV, and emails were returned in responses&lt;br&gt;
Unprotected routes — sensitive endpoints lacked proper authorization checks&lt;br&gt;
Unsafe logging — request payloads exposed sensitive information&lt;/p&gt;

&lt;p&gt;While nothing broke, the security posture of the application was clearly weak.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fixing the Issues with Cencori&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I enabled Cencori’s auto-fix feature to address the problems more efficiently. To use Cencori Scan, you follow these steps:&lt;/p&gt;

&lt;p&gt;Step 1: Get an API key&lt;/p&gt;

&lt;p&gt;I generated a free API key from the dashboard and added it to my environment:&lt;/p&gt;

&lt;p&gt;$env:CENCORI_API_KEY="your_api_key_here"&lt;/p&gt;

&lt;p&gt;Step 2: Run auto-fix&lt;/p&gt;

&lt;p&gt;npx @cencori/scan --fix&lt;/p&gt;

&lt;p&gt;Cencori then analyzed each issue, suggested fixes, and updated parts of the code automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After reviewing the results, I made several important improvements:&lt;/p&gt;

&lt;p&gt;Moved secrets out of the codebase&lt;br&gt;
Added token-based protection to secure sensitive routes&lt;br&gt;
Removed sensitive fields such as card numbers and CVV from API responses&lt;br&gt;
Cleaned up unsafe logging practices&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl320a0p23xx5wy3x1gak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl320a0p23xx5wy3x1gak.png" alt=" " width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some fixes were applied automatically, while others required careful review and manual adjustments, which is expected when working with security-critical systems.&lt;/p&gt;

&lt;p&gt;If you’re a developer who relies on AI to generate or automate parts of your code, tools like this become even more important. Cencori helps ensure that what gets produced isn’t just functional, but also secure. It acts as a safety layer, catching issues like exposed secrets, data leaks, and weak access controls before they make it into production.&lt;/p&gt;

&lt;p&gt;In a world where speed is becoming easier with AI, security should not be an afterthought. Cencori helps you maintain that balance between building fast and building safely.&lt;/p&gt;

&lt;p&gt;You can test it in your own project here:&lt;br&gt;
&lt;a href="https://cencori.com/" rel="noopener noreferrer"&gt;https://cencori.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also explore the InsecurePay project here:&lt;br&gt;
&lt;a href="https://github.com/ladicodes/InsecurePay-API" rel="noopener noreferrer"&gt;https://github.com/ladicodes/InsecurePay-API&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>backenddevelopment</category>
    </item>
  </channel>
</rss>
