
<!DOCTYPE html>
<html lang="en" data-theme="dark">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Juan Pablo Ramirez Vega — Software developer building SaaS products with Go, Angular, Flutter and more.">
    <meta name="author" content="Juan Pablo Ramirez Vega">
    <meta name="robots" content="index, follow">
    <title>juparave.com - Personal Website of Juan Pablo</title>

    
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://juparave.com">
    <meta property="og:title" content="juparave.com - Personal Website of Juan Pablo">
    <meta property="og:description" content="Juan Pablo Ramirez Vega — Software developer building SaaS products with Go, Angular, Flutter and more.">
    <meta property="og:image" content="https://juparave.com/img/og-image.png">
    <meta property="og:site_name" content="juparave.com">
    <meta property="og:locale" content="en_US">

    
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:site" content="@juparave">
    <meta name="twitter:creator" content="@juparave">
    <meta name="twitter:title" content="juparave.com - Personal Website of Juan Pablo">
    <meta name="twitter:description" content="Juan Pablo Ramirez Vega — Software developer building SaaS products with Go, Angular, Flutter and more.">
    <meta name="twitter:image" content="https://juparave.com/img/og-image.png">

    
    <link rel="canonical" href="https://juparave.com">

    
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,700;1,9..40,400&display=swap" rel="stylesheet">

    
    <link rel="stylesheet" href="/css/style.css">
    

    
    <link rel="icon" href="/favicon.ico" type="image/x-icon">

    
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-DL5HB8FPNB"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-DL5HB8FPNB');
    </script>
</head>
<body>




<nav class="nav" id="nav">
  <div class="nav-inner">
    <a href="/" class="nav-brand">juparave<span class="brand-dot">.</span></a>
    <div class="nav-links" id="nav-links">
      <a href="#about">About</a>
      <a href="#projects">Work</a>
      <a href="#contact">Contact</a>
      <a href="/wiki">Wiki</a>
    </div>
    <div class="nav-actions">
      <button class="theme-toggle" id="theme-toggle" aria-label="Toggle theme">
        <svg class="icon-moon" width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"
            d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" />
        </svg>
        <svg class="icon-sun" width="18" height="18" fill="none" stroke="currentColor" viewBox="0 0 24 24">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"
            d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" />
        </svg>
      </button>
      <button class="nav-menu-btn" id="nav-menu-btn" aria-label="Toggle menu">
        <span></span>
        <span></span>
      </button>
    </div>
  </div>
</nav>


<section id="home" class="hero">
  <div class="hero-grain"></div>
  <div class="hero-inner">
    <div class="hero-intro">
      <div class="hero-avatar-wrap reveal" style="--delay: 0">
        <img src="/img/avatar.jpg" alt="Juan Pablo Ramirez Vega" class="hero-avatar">
      </div>
      <div class="hero-meta reveal" style="--delay: 1">
        <span class="hero-label">Developer &middot; Creator &middot; Problem Solver</span>
      </div>
    </div>
    <h1 class="hero-title reveal" style="--delay: 2">
      <span class="hero-line">Hi, I'm</span>
      <span class="hero-line hero-name">Juan Pablo<span class="brand-dot">.</span></span>
    </h1>
    <p class="hero-desc reveal" style="--delay: 3">
      I build things for the web, explore new technologies, and turn ideas
      into reality through code. Welcome to my corner of the internet.
    </p>
    <div class="hero-cta reveal" style="--delay: 4">
      <a href="#projects" class="btn-primary">View my work</a>
      <a href="#contact" class="btn-ghost">Get in touch</a>
    </div>
  </div>
  <div class="hero-scroll reveal" style="--delay: 5">
    <span>Scroll</span>
    <div class="scroll-line"></div>
  </div>
</section>


<section id="about" class="about">
  <div class="section-rule"></div>
  <div class="about-inner">
    <div class="about-header">
      <span class="section-label scroll-reveal">01</span>
      <h2 class="section-heading scroll-reveal">About</h2>
    </div>
    <div class="about-grid">
      <div class="about-text">
        <p class="about-lede scroll-reveal">
          Passionate about creating impactful solutions — for over 25 years.
        </p>
        <p class="scroll-reveal">
          I'm a developer based in Mexico City, building elegant solutions to complex
          problems. My journey in tech began over two decades ago, and I've been hooked
          ever since.
        </p>
        <p class="scroll-reveal">
          When I'm not coding, you can find me riding my bike through the mountains
          of Morelos — since I haven't updated my blog in almost 20 years.
        </p>
        <p class="scroll-reveal">
          I believe in continuous learning and pushing the boundaries of what's
          possible with technology. Always open to interesting projects and collaborations.
        </p>
      </div>
      <div class="about-aside">
        <div class="skills-block scroll-reveal">
          <h3 class="skills-label">Stack</h3>
          <div class="skills-list">
            <span class="skill">Go</span>
            <span class="skill">TypeScript</span>
            <span class="skill">Python</span>
            <span class="skill">Docker</span>
            <span class="skill">GCP</span>
            <span class="skill">AWS</span>
          </div>
        </div>
        <div class="stats-block scroll-reveal">
          <div class="stat">
            <span class="stat-num">25+</span>
            <span class="stat-label">Years building</span>
          </div>
          <div class="stat">
            <span class="stat-num">3</span>
            <span class="stat-label">Active SaaS products</span>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>


