<?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: Keiler Guardo Herrera</title>
    <description>The latest articles on DEV Community by Keiler Guardo Herrera (@reliek21).</description>
    <link>https://dev.to/reliek21</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%2F610318%2Fd822e857-7e9e-4a22-8b28-0a8ca40dfabd.jpeg</url>
      <title>DEV Community: Keiler Guardo Herrera</title>
      <link>https://dev.to/reliek21</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reliek21"/>
    <language>en</language>
    <item>
      <title>How I Created Keppli Finance: An AI-Driven App That Transforms Personal Money</title>
      <dc:creator>Keiler Guardo Herrera</dc:creator>
      <pubDate>Sat, 28 Jun 2025 02:19:00 +0000</pubDate>
      <link>https://dev.to/reliek21/how-i-created-keppli-finance-an-ai-driven-app-that-transforms-personal-money-2lik</link>
      <guid>https://dev.to/reliek21/how-i-created-keppli-finance-an-ai-driven-app-that-transforms-personal-money-2lik</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The lack of financial education has been a constant obstacle in my close circle. Growing up without a strong guide for managing money, I witnessed firsthand the consequences of not understanding basic personal finance concepts. It’s not just a personal observation: a recent report found 38% of surveyed individuals said their lack of financial literacy cost them at least $500 USD in 2022. &lt;a href="https://www.cunfl.com/lack-of-financial-literacy-cost-15-of-adults-at-least-10000-in-2022-heres-how-the-rest-fared/#:~:text=A%20report%20from%20the%20National,in%202021" rel="noopener noreferrer"&gt;15% said it set them back $10,000 or more&lt;/a&gt;. Determined to change this reality, I channeled my software development experience into creating &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt;, a mobile application designed to give users the tools and knowledge that so many of us have lacked. Incorporating &lt;strong&gt;artificial intelligence (AI)&lt;/strong&gt; into the project emerged as a natural response to this challenge: why not leverage cutting-edge technology to help others (and myself) take control of our finances in an intelligent, secure way? That’s how &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; was born. It was conceived not just as an expense tracker, but as a &lt;strong&gt;personal financial advisor in your pocket&lt;/strong&gt;, aimed at helping anyone improve their financial well-being in a transparent and user-friendly manner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Architecture
&lt;/h2&gt;

&lt;p&gt;From the outset, I knew I needed a solid and scalable architecture. I chose &lt;strong&gt;Flutter&lt;/strong&gt; for the frontend because of its multi-platform capability: with a single &lt;strong&gt;Dart&lt;/strong&gt; codebase, I can deliver a native experience on both Android and iOS, speeding up development without sacrificing UI quality. &lt;strong&gt;Flutter&lt;/strong&gt; excels in performance and has a growing community, and its “write once, run everywhere” promise fit perfectly with the need to iterate quickly on a mobile product. For the backend, I selected &lt;strong&gt;NestJS&lt;/strong&gt;, leveraging my background in &lt;strong&gt;JavaScript/TypeScript&lt;/strong&gt; and modern backend frameworks. Built on &lt;strong&gt;Node.js&lt;/strong&gt;, &lt;strong&gt;NestJS&lt;/strong&gt; provides a modular, robust structure to the project: its design pattern of controllers, modules, and providers made it possible to keep the code organized and maintainable as the application grew. &lt;/p&gt;

&lt;p&gt;This combination of &lt;strong&gt;Flutter&lt;/strong&gt; and &lt;strong&gt;NestJS&lt;/strong&gt; allowed me to work with strongly-typed languages on both ends (&lt;strong&gt;Dart&lt;/strong&gt; on the client, &lt;strong&gt;TypeScript&lt;/strong&gt; on the server), and even to share some logic and data models between the frontend and backend, reducing errors and duplicated effort. In terms of infrastructure, the architecture follows a clear separation of concerns: &lt;strong&gt;Flutter&lt;/strong&gt; handles the presentation and user interaction, while &lt;strong&gt;NestJS&lt;/strong&gt; exposes a secure, efficient &lt;strong&gt;REST API&lt;/strong&gt; that orchestrates business rules, data management, and integration with external services. Thanks to these technology choices, &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; enjoys a frontend that is both visually appealing and responsive, combined with a backend that is scalable and maintainable – a strong foundation upon which to build the app’s intelligent, &lt;strong&gt;AI-driven&lt;/strong&gt; features.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-Powered Features
&lt;/h2&gt;

