Amazon Spending Tracker
En línea
Gasto anual y desglose por mes 
La misma vista en tema claro 
Últimos pedidos, con reembolsos y suscripciones aparte 
Revisión manual de los importes que el correo no deja leer 
Conexión con Gmail, con permiso de solo lectura
Extensión Chrome MV3 que calcula y desglosa el gasto anual en Amazon desde las confirmaciones de Gmail, con OAuth de solo lectura, deduplicación y almacenamiento local.
- Deduplicación por número de pedido, para no contar dos veces los correos de una misma compra.
- Sincronización incremental cada hora y escaneo completo semanal.
- Exportación a .xlsx generada sin dependencias.
- Interfaz en español e inglés; los datos no salen del navegador.
El problema
Amazon no enseña cuánto llevas gastado en el año. Está repartido entre pedidos, devoluciones y varias cuentas de país, y la única vista completa que existe son los correos de confirmación, que sí están todos juntos en el buzón. El problema era leerlos sin convertirlos en otro sitio donde tus compras están guardadas.
Mi papel
Todo: la extensión, el analizador de correos, la interfaz, la publicación en la tienda y la política de privacidad.
Decisiones
Lee el correo, y Amazon no lo ve nunca
La extensión pide tres permisos —identidad, almacenamiento y alarmas— y como anfitriones sólo las APIs de Google, con el ámbito de Gmail de **sólo lectura**. No puede leer ninguna página que visites, ni la de Amazon. La alternativa obvia era raspar el historial de pedidos desde el navegador, y eso exige permiso sobre el dominio: un permiso que nadie puede verificar que uses sólo para eso.
La clave de deduplicación es el número de pedido
Un pedido genera varios correos —confirmación, envío, entrega, a veces uno por paquete— y contarlos por correo multiplica el gasto. La clave es el número de pedido, y sólo cuando no aparece se cae al identificador del mensaje. Al revés —deduplicar por importe y fecha— junta dos compras iguales del mismo día, que es un error más difícil de ver porque el total parece razonable.
El .xlsx se escribe a mano, sin dependencias
Un .xlsx es un ZIP con varios XML dentro, y la política de seguridad de una extensión prohíbe cargar librerías externas: meter una de hoja de cálculo no era una opción. Un CSV sí lo era, pero no admite cabeceras con formato, anchos de columna, filtros ni fila de totales, que es justo lo que se mira en una exportación de gastos. Las entradas del ZIP van sin comprimir: es válido, el código se queda síncrono y los ficheros son de pocos KB.
Incremental cada hora, completo cada semana
Un escaneo anual del buzón son decenas de megabytes, así que lo habitual es pedir sólo lo nuevo. Pero un correo que llegó mientras la extensión estaba parada, o uno que Gmail reclasificó después, no vuelve a aparecer nunca en una consulta incremental. El repaso completo semanal es el que recoge eso; sin él, el total se queda corto y nadie sabe por qué.
Resultado
- Publicada en la Chrome Web Store, con 21 mercados de Amazon y 15 divisas reconocidos y la interfaz en castellano e inglés.
- 2 628 líneas en seis módulos y cero dependencias en tiempo de ejecución: lo que se instala es lo que está escrito, incluido el generador de hojas de cálculo.
- Siete ficheros de pruebas sobre el ejecutor de Node, sin framework: el analizador, los pedidos, la interfaz y el .xlsx se comprueban en cada cambio.
Qué cambiaría
Di por hecho que lo difícil era leer los correos, y lo difícil fue publicar: la política de privacidad, la justificación de cada permiso, las capturas, los textos de la ficha y la revisión de Google. Acabé escribiendo una lista de comprobación para la tienda **después** de pasar por ella, que es el orden equivocado. Lo que haría distinto es leer los requisitos de publicación antes de decidir la arquitectura, porque algunos —los permisos, sobre todo— condicionan el diseño y no el envoltorio.