<section id="projects" class="projects">
  <div class="section-rule"></div>
  <div class="projects-inner">
    <div class="projects-header">
      <span class="section-label scroll-reveal">02</span>
      <h2 class="section-heading scroll-reveal">Selected Work</h2>
    </div>

    
    <article class="project scroll-reveal">
      <div class="project-info">
        <h3 class="project-name">TeloPromo</h3>
        <p class="project-desc">
          Multi-tenant SaaS for field promoter management, store visits, and store check audits.
          Dual-database architecture with PocketBase for central auth and per-account SQLite databases.
        </p>
        <div class="project-tags">
          <span>Go</span>
          <span>PocketBase</span>
          <span>Angular</span>
          <span>Flutter</span>
          <span>SvelteKit</span>
          <span>Stripe</span>
        </div>
        <a href="https://telopromo.com" target="_blank" rel="noopener" class="project-link">
          Visit project
          <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 17L17 7M17 7H7M17 7v10" />
          </svg>
        </a>
      </div>
      <div class="project-visual">
        <img src="/img/telopromo-logo.svg" alt="TeloPromo">
      </div>
    </article>

    <div class="project-divider"></div>

    
    <article class="project scroll-reveal">
      <div class="project-info">
        <h3 class="project-name">NexoComercial</h3>
        <p class="project-desc">
          Property management SaaS with multi-tenancy, JWT authentication, Stripe subscriptions,
          and Google Maps integration. Handles leases, tenant tracking, and occupancy monitoring.
        </p>
        <div class="project-tags">
          <span>Go</span>
          <span>Fiber</span>
          <span>Angular</span>
          <span>Tailwind</span>
          <span>SQLite</span>
          <span>Stripe</span>
        </div>
        <a href="https://nexocomercial.mx" target="_blank" rel="noopener" class="project-link">
          Visit project
          <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 17L17 7M17 7H7M17 7v10" />
          </svg>
        </a>
      </div>
      <div class="project-visual">
        <img src="/img/nexocomercial-logo.svg" alt="NexoComercial">
      </div>
    </article>

    <div class="project-divider"></div>

    
    <article class="project scroll-reveal">
      <div class="project-info">
        <h3 class="project-name">Portal de Pagos</h3>
        <p class="project-desc">
          Mexican invoice management platform compliant with SAT/CFDI requirements.
          Handles invoice uploads, payment tracking, recurring scheduling, and PDF generation.
        </p>
        <div class="project-tags">
          <span>Go</span>
          <span>Fiber</span>
          <span>Angular</span>
          <span>Tailwind</span>
          <span>PostgreSQL</span>
          <span>Stripe</span>
        </div>
        <a href="https://pdp.mx" target="_blank" rel="noopener" class="project-link">
          Visit project
          <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 17L17 7M17 7H7M17 7v10" />
          </svg>
        </a>
      </div>
      <div class="project-visual">
        <img src="/img/pdep-logo.png" alt="Portal de Pagos">
      </div>
    </article>
  </div>
</section>


<section id="contact" class="contact">
  <div class="section-rule"></div>
  <div class="contact-inner">
    <div class="contact-header">
      <span class="section-label scroll-reveal">03</span>
      <h2 class="section-heading scroll-reveal">Let's talk</h2>
    </div>
    <p class="contact-text scroll-reveal">
      I'm always open to discussing new projects, creative ideas, or
      opportunities to be part of your vision.
    </p>
    <div class="contact-links scroll-reveal">
      <a href="#" id="email-link" class="contact-item">
        <svg fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"
            d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
        </svg>
        <span>Email</span>
      </a>
      <a href="https://github.com/juparave" target="_blank" rel="noopener" class="contact-item">
        <svg fill="currentColor" viewBox="0 0 24 24" width="24" height="24">
          <path fill-rule="evenodd"
            d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
            clip-rule="evenodd" />
        </svg>
        <span>GitHub</span>
      </a>
      <a href="https://www.linkedin.com/in/juparave/" target="_blank" rel="noopener" class="contact-item">
        <svg fill="currentColor" viewBox="0 0 24 24" width="24" height="24">
          <path
            d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
        </svg>
        <span>LinkedIn</span>
      </a>
      <a href="https://x.com/juparave" target="_blank" rel="noopener" class="contact-item">
        <svg fill="currentColor" viewBox="0 0 24 24" width="24" height="24">
          <path
            d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
        </svg>
        <span>X</span>
      </a>
    </div>
  </div>
</section>
<script>
  (function () {var e = document.getElementById('email-link'); if (e) {e.href = 'mailto:' + atob('anVwYXJhdmVAZGV1eGJpdHMuY29t');} })();
</script>


<footer class="footer">
  <div class="footer-inner">
    <p class="footer-text">&copy; <span id="current-year">2024</span> juparave.com</p>
    <div class="footer-links">
      <a href="#home">Home</a>
      <a href="#about">About</a>
      <a href="#projects">Work</a>
      <a href="#contact">Contact</a>
    </div>
  </div>
</footer>




<script src="/js/main.js"></script>

</body>
</html>