&lt;p&gt;One of the pillars that differentiates &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; is the integration of &lt;strong&gt;AI-based features&lt;/strong&gt; to simplify and empower the user’s financial management. From the start, I identified key areas where artificial intelligence could add value:&lt;/p&gt;

&lt;h3&gt;
  
  
  Automatic Expense Categorization
&lt;/h3&gt;

&lt;p&gt;When logging a new expense, the app uses natural language processing to interpret the transaction’s description and amount, automatically assigning it an appropriate category (for example, &lt;strong&gt;“Food”&lt;/strong&gt;, &lt;strong&gt;“Transportation”&lt;/strong&gt;, or &lt;strong&gt;“Entertainment”&lt;/strong&gt;). This automated classification removes the burden of manually tagging each transaction and it learns from the data over time to improve accuracy. In practice, this means if you note &lt;strong&gt;“Uber $20”&lt;/strong&gt;, the app understands it as a transport expense and categorizes it accordingly. Behind the scenes, a machine learning model trained on common transaction descriptions and categories analyzes the text and other parameters of the entry. Based on linguistic and numerical patterns, the algorithm predicts the most likely category for each new expense. Thanks to this feature, &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; can give users a clear picture of where their money is going without requiring them to have advanced financial knowledge. Intelligent automation of categorization saves time and reduces human error; in fact, today’s AI algorithms are capable of categorizing transactions quickly and efficiently while minimizing errors a capability we have fully leveraged in the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personalized Insights Generation
&lt;/h3&gt;

&lt;p&gt;Recording expenses and setting budgets is only the beginning. The real added value of &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; comes from its AI-powered financial advisor, which analyzes a user’s financial habits to offer personalized tips and insights. Each week, the &lt;strong&gt;NestJS&lt;/strong&gt; backend compiles the user’s spending, income, and savings data and feeds it into an AI engine that applies pattern recognition algorithms. For example, the AI might detect that your dining-out expenses increased by &lt;strong&gt;20%&lt;/strong&gt; this month compared to last, or that you are nearing (or exceeding) your leisure budget. Based on findings like these, the system generates natural-language recommendations that are easy to understand. These insights range from savings suggestions (&lt;strong&gt;“You spent more on takeout this month than usual; cooking at home a bit more could save you money”&lt;/strong&gt;) to proactive alerts (&lt;strong&gt;“You’re 80% to your savings goal – keep it up!”&lt;/strong&gt;). The goal is for the user to receive actionable information tailored to their situation – in essence, having a virtual financial coach. User feedback has been very positive: many feel that &lt;strong&gt;“it’s like having a financial expert giving clear recommendations”&lt;/strong&gt; on how to optimize spending and improve savings Technically, this feature was achieved by integrating third-party AI models specialized in financial analysis and language generation, combined with our own business rules. The insights are delivered securely and privately, via in-app notifications and weekly summary emails.&lt;/p&gt;

&lt;h3&gt;
  
  
  Future Vision: Conversational Voice Interface
&lt;/h3&gt;

&lt;p&gt;Looking ahead, one of the most exciting features on the &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; roadmap is the addition of a conversational voice interface. The idea is that users will be able to interact with their virtual financial advisor through voice commands or even natural dialogue – similar to assistants like &lt;strong&gt;Siri&lt;/strong&gt; or &lt;strong&gt;Alexa&lt;/strong&gt;, but focused on personal finance. Imagine being able to ask the app, &lt;strong&gt;“How much did I spend this week?”&lt;/strong&gt; or give it instructions like &lt;strong&gt;“Log a $50 grocery expense”&lt;/strong&gt;, and receive an immediate spoken response. This conversational approach, powered by AI, aims to remove usage barriers and make managing finances as easy as having a conversation. To achieve this, I plan to integrate voice recognition technologies and advanced natural language models that can interpret user intent and generate coherent responses. In fact, the current interface already hints at this direction – for example, an &lt;strong&gt;“Add expense with voice”&lt;/strong&gt; button exists in an experimental form, backed by AI to understand spoken commands. The vision is that in upcoming iterations, &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; will evolve into a true voice-based financial assistant capable of maintaining a dialogue: explaining trends in your finances, answering questions (&lt;strong&gt;“How much did I save last month?”&lt;/strong&gt;), and even giving encouragement or reminders (&lt;strong&gt;“Remember, you have a subscription payment due next week”&lt;/strong&gt;). This future feature builds upon the rapid advances in conversational AIs; we are laying the groundwork to integrate it seamlessly once the technology is ready to deliver an optimal experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agnostic Architecture
&lt;/h2&gt;

