<?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: Einsen Vásquez</title>
    <description>The latest articles on DEV Community by Einsen Vásquez (@edwineinsen).</description>
    <link>https://dev.to/edwineinsen</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%2F978879%2Fecdb3711-d235-4f34-aebe-c12eb04eb479.png</url>
      <title>DEV Community: Einsen Vásquez</title>
      <link>https://dev.to/edwineinsen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edwineinsen"/>
    <language>en</language>
    <item>
      <title>CiudadActiva - Bridging the gap between citizens and their Municipality (government)</title>
      <dc:creator>Einsen Vásquez</dc:creator>
      <pubDate>Sat, 28 Feb 2026 09:34:33 +0000</pubDate>
      <link>https://dev.to/edwineinsen/ciudadactiva-bridging-the-gap-between-citizens-and-their-municipality-government-2npm</link>
      <guid>https://dev.to/edwineinsen/ciudadactiva-bridging-the-gap-between-citizens-and-their-municipality-government-2npm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;This app was built for the citizens of &lt;strong&gt;San José Pinula&lt;/strong&gt;, a municipality in Guatemala, and designed to scale to any municipality in my country (Guatemala).&lt;/p&gt;

&lt;p&gt;San José Pinula is a growing urban area where residents face daily infrastructure problems like potholes that damage vehicles, broken streetlights that create unsafe conditions at night, water leaks that waste resources, and uncollected trash, among others. The real problem isn't that these issues exist, it's that &lt;strong&gt;there's no structured, accessible way for citizens to report them to local authorities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Reports get lost in WhatsApp groups. Photos get buried in Facebook comments. The municipality has no centralized visibility into what problems exist, where, or how many people are affected. Problems go unaddressed for months (even years).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CiudadActiva&lt;/strong&gt; was built for this community, giving every neighbor a direct, visual channel to communicate with their municipality, and giving the municipality a real-time dashboard to manage and respond.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;CiudadActiva&lt;/strong&gt; is a mobile-first civic reporting web app with two sides:&lt;/p&gt;

