Portafolio
Trabajar en proyectos personales es el tipo de programación más satisfactorio para mí, y esto se demuestra bien con una gran cantidad de productos exitosos de código abierto y cerrado. Mi objetivo con estos es generalmente crear útiles, técnicamente desafiantes y simplemente geniales herramientas, así como experimentar con nuevas tecnologías y marcos de trabajo.
La mayoría de estas herramientas están en los dominios de desarrollo web full-stack, PNL o CLI, y están escritas principalmente en Python (Flask/vanilla), TypeScript (React/Svelte/Vue) y/o Golang. El código fuente de aproximadamente una docena de proyectos completos está disponible en mi perfil de GitHub, y he escrito descripciones más detalladas de algunos de los mejores a continuación.
Para descripciones de experiencias laborales y educativas, consulte mi currículum.
La crème de la crème
Lingotrack.com
Mi proyecto de pasión desde octubre del '22 hasta noviembre del '23, Lingotrack (más de 50k SLOC, Golang + TypeScript + Svelte) es una plataforma social para estudiantes de idiomas para rastrear su progreso y encontrar medios atractivos y apropiados para su nivel. Al visualizar los logros de los estudiantes, permitiéndoles descubrir contenido extranjero cautivador y conectándolos con otros entusiastas, el sitio espera hacer que el viaje hacia la fluidez sea un poco menos intimidante.
Construir Lingotrack me ha enseñado una cantidad inmensa, ya que intenté hacer todo lo que pude desde cero como una experiencia de aprendizaje. Esto implicó todo, desde la integración de Stripe hasta la gestión de una VM Linux basada en la nube y la creación de CI/CD automatizado, ¡así como una buena dosis de frustración!
Pero el resultado final ha valido más que la pena: hay casi mil usuarios activos mensuales, más de 1500 artículos de medios en nuestra base de datos colaborativa, 4,5 años de aprendizaje rastreado, ¡y recibo correos de fans varias veces a la semana!
Puedes encontrar más información sobre Lingotrack en la página oficial de información o consultando su lanzamiento bien recibido en Product Hunt.
Locadapt.com
En vidas pasadas, he trabajado como traductor, he realizado trabajos de desarrollo i18n contratados para una startup con más de 40 millones de dólares de financiación, y he vivido en Europa durante una década. A lo largo de estas experiencias, una cosa ha quedado abundantemente clara: el proceso de internacionalización (hacer multilingüe) de un sitio web es muy beneficioso, pero también injustificadamente difícil.
Entra Locadapt (más de 25k SLOC, TypeScript + React + Svelte + Supabase), una plataforma impulsada por Claude que hace que cualquier sitio sea multilingüe con dos líneas de código. Simplemente añadiendo un fragmento JS minimizado + el CSS correspondiente al head
de cualquier sitio, la plataforma puede traducir automática, precisa y asequiblemente cualquier sitio a múltiples idiomas. Pruébalo en esta página — ¡hay un botón en la parte inferior derecha!
Los logros incluyen un panel de control de gestión de traducciones, un servicio de proxy inverso para SEO optimizado en subdominios, paralelización con Web Workers, programa de afiliados personalizado, funciones de borde sin servidor, almacenamiento en caché del lado del cliente, reescrituras de pseudo-DOM sin navegador, documentación detallada, y más.
Actualmente compitiendo contra un par de empresas de YC, y una startup bien financiada en SF intentó contratarme, ¡pero optimista con el producto y aguantando por ahora!
Victorias en Hackathones
ColdCraft.ai
ColdCraft.ai (~10k SLOC, Flask + TypeScript + Svelte) es una extensión de Chrome para envío de correos fríos SaaS con un panel asociado que se integra con tu currículum, Google Calendar, Gmail y LinkedIn para ayudarte a escribir correos fríos hiperpersonalizados en segundos. Lo construí con un amigo durante varias semanas en la primavera de primer año (SP '24).
El proyecto ganó LinkedIn y Ciscopremios corporativos durante la exhibición anual de ingeniería de Cornell, y ha recibido varias ofertas de inversión y adquisición.
NoteHacks
Los amigos en Cornell a veces se burlaban de mí por no tomar notas en clase. Sin embargo, descubrí (y aún descubro) que aprendo mejor concentrándome completamente en la clase en cuestión en lugar de diluir la atención con una toma de notas frenética.
Dicho esto, las notas ciertamente siguen siendo muy útiles para la tarea, el refuerzo, etc., así que me asocié con algunos nuevos amigos de ideas afines en El hackathon más grande de Canadá para construir una herramienta de toma de notas impulsada por IA y CV que pudiera encargarse de este trabajo pesado por nosotros. Nuestra herramienta basada en Next.js, Flask y OpenAI asiste a las clases, escuchando y tomando notas resumidas en Markdown con las que puedes interactuar y guardar más tarde. Además, también están disponibles metaparámetros de conjuntos de gestos como el nivel de resumen, pausa y expansión / contracción de notas.
Nuestros esfuerzos y noches en vela nos ganaron #1/43 para la Mejor Uso de Groq pista (una destacada empresa de LLM).
Surgelingo
Gané 'Mejor Hack en Solitario' en un hackathon en línea de 48 horas con casi cien participantes. El tema era disrumpir una industria, y mi presentación, una herramienta de aprendizaje de idiomas llamada SurgeLingo que aprovechaba NLP y PostgreSQL para proporcionar a los estudiantes oraciones personalizadas al estilo de Twitter, lo hizo de manera efectiva con la industria del aprendizaje de idiomas extranjeros.
Puede ver la presentación del hackathon en la página de Devpost aquí, junto con un video correspondiente y descripción más detallada. Igualmente, puede ejecutarlo localmente bifurcando el backend y frontend de Github.
FindCircles
Circles (~7k SLOC, Next.js + Supabase + Google Cloud) es una aplicación web para encuentros fáciles y espontáneos dentro de grupos de amigos y para conectar con nuevas personas, inspirada por las experiencias de mis tres compañeros de equipo del proyecto y las mías en el enorme campus de Cornell.
Los usuarios pueden invitar a amigos a formar círculos y, con la integración de GCal, Circles encuentra automáticamente tiempos libres compartidos y sugiere actividades. Circles también envía por correo electrónico propuestas de horarios y eventos de encuentro todos los lunes o bajo petición. El software también admite otras 2 características clave:
- invitar a amigos en común que estén libres, para fomentar la creación de nuevas amistades
- crear álbumes de fotos compartidos para eventos
La herramienta ganó el premio Best Domain (findcircles.co) otorgado por los jueces en el hackathon Big Red Hacks 2024 de Cornell, y fue la favorita de los jueces estudiantes (desafortunadamente, a los jueces del personal les recordó demasiado sus calendarios de Google relacionados con el trabajo y la programación 😅).
Proyectos Personales Seleccionados
Panel de Control para el Aprendizaje de Idiomas
Una versión más simple y local de Lingotrack que sirvió como inspiración para dicha iteración posterior.
language-learning-dashboard
es una webapp estética de lenguaje full-stack que construí durante un par de meses durante el confinamiento por COVID-19 en invierno. Como estudiante serio del idioma chino, recientemente me encontré no del todo satisfecho con los sitios en el mercado para rastrear el progreso en idiomas extranjeros — ¡así que hice lo lógico y construí uno desde cero para mí mismo!
Un panel de control mínimo pero poderoso fue el resultado, uno que ofrece una interfaz intuitiva y ultrarrápida para el seguimiento del progreso y el registro del tiempo, hasta el último minuto. Ya sean cargas de archivos, visualizaciones de línea de tiempo impulsadas por PostgreSQL, o incluso un elegante modo oscuro, la herramienta lo tiene todo. Pero en aras de la brevedad, no entraré en todos los (¡muchos!) detalles aquí, ya que he elaborado una documentación detallada en otro lugar en línea y he escrito sobre mis experiencias usándolo durante tres meses en mi blog.
Online Life Calendar
Online Life Calendar es un planificador de vida, lista de tareas y aplicación de responsabilidad, todo en uno. Construida con Python, Flask, Jinja y un toque de JavaScript, la herramienta ofrece una interfaz elegante y receptiva para el seguimiento de tu vida.
Características
- Ve tu vida desde días hasta décadas
- Codifica por colores las etapas de tu vida basándote en eventos
- Completa momentos de tu vida con texto e imágenes
- Establece objetivos específicos para ti mismo como simples tarjetas
- Visualiza estadísticas detalladas sobre tu vida y descarga tu propio calendario vital
...¡y mucho más! Online Life Calendar es completamente gratuito, tiene varios cientos de usuarios en el momento de escribir esto, y ha demostrado ser personalmente un gran recurso para la automotivación y la planificación. Su código fuente se puede encontrar aquí.
Actualización: el sitio ha sido cerrado por razones financieras, pero el código fuente sigue disponible en GitHub.
Estadísticas de Idiomas
Tengo una obsesión poco saludable con las visualizaciones y las estadísticas, y language-statistics
lo demuestra bien. Muestra una barra de colores al estilo de un repositorio de GitHub para tu directorio directamente desde la línea de comandos, que se puede ver como una imagen PNG o SVG.
Siempre me molestó bastante el hecho de que la barra de lenguajes de GitHub estuviera limitada solo a GitHub, ya que los detalles que ofrece son bastante reveladores. Así que me propuse recrearla como un paquete de Python. Ahora con mi programa solo tienes que ejecutar statistics
desde cualquier parte de su terminal y ver una hermosa barra de colores, como la que se ve arriba — y lo mejor de todo, una altamente personalizable.
Estas son algunas características adicionales que le dan una ventaja sobre las de GitHub linguist
:
- elegir excluir ciertos tipos de archivos
- especificar la profundidad hasta la que el programa busca desde el directorio raíz
- controlar cómo se ve su imagen exportada
- elegir el límite en el que los archivos se mezclan en
Other
- decidir los colores utilizados y el número máximo de tipos de archivos
Incluso admite archivos con nombre, como Dockerfile
o Cakefile
. Puede obtener más información leyendo el README.md
en el repositorio, o descargándolo usted mismo.
Linguakite
LinguaKite es una aplicación personalizada para aprender inglés que construí durante el verano de mi tercer año de secundaria. Una aplicación full-stack impulsada por NLP con ~5k SLOC de Python y Vue, ofrece a los usuarios la oportunidad de gestionar y ver su banco de palabras, leer contenido graduado, realizar cuestionarios para reforzar la comprensión, y más.
Reunir todo fue un desafío, dadas algunas de las combinaciones de frameworks bastante inusuales que utilicé para construir la aplicación, pero el resultado final fue de gran ayuda para el amigo para quien la había construido y me enseñó mucho en el proceso.
Gráfico de Ajedrez
Aunque solía jugar al ajedrez cuando era más joven, me alejé del juego real hasta el estallido del COVID-19, cuando más tiempo en casa y menos tiempo dedicado a los desplazamientos significó que tenía que encontrar más pasatiempos. El ajedrez se convirtió en uno de esos pasatiempos, y rápidamente me encontré jugando o repasando estrategias durante horas al día.
Durante este tiempo, noté que había una sorprendente falta de software que representara visualmente las habilidades de los jugadores de ajedrez. Me di cuenta de que tenía que llenar ese vacío, así que pasé unas semanas programando chess-graph
con plotly
.
Puse mucho esfuerzo en este proyecto, y la última versión ahora permite a los jugadores elegir su color, archivo de partidas, sombreado, consejos al pasar el ratón, etc.
Modo de Cara Baja
Hace un tiempo, me topé con el OpenCV
Biblioteca de Python: una herramienta para visión por computadora. Mientras jugaba con ella y descubría más y mayores capacidades, me di cuenta de que podría usarla para ayudar a abordar un punto de considerable frustración personal: una duración de batería que no tenía razón de ser en una MacBook Air.
Y así, después de una buena cantidad de hacking, tenía un prototipo funcional de low-face-mode
, un programa que atenuaba mi pantalla cuando no la estaba mirando y la iluminaba cuando sí lo hacía. Además, funcionaba en tiempo real, se podía ejecutar desde la línea de comandos e incluso permitía iluminar/atenuar basándose en una 'lista blanca' de rostros permitidos.
Desafortunadamente, como pronto descubriría, ejecutar un programa así en segundo plano consumía mucha más batería de la que ahorraba. Pero trabajar con el lenguaje de programación AppleScript, resolver una solicitud de extracción para soportar Linux y, en general, aprender mucho me dejó con un producto terminado (ver GIF) y muy feliz de todos modos.
Conclusión
Arriba hay una muestra representativa de mi trabajo, pero si quieres ver más, ¡visita mi perfil de GitHub o ¡envíame un correo electrónico!