&lt;p&gt;To support all these AI functionalities and integrations, it was essential to design a flexible and automated architecture. For this, I used an agnostic architecture approach, which allowed me to orchestrate the application and its automated flows efficiently.&lt;/p&gt;

&lt;p&gt;This approach is based on principles and tools applied in &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; to make the platform as independent as possible from specific technology providers and AI models. In practice, this means we can connect to different AI services and external APIs without relying exclusively on any single one. This way, we can swap or add new models as needed without affecting the stability of the main system. For example, if tomorrow a more precise expense analysis service appears, the architecture will allow us to incorporate it with minimal changes.&lt;/p&gt;

&lt;p&gt;Another key aspect was the automation of internal processes. &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; runs several background tasks automatically: from sending personalized weekly financial reports by email, to performing cloud backups and updating expense categories in real time. Many of these tasks are defined in an automation layer that significantly reduces operational load and minimizes human errors.&lt;/p&gt;

&lt;p&gt;To implement this, I used &lt;strong&gt;NestJS&lt;/strong&gt; modules and queues along with cloud services under the serverless paradigm, ensuring functions only run when truly needed. Regarding external integrations, we connect multiple AI models from different providers for features like categorization, insights generation, voice recognition, statistics, and other upcoming functionalities. The coordination between these models is transparent to the user. Thus, if any service fails or delays, the agnostic architecture allows switching to an alternative AI model or retrying the task, guaranteeing the end-user experience is not affected.&lt;/p&gt;

&lt;p&gt;We also integrated complementary services like Resend for sending transactional emails and summary reports. Thanks to &lt;strong&gt;Resend’s API&lt;/strong&gt;, &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; can reliably send weekly reports without needing to build an email infrastructure from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Developing &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; has been an exciting journey that combines a personal motivation with cutting-edge technical challenges. In hindsight, the lack of financial education that was once a disadvantage became the driving force to create a solution that now helps others make better financial decisions. Along the way, it reinforced my belief in the power of technology—especially AI—to democratize financial education and improve people’s daily lives. Every technology choice, was made with the goal of building a solid foundation upon which to keep innovating.&lt;/p&gt;

&lt;p&gt;Looking ahead, &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; isn’t stopping here. I will continue iterating and learning from user feedback, refining the app experience and adding new features. The vision of a fully conversational voice interface, for example, comes closer to reality each day as conversational AI technologies mature. I also plan to integrate more data sources and to offer even smarter, more personalized insights as the platform grows.&lt;/p&gt;

