<?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: Guadalupe Rosas</title>
    <description>The latest articles on DEV Community by Guadalupe Rosas (@guadalupe182).</description>
    <link>https://dev.to/guadalupe182</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F599982%2F30357115-b2e7-438d-882f-ba212e93bd1c.jpeg</url>
      <title>DEV Community: Guadalupe Rosas</title>
      <link>https://dev.to/guadalupe182</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guadalupe182"/>
    <language>en</language>
    <item>
      <title>Inbox Zero for Devs: How I Built a JavaScript Script to Destroy Gmail Spam</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 24 Jun 2026 21:28:29 +0000</pubDate>
      <link>https://dev.to/guadalupe182/inbox-zero-for-devs-how-i-built-a-javascript-script-to-destroy-gmail-spam-4koc</link>
      <guid>https://dev.to/guadalupe182/inbox-zero-for-devs-how-i-built-a-javascript-script-to-destroy-gmail-spam-4koc</guid>
      <description>&lt;p&gt;Hey dev community! 👋&lt;/p&gt;

&lt;p&gt;As developers, our inboxes often turn into a graveyard of job alerts (LinkedIn, Indeed, ZipRecruiter) and tech newsletters we subscribe to with the intention of "reading later" but never actually open. The result? Important emails get lost, and we get the dreaded "Account storage is almost full" notification.&lt;/p&gt;

&lt;p&gt;Recently, I hit that wall. I had thousands of accumulated emails. While Gmail allows you to create filters for incoming mail, it doesn't have a native feature to say: &lt;em&gt;"Delete this email automatically after 7 days"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So, I decided to solve it the way we solve everything: &lt;strong&gt;by writing some code.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The Solution: Google Apps Script + JavaScript
&lt;/h3&gt;

&lt;p&gt;Since the Google Workspace ecosystem runs on a JavaScript-based environment, I put together a custom script. Fun fact: a simple loop originally failed due to Google's strict 6-minute execution limit. To fix this, I optimized the code to process emails &lt;strong&gt;in batches of 100&lt;/strong&gt;, preventing the server from timing out.&lt;/p&gt;

&lt;p&gt;Here is the final production-ready script:&lt;/p&gt;