&lt;h3&gt;
  
  
  For Citizens
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Submit a report with a &lt;strong&gt;photo or video&lt;/strong&gt;, problem category, and &lt;strong&gt;exact GPS location&lt;/strong&gt; (or tap on the map)&lt;/li&gt;
&lt;li&gt;Browse all reports on a &lt;strong&gt;public interactive map&lt;/strong&gt; with color-coded markers by category&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;"This affects me too"&lt;/strong&gt; to show community support for existing reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share any report&lt;/strong&gt; directly to social media or copy the link&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No account required&lt;/strong&gt;, anonymous reporting is fully supported&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For the Municipality
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Admin dashboard&lt;/strong&gt; with all reports, filterable by municipality and status&lt;/li&gt;
&lt;li&gt;Change report status: &lt;strong&gt;Pending -&amp;gt; In Progress -&amp;gt; Resolved&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Stats panel: total reports, pending, in progress, resolved&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Platform
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-municipality support&lt;/strong&gt;, built with &lt;code&gt;municipality_id&lt;/code&gt; on every record from day one. Currently includes San José Pinula, Mixco, Fraijanes, Santa Catarina Pinula, Villa Canales, Villa Nueva, and Guatemala City.&lt;/li&gt;
&lt;li&gt;Fully responsive, mobile-first UI with direct camera access on smartphones&lt;/li&gt;
&lt;li&gt;Row Level Security is enforced at the database level via Supabase&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://ciudad-activa-gt.vercel.app" rel="noopener noreferrer"&gt;https://ciudad-activa-gt.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ZarakiLancelot" rel="noopener noreferrer"&gt;
        ZarakiLancelot
      &lt;/a&gt; / &lt;a href="https://github.com/ZarakiLancelot/ciudad-activa" rel="noopener noreferrer"&gt;
        ciudad-activa
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Civic reporting app for municipalities in Guatemala — citizens report urban issues with photos, geolocation and community support.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CiudadActiva 🏙️&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/ZarakiLancelot/ciudad-activa/./README.es.md" rel="noopener noreferrer"&gt;🇪🇸 Leer en Español / Read in Spanish&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A civic reporting platform that empowers citizens to report urban problems directly to their municipality — with photos, exact location, and community support.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28" rel="nofollow"&gt;DEV Weekend Challenge&lt;/a&gt; 🏆&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ciudad-activa-gt.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bf23cd7694fa3c569001c45a1299161ad6f135e10c8156e058bef0222df8c5d7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69766525323044656d6f2d6369756461642d2d6163746976612d2d67742e76657263656c2e6170702d3136613334613f7374796c653d666f722d7468652d6261646765" alt="Live Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/96b316aacffcf749f4ee929db4870bc38aa9dfc925c474b0a4915541efa6c9e9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31382d3631444146423f7374796c653d666c61742d737175617265266c6f676f3d7265616374"&gt;&lt;img src="https://camo.githubusercontent.com/96b316aacffcf749f4ee929db4870bc38aa9dfc925c474b0a4915541efa6c9e9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31382d3631444146423f7374796c653d666c61742d737175617265266c6f676f3d7265616374" alt="React"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/93e7c55f8107916d7496c57cfa2933466c60e2a5b94a824793e82f42604efdfa/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d3331373843363f7374796c653d666c61742d737175617265266c6f676f3d74797065736372697074"&gt;&lt;img src="https://camo.githubusercontent.com/93e7c55f8107916d7496c57cfa2933466c60e2a5b94a824793e82f42604efdfa/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d3331373843363f7374796c653d666c61742d737175617265266c6f676f3d74797065736372697074" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b48f5e90a3d100908eec233382291d4dd5cacca9786236b95887637cac24ec93/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53757061626173652d426161532d3345434638453f7374796c653d666c61742d737175617265266c6f676f3d7375706162617365"&gt;&lt;img src="https://camo.githubusercontent.com/b48f5e90a3d100908eec233382291d4dd5cacca9786236b95887637cac24ec93/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53757061626173652d426161532d3345434638453f7374796c653d666c61742d737175617265266c6f676f3d7375706162617365" alt="Supabase"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/8a35959012e711d59a54b52139a6090748d576a639375f93465a9135ad36363b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f7965642532306f6e2d56657263656c2d3030303f7374796c653d666c61742d737175617265266c6f676f3d76657263656c"&gt;&lt;img src="https://camo.githubusercontent.com/8a35959012e711d59a54b52139a6090748d576a639375f93465a9135ad36363b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f7965642532306f6e2d56657263656c2d3030303f7374796c653d666c61742d737175617265266c6f676f3d76657263656c" alt="Vercel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌎 The Problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;In municipalities like San José Pinula, Guatemala, citizens have no efficient way to report urban issues (potholes, broken streetlights, water leaks, etc.) to local authorities. Reports get lost in WhatsApp groups or never reach the right people. Problems go unfixed for months.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CiudadActiva&lt;/strong&gt; bridges that gap — giving every citizen a direct, visual, geolocated channel to communicate with their municipality, and giving municipalities a real-time dashboard to manage and respond to issues.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;For Citizens&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;📍 &lt;strong&gt;Report issues&lt;/strong&gt; with photo/video, category, and exact GPS location&lt;/li&gt;
&lt;li&gt;🗺️ &lt;strong&gt;View all reports&lt;/strong&gt; on an interactive public map&lt;/li&gt;
&lt;li&gt;❤️ &lt;strong&gt;"This affects me too"&lt;/strong&gt; — support existing reports with one tap&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ZarakiLancelot/ciudad-activa" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React 18 + TypeScript + Vite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;React Router v7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Supabase (Auth, PostgreSQL, Storage)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maps&lt;/td&gt;
&lt;td&gt;Leaflet.js + React Leaflet + OpenStreetMap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why Supabase as the entire backend
&lt;/h3&gt;

&lt;p&gt;The biggest architectural decision was &lt;strong&gt;to eliminate a custom Node.js backend&lt;/strong&gt;. Supabase gave me everything I needed out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anonymous Auth&lt;/strong&gt;: citizens can report without creating an account&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Row Level Security&lt;/strong&gt;: public read, auth-only write, admin-only updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: photo and video uploads with public URLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-generated REST API&lt;/strong&gt;: no endpoints to write&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This let me focus 100% of my weekend on the product, not infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maps without Google
&lt;/h3&gt;