&lt;p&gt;I invite everyone reading this article to learn more about the project and follow its evolution. Maintaining a professional, transparent, and user-centered approach has been essential to the success of this initiative, and I will continue to uphold these values as &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; moves forward. While the journey of a developer building their own product as a side project comes with challenges, it also brings great satisfaction in seeing real-world problems solved through code. &lt;a href="https://kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt; is a reflection of my passion for creating useful solutions, and I’m excited for what’s to come. Thank you for joining me on this technological and personal journey, and I encourage you to stay tuned for the upcoming updates from Keppli Finance!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to read more blogs, you can find them at &lt;a href="https://keilerguardo.com" rel="noopener noreferrer"&gt;keilerguardo.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>mobile</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>From Cloud to Device: The Shift Toward a First Local Architecture</title>
      <dc:creator>Keiler Guardo Herrera</dc:creator>
      <pubDate>Sat, 21 Jun 2025 17:20:22 +0000</pubDate>
      <link>https://dev.to/reliek21/from-cloud-to-device-the-shift-toward-a-first-local-architecture-3d9c</link>
      <guid>https://dev.to/reliek21/from-cloud-to-device-the-shift-toward-a-first-local-architecture-3d9c</guid>
      <description>&lt;p&gt;Lately, I’ve started integrating the &lt;strong&gt;First Local&lt;/strong&gt; approach into my applications—most notably in &lt;a href="https://www.kepplifinance.com" rel="noopener noreferrer"&gt;Keppli Finance&lt;/a&gt;, a personal finance app designed to help people manage their money more effectively. Through internal analysis using tools like &lt;strong&gt;Sentry&lt;/strong&gt;, I noticed that several users were experiencing connectivity issues. Most of these cases were from people in rural areas or those relying on unstable mobile data connections. This brought to mind a conversation I had with my tech lead at the company I currently work for. We were discussing how the &lt;strong&gt;First Local&lt;/strong&gt; development paradigm is becoming increasingly popular within the developer community, and how it can be used to significantly improve user experience, especially in contexts where internet access is unreliable. That conversation inspired me to write this article, where I’ll share some key concepts, benefits, and personal experiences applying this approach—both in &lt;a href="https://www.kepplifinance.com" rel="noopener noreferrer"&gt;Keppli Finance&lt;/a&gt; and other side projects. To get started, let’s briefly define what First Local actually means.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In software development, the &lt;strong&gt;First Local&lt;/strong&gt; approach—also known as &lt;strong&gt;local-first&lt;/strong&gt; or &lt;strong&gt;offline-first&lt;/strong&gt; is based on the idea that applications should manage and store data primarily on the user’s device, then synchronize it with the cloud whenever possible. In other words, the primary copy of the data lives locally—for example, in a database like SQLite—and the application doesn’t rely on a remote server to function continuously. Picture a collaborative document, for instance: instead of being hosted exclusively on a Google data center or any other provider, each user maintains a local copy on their device. They can make edits offline, and once they're back online, the changes are synced automatically. This paradigm aims to offer the best of both worlds: the benefits of the cloud—such as multi-device access and real-time collaboration—while always prioritizing the user’s local experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is the “First Local” Approach Trending?
&lt;/h2&gt;

&lt;p&gt;Several factors have fueled the recent rise of the &lt;strong&gt;First Local&lt;/strong&gt; approach. First and foremost, user expectations have shifted: today, we use mobile apps in subways, on airplanes, or in areas with poor signal—and we expect them to work regardless of connectivity. An app that becomes useless without an internet connection creates a frustrating experience. As a Supabase blog points out, &lt;a href="https://supabase.com/blog/offline-first-flutter-apps#why-offline" rel="noopener noreferrer"&gt;“the worst version of your app is the one that can’t be used”&lt;/a&gt;. That’s why developing with an &lt;strong&gt;offline-first&lt;/strong&gt; mindset ensures that users can continue using the app even with unstable connections—dramatically improving satisfaction and reliability. There’s also a major added benefit: &lt;strong&gt;performance&lt;/strong&gt;. Since apps don’t rely on a remote server for every interaction, First Local architectures provide ultra-low-latency experiences. Operations are executed directly against the device’s local database, removing network delays and creating a sense of instant response.&lt;/p&gt;

&lt;p&gt;In a world where smartphones and laptops are increasingly powerful, it only makes sense to take advantage of that local hardware. On top of that, the First Local approach offers greater autonomy and can significantly reduce costs. By relying less on the cloud, infrastructure fees drop, and single points of failure are avoided. At the same time, users benefit from having more control over their data—it stays with them, rather than being locked behind a remote platform’s policies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of the First Local Approach
&lt;/h2&gt;

&lt;p&gt;The approach of storing and processing data locally before syncing it with the cloud brings multiple advantages over traditional cloud-centric models or simple caching mechanisms:&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline Availability and Resilience
&lt;/h3&gt;

&lt;p&gt;The app continues to work without an internet connection. All core functionalities operate against the local database, allowing users to open the app on a plane, in a tunnel, or in a rural area—and still view or input data normally. An offline-first design ensures that being offline doesn’t disrupt the user: they can continue working without interruption. Additionally, the app becomes more resilient to server or cloud outages. If the backend experiences downtime, users still retain their local data and can keep using the app as usual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Faster User Experience (Low Latency)
&lt;/h3&gt;

