PageSourceSearch

https://www.apoapps.com/en/about

html apoapps.com collected 2026-10-02 05:35:42 UTC 56,188 bytes, 2 lines download raw bytes

1<!DOCTYPE html><html lang="en" class="geistsans_d5a4f12f-module__Ur3q_a__variable geistmono_157ca88a-module__iaM1Ya__variable" style="color-scheme:dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2Falejandro-apodaca.webp&amp;w=16&amp;q=75 16w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=32&amp;q=75 32w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=48&amp;q=75 48w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=64&amp;q=75 64w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=96&amp;q=75 96w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=128&amp;q=75 128w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=256&amp;q=75 256w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=384&amp;q=75 384w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=640&amp;q=75 640w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=750&amp;q=75 750w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=828&amp;q=75 828w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=3840&amp;q=75 3840w" imageSizes="128px"/><link rel="stylesheet" href="/_next/static/chunks/3cm92l3a8za5v.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0kylnsu2a25cq.js"/>
1<script src="/_next/static/chunks/2kvfdo9re0wi9.js" async=""></script>
1<script src="/_next/static/chunks/2lc_q1u36pxm9.js" async=""></script>
1<script src="/_next/static/chunks/0i_jxtjyx8x18.js" async=""></script>
1<script src="/_next/static/chunks/3fs1xhoh3dow5.js" async=""></script>
1<script src="/_next/static/chunks/0h39il5dhqk5g.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-0u1i3xvdbwgk0.js" async=""></script>
1<script src="/_next/static/chunks/2z5al-iyg79qf.js" async=""></script>
1<script src="/_next/static/chunks/3gifgaule_w7u.js" async=""></script>
1<script src="/_next/static/chunks/2lqexvy8jpwfh.js" async=""></script>
1<script src="/_next/static/chunks/1efmgbc1d5f_g.js" async=""></script>
1<script src="/_next/static/chunks/2rvcheopceief.js" async=""></script>
1<script src="/_next/static/chunks/0b7xkx7855jll.js" async=""></script>
1<script src="/_next/static/chunks/1jcn9i9vkwvtu.js" async=""></script>
1<script src="/_next/static/chunks/1_d8b_smseu_c.js" async=""></script>
1<script src="/_next/static/chunks/2-7fk1wj2e7e3.js" async=""></script>
1<script src="/_next/static/chunks/089no1irtqxie.js" async=""></script>
1<meta name="next-size-adjust" content=""/><meta name="theme-color" content="#0a0e1a"/><title>Alejandro Apodaca Córdova - Software Developer</title><meta name="description" content="Meet Alejandro Apodaca Córdova, a mechatronics engineering student and independent software developer from Mexicali, Mexico. Creator of Tri-Go Math (100K+ downloads) and other educational apps."/><meta name="author" content="Alejandro Apodaca Córdova"/><meta name="keywords" content="Alejandro Apodaca,Apoapps,software developer,Tri-Go Math,WakeUp,Apochat,educational apps,mobile development,programming tips,study problems,sleep tracking,React,Next.js,iOS,Android"/><meta name="robots" content="index, follow"/><link rel="canonical" href="https://www.apoapps.com/en/about"/><link rel="alternate" hrefLang="en" href="https://www.apoapps.com/en/about"/><link rel="alternate" hrefLang="es" href="https://www.apoapps.com/es/about"/><link rel="alternate" hrefLang="x-default" href="https://www.apoapps.com/en/about"/><meta property="og:title" content="Alejandro Apodaca - Software Developer"/><meta property="og:description" content="Apoapps is a personal product studio by Alejandro Apodaca. Explore productivity apps and tools built for real use."/><meta property="og:url" content="https://www.apoapps.com/en"/><meta property="og:site_name" content="Apoapps"/><meta property="og:image" content="https://www.apoapps.com/preview.png"/><meta property="og:image:width" content="800"/><meta property="og:image:height" content="712"/><meta property="og:image:alt" content="Apoapps - Mobile App Development"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="@apoapps"/><meta name="twitter:title" content="Alejandro Apodaca - Software Developer"/><meta name="twitter:description" content="Apoapps is a personal product studio by Alejandro Apodaca. Explore productivity apps and tools built for real use."/><meta name="twitter:image" content="https://www.apoapps.com/preview.png"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="icon" href="/favicon.ico"/><meta name="sentry-trace" content="afa14cac4ed869c0f4965e2b24ab8b3d-f8eeb44001016fb9-1"/><meta name="baggage" content="sentry-environment=vercel-production,sentry-release=6032d4320ae221d2a00fb575bb8b28f9752a95a8,sentry-public_key=825bf257213e396d6dcb949ff9b1f140,sentry-trace_id=afa14cac4ed869c0f4965e2b24ab8b3d,sentry-org_id=4510344981512192,sentry-transaction=GET%20%2Fen%2Fabout,sentry-sampled=true,sentry-sample_rand=0.8009361164724511,sentry-sample_rate=1"/>
1<script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script>
1</head><body><div hidden=""><!--$--><!--/$--></div><div class="bg-background text-foreground flex flex-col min-h-screen">
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"Alejandro Apodaca Córdova","alternateName":["ApoApps","Alejandro Apodaca"],"jobTitle":"Independent Software Developer","url":"https://www.apoapps.com","email":"[email protected]","image":"https://www.apoapps.com/alejandro-apodaca.webp","description":"Independent developer and creator of Apoapps, a personal product studio for productivity apps. Built Tri-Go Math (100K+ downloads), WakeUp, Apochat, and more. Experienced in Flutter, SwiftUI, Next.js, and React.","knowsAbout":["Mobile App Development","Flutter","SwiftUI","Next.js","React","TypeScript","iOS Development","Android Development","Educational Technology","Math Education Apps","Sleep Science Apps","Mechatronics Engineering"],"hasOccupation":{"@type":"Occupation","name":"Software Developer","occupationalCategory":"15-1252.00","skills":"Flutter, SwiftUI, Next.js, React, TypeScript, Dart, Python, Node.js"},"nationality":{"@type":"Country","name":"Mexico"},"sameAs":["https://github.com/apoapps","https://www.linkedin.com/in/alejandro-apodaca-cordova-502a2b200/","https://x.com/alexapo26","https://www.youtube.com/channel/UC-LPXAK9zMiCOCWMZiO23tA","https://vm.tiktok.com/ZMJwQcnad/","https://t.me/alexapo26"]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"ApoApps","url":"https://www.apoapps.com","inLanguage":["en","es"],"author":{"@type":"Person","name":"Alejandro Apodaca Córdova"}}</script>
1<!--$--><div aria-hidden="true" style="position:fixed;top:0;left:0;z-index:99999;pointer-events:none;will-change:transform;opacity:0"></div><!--/$--><header class="fixed top-0 left-0 right-0 z-50 flex justify-center px-4" style="padding-top:max(0.75rem, env(safe-area-inset-top))"><div class="bg-background/50 md:bg-background/92 glass-navbar border border-border/30 rounded-full px-4 sm:px-6 py-2 flex justify-between items-center shadow-lg shadow-black/5 w-full max-w-5xl"><div class="flex items-center gap-2"><div class="flex md:hidden"><button class="flex h-8 w-8 items-center justify-center rounded-full text-foreground/70 hover:text-foreground hover:bg-foreground/10 transition-all duration-300 hover:scale-105 active:scale-95" aria-label="Open menu" type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-_R_5hivb_" data-state="closed" data-slot="sheet-trigger"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5"><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg></button></div><a class="flex items-center gap-2 hover:opacity-80 transition-opacity" href="/"><img alt="Apoapps" width="24" height="24" decoding="async" data-nimg="1" class="rounded-full" style="color:transparent" src="/icons/apo-logo.svg"/><span class="text-sm font-bold text-foreground">Apoapps</span></a><nav class="hidden md:flex items-center gap-1 ml-3"><a class="relative text-foreground/70 hover:text-foreground text-sm font-medium px-3 py-1.5 rounded-full transition-all duration-300 hover:bg-foreground
1/5 group" href="/en/projects">Projects<span class="absolute bottom-1 left-1/2 -translate-x-1/2 w-0 h-0.5 rounded-full bg-primary/60 group-hover:w-4 transition-all duration-300"></span></a><a class="relative text-foreground/70 hover:text-foreground text-sm font-medium px-3 py-1.5 rounded-full transition-all duration-300 hover:bg-foreground/5 group" href="/en/about">About<span class="absolute bottom-1 left-1/2 -translate-x-1/2 w-0 h-0.5 rounded-full bg-primary/60 group-hover:w-4 transition-all duration-300"></span></a></nav></div><div class="flex items-center gap-1"><button data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 text-xs font-semibold tracking-wide text-foreground/70 hover:text-foreground hover:bg-foreground
1/5 transition-all duration-300 min-w-[44px]" data-testid="lang-toggle-button" aria-label="Switch to ES language">EN</button></div></div></header><main class="flex-grow pt-16"><!--$?--><template id="B:0"></template><div class="flex items-center justify-center min-h-[50vh]"><div class="h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent"></div></div><!--/$--></main><footer class="border-t bg-background/95 glass-panel supports-[backdrop-filter]:bg-background/60"><div class="container mx-auto px-4 py-8 md:py-12" style="padding-bottom:max(2rem, env(safe-area-inset-bottom))"><div class="grid grid-cols-1 md:grid-cols-4 gap-8"><div class="space-y-4 md:col-span-2"><a class="text-xl font-bold text-primary font-mono tracking-wider" href="/en">Apoapps</a><p class="text-sm text-muted-foreground max-w-xs">© <!-- -->2026<!-- --> Apoapps. <!-- -->All rights reserved.</p></div><div class="space-y-4"><h3 class="font-semibold">Legal</h3><ul class="space-y-2 text-sm"><li><a class="text-muted-foreground hover:text-foreground transition-colors" href="/en/privacy">Privacy Policy</a></li><li><a class="text-muted-foreground hover:text-foreground transition-colors" href="/en/terms">Terms of Service</a></li><li><a class="text-muted-foreground hover:text-foreground transition-colors" href="/en/about">About</a></li><li><a class="text-muted-foreground hover:text-foreground transition-colors" href="/en/projects">Projects</a></li></ul></div><div class="space-y-4"><h3 class="font-semibold">Socials</h3><div class="flex space-x-2"><a href="https://github.com/apoapps" target="_blank" rel="noopener noreferrer" aria-label="GitHub" data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground size-9"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-github h-5 w-5"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg></a><a href="https://www.linkedin.com/in/alejandro-apodaca-cordova-502a2b200/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground size-9"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-linkedin h-5 w-5"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect width="4" height="12" x="2" y="9"></rect><circle cx="4" cy="4" r="2"></circle></svg></a><a href="https://www.youtube.com/channel/UC-LPXAK9zMiCOCWMZiO23tA" target="_blank" rel="noopener noreferrer" aria-label="YouTube" data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;
1size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground size-9"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-youtube h-5 w-5"><path d="M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17"></path><path d="m10 15 5-3-5-3z"></path></svg></a><a href="https://x.com/alexapo26" target="_blank" rel="noopener noreferrer" aria-label="Twitter" data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground size-9"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-twitter h-5 w-5"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"></path></svg></a></div></div></div></div></footer></div>
1<script>requestAnimationFrame(function(){$RT=performance.now()});</script>
1<script src="/_next/static/chunks/0kylnsu2a25cq.js" id="_R_" async=""></script>
1<div hidden id="S:0"><div class="container mx-auto px-4 py-12 max-w-2xl"><div class="rounded-2xl border border-border bg-background p-6 md:p-10"><div class="flex flex-col items-center text-center" style="opacity:0;transform:translateY(12px)"><div class="relative w-32 h-32 rounded-full overflow-hidden border-4 border-border mb-5"><img alt="Alejandro Apodaca Córdova" decoding="async" data-nimg="fill" class="object-contain" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="128px" srcSet="/_next/image?url=%2Falejandro-apodaca.webp&amp;w=16&amp;q=75 16w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=32&amp;q=75 32w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=48&amp;q=75 48w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=64&amp;q=75 64w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=96&amp;q=75 96w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=128&amp;q=75 128w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=256&amp;q=75 256w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=384&amp;q=75 384w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=640&amp;q=75 640w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=750&amp;q=75 750w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=828&amp;q=75 828w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2Falejandro-apodaca.webp&amp;w=3840&amp;q=75 3840w" src="/_next/image?url=%2Falejandro-apodaca.webp&amp;w=3840&amp;q=75"/></div><h1 class="text-2xl font-bold">Alejandro Apodaca Córdova</h1><p class="text-muted-foreground mt-1">Independent Developer</p></div><div class="mt-8" style="opacity:0;transform:translateY(12px)"><h2 class="text-sm font-semibold text-center text-muted-foreground tracking-widest uppercase mb-4">Connect</h2><div class="grid grid-cols-2 sm:grid-cols-3 gap-3"><a target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border shadow-xs hover:text-accent-foreground h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 border-border bg-background hover:bg-muted/20 transition-colors" href="https://www.github.com/apoapps"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-github w-4 h-4 mr-2"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg>GitHub</a><a target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border shadow-xs hover:text-accent-foreground h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 border-border bg-background hover:bg-muted/20 transition-colors" href="https://www.linkedin.com/in/alejandro-apodaca-cordova-502a2b200/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-linkedin w-4 h-4 mr-2"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect width="4" height="12" x="2" y="9"></rect><circle cx="4" cy="4" r="2"></circle></svg>LinkedIn</a><a target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;
1size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border shadow-xs hover:text-accent-foreground h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 border-border bg-background hover:bg-muted/20 transition-colors" href="https://www.youtube.com/channel/UC-LPXAK9zMiCOCWMZiO23tA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-youtube w-4 h-4 mr-2"><path d="M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17"></path><path d="m10 15 5-3-5-3z"></path></svg>YouTube</a><a target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border shadow-xs hover:text-accent-foreground h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 border-border bg-background hover:bg-muted/20 transition-colors" href="https://vm.tiktok.com/ZMJwQcnad/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square w-4 h-4 mr-2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>TikTok</a><a target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border shadow-xs hover:text-accent-foreground h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 border-border bg-background hover:bg-muted/20 transition-colors" href="https://t.me/alexapo26"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send w-4 h-4 mr-2"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg>Telegram</a></div></div><div class="mt-8 text-center" style="opacity:0;transform:translateY(12px)"><p class="text-muted-foreground leading-relaxed max-w-md mx-auto">I am an independent developer from Mexico and the person behind Apoapps. I design, build, and ship productivity apps and side projects — most of them born from a problem I needed to solve myself. I work across iOS, Android, and the web, and I learn by building in public.</p><div class="mt-6"><a download="alejandroapodaca_resume.pdf" target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground shadow-xs hover:bg-primary/90 h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5" href="/en/alejandroapodaca_resume.pdf"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text w-4 h-4 mr-2"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg> <!-- -->Download CV</a></div></div></div></div><!--$--><!--/$--></div>
1<script>$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};
2$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};$RC("B:0","S:0")</script>
2<script>(self.__next_f=self.__next_f||[]).push([0])</script>
2<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"default\"]\n4:I[39756,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"LoadingBoundaryProvider\"]\n6:I[47257,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"ClientPageRoot\"]\n7:I[93971,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\",\"/_next/static/chunks/1jcn9i9vkwvtu.js\",\"/_next/static/chunks/1_d8b_smseu_c.js\"],\"default\"]\n8:I[97367,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"MetadataBoundary\"]\nf:I[63491,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/2-7fk1wj2e7e3.js\"],\"default\"]\n11:I[43880,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"Analytics\"]\n12:I[75696,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"default\"]\n1b:I[35652,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"default\"]\n1c:I[44668,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\",\"/_next/static/chunks/089no1irtqxie.js\"],\"default\"]\n1d:I[13642,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"default\"]\n1e:I[11015,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"CookieConsent\"]\n1f:I[61472,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"default\"]\n20:I[22016,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"\"]\n21:I[85437,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"Image\"]\n22:I[89384,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"default\"]\n23:I[89796,[\"/_next/static/chunks/2z5al-iyg79qf.js\",\"/_next/static/chunks/3gifgaule_w7u.js\",\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"/_next/static/chunks/2rvcheopceief.js\",\"/_next/static/chunks/0b7xkx7855jll.js\"],\"default\"]\n24:I[27201,[\"/_next/static/chunks/2z5al-iyg79qf.js\"],\"IconMark\"]\n:HL[\"/_next/static/chunks/3cm92l3a8za5v.css\",\"style\"]\n:HL[\"/_next/static/media/GeistMono_Variable.p.3ms9vq719j3"])</script>
2<script>self.__next_f.push([1,"f8.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/Geist_Variable-s.p.0mrjj4bg00-he.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script>
2<script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"en\",\"about\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[[\"locale\",\"en\",\"d\",null],{\"children\":[\"about\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",4]},\"$undefined\",\"$undefined\",24],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2z5al-iyg79qf.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$L4\",null,{\"loading\":[[\"$\",\"div\",\"l\",{\"className\":\"flex items-center justify-center min-h-[50vh]\",\"children\":[\"$\",\"div\",null,{\"className\":\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\"}]}],[],[]],\"children\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3cm92l3a8za5v.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3gifgaule_w7u.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/2lqexvy8jpwfh.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/1efmgbc1d5f_g.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/2rvcheopceief.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/0b7xkx7855jll.js\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L5\"]}]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"Component\":\"$7\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{\"locale\":\"en\"},\"promises\":null}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1jcn9i9vkwvtu.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1_d8b_smseu_c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{}
2,null,false,null]},null,false,null]},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"YUguLZ9iyHvI-zGkP4HSB\"}\n"])</script>
2<script>self.__next_f.push([1,"5:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"geistsans_d5a4f12f-module__Ur3q_a__variable geistmono_157ca88a-module__iaM1Ya__variable\",\"style\":{\"colorScheme\":\"dark\"},\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"bg-background text-foreground flex flex-col min-h-screen\",\"children\":[\"$L10\",[\"$\",\"$L11\",null,{}]]}]}]}]\nc:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0a0e1a\"}]]\n"])</script>
2<script>self.__next_f.push([1,"10:[\"$\",\"$L12\",null,{\"formats\":\"$undefined\",\"locale\":\"en\",\"messages\":{\"about\":{\"name\":\"Alejandro Apodaca Córdova\",\"role\":\"Independent Developer\",\"download_cv\":\"Download CV\",\"bio\":\"I am an independent developer from Mexico and the person behind Apoapps. I design, build, and ship productivity apps and side projects — most of them born from a problem I needed to solve myself. I work across iOS, Android, and the web, and I learn by building in public.\",\"social_title\":\"Connect\"},\"hero\":{\"title_prefix\":\"I build \",\"title_suffix\":\"\",\"description\":\"Apoapps is my personal product studio. I turn ideas into apps people actually use — from AI assistants to math tools to sleep calculators.\",\"learn_more\":\"Explore the apps\",\"typewriter_words\":{\"0\":\"apps\",\"1\":\"tools\",\"2\":\"products\"}},\"projects\":{\"availability\":{\"available_on\":\"Available on: \",\"no_platforms\":\"No platforms available\",\"external_project\":\"External Project\",\"supported_platform\":\"App available for your current platform.\",\"unsupported_platform\":\"Not available on your platform.\"},\"projects\":\"Projects\",\"apochat\":{\"title\":\"Apochat\",\"short_description\":\"Your private AI agent, on your phone and the web.\",\"long_description\":\"Apochat is a private AI assistant that chats, searches the web, runs phone tools, and keeps your data on your device by default. Available on iOS and at www.apochat.app.\"},\"flou\":{\"title\":\"Flou\",\"short_description\":\"Design flows, not diagrams.\",\"long_description\":\"Flou is a tiny visual editor for turning ideas into editable node-based flowcharts. Built for thinking through systems, user journeys, and AI output.\"},\"handwritten\":{\"title\":\"Handwritten\",\"short_description\":\"Print realistic handwriting.\",\"long_description\":\"Handwritten turns typed text into worksheets and notes that look naturally handwritten. A small web experiment for students, teachers, and anyone who wants a personal touch.\"},\"capiz\":{\"title\":\"CapiZ\",\"short_description\":\"Image compression for AI context.\",\"long_description\":\"CapiZ resizes, adjusts luminance, and compresses JPEGs so they fit within LLM context windows. A quick utility for anyone feeding images to AI models.\"},\"tri_go_math\":{\"title\":\"Tri-Go Math\",\"short_description\":\"Hobby project since 2020 — Next.js web + Flutter hybrid with native SwiftUI \u0026 Jetpack Compose\",\"long_description\":\"Hobby project in development since 2020. Bilingual math platform built as a Next.js 16 web app with 26 schema-driven API calculators, a custom 2D graphing engine, and an AI math assistant with streaming chat (Vercel AI SDK). The mobile app is a Flutter shell with native UI components — SwiftUI on iOS and Jetpack Compose on Android — connected via platform method channels. Calculators and chat are embedded as WebViews from the web app, while navigation, glass-morphism effects, and bottom sheets are rendered natively. Stack: React 19, TypeScript, Tailwind CSS v4, Prisma + NeonDB, Clerk auth with rate limiting, Riverpod state management, and Fastlane for deployment. 100K+ downloads across iOS and Android.\"},\"wakeup\":{\"title\":\"WakeUp\",\"short_description\":\"Your personal sleep calculator\",\"long_description\":\"WakeUp helps you optimize your sleep schedule by calculating the best sleep and wake-up times based on sleep cycles. Improve your rest and wake up refreshed.\"},\"project_detail\":{\"home\":\"Home\",\"projects\":\"Projects\",\"description\":\"Description\",\"tech_stack\":\"Tech Stack\",\"platforms\":\"Platforms\",\"screenshots\":\"Screenshots\",\"links\":\"Links\",\"type_personal\":\"Personal Project\",\"type_client\":\"Client: {clientName}\",\"view_on_app_store\":\"App Store\",\"view_on_google_play\":\"Google Play\",\"visit_website\":\"Visit Website\",\"view_on_github\":\"GitHub\",\"no_projects\":\"No projects available yet. Check back soon!\",\"all_projects\":\"All Projects\",\"all_projects_description\":\"A collection of personal and client projects built with modern technologies.\"}},\"navbar\":{\"home\":\"Home\",\"about\":\"About\",\"projects\":\"Projects\",\"blog\":\"Blog\",\"privacy\":\"Privacy Policy\",\"menu\":\"Menu\",\"open_menu\":\"Open menu\",\"close_menu\":\"Close menu\",\"switch_to\":\"Switch to {locale}\"},\"buttons\":{\"download_ios\":\"Download on iOS\",\"download_android\":\"Download on Android\",\"download\":\"Download\",\"download_other_platforms\":\"Download for other platforms\",\"expand_details\":\"Expand Details\",\"collapse_details\":\"Collapse Details\",\"view_details\":\"View Details\"},\"store\":{\"title\":\"Apps\",\"description\":\"Apps built for real use. No marketing fluff — just tools that solve real problems.\",\"no_apps\":\"No apps available yet. Check back soon!\",\"preview\":\"Previews\",\"description_label\":\"Description\",\"expand\":\"Expand\",\"view_full_version\":\"View full version\",\"apps\":{\"tri_go_math\":{\"short_description\":\"Hobby project since 2020 — Next.js web + Flutter hybrid with native SwiftUI \u0026 Jetpack Compose.\",\"description\":\"Hobby project in development since 2020. Bilingual math platform with 26 schema-driven calculators, a custom 2D graphing engine, and an AI math assistant with streaming chat. The mobile app is a Flutter shell with native SwiftUI (iOS) and Jetpack Compose (Android) UI components connected via platform method channels.\",\"achievements\":[\"100K+ downloads across iOS and Android.\",\"26 schema-driven calculators with step-by-step LaTe
2X solutions.\",\"Custom 2D graphing engine.\",\"AI math assistant with streaming chat via Vercel AI SDK.\"]},\"wakeup\":{\"short_description\":\"Wake up naturally with intelligent sleep cycle detection.\",\"description\":\"WakeUp is a smart alarm clock app that uses intelligent algorithms to wake you at the optimal time within your sleep cycle. Features include customizable wake windows, sleep tracking, and a gentle alarm system designed for a natural wake experience.\",\"achievements\":[\"Increases the probability of waking up during light sleep phase.\",\"Gentle wake-up experience aligns with natural sleep cycles.\",\"Available exclusively on iOS with native performance.\"]}},\"blog_posts_about\":\"Blog Posts about {appName}\",\"read_on_medium\":\"Read on Medium\",\"app_detail\":{\"home\":\"Home\",\"apps\":\"Apps\",\"reviews\":\"reviews\",\"downloads\":\"downloads\",\"previews\":\"Previews\",\"description\":\"Description\",\"ratings_reviews\":\"Ratings \u0026 Reviews\",\"information\":\"Information\",\"versions\":\"Versions\",\"languages\":\"Languages\",\"implementation_details\":\"Implementation Details\",\"achievements\":\"Achievements\",\"programming_stack\":\"Programming Stack\",\"key_metrics\":\"Key Metrics\",\"download_other_platforms\":\"Download for Other Platforms\",\"latest_version\":\"Latest Version:\",\"released\":\"Released:\",\"get\":\"Get\",\"detected\":\"Detected:\",\"not_available\":\"Not Available\",\"not_available_on_platform\":\"Not available on your platform\",\"ios_app_store\":\"iOS App Store\",\"google_play_store\":\"Google Play Store\",\"ratings\":\"ratings\",\"version\":\"Version\",\"anonymous\":\"Anonymous\",\"metric_labels\":{\"downloads\":\"Downloads\",\"students_helped\":\"Students Helped\",\"success_rate\":\"Success Rate\",\"rating\":\"Rating\",\"active_users\":\"Active Users\",\"avg_improvement\":\"Avg. Improvement\"}}},\"privacy\":{\"title\":\"Privacy Policy\",\"introduction\":\"At Apoapps, we are committed to protecting your privacy and providing you with a safe and secure experience while using our applications and websites.\",\"audience\":\"Our applications are designed for daily life improvement and educational purposes, specifically targeting secondary school students, high school students, and university engineering students. Our applications are not directed to children under the age of 13.\",\"data_collection\":{\"title\":\"Information We Collect\",\"description\":\"We may collect minimal information necessary to provide our services, such as device information, application usage data, and information you voluntarily provide. We do not sell your personal information to third parties.\"},\"data_usage\":{\"title\":\"How We Use Your Information\",\"description\":\"The information we collect is used to improve our applications, provide support, and enhance user experience. We implement reasonable security measures to protect your information.\"},\"advertising\":{\"title\":\"Advertising\",\"description\":\"We use Google AdSense to display advertisements on our websites. Google may use cookies and similar technologies to serve ads based on your prior visits to this or other websites. You can opt out of personalized advertising by visiting Google's Ad Settings (adssettings.google.com).\"},\"cookies\":{\"title\":\"Cookies\",\"description\":\"We use essential cookies for site functionality. Third-party cookies may be set by Google AdSense for ad personalization and by Vercel Analytics for anonymous usage statistics. You can manage your cookie preferences through the consent banner displayed on your first visit.\"},\"contact_info\":{\"title\":\"Contact Us\",\"description\":\"If you have any questions about our Privacy Policy, please contact us at:\"},\"last_updated\":\"Last Updated: March 2026\"},\"terms\":{\"title\":\"Terms of Service\",\"intro\":\"By accessing or using Apoapps websites and applications, you agree to these Terms of Service.\",\"service_title\":\"Service Description\",\"service\":\"Apoapps develops and distributes educational and productivity applications including Tri-Go Math and WakeUp. Our website serves as a portfolio and app store for these products.\",\"
2ip_title\":\"Intellectual Property\",\"ip\":\"All content, design, code, and branding of Apoapps and its products are owned by Alejandro Apodaca Córdova. You may not reproduce or redistribute any part of our services without permission.\",\"usage_title\":\"Acceptable Use\",\"usage\":\"You agree not to use our services for illegal purposes, distribute harmful content, or attempt to access our systems without authorization.\",\"ads_title\":\"Advertising\",\"ads\":\"Our websites may display advertisements served by Google AdSense. By using our services, you acknowledge that ads may be displayed and that Google may collect data as described in our Privacy Policy.\",\"disclaimer_title\":\"Disclaimer\",\"disclaimer\":\"Our services are provided \\\"as is\\\" without warranties of any kind. We are not liable for any damages arising from use of our services.\",\"changes_title\":\"Changes\",\"changes\":\"We may update these terms at any time. Continued use after changes constitutes acceptance.\",\"contact_title\":\"Contact\",\"contact\":\"For questions about these terms, contact us at:\",\"last_updated\":\"Last updated: March 2026\"},\"cookieConsent\":{\"message\":\"We use cookies for site functionality and to show personalized ads via Google AdSense.\",\"accept\":\"Accept All\",\"reject\":\"Essential Only\",\"learnMore\":\"Learn more\"},\"bento\":{\"stats\":{\"downloads\":\"Downloads\",\"students\":\"Students\",\"client_projects\":\"Client Projects\",\"apps\":\"Active Apps\"},\"apps\":{\"label\":\"Latest work\",\"title\":\"Built to \",\"title_words\":[\"solve.\",\"automate.\",\"create.\"],\"sub\":\"Every app here started as a real problem. Some help you learn. Some protect your privacy. Some just make mornings easier.\"},\"projects\":{\"label\":\"All Projects\",\"title\":\"All Projects\"},\"apochat\":{\"name\":\"Apochat\",\"tagline\":\"AI that stays private.\",\"description\":\"A private AI assistant for iOS and the web that chats, searches, and runs phone tools.\",\"cta\":\"Open Apochat\"},\"tri-go-math\":{\"name\":\"Tri-Go Math\",\"tagline\":\"Math, step by step.\",\"description\":\"From trig to algebra, get guided solutions that walk you through every step.\",\"downloads\":\"100K+\",\"downloads_label\":\"downloads\",\"cta\":\"View app\"},\"flou\":{\"name\":\"Flou\",\"tagline\":\"Think in flows.\",\"description\":\"A minimal node editor for mapping systems, user journeys, and ideas.\",\"cta\":\"Open Flou\"},\"handwritten\":{\"name\":\"Handwritten\",\"tagline\":\"Typed text, human touch.\",\"description\":\"Turn notes into realistic handwriting for worksheets, letters, and personal touches.\",\"cta\":\"Open site\"},\"wakeup\":{\"name\":\"WakeUp\",\"tagline\":\"Wake up lighter.\",\"description\":\"A sleep-cycle calculator that helps you wake up at the right time.\",\"cta\":\"View app\"},\"contact\":{\"title\":\"Let's build the next one.\",\"sub\":\"Have an idea? I turn prototypes into shipped products.\",\"cta\":\"Message me\"}},\"footer\":{\"rights\":\"All rights reserved.\",\"privacy\":\"Privacy Policy\",\"about\":\"About\",\"projects\":\"Projects\",\"socials\":\"Socials\",\"legal\":\"Legal\",\"terms\":\"Terms of Service\"}}
2,\"now\":\"$undefined\",\"timeZone\":\"UTC\",\"children\":[\"$L13\",\"$L14\",\"$L15\",\"$L16\",\"$L17\",\"$L18\",\"$L19\"]}]\n"])</script>
2<script>self.__next_f.push([1,"1a:T4d7,{\"@context\":\"https://schema.org\",\"@type\":\"Person\",\"name\":\"Alejandro Apodaca Córdova\",\"alternateName\":[\"ApoApps\",\"Alejandro Apodaca\"],\"jobTitle\":\"Independent Software Developer\",\"url\":\"https://www.apoapps.com\",\"email\":\"[email protected]\",\"image\":\"https://www.apoapps.com/alejandro-apodaca.webp\",\"description\":\"Independent developer and creator of Apoapps, a personal product studio for productivity apps. Built Tri-Go Math (100K+ downloads), WakeUp, Apochat, and more. Experienced in Flutter, SwiftUI, Next.js, and React.\",\"knowsAbout\":[\"Mobile App Development\",\"Flutter\",\"SwiftUI\",\"Next.js\",\"React\",\"TypeScript\",\"iOS Development\",\"Android Development\",\"Educational Technology\",\"Math Education Apps\",\"Sleep Science Apps\",\"Mechatronics Engineering\"],\"hasOccupation\":{\"@type\":\"Occupation\",\"name\":\"Software Developer\",\"occupationalCategory\":\"15-1252.00\",\"skills\":\"Flutter, SwiftUI, Next.js, React, TypeScript, Dart, Python, Node.js\"},\"nationality\":{\"@type\":\"Country\",\"name\":\"Mexico\"},\"sameAs\":[\"https://github.com/apoapps\",\"https://www.linkedin.com/in/alejandro-apodaca-cordova-502a2b200/\",\"https://x.com/alexapo26\",\"https://www.youtube.com/channel/UC-LPXAK9zMiCOCWMZiO23tA\",\"https://vm.tiktok.com/ZMJwQcnad/\",\"https://t.me/alexapo26\"]}13:[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$1a\"}}]\n14:[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebSite\\\",\\\"name\\\":\\\"ApoApps\\\",\\\"url\\\":\\\"https://www.apoapps.com\\\",\\\"inLanguage\\\":[\\\"en\\\",\\\"es\\\"],\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Alejandro Apodaca Córdova\\\"}}\"}}]\n15:[\"$\",\"$9\",null,{\"fallback\":null,\"children\":[\"$\",\"$L1b\",null,{}]}]\n17:[\"$\",\"main\",null,{\"className\":\"flex-grow pt-16\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$1c\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/089no1irtqxie.js\",\"async\":true}]],\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n18:[\"$\",\"$L1d\",null,{}]\n19:[\"$\",\"$L1e\",null,{}]\n16:[\"$\",\"header\",null,{\"className\":\"fixed top-0 left-0 right-0 z-50 flex justify-center px-4\",\"style\":{\"paddingTop\":\"max(0.75rem, env(safe-area-inset-top))\"},\"children\":[\"$\",\"div\",null,{\"className\":\"bg-background/50 md:bg-background/92 glass-navbar border border-border/30 rounded-full px-4 sm:px-6 py-2 flex justify-between items-center shadow-lg shadow-black/5 w-full max-w-5xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"$L1f\",null,{}],[\"$\",\"$L20\",null,{\"href\":\"/\",\"className\":\"flex items-center gap-2 hover:opacity-80 transition-opacity\",\"children\":[[\"$\",\"$L21\",null,{\"src\":\"/icons/apo-logo.svg\",\"alt\":\"Apoapps\",\"width\":24,\"height\":24,\"className\":\"rounded-full\",\"priority\":true}],[\"$\",\"span\",null,{\"className\":\"text-sm font-bold text-foreground\",\"children\":\"Apoapps\"}]]}],[\"$\",\"$L22\",null,{}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1\",\"children\":[\"$\",\"$L23\",null,{}]}]]}]}]\na:null\n"])</script>
2<script>self.__next_f.push([1,"e:[[\"$\",\"title\",\"0\",{\"children\":\"Alejandro Apodaca Córdova - Software Developer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Meet Alejandro Apodaca Córdova, a mechatronics engineering student and independent software developer from Mexicali, Mexico. Creator of Tri-Go Math (100K+ downloads) and other educational apps.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"Alejandro Apodaca Córdova\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"Alejandro Apodaca,Apoapps,software developer,Tri-Go Math,WakeUp,Apochat,educational apps,mobile development,programming tips,study problems,sleep tracking,React,Next.js,iOS,Android\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"5\",{\"rel\":\"canonical\",\"href\":\"https://www.apoapps.com/en/about\"}],[\"$\",\"link\",\"6\",{\"rel\":\"alternate\",\"hrefLang\":\"en\",\"href\":\"https://www.apoapps.com/en/about\"}],[\"$\",\"link\",\"7\",{\"rel\":\"alternate\",\"hrefLang\":\"es\",\"href\":\"https://www.apoapps.com/es/about\"}],[\"$\",\"link\",\"8\",{\"rel\":\"alternate\",\"hrefLang\":\"x-default\",\"href\":\"https://www.apoapps.com/en/about\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:title\",\"content\":\"Alejandro Apodaca - Software Developer\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:description\",\"content\":\"Apoapps is a personal product studio by Alejandro Apodaca. Explore productivity apps and tools built for real use.\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:url\",\"content\":\"https://www.apoapps.com/en\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:site_name\",\"content\":\"Apoapps\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image\",\"content\":\"https://www.apoapps.com/preview.png\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:width\",\"content\":\"800\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:height\",\"content\":\"712\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:alt\",\"content\":\"Apoapps - Mobile App Development\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:creator\",\"content\":\"@apoapps\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:title\",\"content\":\"Alejandro Apodaca - Software Developer\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:description\",\"content\":\"Apoapps is a personal product studio by Alejandro Apodaca. Explore productivity apps and tools built for real use.\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:image\",\"content\":\"https://www.apoapps.com/preview.png\"}],[\"$\",\"link\",\"23\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"24\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"$L24\",\"25\",{}]]\n"])</script>
2</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.