&lt;p&gt;function cleanSpamTsunami() {&lt;br&gt;
  // 1. Loop to delete ALL Job Board emails in batches of 100&lt;br&gt;
  var continueJobSearch = true;&lt;br&gt;
  while (continueJobSearch) {&lt;br&gt;
    var jobThreads = GmailApp.search('computrabajo OR indeed OR linkedin OR OCC OR neuvoo OR talent.com OR jooble', 0, 100);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (jobThreads.length &amp;gt; 0) {
  Logger.log('Deleting a batch of ' + jobThreads.length + ' job alert emails...');
  GmailApp.moveThreadsToTrash(jobThreads);
} else {
  Logger.log('No more job alerts found!');
  continueJobSearch = false; // Break the loop
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;// 2. Loop to delete old Newsletters (older than 7 days) in batches of 100&lt;br&gt;
  var continueNewsletters = true;&lt;br&gt;
  while (continueNewsletters) {&lt;br&gt;
    var newsletterThreads = GmailApp.search('unsubscribe OR "cancelar suscripción" older_than:7d', 0, 100);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (newsletterThreads.length &amp;gt; 0) {
  Logger.log('Deleting a batch of ' + newsletterThreads.length + ' old newsletters...');
  GmailApp.moveThreadsToTrash(newsletterThreads);
} else {
  Logger.log('No more old newsletters found!');
  continueNewsletters = false; // Break the loop
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Logger.log('Deep clean completed successfully.');&lt;br&gt;
}&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ How to Set It Up in 3 Steps:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create the Script:&lt;/strong&gt; Head over to &lt;a href="https://script.google.com/" rel="noopener noreferrer"&gt;script.google.com&lt;/a&gt;, create a new project, and paste the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorize it:&lt;/strong&gt; Click &lt;strong&gt;Run&lt;/strong&gt; (the Play button ▶️) to authorize the script to access your account. 
&amp;gt; 💡 &lt;em&gt;Note: Google will show a security warning because it's an unverified app. Don't worry—it's literally your own code. Just click **Advanced&lt;/em&gt;* -&amp;gt; &lt;strong&gt;Go to project (unsafe)&lt;/strong&gt;.*&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate it (The Trigger):&lt;/strong&gt; On the left menu, click on &lt;strong&gt;Triggers&lt;/strong&gt; (the Clock icon ⏰), select &lt;strong&gt;Add Trigger&lt;/strong&gt;, and set it to run on a &lt;strong&gt;Time-driven&lt;/strong&gt; event with a &lt;strong&gt;Daily timer&lt;/strong&gt; scheduled between &lt;strong&gt;Midnight to 1 AM&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;And that's it! Your inbox will stay clean, your storage optimized, and you'll hit a real automated &lt;strong&gt;Inbox Zero&lt;/strong&gt; every single day. &lt;/p&gt;

&lt;p&gt;What do you think? How do you handle inbox clutter or automate your dev environment? Let me know in the comments! 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  🏥 A Personal Note from the Author
&lt;/h3&gt;

&lt;p&gt;Hey everyone, thank you so much for reading this far. &lt;/p&gt;

&lt;p&gt;Writing code and automating solutions is my passion, but recently I had to undergo a major unexpected surgery that has me temporarily bedridden. As a Java developer and the main provider for my family, being unable to work during this recovery phase has been a tough financial and emotional challenge.&lt;/p&gt;

&lt;p&gt;I rarely do this, but I have launched a GoFundMe campaign to help cover medical expenses and support my family while I get back on my feet and return to coding at 100%.&lt;/p&gt;

&lt;p&gt;If you found this script helpful, or if it saved you some storage space today, please consider supporting or sharing my campaign. Every little bit counts and means the world to us right now. 🙏❤️&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Support or share the campaign here:&lt;/strong&gt; &lt;a href="https://www.gofundme.com/f/ayuda-a-adrian-dev-java-a-mantener-a-su-familia-tras-cirug" rel="noopener noreferrer"&gt;Help Adrian &amp;amp; His Family on GoFundMe&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>googleappsscript</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Lessons Learned Building POS Lite: From Idea to Full Stack Application</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 17 Jun 2026 21:19:21 +0000</pubDate>
      <link>https://dev.to/guadalupe182/lessons-learned-building-pos-lite-from-idea-to-full-stack-application-471h</link>
      <guid>https://dev.to/guadalupe182/lessons-learned-building-pos-lite-from-idea-to-full-stack-application-471h</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous posts, I shared the process of building &lt;strong&gt;POS Lite&lt;/strong&gt;, a full stack point of sale system for small businesses, stores and gyms.&lt;/p&gt;

&lt;p&gt;I wrote about the project overview, backend architecture, frontend development and deployment using AWS EC2, Docker, Vercel and Cloudflare.&lt;/p&gt;

&lt;p&gt;In this final post, I want to share the biggest lessons I learned while building the project.&lt;/p&gt;

&lt;p&gt;This post is not only about the technical side. It is also about the decisions, mistakes, improvements and mindset that helped me understand what it means to build a more complete full stack application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a Real Project Is Different from Following Tutorials
&lt;/h2&gt;

&lt;p&gt;Tutorials are useful, especially when learning a new technology.&lt;/p&gt;

&lt;p&gt;But building a complete project is different.&lt;/p&gt;

&lt;p&gt;In a tutorial, many decisions are already made for you. In a real project, you have to decide things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How should the project be structured?&lt;/li&gt;
&lt;li&gt;Which features should be built first?&lt;/li&gt;
&lt;li&gt;How should the backend communicate with the frontend?&lt;/li&gt;
&lt;li&gt;How should authentication work?&lt;/li&gt;
&lt;li&gt;How should data be stored?&lt;/li&gt;
&lt;li&gt;How should the app be deployed?&lt;/li&gt;
&lt;li&gt;How should errors be handled?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was one of the biggest lessons for me.&lt;/p&gt;

&lt;p&gt;A real project forces you to connect many concepts together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Simple, Then Improve
&lt;/h2&gt;

&lt;p&gt;At the beginning, it is easy to want the perfect architecture, perfect UI and perfect database design.&lt;/p&gt;

&lt;p&gt;But trying to make everything perfect from the start can slow you down.&lt;/p&gt;

&lt;p&gt;With POS Lite, I learned that it is better to start with a working version and then improve it step by step.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, make the product module work.&lt;/li&gt;
&lt;li&gt;Then improve validation.&lt;/li&gt;
&lt;li&gt;Then connect it to inventory.&lt;/li&gt;
&lt;li&gt;Then improve the UI.&lt;/li&gt;
&lt;li&gt;Then add reports.&lt;/li&gt;
&lt;li&gt;Then improve deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small improvements over time are more realistic than trying to build everything perfectly in one step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend Structure Matters
&lt;/h2&gt;

&lt;p&gt;When the backend is small, it may feel okay to put logic anywhere.&lt;/p&gt;

&lt;p&gt;But as the application grows, structure becomes very important.&lt;/p&gt;

&lt;p&gt;Using a layered structure helped me keep the backend organized:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controller → Service → Repository → Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This made it easier to separate responsibilities.&lt;/p&gt;

&lt;p&gt;The controller handles HTTP requests.&lt;/p&gt;

&lt;p&gt;The service contains business logic.&lt;/p&gt;

&lt;p&gt;The repository communicates with the database.&lt;/p&gt;

&lt;p&gt;This structure helped me understand why clean backend organization matters in real applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication Is More Than Just Login
&lt;/h2&gt;

&lt;p&gt;Before building POS Lite, it was easy to think about authentication as just a login form.&lt;/p&gt;

&lt;p&gt;But authentication is more than that.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validating credentials&lt;/li&gt;
&lt;li&gt;Generating tokens&lt;/li&gt;
&lt;li&gt;Protecting routes&lt;/li&gt;
&lt;li&gt;Sending tokens from the frontend&lt;/li&gt;
&lt;li&gt;Handling expired or invalid sessions&lt;/li&gt;
&lt;li&gt;Managing user access&lt;/li&gt;
&lt;li&gt;Keeping sensitive data secure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Working with JWT authentication helped me understand how frontend and backend security connect in a full stack application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend Is Not Just About UI
&lt;/h2&gt;

&lt;p&gt;Frontend development is not only about making screens look good.&lt;/p&gt;

&lt;p&gt;A good frontend should help users complete tasks quickly and clearly.&lt;/p&gt;

&lt;p&gt;For a point of sale system, this is very important.&lt;/p&gt;

&lt;p&gt;The user needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search products&lt;/li&gt;
&lt;li&gt;Process sales&lt;/li&gt;
&lt;li&gt;Review inventory&lt;/li&gt;
&lt;li&gt;Understand reports&lt;/li&gt;
&lt;li&gt;Receive feedback after actions&lt;/li&gt;
&lt;li&gt;Navigate without confusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helped me think more about user experience.&lt;/p&gt;

&lt;p&gt;A clean interface is useful, but a practical interface is even more important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment Changes Everything
&lt;/h2&gt;

&lt;p&gt;A project feels very different once it moves from local development to deployment.&lt;/p&gt;

&lt;p&gt;Locally, things may work correctly.&lt;/p&gt;

&lt;p&gt;But in deployment, new problems appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;CORS errors&lt;/li&gt;
&lt;li&gt;Wrong API URLs&lt;/li&gt;
&lt;li&gt;Server ports&lt;/li&gt;
&lt;li&gt;Docker configuration&lt;/li&gt;
&lt;li&gt;Database connections&lt;/li&gt;
&lt;li&gt;HTTPS issues&lt;/li&gt;
&lt;li&gt;DNS setup&lt;/li&gt;
&lt;li&gt;Build errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deploying POS Lite helped me understand that deployment is a major part of full stack development.&lt;/p&gt;

&lt;p&gt;It is not just the final step.&lt;/p&gt;

&lt;p&gt;It is part of the engineering process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Variables Are Critical
&lt;/h2&gt;

&lt;p&gt;One of the most important lessons was learning how important environment variables are.&lt;/p&gt;

&lt;p&gt;The frontend needs to know the backend API URL.&lt;/p&gt;

&lt;p&gt;The backend needs database credentials.&lt;/p&gt;

&lt;p&gt;The app needs secrets for authentication.&lt;/p&gt;

&lt;p&gt;Hardcoding this information is not a good practice.&lt;/p&gt;

&lt;p&gt;Using environment variables made the project more flexible and closer to a real production setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Small Bugs Teach Big Lessons
&lt;/h2&gt;

&lt;p&gt;Some bugs were small but taught me important lessons.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A missing environment variable can break the frontend.&lt;/li&gt;
&lt;li&gt;A wrong port can make the backend unreachable.&lt;/li&gt;
&lt;li&gt;A CORS issue can block frontend/backend communication.&lt;/li&gt;
&lt;li&gt;A small mistake in the database configuration can stop the application.&lt;/li&gt;
&lt;li&gt;A missing validation can create bad data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These problems were frustrating, but they helped me learn how to debug more carefully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation Helps You Think Clearly
&lt;/h2&gt;

&lt;p&gt;Writing about POS Lite helped me understand the project better.&lt;/p&gt;

&lt;p&gt;When you explain what you built, you notice things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is clear&lt;/li&gt;
&lt;li&gt;What is confusing&lt;/li&gt;
&lt;li&gt;What needs improvement&lt;/li&gt;
&lt;li&gt;What decisions were good&lt;/li&gt;
&lt;li&gt;What decisions should be changed later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation is not only useful for other people.&lt;/p&gt;

&lt;p&gt;It is also useful for yourself as a developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Improve Next
&lt;/h2&gt;

&lt;p&gt;POS Lite is still evolving.&lt;/p&gt;

&lt;p&gt;Some improvements I would like to work on next include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better error handling&lt;/li&gt;
&lt;li&gt;More complete validation&lt;/li&gt;
&lt;li&gt;Improved role-based access&lt;/li&gt;
&lt;li&gt;Better reporting features&lt;/li&gt;
&lt;li&gt;More automated tests&lt;/li&gt;
&lt;li&gt;Better UI for mobile devices&lt;/li&gt;
&lt;li&gt;Cleaner deployment workflow&lt;/li&gt;
&lt;li&gt;Improved database structure where needed&lt;/li&gt;
&lt;li&gt;Better documentation for the API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A project is never truly finished.&lt;/p&gt;

&lt;p&gt;There is always something to improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Do Differently
&lt;/h2&gt;

&lt;p&gt;If I started the project again, I would probably do some things differently.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the database model more carefully from the beginning&lt;/li&gt;
&lt;li&gt;Document the API earlier&lt;/li&gt;
&lt;li&gt;Add validation sooner&lt;/li&gt;
&lt;li&gt;Create reusable frontend components earlier&lt;/li&gt;
&lt;li&gt;Plan deployment requirements before the final stage&lt;/li&gt;
&lt;li&gt;Keep better notes about technical decisions&lt;/li&gt;
&lt;li&gt;Add testing earlier in the process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not failures.&lt;/p&gt;

&lt;p&gt;They are part of the learning process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advice for Other Developers
&lt;/h2&gt;

&lt;p&gt;If you are building your own full stack project, my advice is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build something realistic.&lt;/li&gt;
&lt;li&gt;Start small.&lt;/li&gt;
&lt;li&gt;Finish a working version.&lt;/li&gt;
&lt;li&gt;Improve it step by step.&lt;/li&gt;
&lt;li&gt;Deploy it.&lt;/li&gt;
&lt;li&gt;Document what you learn.&lt;/li&gt;
&lt;li&gt;Share your process.&lt;/li&gt;
&lt;li&gt;Do not wait until everything is perfect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A finished and deployed project teaches more than an unfinished perfect idea.&lt;/p&gt;

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

&lt;p&gt;Building POS Lite helped me connect many parts of software development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend development&lt;/li&gt;
&lt;li&gt;Frontend development&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;API communication&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Cloud infrastructure&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Product thinking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest lesson was that full stack development is about connecting many pieces into one working system.&lt;/p&gt;

&lt;p&gt;POS Lite is still a work in progress, but building it has helped me grow as a developer and understand how real applications are designed, built and deployed.&lt;/p&gt;

&lt;p&gt;Thanks for reading this series.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>fullstack</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Deploying POS Lite with AWS EC2, Docker, Vercel and Cloudflare</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 17 Jun 2026 20:46:11 +0000</pubDate>
      <link>https://dev.to/guadalupe182/deploying-pos-lite-with-aws-ec2-docker-vercel-and-cloudflare-3bbo</link>
      <guid>https://dev.to/guadalupe182/deploying-pos-lite-with-aws-ec2-docker-vercel-and-cloudflare-3bbo</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous posts, I shared an overview of &lt;strong&gt;POS Lite&lt;/strong&gt;, explained how I designed the backend with Spring Boot and showed how I built the frontend with React, Next.js and Material UI.&lt;/p&gt;

&lt;p&gt;In this fourth post, I want to focus on deployment.&lt;/p&gt;

&lt;p&gt;Deploying a full stack application is an important step because it connects everything together: the frontend, the backend, the database, environment variables, domains, SSL and server configuration.&lt;/p&gt;

&lt;p&gt;For POS Lite, I used the following deployment setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend deployed on &lt;strong&gt;AWS EC2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Backend containerized with &lt;strong&gt;Docker&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Frontend deployed on &lt;strong&gt;Vercel&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Domain and DNS managed with &lt;strong&gt;Cloudflare&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Database using &lt;strong&gt;PostgreSQL&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to move the project from local development to a production-like environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment Goals
&lt;/h2&gt;

&lt;p&gt;Before deploying the project, I wanted to define a few goals.&lt;/p&gt;

&lt;p&gt;The deployment needed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple enough to manage&lt;/li&gt;
&lt;li&gt;Close to a real production setup&lt;/li&gt;
&lt;li&gt;Separated between frontend and backend&lt;/li&gt;
&lt;li&gt;Secure enough to use HTTPS&lt;/li&gt;
&lt;li&gt;Easy to update as the project evolves&lt;/li&gt;
&lt;li&gt;Good enough to present as a professional portfolio project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did not want the project to only work locally on my machine.&lt;/p&gt;

&lt;p&gt;I wanted to make it available online and learn what it takes to deploy a real full stack application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;The production setup looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Cloudflare
  ↓
Vercel Frontend
  ↓
AWS EC2 Backend
  ↓
PostgreSQL Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend is hosted on Vercel.&lt;/p&gt;

&lt;p&gt;The backend runs on an AWS EC2 instance using Docker.&lt;/p&gt;

&lt;p&gt;Cloudflare manages the domain, DNS and SSL configuration.&lt;/p&gt;

&lt;p&gt;The frontend communicates with the backend through HTTPS requests.&lt;/p&gt;

&lt;p&gt;This setup helped me understand how different services work together in a real deployment flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Used Vercel for the Frontend
&lt;/h2&gt;

&lt;p&gt;The frontend of POS Lite was built with React and Next.js, so Vercel was a natural option for deployment.&lt;/p&gt;

&lt;p&gt;Vercel made it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect the project from GitHub&lt;/li&gt;
&lt;li&gt;Deploy the frontend automatically&lt;/li&gt;
&lt;li&gt;Configure environment variables&lt;/li&gt;
&lt;li&gt;Handle frontend builds&lt;/li&gt;
&lt;li&gt;Serve the application globally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deployment flow was simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Push the frontend project to GitHub&lt;/li&gt;
&lt;li&gt;Import the repository into Vercel&lt;/li&gt;
&lt;li&gt;Configure environment variables&lt;/li&gt;
&lt;li&gt;Deploy the application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The most important frontend environment variable was the backend API URL.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NEXT_PUBLIC_API_URL=https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the frontend to know where the backend is running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Used AWS EC2 for the Backend
&lt;/h2&gt;

&lt;p&gt;For the backend, I wanted more control over the server environment.&lt;/p&gt;

&lt;p&gt;That is why I decided to deploy the Spring Boot backend on &lt;strong&gt;AWS EC2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Using EC2 helped me practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a virtual server&lt;/li&gt;
&lt;li&gt;Connecting through SSH&lt;/li&gt;
&lt;li&gt;Installing dependencies&lt;/li&gt;
&lt;li&gt;Running Docker containers&lt;/li&gt;
&lt;li&gt;Configuring ports&lt;/li&gt;
&lt;li&gt;Managing backend deployment manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was more challenging than deploying the frontend, but it helped me understand the infrastructure side of a full stack application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing the EC2 Instance
&lt;/h2&gt;

&lt;p&gt;The backend runs on an Ubuntu EC2 instance.&lt;/p&gt;

&lt;p&gt;The first step was to create the instance and open the required ports.&lt;/p&gt;

&lt;p&gt;Some important ports are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;22    SSH
80    HTTP
443   HTTPS
8080  Backend application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After connecting to the instance through SSH, I installed Docker.&lt;/p&gt;

&lt;p&gt;A simplified installation flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once Docker was running, the server was ready to run the backend container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dockerizing the Spring Boot Backend
&lt;/h2&gt;

&lt;p&gt;To deploy the backend more consistently, I used Docker.&lt;/p&gt;

&lt;p&gt;The idea was to package the Spring Boot application into a container so it could run the same way on the server.&lt;/p&gt;

&lt;p&gt;A simplified Dockerfile looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; eclipse-temurin:17-jdk-alpine&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; target/pos-lite.jar app.jar&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["java", "-jar", "app.jar"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This Dockerfile does a few important things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses a Java runtime image&lt;/li&gt;
&lt;li&gt;Creates an application directory&lt;/li&gt;
&lt;li&gt;Copies the compiled JAR file&lt;/li&gt;
&lt;li&gt;Exposes the backend port&lt;/li&gt;
&lt;li&gt;Runs the Spring Boot application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Docker helped make the deployment process more predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building and Running the Backend Container
&lt;/h2&gt;

&lt;p&gt;After creating the Dockerfile, the backend image can be built with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; pos-lite-backend &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the container can be started with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; pos-lite-backend &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env-file&lt;/span&gt; .env &lt;span class="se"&gt;\&lt;/span&gt;
  pos-lite-backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--env-file&lt;/code&gt; option is useful because sensitive configuration should not be hardcoded inside the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Variables
&lt;/h2&gt;

&lt;p&gt;Environment variables are very important in deployment.&lt;/p&gt;

&lt;p&gt;For the backend, some of the main variables include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPRING_DATASOURCE_URL=jdbc:postgresql://host:5432/database
SPRING_DATASOURCE_USERNAME=username
SPRING_DATASOURCE_PASSWORD=password
JWT_SECRET=your-secret-key
SERVER_PORT=8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using environment variables keeps the application more flexible and safer.&lt;/p&gt;

&lt;p&gt;It also makes it easier to use different configurations for local development and production.&lt;/p&gt;

&lt;h2&gt;
  
  
  PostgreSQL Database
&lt;/h2&gt;

&lt;p&gt;POS Lite uses PostgreSQL as the database.&lt;/p&gt;

&lt;p&gt;The backend connects to PostgreSQL through the datasource configuration.&lt;/p&gt;

&lt;p&gt;For a project like this, there are different options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running PostgreSQL on the same EC2 instance&lt;/li&gt;
&lt;li&gt;Using a managed database service&lt;/li&gt;
&lt;li&gt;Using an external PostgreSQL provider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this project, the important part was learning how the backend connects to a production database and how configuration changes between local and deployed environments.&lt;/p&gt;

&lt;p&gt;Database configuration is one of the areas where deployment becomes more real because local assumptions often stop working once the app is online.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloudflare for Domain, DNS and SSL
&lt;/h2&gt;

&lt;p&gt;Cloudflare was used to manage the domain, DNS and SSL.&lt;/p&gt;

&lt;p&gt;This helped with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domain management&lt;/li&gt;
&lt;li&gt;DNS records&lt;/li&gt;
&lt;li&gt;HTTPS configuration&lt;/li&gt;
&lt;li&gt;SSL/TLS encryption&lt;/li&gt;
&lt;li&gt;Better security and performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simplified DNS setup can include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Type    Name    Target
A       api     EC2 Public IP
CNAME   www     Vercel domain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;api&lt;/code&gt; subdomain can point to the backend running on EC2.&lt;/p&gt;

&lt;p&gt;The frontend can point to the Vercel deployment.&lt;/p&gt;

&lt;p&gt;This makes the project feel more professional because users access the app through real domains instead of raw deployment URLs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting Frontend and Backend
&lt;/h2&gt;

&lt;p&gt;Once the backend was deployed and the domain was configured, the frontend needed to communicate with the backend.&lt;/p&gt;

&lt;p&gt;The frontend API URL was configured using an environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NEXT_PUBLIC_API_URL=https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the frontend could call backend routes like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.example.com/api/products
https://api.example.com/api/sales
https://api.example.com/api/reports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This step was important because it connected the two main parts of the project.&lt;/p&gt;

&lt;p&gt;A full stack app is not truly deployed until the frontend and backend can communicate correctly in the live environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Issues I Faced
&lt;/h2&gt;

&lt;p&gt;Deployment came with several challenges.&lt;/p&gt;

&lt;p&gt;Some of the common issues were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environment variables not configured correctly&lt;/li&gt;
&lt;li&gt;Backend running locally but not on the server&lt;/li&gt;
&lt;li&gt;Ports not open in the EC2 security group&lt;/li&gt;
&lt;li&gt;CORS errors between frontend and backend&lt;/li&gt;
&lt;li&gt;Wrong API URL in the frontend&lt;/li&gt;
&lt;li&gt;Docker container stopping after an error&lt;/li&gt;
&lt;li&gt;Database connection errors&lt;/li&gt;
&lt;li&gt;HTTP vs HTTPS configuration issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These problems were frustrating at times, but they helped me understand how deployment works beyond tutorials.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Deploying POS Lite helped me improve in several areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working with AWS EC2&lt;/li&gt;
&lt;li&gt;Running applications with Docker&lt;/li&gt;
&lt;li&gt;Configuring environment variables&lt;/li&gt;
&lt;li&gt;Deploying a Next.js frontend with Vercel&lt;/li&gt;
&lt;li&gt;Managing DNS with Cloudflare&lt;/li&gt;
&lt;li&gt;Connecting frontend and backend in production&lt;/li&gt;
&lt;li&gt;Understanding CORS and HTTPS issues&lt;/li&gt;
&lt;li&gt;Debugging server-side deployment problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest lesson was that deployment is not just about uploading code.&lt;/p&gt;

&lt;p&gt;Deployment involves infrastructure, configuration, networking, security and debugging.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Some of my main takeaways were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker makes backend deployment more consistent.&lt;/li&gt;
&lt;li&gt;Environment variables are essential for production.&lt;/li&gt;
&lt;li&gt;Vercel simplifies frontend deployment.&lt;/li&gt;
&lt;li&gt;AWS EC2 provides control but requires more configuration.&lt;/li&gt;
&lt;li&gt;Cloudflare helps with domain, DNS and SSL.&lt;/li&gt;
&lt;li&gt;Small configuration mistakes can break the entire deployment.&lt;/li&gt;
&lt;li&gt;A project feels much more real once it is available online.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This deployment setup helped me understand the full lifecycle of a full stack application, from local development to a production-like environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;In the next and final post of this series, I will share the biggest lessons I learned while building POS Lite.&lt;/p&gt;

&lt;p&gt;I will write about technical lessons, mistakes, improvements, project structure and how building a real full stack project helped me grow as a developer.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>docker</category>
      <category>devops</category>
      <category>automation</category>
    </item>
    <item>
      <title>Building the Frontend of POS Lite with React, Next.js and Material UI</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 17 Jun 2026 20:35:08 +0000</pubDate>
      <link>https://dev.to/guadalupe182/building-the-frontend-of-pos-lite-with-react-nextjs-and-material-ui-4id8</link>
      <guid>https://dev.to/guadalupe182/building-the-frontend-of-pos-lite-with-react-nextjs-and-material-ui-4id8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous posts, I shared an overview of &lt;strong&gt;POS Lite&lt;/strong&gt; and how I designed the backend using Spring Boot, JWT authentication, PostgreSQL and REST APIs.&lt;/p&gt;

&lt;p&gt;In this third post, I want to focus on the frontend.&lt;/p&gt;

&lt;p&gt;The frontend is the part of the application that users interact with directly, so my goal was not only to build screens that work, but also to create an interface that feels practical, clean and easy to use for a real point of sale system.&lt;/p&gt;

&lt;p&gt;For this part of the project, I used &lt;strong&gt;React, Next.js and Material UI&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend Goals
&lt;/h2&gt;

&lt;p&gt;Before building the interface, I defined a few goals.&lt;/p&gt;

&lt;p&gt;The frontend needed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean and simple&lt;/li&gt;
&lt;li&gt;Easy to navigate&lt;/li&gt;
&lt;li&gt;Fast for daily operations&lt;/li&gt;
&lt;li&gt;Connected to the backend API&lt;/li&gt;
&lt;li&gt;Useful for business users, not only developers&lt;/li&gt;
&lt;li&gt;Organized enough to grow as the project evolves&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A point of sale system should not feel complicated. Users need to manage products, check inventory, process sales and review reports without wasting time.&lt;/p&gt;

&lt;p&gt;That idea guided many of the UI decisions in the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;The frontend uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Material UI&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Axios&lt;/li&gt;
&lt;li&gt;React Hook Form&lt;/li&gt;
&lt;li&gt;React Context&lt;/li&gt;
&lt;li&gt;React Hot Toast&lt;/li&gt;
&lt;li&gt;Barcode scanner support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stack helped me build a modern interface while keeping the project organized and maintainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Frontend Modules
&lt;/h2&gt;

&lt;p&gt;POS Lite includes several frontend modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;p&gt;The authentication module handles the login flow.&lt;/p&gt;

&lt;p&gt;The user enters their credentials, the frontend sends the request to the backend and then uses the authentication token to access protected pages.&lt;/p&gt;

&lt;p&gt;This module was important because most of the application should only be available to authenticated users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;

&lt;p&gt;The dashboard gives users a quick overview of the business.&lt;/p&gt;

&lt;p&gt;It can show useful information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total products&lt;/li&gt;
&lt;li&gt;Recent sales&lt;/li&gt;
&lt;li&gt;Low stock alerts&lt;/li&gt;
&lt;li&gt;Sales metrics&lt;/li&gt;
&lt;li&gt;General system activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dashboard is important because it is usually the first screen users see after logging in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Products
&lt;/h3&gt;

&lt;p&gt;The products module allows users to manage product information.&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating products&lt;/li&gt;
&lt;li&gt;Editing products&lt;/li&gt;
&lt;li&gt;Viewing product details&lt;/li&gt;
&lt;li&gt;Assigning categories&lt;/li&gt;
&lt;li&gt;Managing prices&lt;/li&gt;
&lt;li&gt;Tracking stock&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is one of the core parts of the system because products are used in inventory, sales and reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  Categories
&lt;/h3&gt;

&lt;p&gt;The categories module helps organize products.&lt;/p&gt;

&lt;p&gt;As the inventory grows, categories make the system easier to use and search.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sales
&lt;/h3&gt;

&lt;p&gt;The sales module is one of the most important screens in the project.&lt;/p&gt;

&lt;p&gt;The goal was to create a flow where users can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search or scan a product&lt;/li&gt;
&lt;li&gt;Add it to the sale&lt;/li&gt;
&lt;li&gt;Adjust quantities&lt;/li&gt;
&lt;li&gt;Review totals&lt;/li&gt;
&lt;li&gt;Complete the transaction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This module helped me think more about usability because a sales screen needs to be fast and clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inventory
&lt;/h3&gt;

&lt;p&gt;The inventory module helps users monitor product stock.&lt;/p&gt;

&lt;p&gt;It can also show low stock alerts so that users know when they need to restock certain products.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reports
&lt;/h3&gt;

&lt;p&gt;The reports module is used to review business information.&lt;/p&gt;

&lt;p&gt;Some examples are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sales reports&lt;/li&gt;
&lt;li&gt;Inventory reports&lt;/li&gt;
&lt;li&gt;Low stock reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helped me think beyond forms and tables and more about how the frontend can support decision-making.&lt;/p&gt;

&lt;h2&gt;
  
  
  Application Structure
&lt;/h2&gt;

&lt;p&gt;I organized the frontend into reusable sections.&lt;/p&gt;

&lt;p&gt;A simplified structure looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app
  /(auth)
    login
  /(dashboard)
    dashboard
    products
    categories
    sales
    inventory
    reports

/components
  /ui
  /forms
  /tables
  /layout

/context
  AuthContext

/services
  api.ts

/types
  index.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal was to avoid putting all the logic inside pages.&lt;/p&gt;

&lt;p&gt;By separating components, services, context and types, the project becomes easier to maintain and extend.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Communication
&lt;/h2&gt;

&lt;p&gt;The frontend communicates with the backend through an API service.&lt;/p&gt;

&lt;p&gt;Instead of writing API calls directly in every component, I created a reusable setup using Axios.&lt;/p&gt;

&lt;p&gt;A simplified example looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;interceptors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;token&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Authorization&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it easier to send authenticated requests to protected backend endpoints.&lt;/p&gt;

&lt;p&gt;It also keeps API configuration in one place instead of repeating the same logic across the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication Flow
&lt;/h2&gt;

&lt;p&gt;The frontend authentication flow works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user submits the login form.&lt;/li&gt;
&lt;li&gt;The frontend sends the credentials to the backend.&lt;/li&gt;
&lt;li&gt;The backend returns a JWT token.&lt;/li&gt;
&lt;li&gt;The frontend stores the token.&lt;/li&gt;
&lt;li&gt;Protected requests include the token in the Authorization header.&lt;/li&gt;
&lt;li&gt;The user can access private pages.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This helped me understand how frontend authentication connects with backend security.&lt;/p&gt;

&lt;h2&gt;
  
  
  UI/UX Decisions
&lt;/h2&gt;

&lt;p&gt;Since POS Lite is a business application, the interface needed to be practical.&lt;/p&gt;

&lt;p&gt;Some of the decisions I focused on were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear navigation&lt;/li&gt;
&lt;li&gt;Simple forms&lt;/li&gt;
&lt;li&gt;Readable tables&lt;/li&gt;
&lt;li&gt;Fast access to common actions&lt;/li&gt;
&lt;li&gt;Feedback messages after user actions&lt;/li&gt;
&lt;li&gt;Consistent layout across pages&lt;/li&gt;
&lt;li&gt;Responsive design for different screen sizes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small details matter in this type of application.&lt;/p&gt;

&lt;p&gt;For example, after creating or updating a product, the user should immediately know if the action was successful.&lt;/p&gt;

&lt;p&gt;That is why notifications and clear feedback are important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forms and Validation
&lt;/h2&gt;

&lt;p&gt;Forms are used across many modules, especially products, categories and sales.&lt;/p&gt;

&lt;p&gt;I used form handling to make the user experience smoother and reduce errors.&lt;/p&gt;

&lt;p&gt;Some examples of validation include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Required fields&lt;/li&gt;
&lt;li&gt;Valid prices&lt;/li&gt;
&lt;li&gt;Valid stock quantities&lt;/li&gt;
&lt;li&gt;Product category selection&lt;/li&gt;
&lt;li&gt;Login credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good validation improves the user experience because users can correct mistakes before submitting incorrect data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Barcode Scanner Support
&lt;/h2&gt;

&lt;p&gt;One of the features I wanted to include was barcode scanner support.&lt;/p&gt;

&lt;p&gt;For a point of sale system, barcode scanning can make product search and sales faster.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user scans a barcode.&lt;/li&gt;
&lt;li&gt;The frontend reads the barcode value.&lt;/li&gt;
&lt;li&gt;The system searches for the matching product.&lt;/li&gt;
&lt;li&gt;The product is added to the sale or displayed for editing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This feature made the project feel much closer to a real POS system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges was keeping the frontend organized as the number of screens increased.&lt;/p&gt;

&lt;p&gt;At the beginning, it is easy to build each page separately.&lt;/p&gt;

&lt;p&gt;But as the project grows, duplicated code becomes a problem.&lt;/p&gt;

&lt;p&gt;Some questions I had to think about were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which components should be reusable?&lt;/li&gt;
&lt;li&gt;Where should API calls live?&lt;/li&gt;
&lt;li&gt;How should authenticated state be managed?&lt;/li&gt;
&lt;li&gt;How should forms be structured?&lt;/li&gt;
&lt;li&gt;How can the UI remain simple as features are added?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These decisions helped me understand that frontend development is not only about making the interface look good.&lt;/p&gt;

&lt;p&gt;It is also about structure, usability and maintainability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building the frontend helped me improve in several areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating reusable components&lt;/li&gt;
&lt;li&gt;Managing authentication state&lt;/li&gt;
&lt;li&gt;Connecting React with a Spring Boot backend&lt;/li&gt;
&lt;li&gt;Structuring a Next.js application&lt;/li&gt;
&lt;li&gt;Working with API services&lt;/li&gt;
&lt;li&gt;Building forms and tables&lt;/li&gt;
&lt;li&gt;Thinking about user experience&lt;/li&gt;
&lt;li&gt;Designing screens for real workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest lesson was that a good frontend is not just about visuals.&lt;/p&gt;

&lt;p&gt;A good frontend should help users complete their tasks clearly and efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;In the next post, I will focus on deployment.&lt;/p&gt;

&lt;p&gt;I will share how I deployed POS Lite using &lt;strong&gt;AWS EC2, Docker, Vercel and Cloudflare&lt;/strong&gt;, and what I learned from connecting the frontend and backend in a production-like environment.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>resources</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How I Designed the Backend for My Point of Sale System with Spring Boot</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 17 Jun 2026 20:12:40 +0000</pubDate>
      <link>https://dev.to/guadalupe182/how-i-designed-the-backend-for-my-point-of-sale-system-with-spring-boot-1ha4</link>
      <guid>https://dev.to/guadalupe182/how-i-designed-the-backend-for-my-point-of-sale-system-with-spring-boot-1ha4</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the first post, I shared an overview of &lt;strong&gt;POS Lite&lt;/strong&gt;, a full stack point of sale system I have been building for small businesses, stores and gyms.&lt;/p&gt;

&lt;p&gt;In this second post, I want to focus on the backend.&lt;/p&gt;

&lt;p&gt;The backend is one of the most important parts of the project because it handles the core business logic, authentication, database communication and the API consumed by the frontend.&lt;/p&gt;

&lt;p&gt;For this project, I built the backend using &lt;strong&gt;Java, Spring Boot, Spring Security, JWT authentication and PostgreSQL&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend Goals
&lt;/h2&gt;

&lt;p&gt;Before writing the backend, I wanted to define a few goals.&lt;/p&gt;

&lt;p&gt;The backend needed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple enough to understand and maintain&lt;/li&gt;
&lt;li&gt;Structured enough to grow over time&lt;/li&gt;
&lt;li&gt;Secure enough to protect private routes&lt;/li&gt;
&lt;li&gt;Clear enough for the frontend to consume&lt;/li&gt;
&lt;li&gt;Close to how a real business application would work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did not want to build only a basic CRUD API. I wanted the backend to support real flows like authentication, inventory management, sales tracking and reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;The backend uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;Spring Security&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Spring Data JPA&lt;/li&gt;
&lt;li&gt;Maven&lt;/li&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stack helped me practice several common backend development concepts in one project.&lt;/p&gt;

&lt;h2&gt;
  
  
  High-Level Architecture
&lt;/h2&gt;

&lt;p&gt;The backend follows a layered structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controller → Service → Repository → Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer has a specific responsibility.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Controller&lt;/strong&gt; layer receives HTTP requests and returns responses.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Service&lt;/strong&gt; layer contains the business logic.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Repository&lt;/strong&gt; layer communicates with the database.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Database&lt;/strong&gt; stores the system data using PostgreSQL.&lt;/p&gt;

&lt;p&gt;This separation helped me keep the project more organized and easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Backend Modules
&lt;/h2&gt;

&lt;p&gt;POS Lite includes several backend modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;p&gt;The authentication module handles user login and protected access.&lt;/p&gt;

&lt;p&gt;It uses JWT so that the frontend can authenticate users and send the token when accessing private endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Products
&lt;/h3&gt;

&lt;p&gt;The products module manages product information such as name, price, category and stock.&lt;/p&gt;

&lt;p&gt;This module is important because products are used in inventory, sales and reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  Categories
&lt;/h3&gt;

&lt;p&gt;The categories module allows products to be grouped in a more organized way.&lt;/p&gt;

&lt;p&gt;This makes the system easier to use when the inventory grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inventory
&lt;/h3&gt;

&lt;p&gt;The inventory logic helps track product stock and identify products with low stock.&lt;/p&gt;

&lt;p&gt;This is one of the features that makes the project feel closer to a real-world business system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sales
&lt;/h3&gt;

&lt;p&gt;The sales module handles sales transactions.&lt;/p&gt;

&lt;p&gt;This part connects products, quantities, prices and totals.&lt;/p&gt;

&lt;p&gt;It is one of the most important flows in the application because it represents the main operation of a point of sale system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reports
&lt;/h3&gt;

&lt;p&gt;The reports module is used to generate useful information from the system data.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sales reports&lt;/li&gt;
&lt;li&gt;Inventory reports&lt;/li&gt;
&lt;li&gt;Low stock reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helped me think beyond basic CRUD and more about how users would actually use the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Design
&lt;/h2&gt;

&lt;p&gt;The backend exposes REST endpoints that the frontend can consume.&lt;/p&gt;

&lt;p&gt;Some example routes are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST   /api/auth/login
GET    /api/products
POST   /api/products
PUT    /api/products/{id}
DELETE /api/products/{id}

GET    /api/categories
POST   /api/categories

GET    /api/sales
POST   /api/sales

GET    /api/reports/sales
GET    /api/reports/inventory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal was to keep the API predictable and easy to understand.&lt;/p&gt;

&lt;p&gt;A clear API structure makes frontend development easier because each module has a defined purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication with JWT
&lt;/h2&gt;

&lt;p&gt;Authentication was one of the most important backend features.&lt;/p&gt;

&lt;p&gt;The general flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user logs in with valid credentials.&lt;/li&gt;
&lt;li&gt;The backend validates the credentials.&lt;/li&gt;
&lt;li&gt;The backend returns a JWT token.&lt;/li&gt;
&lt;li&gt;The frontend stores the token.&lt;/li&gt;
&lt;li&gt;The frontend sends the token when requesting protected resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Protected requests include the token in the authorization header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helped me understand how stateless authentication works in a full stack application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Design
&lt;/h2&gt;

&lt;p&gt;The database was designed around the main entities of the system.&lt;/p&gt;

&lt;p&gt;Some of the main entities are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Products&lt;/li&gt;
&lt;li&gt;Categories&lt;/li&gt;
&lt;li&gt;Sales&lt;/li&gt;
&lt;li&gt;Sale items&lt;/li&gt;
&lt;li&gt;Inventory records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simplified relationship would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Category → Products
Sale → Sale Items
Product → Sale Items
User → Sales
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure allows the system to track which products belong to each category, which products were sold and how sales are connected to users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges was deciding how to organize the backend so it would not become messy as the project grew.&lt;/p&gt;

&lt;p&gt;At first, it is easy to create endpoints quickly. But as more features are added, structure becomes more important.&lt;/p&gt;

&lt;p&gt;Some questions I had to think about were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where should the business logic live?&lt;/li&gt;
&lt;li&gt;How should the API responses be structured?&lt;/li&gt;
&lt;li&gt;How should protected routes be handled?&lt;/li&gt;
&lt;li&gt;How should database relationships be modeled?&lt;/li&gt;
&lt;li&gt;How can the backend stay maintainable as new modules are added?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These decisions helped me understand backend development beyond just writing endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building the backend helped me improve in several areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structuring a Spring Boot project&lt;/li&gt;
&lt;li&gt;Creating REST APIs&lt;/li&gt;
&lt;li&gt;Working with PostgreSQL&lt;/li&gt;
&lt;li&gt;Using Spring Data JPA&lt;/li&gt;
&lt;li&gt;Implementing JWT authentication&lt;/li&gt;
&lt;li&gt;Separating responsibilities between layers&lt;/li&gt;
&lt;li&gt;Thinking about business logic&lt;/li&gt;
&lt;li&gt;Designing backend modules for a real application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest lesson was that backend development is not only about making endpoints work.&lt;/p&gt;

&lt;p&gt;It is also about designing a structure that can support the application as it grows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;In the next post, I will focus on the frontend side of POS Lite.&lt;/p&gt;

&lt;p&gt;I will share how I built the interface using &lt;strong&gt;React / Next.js&lt;/strong&gt;, how the frontend communicates with the backend and how I structured the main screens of the application.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>postgressql</category>
      <category>backend</category>
    </item>
    <item>
      <title>Building POS Lite: A Full Stack Point of Sale System with Spring Boot, React and AWS</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 17 Jun 2026 10:47:49 +0000</pubDate>
      <link>https://dev.to/guadalupe182/building-pos-lite-a-full-stack-point-of-sale-system-with-spring-boot-react-and-aws-4eh6</link>
      <guid>https://dev.to/guadalupe182/building-pos-lite-a-full-stack-point-of-sale-system-with-spring-boot-react-and-aws-4eh6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Over the last months, I have been building &lt;strong&gt;POS Lite&lt;/strong&gt;, a full stack point of sale system designed for small businesses, stores and gyms.&lt;/p&gt;

&lt;p&gt;The goal of this project is not only to build a working application, but also to practice and demonstrate real-world software engineering skills: backend development, frontend development, authentication, database design, deployment and cloud infrastructure.&lt;/p&gt;

&lt;p&gt;I wanted to build something closer to a real business application, not just a simple portfolio project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;POS Lite is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;Spring Security&lt;/li&gt;
&lt;li&gt;JWT Authentication&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;React / Next.js&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;AWS EC2&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;li&gt;Cloudflare&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What POS Lite Does
&lt;/h2&gt;

&lt;p&gt;POS Lite includes features commonly needed in a point of sale system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product management&lt;/li&gt;
&lt;li&gt;Category management&lt;/li&gt;
&lt;li&gt;Inventory control&lt;/li&gt;
&lt;li&gt;Sales tracking&lt;/li&gt;
&lt;li&gt;User authentication&lt;/li&gt;
&lt;li&gt;Dashboard metrics&lt;/li&gt;
&lt;li&gt;Low stock alerts&lt;/li&gt;
&lt;li&gt;Barcode scanner support&lt;/li&gt;
&lt;li&gt;Sales and inventory reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea was to create a system that could be useful in a real-world context, especially for small businesses that need a simple way to manage sales and inventory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This Project
&lt;/h2&gt;

&lt;p&gt;Many beginner projects are useful for learning, but they usually stop at basic CRUD operations.&lt;/p&gt;

&lt;p&gt;With POS Lite, I wanted to go further and work on problems that are closer to real software development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How should the backend API be structured?&lt;/li&gt;
&lt;li&gt;How should authentication be handled?&lt;/li&gt;
&lt;li&gt;How should the frontend communicate with the backend?&lt;/li&gt;
&lt;li&gt;How should the database model support real business flows?&lt;/li&gt;
&lt;li&gt;How should the app be deployed?&lt;/li&gt;
&lt;li&gt;How can the project be presented professionally?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project helped me connect different parts of full stack development into one complete application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend Overview
&lt;/h2&gt;

&lt;p&gt;The backend was built with &lt;strong&gt;Spring Boot&lt;/strong&gt; and exposes REST APIs for the main business modules.&lt;/p&gt;

&lt;p&gt;Some of the backend responsibilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing products and categories&lt;/li&gt;
&lt;li&gt;Handling sales operations&lt;/li&gt;
&lt;li&gt;Protecting endpoints with authentication&lt;/li&gt;
&lt;li&gt;Connecting to PostgreSQL&lt;/li&gt;
&lt;li&gt;Returning structured data to the frontend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the most important parts of the backend was keeping the structure clean enough so that new features could be added without making the project difficult to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend Overview
&lt;/h2&gt;

&lt;p&gt;The frontend was built with &lt;strong&gt;React / Next.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The main goal was to create an interface that feels practical for a real user, not just a technical demo.&lt;/p&gt;

&lt;p&gt;Some of the frontend modules include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login&lt;/li&gt;
&lt;li&gt;Dashboard&lt;/li&gt;
&lt;li&gt;Inventory&lt;/li&gt;
&lt;li&gt;Sales&lt;/li&gt;
&lt;li&gt;Product forms&lt;/li&gt;
&lt;li&gt;Reports&lt;/li&gt;
&lt;li&gt;Barcode scanner flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also focused on making the UI clear enough for a business user, because a point of sale system should be fast and easy to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;The project uses a cloud-based deployment setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend deployed on &lt;strong&gt;AWS EC2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Frontend deployed on &lt;strong&gt;Vercel&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Domain and DNS managed with &lt;strong&gt;Cloudflare&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Docker used for containerization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This part helped me understand more about environment variables, server configuration, deployment errors, frontend/backend communication and production-like setups.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building POS Lite helped me improve in several areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing REST APIs&lt;/li&gt;
&lt;li&gt;Working with authentication&lt;/li&gt;
&lt;li&gt;Structuring a full stack project&lt;/li&gt;
&lt;li&gt;Connecting frontend and backend&lt;/li&gt;
&lt;li&gt;Managing database entities&lt;/li&gt;
&lt;li&gt;Deploying applications to the cloud&lt;/li&gt;
&lt;li&gt;Thinking about software from a product perspective&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest lesson was that building a complete project teaches things that isolated tutorials usually do not cover.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Will Share Next
&lt;/h2&gt;

&lt;p&gt;This is the first post in a small series about building POS Lite.&lt;/p&gt;

&lt;p&gt;In future posts, I want to write about:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How I designed the backend with Spring Boot&lt;/li&gt;
&lt;li&gt;How I handled authentication with JWT&lt;/li&gt;
&lt;li&gt;How I built the frontend with React / Next.js&lt;/li&gt;
&lt;li&gt;How I deployed the app with AWS EC2, Docker, Vercel and Cloudflare&lt;/li&gt;
&lt;li&gt;What I learned from building a real full stack project&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;POS Lite is still evolving, but it has already helped me practice many important parts of full stack development.&lt;/p&gt;

&lt;p&gt;I am using this series to document the process, share what I learn and continue improving the project over time.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>From “Overqualified” to IT Jr: 6-month update on my career pivot #webdev #career #programming #productivity</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Mon, 01 Dec 2025 18:19:19 +0000</pubDate>
      <link>https://dev.to/guadalupe182/from-overqualified-to-it-jr-6-month-update-on-my-career-pivot-webdev-career-programming-3lkk</link>
      <guid>https://dev.to/guadalupe182/from-overqualified-to-it-jr-6-month-update-on-my-career-pivot-webdev-career-programming-3lkk</guid>
      <description>&lt;p&gt;A few months ago I wrote about a really uncomfortable experience inside my own company:&lt;br&gt;&lt;br&gt;
I applied internally to grow as a developer and ended up being called &lt;em&gt;“overqualified”&lt;/em&gt; and even &lt;em&gt;“unable to code”&lt;/em&gt; — without anyone ever seeing me write a single line.&lt;/p&gt;

&lt;p&gt;If you haven't read that story yet, here it is:&lt;br&gt;
👉 &lt;a href="https://dev.to/guadalupe182/estoy-realmente-sobre-calificado-o-simplemente-incomodo-para-otros-186f"&gt;Am I really overqualified… or just uncomfortable for others?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That post generated more reactions than I expected.&lt;br&gt;&lt;br&gt;
Some people related to the story, others shared their own toxic experiences and career doubts.&lt;/p&gt;

&lt;p&gt;This is the 6-month update.&lt;/p&gt;




&lt;h2&gt;
  
  
  Same company, new role
&lt;/h2&gt;

&lt;p&gt;I’m still in the same company, but now I work as a &lt;strong&gt;Junior IT Engineer&lt;/strong&gt; instead of a &lt;strong&gt;Test Engineer Jr&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On paper it might look like a small change, but for me it was a big shift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I’m closer to &lt;strong&gt;infrastructure and support&lt;/strong&gt; instead of just testing.&lt;/li&gt;
&lt;li&gt;I help people solve real problems every day.&lt;/li&gt;
&lt;li&gt;I get to touch networking, printers, servers, databases and internal tools.&lt;/li&gt;
&lt;li&gt;I still code small scripts and tools whenever I can.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly: I feel &lt;strong&gt;less like a threat&lt;/strong&gt; and more like someone who actually adds value.&lt;/p&gt;




&lt;h2&gt;
  
  
  What my day as an IT Jr looks like
&lt;/h2&gt;

&lt;p&gt;Some examples of what I handle now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Troubleshooting &lt;strong&gt;printers&lt;/strong&gt; (including industrial label printers) and drivers.&lt;/li&gt;
&lt;li&gt;Managing &lt;strong&gt;IP reservations and DHCP entries&lt;/strong&gt; when new devices appear on the network.&lt;/li&gt;
&lt;li&gt;Helping users with &lt;strong&gt;Windows issues&lt;/strong&gt;, performance problems and basic automations.&lt;/li&gt;
&lt;li&gt;Using tools like &lt;strong&gt;DBeaver&lt;/strong&gt; and SQL queries to support other areas that need data.&lt;/li&gt;
&lt;li&gt;Checking connectivity, VPN problems, and general “why is this not working?” tickets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not glamorous. There’s no “big framework” or fancy buzzwords.&lt;br&gt;&lt;br&gt;
But it’s &lt;strong&gt;real work&lt;/strong&gt; that keeps a factory moving. Every ticket is an opportunity to learn something new.&lt;/p&gt;




&lt;h2&gt;
  
  
  My “POS-lite” side project
&lt;/h2&gt;

&lt;p&gt;Even though my daily job is more IT-focused, I didn’t want to lose the dev side of me.&lt;br&gt;&lt;br&gt;
So I’m building a personal project: a &lt;strong&gt;Point of Sale (POS) system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is to use it in small businesses and gyms (and to keep learning modern tools):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Java + Spring Boot&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MySQL / PostgreSQL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other pieces:&lt;/strong&gt; Docker, Git, GitHub, CI/CD&lt;/li&gt;
&lt;li&gt;Future ideas: barcode scanner integration, product packs, stock alerts, and deployment on the cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve been working on features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating and editing products
&lt;/li&gt;
&lt;li&gt;Handling stock and packs of products
&lt;/li&gt;
&lt;li&gt;Scanning codes to add items quickly
&lt;/li&gt;
&lt;li&gt;Basic reporting
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project helps me stay up to date with &lt;strong&gt;clean architecture, REST APIs, error handling, Git flow, and deployments&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Inside the company I may be “IT Jr”, but outside I’m still pushing myself as a developer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I’ve learned in these months
&lt;/h2&gt;

&lt;p&gt;Looking back, here are a few lessons that stayed with me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Being called &lt;em&gt;“overqualified”&lt;/em&gt; or &lt;em&gt;“too much”&lt;/em&gt; usually says more about the &lt;strong&gt;environment&lt;/strong&gt; than about you.&lt;/li&gt;
&lt;li&gt;You can be in the &lt;strong&gt;wrong team inside the right company&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It’s possible to &lt;strong&gt;pivot internally&lt;/strong&gt; to a role where your curiosity is seen as an asset, not a threat.&lt;/li&gt;
&lt;li&gt;Side projects can keep your motivation and skills alive, even when your day job is not perfect.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;I’m currently focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Growing in my &lt;strong&gt;IT Jr role&lt;/strong&gt;, understanding more about infrastructure and operations.&lt;/li&gt;
&lt;li&gt;Improving my &lt;strong&gt;English&lt;/strong&gt; to open more international opportunities.&lt;/li&gt;
&lt;li&gt;Pushing my &lt;strong&gt;POS-lite&lt;/strong&gt; project forward and polishing it enough to use as a real portfolio piece.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you read my first article and felt something similar, this is for you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You are not “too much”. You might just be in a place that doesn’t know what to do with everything you bring.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks for reading — and if you have any advice, experience or questions, I’d love to read your comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
      <category>database</category>
    </item>
    <item>
      <title>Am I really overqualified... or just uncomfortable for others?</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Wed, 28 May 2025 01:21:11 +0000</pubDate>
      <link>https://dev.to/guadalupe182/estoy-realmente-sobre-calificado-o-simplemente-incomodo-para-otros-186f</link>
      <guid>https://dev.to/guadalupe182/estoy-realmente-sobre-calificado-o-simplemente-incomodo-para-otros-186f</guid>
      <description>&lt;h2&gt;
  
  
  I applied to grow
&lt;/h2&gt;

&lt;p&gt;I applied internally for two open positions in my company: one as a Software Developer and another as a Junior Web Developer. I wanted to move toward a field more aligned with my interests and skills, and I was genuinely excited.&lt;/p&gt;

&lt;p&gt;However, my manager offered me a spot on his own team, since they had an internal web development team. He mentioned they used PHP—which I don’t deeply master—but also said I could use ChatGPT as needed, so I accepted with a positive attitude and willingness to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day one: a red flag
&lt;/h2&gt;

&lt;p&gt;On the first day, I was paired with the only developer on the team. During our conversation, he bluntly told me I was “overqualified,” and that he didn’t agree with the tech changes I had “suggested.”&lt;/p&gt;

&lt;p&gt;To clarify: I never suggested any changes. I just asked if he knew any PHP frameworks, since the internal website they built was running quite slowly, and I wanted to understand its architecture.&lt;/p&gt;

&lt;p&gt;What I found was extremely complex and messy code: files with over 10,000 lines, PHP mixed with HTML, no clear separation of concerns, and zero documentation. A textbook case of spaghetti code in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  A hostile environment
&lt;/h2&gt;

&lt;p&gt;The conversation started turning hostile. When I asked him directly if something about me bothered him, he said yes: I was overqualified. It was clear my presence was uncomfortable to him.&lt;/p&gt;

&lt;p&gt;He constantly tried to make me look bad, possibly due to insecurity or ego—I honestly don’t know.&lt;/p&gt;

&lt;p&gt;Later, the same developer confronted me about having a personal consulting gig (which is public), insinuating that I shouldn’t have one if I didn’t know how to set up a physical server. I’ve never claimed to be an expert in that, and I made it clear from the beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manager: vision or contradiction?
&lt;/h2&gt;

&lt;p&gt;I also spoke with the manager, who eventually didn’t approve my transfer request out of the team. But before that, when I asked to talk, it turned into a direct confrontation.&lt;/p&gt;

&lt;p&gt;He ended up saying I didn’t know how to code—without ever seeing me write a single line in context. That comment threw me off completely. It was a shallow and unfair judgment of my work and profile.&lt;/p&gt;

&lt;p&gt;He also told me he could build websites himself using ChatGPT. He said it in a condescending tone, as if using modern tools was a sign of weakness or laziness, when in reality, they are a valid part of today’s development workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimum tools… barely offered
&lt;/h2&gt;

&lt;p&gt;The technical setup was also discouraging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I was given a laptop with no internet access.&lt;/li&gt;
&lt;li&gt;I couldn’t install VS Code or configure my preferred tools.&lt;/li&gt;
&lt;li&gt;Despite being told I could use ChatGPT, I had no access to it.&lt;/li&gt;
&lt;li&gt;They expected me to know how to set up physical servers and SSL certificates—skills I’m open to learning, but which require guidance and proper environments to practice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I researched it, yes, but couldn’t try it due to the restrictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  I tried to adapt: even after hours
&lt;/h2&gt;

&lt;p&gt;Despite all this, I understood the vision the manager wanted: a more modern, robust, scalable environment. That aligned with my interests, so I took initiative. After work hours, I started building a demo using PHP, Laravel, and MySQL.&lt;/p&gt;

&lt;p&gt;I tried to propose a more modern structure, aiming to solve many of the issues I had observed: better architecture, improved loading speed, maintainable code. I didn’t get to finish it, but I did it with commitment and respect for the work.&lt;/p&gt;

&lt;p&gt;However, instead of opening the conversation or valuing the effort, the environment grew more hostile. It wasn’t about building together—it was about control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Am I a developer or just a copy-paster?
&lt;/h2&gt;

&lt;p&gt;This experience left me confused. It made me question myself and my skills. I felt judged, undervalued, even humiliated.&lt;/p&gt;

&lt;p&gt;I started wondering: do I really code—or just copy and paste?&lt;/p&gt;

&lt;p&gt;The truth is: I do code. With mistakes, and with constant learning, like everyone in this field. But I also know how to listen, research, verify my sources, and ask for help when I need to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;What hurt the most wasn’t the rejection—but the treatment. The hostility. The way I was made to feel "less than" for trying to do things right or for thinking differently.&lt;/p&gt;

&lt;p&gt;My intention was never to replace anyone or impose anything. I simply wanted to contribute through my strengths, as anyone with technical vocation would.&lt;/p&gt;




&lt;h3&gt;
  
  
  What do you think?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Have you ever gone through a similar experience?&lt;/li&gt;
&lt;li&gt;How do you handle situations where your knowledge or willingness to improve is seen as a threat?&lt;/li&gt;
&lt;li&gt;Is it fair to demand technical work without providing basic tools?&lt;/li&gt;
&lt;li&gt;Do you think it's reasonable to tell someone they can't code just because they don’t know how to set up a physical server?&lt;/li&gt;
&lt;li&gt;Should I leave this company? &lt;em&gt;(Open to offers 😅)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear your thoughts.&lt;br&gt;&lt;br&gt;
And if you made it this far: &lt;strong&gt;thank you 🙌&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Books of interest</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Tue, 14 Dec 2021 20:05:29 +0000</pubDate>
      <link>https://dev.to/guadalupe182/books-of-interest-11eb</link>
      <guid>https://dev.to/guadalupe182/books-of-interest-11eb</guid>
      <description>&lt;p&gt;short post to share books in pdf I hope they are useful greetings !!!! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.mediafire.com/z6uyonortjktg" rel="noopener noreferrer"&gt;enjoy!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>java</category>
      <category>kotlin</category>
      <category>books</category>
    </item>
    <item>
      <title>My first freelance job part 3</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Sat, 11 Sep 2021 07:19:46 +0000</pubDate>
      <link>https://dev.to/guadalupe182/my-first-freelance-job-part-3-2966</link>
      <guid>https://dev.to/guadalupe182/my-first-freelance-job-part-3-2966</guid>
      <description>&lt;p&gt;As I have been telling in previous posts I had a bad experience in my first job as a freelancer and this was because the deal with the client was led by a third party (a girl who contacted me on facebook).&lt;br&gt;
To put it in context:&lt;br&gt;
The story starts when this girl contacts me to help her with a school project, I non-profit helped her in her project.&lt;br&gt;
A month later she contacts me offering me to do a real project for the company on which she had based her school project, because they liked the design.&lt;br&gt;
So I started with the project but I never got any economic remuneration ... a month after the delivery (about three days ago) I decided to send mail to the company to tell them why his page had never been published and the delay of the same emphasizing the lack of economic remuneration.&lt;br&gt;
The next morning I received a call from the company where they informed me that they had already covered 80% of the project for a month ago (what I had charged from the beginning), because this girl had charged even more (so the company still owed her money), that's right ! the girl had already charged and had not paid me !!!.&lt;br&gt;
I reported the situation to the person at the company and they decided to sue the girl for breach of contract, I received a call from her claiming that I had communicated with the company and she offered to pay me the amount that I had charged (even knowing that she charged more, she never told me).&lt;br&gt;
But well I no longer wanted to have any contact with her so I told her that I was aware of the fraud she had done and that I wished her good luck in her legal process, stressing that there was no rancor on my part because they were difficult days for me (eating only once a day for lack of money because I lost my job and my apartment as a result of being able to finish this project in a timely manner).&lt;br&gt;
-----THE GOOD NEWS.-------&lt;br&gt;
After talking with the representative of the company they offered me to pay the page and today I received MY FIRST PAYMENT FOR A WEBSITE made by me !!! and they also offered me a possible second project (this is waiting for authorization).&lt;br&gt;
Now I have direct contact with the company and I am happy to work in what I like in a "formal" way, for the first time !!! !!!&lt;br&gt;
For the hiring of my services I have relied on a contract and I hope that everything goes well.&lt;br&gt;
PS; This is undoubtedly a clear example that your quality of personal values can lead you to a good job or to a legal problem from which you will not get out well.&lt;br&gt;
I hope you like this experience that I am glad to share with all of you !&lt;br&gt;
greetings and blessings to all of you !!!!&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My first freelance job</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Sat, 28 Aug 2021 02:36:30 +0000</pubDate>
      <link>https://dev.to/guadalupe182/my-first-freelance-job-20gh</link>
      <guid>https://dev.to/guadalupe182/my-first-freelance-job-20gh</guid>
      <description>&lt;p&gt;This is the continuation of my experience in my first freelancer job, I'll be brief.... after they had not paid me and I lost total contact with the client they called me yesterday 26-08-21 to tell me that they would pay me this Saturday (they said they had financial problems and that's why they had not made the payment) and that they would like to continue working with me but they would like to add two other programmers (without experience) to make an e-commerce which I don't see so convenient.&lt;br&gt;
I answered them that yes, I will continue working with them but it will be under a contract previously signed by me, (after the bad experience I decided to make a contract to avoid that bad taste in my mouth again).&lt;br&gt;
What do you think? should I continue working with these people? &lt;br&gt;
yes, no, why?&lt;br&gt;
Thank you in advance for your comments !&lt;br&gt;
Greetings! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>devops</category>
      <category>webpack</category>
    </item>
    <item>
      <title>My first freelance job</title>
      <dc:creator>Guadalupe Rosas</dc:creator>
      <pubDate>Mon, 23 Aug 2021 07:59:42 +0000</pubDate>
      <link>https://dev.to/guadalupe182/my-first-freelance-job-hkn</link>
      <guid>https://dev.to/guadalupe182/my-first-freelance-job-hkn</guid>
      <description>&lt;p&gt;I thought a lot about writing this ...&lt;br&gt;
I don't know how beneficial it will be for my professional development, but I don't want to be left with the desire to share this first experience.&lt;br&gt;
It all started helping a girl to develop a website for a company (as a school project), after that she contacted me to propose me a business.&lt;br&gt;
The design that I had implemented in her project they had liked and she needed my help to make another similar and improved one and this time paid because the first time I supported this person I didn't charge anything.&lt;br&gt;
I decided to implement a landing page with a minimalist style, intuitive, and full contact with the customer through messenger (my first proposal was an e-commerce) but they found it too expensive...&lt;br&gt;
so I elaborated the design and presented it with an estimated delivery time of 1 month to 1 month and a half always sticking to spring methodology.&lt;br&gt;
The first mistake was not to generate a contract with the specifications that the client should test and respect during the delivery time because the person I was supporting assured me that they were totally trustworthy and that she had already worked with them before.&lt;br&gt;
Anyway ... once the design was presented and approved I got down to work but the client constantly delayed me with changes he wanted at the last minute and it should be noted that I shortened the delivery time to about 3 weeks or 2.&lt;br&gt;
So I decided to see it as a challenge and not as an abuse by this company....&lt;br&gt;
In the first instance I asked for 50% of the total payment in advance but they refused, they said that since it was the first time they would work with me the payment would be made until the final delivery of the project (at least that's what this person told me) since being their clients they did not allow me to have any contact with them.&lt;br&gt;
So well ... I delivered in time and form and surprise ... the payment did not arrive as agreed .... I told them that there was no problem and that I would wait no problem ... the day arrived .... and the payment ... still did not arrive .... then they told me that next week I would have my money now that they had had economic problems and that now it was a fact but what do you think?&lt;br&gt;
Exactly. the payment never arrived .... &lt;br&gt;
in the last contact I had with them.... &lt;br&gt;
they told me that they already had a SECOND PROJECT haha but they didn't mention anything about the money they owed me ... &lt;br&gt;
so I decided to unsubscribe the page ...&lt;br&gt;
and well ... I am left ... with the code .... and my time invested ... and yes .... without money ....&lt;br&gt;
I guess this has happened to more than one of you, I would like to read your opinions about it. &lt;br&gt;
at the moment I am trying to join Workana ... but ... my profile is still pending review .... &lt;br&gt;
if you have any suggestions for freelancer sites I would appreciate it.&lt;br&gt;
and again leave your comments &lt;br&gt;
thank you very much and best regards !&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>css</category>
    </item>
  </channel>
</rss>