&lt;p&gt;By removing the need to wait for a server response with every action, First Local apps feel instantaneous. Reads and writes happen in milliseconds directly on the local database, avoiding network delays altogether. This results in snappier interfaces, free from constant loading spinners. Even when online, working locally improves overall speed, reduces data usage, and delivers a much smoother experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimistic and Non-Blocking Interactions
&lt;/h3&gt;

&lt;p&gt;First Local apps make it easy to implement optimistic updates. When a user performs an action—like adding an item or editing a field—the interface reflects the change immediately using the local copy, without waiting for server confirmation. Most modern sync tools track these changes and push them later. If the backend rejects them, they can even be rolled back. This way, the user experiences instant feedback, with no blocking or interruptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-Time Collaboration Without Sacrificing Performance
&lt;/h3&gt;

&lt;p&gt;While it might seem that a local-first approach limits collaboration, the reality is quite the opposite. By maintaining synchronized local copies, data can be updated in real time across users using notifications, CRDTs, or WebSockets. This enables collaborative experiences—such as text editors or real-time boards—while preserving local performance and smooth interactions, without relying entirely on the network.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lower Data Usage and Efficient Operation
&lt;/h3&gt;

&lt;p&gt;By reducing the frequency of server calls, these apps help save on mobile data usage. Sync operations can be configured to run only on Wi-Fi, or when there’s a strong signal or sufficient battery—optimizing resource consumption. This is especially valuable in regions where connectivity is limited or expensive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduced Infrastructure Dependence and Costs
&lt;/h3&gt;

&lt;p&gt;For startups and small teams, lowering the load on the backend means fewer expenses on servers and bandwidth. By processing more on the client side, it's possible to scale with less infrastructure. Additionally, simplifying—or even eliminating—multiple endpoints can reduce development and maintenance time. This allows teams to focus on what truly matters: the user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges and Limitations of the First Local Approach
&lt;/h2&gt;

&lt;p&gt;Although the First Local approach offers numerous advantages, it also presents significant technical and design challenges:&lt;/p&gt;

&lt;h3&gt;
  
  
  Sync and Conflict Resolution
&lt;/h3&gt;

&lt;p&gt;Maintaining multiple copies of data—one per device—synchronized with a central version introduces the risk of conflicts, especially when multiple users edit the same record while offline. Automatically resolving these conflicts without data loss is a complex task. Technologies like &lt;strong&gt;CRDTs (Conflict-free Replicated Data Types)&lt;/strong&gt; enable all edits to converge eventually, but integrating them isn’t always straightforward. Tools like &lt;a href="https://electric-sql.com" rel="noopener noreferrer"&gt;&lt;strong&gt;ElectricSQL&lt;/strong&gt;&lt;/a&gt; already implement mathematically proven models for conflict resolution, but if you're building from scratch, you’ll need to carefully design merge algorithms. Even with simpler strategies like “last write wins”, precise decisions must be made to avoid losing valuable data or introducing inconsistencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Partial Replication and Managing Local Scope
&lt;/h3&gt;

&lt;p&gt;It’s not always desirable to sync the entire database to every device. Due to space limitations, privacy concerns, or data volume, it’s necessary to define which subset of data should be kept locally. This requires additional logic to predict what to fetch and when. Some solutions implement &lt;strong&gt;dynamic partial replication&lt;/strong&gt;, for example, downloading only a list of projects and syncing the details when one is opened. However, it's also important to consider how to clean up old data to prevent local storage from growing uncontrollably.&lt;/p&gt;

&lt;h3&gt;
  
  
  Client-Side Validation and Business Rules
&lt;/h3&gt;

&lt;p&gt;In traditional architectures, validations and business rules live on the server. In an offline-first model, many of these rules need to be moved to the client—at least temporarily. For example, if only an admin is allowed to create a certain resource, how do you prevent an offline client from doing so? The server can reject the action once reconnected, but by then, the app has already shown a change that will be reverted, leading to confusion. Solutions like &lt;strong&gt;Postgres RLS (Row-Level Security)&lt;/strong&gt; policies (as used in Supabase) can be adapted to the client with tools like &lt;a href="https://electric-sql.com" rel="noopener noreferrer"&gt;&lt;strong&gt;ElectricSQL&lt;/strong&gt;&lt;/a&gt;, but ensuring consistency without compromising the user experience remains a challenge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storage and Performance on Devices
&lt;/h3&gt;