&lt;p&gt;Using &lt;strong&gt;Leaflet.js + OpenStreetMap&lt;/strong&gt; kept the project fully free with no API keys required for maps. I also used &lt;strong&gt;Nominatim&lt;/strong&gt; (OpenStreetMap's geocoding API) for reverse geocoding, automatically converting GPS coordinates into human-readable addresses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile-first camera access
&lt;/h3&gt;

&lt;p&gt;On mobile, the report form offers two options for media: upload from the gallery or open the camera directly. This is handled with a &lt;code&gt;capture="environment"&lt;/code&gt; attribute on a hidden file input, triggered via &lt;code&gt;useRef&lt;/code&gt; for reliable behavior across iOS and Android browsers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-municipality from day one
&lt;/h3&gt;

&lt;p&gt;Even though this is a pilot for San José Pinula, every table has a &lt;code&gt;municipality_id&lt;/code&gt; column. Switching municipalities on the map filters reports and re-centers to the correct coordinates, with each municipality's official logo appearing in the loading spinner.&lt;/p&gt;

&lt;p&gt;What I'd build next&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push notifications when a report status changes&lt;/li&gt;
&lt;li&gt;Municipality analytics dashboard with charts&lt;/li&gt;
&lt;li&gt;PWA with offline support&lt;/li&gt;
&lt;li&gt;Duplicate detection by GPS proximity&lt;/li&gt;
&lt;li&gt;Self-service municipality onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for this opportunity!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Roadmap 2024 - Software Development</title>
      <dc:creator>Einsen Vásquez</dc:creator>
      <pubDate>Wed, 03 Jan 2024 22:46:13 +0000</pubDate>
      <link>https://dev.to/edwineinsen/my-roadmap-2024-software-development-3h5j</link>
      <guid>https://dev.to/edwineinsen/my-roadmap-2024-software-development-3h5j</guid>
      <description>&lt;p&gt;I consider myself a MID-level developer because although I have a lot of knowledge, I don't put it all into practice and I don't feel confident about many things. I am the one who gives good advice, and although I follow many of them, I don't follow the most important ones.&lt;/p&gt;

&lt;p&gt;I haven't finished university (I have 3 courses left), but I feel like I don't have the foundations that well defined. I started in the world of software development without strong foundations, and learning as I went, which has always marked me with fear of doing things, and that makes the "imposter syndrome" attack me more than I would like, I am someone very positive, but I'm human too.&lt;/p&gt;

&lt;p&gt;I also overthink that what I do, I can always do better, and that often paralyzes me, because although I know it can be done better, I don't know how to do it better yet, I need pragmatism. I have burned myself trying to be better because I did not organize myself in what I wanted, I did not have a defined route or a clear objective.&lt;/p&gt;

&lt;p&gt;I have a B2-C1 level in English (I continue studying and learning on Duolingo and OpenEnglish), but when I am in an interview in English I get blocked. I don't like doing live tests because I also get very nervous, but it is something that little by little with practice and confidence I have been improving. "If you are afraid, do it with fear, but do it."&lt;/p&gt;

&lt;p&gt;In previous years I bought courses and books, and I have them all piled up, I have finished maybe 5% of everything I have on Udemy, CodigoFacilito, Coursera, PluralSight, Odin Project, DevTalles, StackSkills, Platzi, FreeCodeCamp, TodoCode, Codely, LinkedIn, GoRails. I tried to convince myself that if I paid I would make an effort or force myself to do things, but it hasn't always been like that.&lt;/p&gt;

&lt;p&gt;Also with my stack, although I love it, I am aware that it has not been so requested lately, and that is why I try to cover other technologies, I know PHP, Java, JavaScript, TypeScript, Python, and C#, because in the end It is not so much about the language, but rather the skills on data structures, logic, critical thinking, other soft skills, patience, effort, dedication and discipline.&lt;/p&gt;

&lt;p&gt;But because I want to cover many things, I haven't finished specializing in something specific, so I have decided to put all my effort into Ruby on Rails and integrate the other technologies that, although I already have a little mastery, are not enough for the market, step by step. I'm not going to worry and start with the bases.&lt;/p&gt;

&lt;p&gt;Since I did some challenges in HackerRank for a position, I started to practice more and more in my stack (Ruby on Rails), this year I started it with a blog (&lt;a href="https://developer-chapin.com"&gt;Blog - Einsen&lt;/a&gt;) which I did with A Ruby framework that I didn't know about, (&lt;a href="https://www.bridgetownrb.com/"&gt;Bridgetown&lt;/a&gt;), is fascinating like almost everything in the Ruby environment, it is simple and has very nice conventions to develop.&lt;/p&gt;

&lt;p&gt;I will continue to feed my blog as a knowledge database, and I will improve the appearance to learn more. I will also finally take courses on everything I have accumulated, but with each course, I want to make an application or something useful not only for its use but also for my learning.&lt;/p&gt;

&lt;p&gt;I will use all the tools that I am privileged to have, to be able to achieve my goal and be able to have a job that supports my family's needs, as well as fulfill my commitments, and at the same time grow personally and professionally. So I will do the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I will go back to the basics of Ruby, I will go back to the data structures, and the algorithms, and I will do exercises until I feel satisfied with this, either through HackerRank or other challenge sites, or through the books I have.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will take the courses that I left halfway and I will start carrying out projects that are useful to me and those who can find them useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will also create my portfolio where I will put all the projects I finish to show my skills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will use social networks more (Twitter, Instagram, Facebook, LinkedIn, Telegram, WhatsApp) to share what I learn.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will continue to improve my soft skills so that my communication is also effective and I can better address the topics I want to see and share.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will improve my English and my confidence to speak it in interviews, as well as live coding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will also rest and enjoy my family because I do it for and by them, and for myself.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I will also share my progress so that you can see that it is possible, I will not always be in the best disposition, but as they say: "When motivation fails, let discipline appear."&lt;/p&gt;

&lt;p&gt;Then the others pending such as databases, the cloud, cybersecurity, mobile development, testing, project management, architecture, design patterns, and good practices. This is a marathon, not a sprint.&lt;/p&gt;

&lt;p&gt;Greetings, colleagues.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>softskills</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