&lt;p&gt;Loading more data onto the device exposes physical limitations. Lower-end devices may struggle with limited storage, CPU, or RAM. Local databases must be optimized (using indexes, efficient queries) and stale data should be cleaned up regularly to prevent the app from becoming slow or unstable. On the web, there are also storage quotas in IndexedDB, and on mobile platforms like iOS, the system may terminate background processes—potentially interrupting sync operations if not handled properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I’ve Used It in Personal Projects
&lt;/h2&gt;

&lt;p&gt;In my personal projects, I’ve started actively incorporating the &lt;strong&gt;First Local&lt;/strong&gt; approach as a key strategy to improve user experience—especially in contexts where connectivity is limited or intermittent. One of the most representative examples is &lt;a href="https://www.kepplifinance.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Keppli Finance&lt;/strong&gt;&lt;/a&gt;, a personal finance app I developed to help users understand, organize, and improve their relationship with money. During the initial testing phase, tools like &lt;a href="https://posthog.com" rel="noopener noreferrer"&gt;&lt;strong&gt;PostHog&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://sentry.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Sentry&lt;/strong&gt;&lt;/a&gt; revealed that several users—particularly users in rural areas of Colombia who were experiencing issues loading data or recording transactions when they didn’t have a stable internet connection.&lt;/p&gt;

&lt;p&gt;To address this, I implemented local storage using &lt;a href="https://pub.dev/packages/shared_preferences" rel="noopener noreferrer"&gt;&lt;strong&gt;SharedPreferences&lt;/strong&gt;&lt;/a&gt; in Flutter. While SharedPreferences is ideal for simple offline persistence, more complex or larger-scale syncing may require SQLite, Hive, or Isar.. Every time a user adds an income or expense, the data is temporarily saved on the device. Then, once connectivity is restored, the app automatically syncs this data with the backend (built with &lt;a href="https://nestjs.com" rel="noopener noreferrer"&gt;&lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/a&gt;), keeping track of any pending changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This allowed users to&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View all transaction history&lt;/li&gt;
&lt;li&gt;Record transactions offline with a seamless experience.&lt;/li&gt;
&lt;li&gt;Avoid data loss if the app closes unexpectedly before syncing.&lt;/li&gt;
&lt;li&gt;Automatically sync changes in the background when the connection returns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, local flags are used to track pending syncs, ensuring basic persistence of critical data until it can be sent to the server. This approach not only improved the app’s overall stability but also delivered a much smoother and more reliable user experience—even under poor connectivity conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;First Local&lt;/strong&gt; trend represents a natural evolution in software development, driven by the need to enhance user experience and increase application resilience. By prioritizing local data storage and processing before syncing with the cloud, apps become faster, functional offline, and offer users greater control over their information.&lt;/p&gt;

&lt;p&gt;Of course, this model is not without its challenges. Distributed sync, conflict resolution, partial replication, and offline data validation all require a more complex architecture and a shift in mindset from the traditional client-server model. Even so, the ecosystem has responded with increasingly powerful tools—such as &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/a&gt; + &lt;a href="https://electric-sql.com" rel="noopener noreferrer"&gt;&lt;strong&gt;ElectricSQL&lt;/strong&gt;&lt;/a&gt;, and &lt;a href="https://replicache.dev" rel="noopener noreferrer"&gt;&lt;strong&gt;Replicache&lt;/strong&gt;&lt;/a&gt;, that make it possible to implement local sync without having to rebuild your entire app from scratch. &lt;strong&gt;First Local&lt;/strong&gt; isn’t just a technical improvement—it’s a paradigm shift. Instead of forcing the user to adapt to the limitations of the network, it’s the application that adapts to the user’s environment. As one quote from the &lt;strong&gt;Expo&lt;/strong&gt; documentation perfectly puts it: “&lt;a href="https://docs.expo.dev/guides/local-first" rel="noopener noreferrer"&gt;The availability of another computer (a server) should never prevent you from working&lt;/a&gt;.”&lt;/p&gt;

&lt;p&gt;This approach will continue to gain traction. In the near future, we’re likely to see more and more frameworks and libraries adopting local-first capabilities by default. And that’s good news it means faster, more reliable apps that respect and empower their users. For developers, &lt;strong&gt;First Local&lt;/strong&gt; is an opportunity to rethink how we build software putting the user and their context first. And for users, it translates into more human experiences: apps that respond instantly, work anytime, and give them back control over their data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you so much for making it this far and reading this article. Writing it has been a great learning experience for me, and I hope it has been helpful—or even inspiring—for you as well.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're interested in more topics on development, technology, software architecture, and real-world product-building experiences, feel free to visit &lt;a href="https://keilerguardo.com" rel="noopener noreferrer"&gt;keilerguardo.com&lt;/a&gt;, where I’ll be publishing more content like this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’d love to hear your thoughts, ideas, or experiences with the First Local approach in the comments&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Have a great day, and thank you for being part of this conversation about the future of software!&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>architecture</category>
      <category>flutter</category>
      <category>learning</category>
    </item>
    <item>
      <title>Important skills for web developers</title>
      <dc:creator>Keiler Guardo Herrera</dc:creator>
      <pubDate>Tue, 29 Dec 2020 20:03:17 +0000</pubDate>
      <link>https://dev.to/reliek21/important-skills-for-web-developers-3gc2</link>
      <guid>https://dev.to/reliek21/important-skills-for-web-developers-3gc2</guid>
      <description>&lt;p&gt;When we start in the world of programming we would like to have a learning path where they explain where to start, what is the first step we have to take in order to launch ourselves to create our own projects and have our first job. We have all had a learning path where we have learned a lot or a little, so I have taken the time to share with you a learning path that can encompass the essential skills you need to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mastering English
&lt;/h2&gt;

&lt;p&gt;If you speak English fluently, you can simply skip this step, but if not, you have to focus on learning English first, this should be done because the main tools, both documentation, articles and online courses are in English, and not to mention that many times are a little more updated with respect to others, of course you can find a documentation and translated courses, but knowing some English is necessary, I think it is one of the main skills if you want to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teamwork
&lt;/h2&gt;

&lt;p&gt;Knowing how to work as a team is one of the other &lt;strong&gt;"Skills "&lt;/strong&gt; that we have to master. We can say that we master it easily, but not all of us have the same patience and the same way of communicating with others, for that simple reason I think it is very important to be open to be able to work in a team, since in most of us, we will find ourselves in big teams in which we have to interact and at the same time communicate our ideas.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML and CSS
&lt;/h2&gt;

&lt;p&gt;We started talking a little with the route of web development, if we want to get fully, we have to know HTML and CSS, we do not have to master it completely, that we dominate in 85% or 90% percent, this okay, even more if we want to take the next step to a programming language.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;p&gt;The fashionable language, JavaScript, could not be missing. If we have already decided and have chosen to go for web development, we have to learn this programming language, JavaScript is one of the most used languages in the web environment, when we have mastered JavaScript we can take the next step to learn a library or framework, in addition JavaScript is not only web development, also mobile development, augmented reality, machine learning, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Git and GitHub
&lt;/h2&gt;

&lt;p&gt;Git is a version control system designed for the efficiency, reliability, and maintenance of the versions of our applications, as well as access to files and source code. And Github is a platform that we use to host our projects using Git version control. We can also manage our projects and review our code among other features it offers. Not only is there GitHub, but there is also GitLab and others that offer many features, but Github is the most popular platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend programming languages
&lt;/h2&gt;

&lt;p&gt;After mastering all of the above among other tools, you can make a leap to the Backend programming languages, which are responsible for managing the layer that is not directly accessible to users, and also contains all the application logic. Some backend languages are Python, PHP, Go, among others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Databases
&lt;/h2&gt;

&lt;p&gt;The databases are an organized collection of structured information, through our backend we can connect to them, and usually are controlled by a database management system, among which we can find one of the most used or popular as MySQL which is a relational database management system based on SQL, and not only there is MySQL also this PostgreSQL, Microsoft SQL Server among others.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;conclusion&lt;/strong&gt;, we can say that after seeing all the above, you would be ready to create your portfolio and start offering your services, if you want to go from there you could jump to multi-platform development with Flutter, React Native or Ionic. Being a programmer is not something that is done overnight, it requires time, effort and dedication.&lt;/p&gt;

&lt;p&gt;If you want to go a little deeper, here are some resources:&lt;br&gt;
Frontend Developer: &lt;a href="https://roadmap.sh/frontend" rel="noopener noreferrer"&gt;https://roadmap.sh/frontend&lt;/a&gt;&lt;br&gt;
Backend Developer: &lt;a href="https://roadmap.sh/backend" rel="noopener noreferrer"&gt;https://roadmap.sh/backend&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>5 tricks to complete your task list</title>
      <dc:creator>Keiler Guardo Herrera</dc:creator>
      <pubDate>Mon, 28 Dec 2020 01:33:07 +0000</pubDate>
      <link>https://dev.to/reliek21/5-tricks-to-complete-your-task-list-485e</link>
      <guid>https://dev.to/reliek21/5-tricks-to-complete-your-task-list-485e</guid>
      <description>&lt;p&gt;Since the isolation began some of us have more time than usual, and we want to invest that time in things that will help us improve either, finish that project we have pending for months, complete the tasks of our home, etc.&lt;/p&gt;

&lt;p&gt;We live full of chores and distractions in our daily lives, which affect our performance, which is reflected in our activities, when we start a task we do not finish it either because we did not have enough time or simply lost interest in completing it.&lt;/p&gt;

&lt;p&gt;That is why in this article I have taken the liberty of writing down 5 tips that can help you complete your postponed tasks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Wake up early
&lt;/h4&gt;

&lt;p&gt;Many people don't like the first advice, I know, it's hard sometimes to wake up early, but believe me it's worth it, it was from people who used to go to bed late at night, and wake up in the morning and feel that my day was gone. Which was not good for me, during the day it seemed that I was not performing and my usual tasks could not be completed, but I started to wake up a little earlier, I set a time, 5 in the morning, at first it was difficult to get used to, but every day it became easier to get up in the morning, then I set another goal, to wake up at 4 in the morning, now without having my alarm clock I can get out of bed invigorated, it's just a matter of starting and repeating it over and over again. Your body will adapt.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a task list
&lt;/h4&gt;

&lt;p&gt;Write down at least three important tasks that you think you can do during the day, try to write them down a day before, so that you have a little time to think about what you want to do the next day, dedicate your day and set that goal to finish the tasks you set for yourself the day before, so that you can concentrate and finish quickly. Then you can continue with the less important tasks or take a break, your body will thank you.&lt;/p&gt;

&lt;h4&gt;
  
  
  Use the pomodoro technique
&lt;/h4&gt;

&lt;p&gt;The Pomodoro technique has proven to be very efficient, it is a method to improve the administration of the time dedicated to an activity. It is based on using a timer to divide time into fixed intervals, called pomodoros, of 25 minutes of activity, followed by 5 minutes of rest, with longer pauses of 20 or 30 minutes every four pomodoros. Personally I highly recommend it, it is a technique that has helped me to complete my daily tasks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Use the airplane mode
&lt;/h4&gt;

&lt;p&gt;I know you suddenly depend on it to answer calls from work, family or friends, but seriously, the cell phone distracts us for about 2 to 3 hours a day, we are dependent on it, which often affects us greatly. Every time a notification arrives we unlock our mobile to see who has written or called us, by putting your mobile in airplane mode you avoid all these distractions, try it is not impossible.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create your workspace
&lt;/h4&gt;

&lt;p&gt;Sometimes it is good to have our space, a space where we can clear our minds, work free of noise and other distractions, of course, we can work from anywhere in our home, but it is better to have our own space to work properly, try to create your environment according to your occupation, also remember to have a bottle of water, it will help you stay hydrated.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;conclusion&lt;/strong&gt; some of these tips can be improved or modified, I have applied them in my day to day, I will not lie to you it has cost me a lot, but it has been worth it, do not try to implement them all at once, but you can start with one and then add another and so on, until you can implement them all, human beings are easy to adapt to changes, it is only a matter of time and repetition.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>motivation</category>
      <category>career</category>
    </item>
  </channel>
</rss>
