https://github.com/mablanco/pricegrab
Android app that compares two prices with different quantities and tells you which one is cheaper per unit. Modern UI, accessible, bilingual (ES/EN), offline-first.
https://github.com/mablanco/pricegrab
accessibility android f-droid i18n jetpack-compose kotlin material-design spec-driven-development spec-kit
Last synced: about 2 months ago
JSON representation
Android app that compares two prices with different quantities and tells you which one is cheaper per unit. Modern UI, accessible, bilingual (ES/EN), offline-first.
- Host: GitHub
- URL: https://github.com/mablanco/pricegrab
- Owner: mablanco
- License: mit
- Created: 2026-04-24T15:45:19.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-24T17:27:16.000Z (about 2 months ago)
- Last Synced: 2026-04-24T17:30:54.775Z (about 2 months ago)
- Topics: accessibility, android, f-droid, i18n, jetpack-compose, kotlin, material-design, spec-driven-development, spec-kit
- Language: Shell
- Size: 101 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# PriceGrab
> Compara dos precios con cantidades distintas y descubre, al instante, cuál sale más barato por unidad.
> Compare two prices with different quantities and instantly see which one is cheaper per unit.
[](./LICENSE)
[](https://developer.android.com/)
[](https://github.com/mablanco/pricegrab/releases/latest)
---
## Español
### ¿Qué es?
**PriceGrab** es una aplicación Android que resuelve una pregunta muy concreta del supermercado: *"¿cuál de estos dos productos me sale más barato por unidad?"*. Introduces precio y cantidad del producto A y del producto B, y la app te dice cuál es la mejor oferta comparando su precio por unidad.
### Antecedentes
Hace años desarrollé una versión preliminar de esta aplicación. Este proyecto es la reescritura moderna de aquella idea, como app Android nativa.
### Objetivos
- Interfaz moderna siguiendo **Material Design 3**.
- **Accesibilidad** de primer nivel (TalkBack, alto contraste, font scaling).
- Soporte nativo de **español e inglés** desde el día uno.
- **Funciona sin conexión** y sin recolectar ningún dato personal.
- Cálculo provablemente correcto: **desarrollo dirigido por tests**.
### Estado del proyecto
**`v0.1.0` publicada** en [GitHub Releases](https://github.com/mablanco/pricegrab/releases/tag/v0.1.0). El APK firmado pesa ~0.91 MB. La primera feature está completa: comparación de dos ofertas, cálculo del ahorro absoluto y porcentual, soporte completo de TalkBack, rotación e idioma.
- Cómo se firma y se libera el APK: [`docs/release.md`](./docs/release.md).
- Especificación, plan y tareas: [`specs/001-unit-price-comparison/`](./specs/001-unit-price-comparison/).
- Principios del producto: [`.specify/memory/constitution.md`](./.specify/memory/constitution.md) (versión 1.0.1).
- Pendiente para la submission a F-Droid: abrir el MR en [`fdroiddata`](https://gitlab.com/fdroid/fdroiddata) con la receta de [`docs/fdroid.md`](./docs/fdroid.md) y mantener la cadena de firma estable en futuros tags.
### Cómo construirla
Requisitos: JDK 17 y, para correr la app, Android Studio Ladybug (2024.2.1) o el SDK por línea de comandos para API 35.
```bash
git clone git@github.com:mablanco/pricegrab.git
cd pricegrab/android
./gradlew :app:assembleDebug # compila la versión de debug
./gradlew :app:test :app:detekt # tests unitarios + análisis estático
```
Guía completa en [`specs/001-unit-price-comparison/quickstart.md`](./specs/001-unit-price-comparison/quickstart.md).
### Distribución
Los releases se publican como APK firmados en [GitHub Releases](../../releases). **No se publicará en Google Play.** El proyecto se mantiene compatible con [F-Droid](https://f-droid.org/) (toolchain 100% open source, sin dependencias propietarias) y los textos de tienda viven en [`fastlane/metadata/android/`](./fastlane/metadata/android/) en los dos idiomas. La receta para `fdroiddata` está en [`docs/fdroid.md`](./docs/fdroid.md).
### Cómo contribuir
El proyecto sigue un flujo **Spec-Driven Development**: toda feature nueva pasa por `/speckit.specify` → `/speckit.plan` → `/speckit.tasks` → `/speckit.implement`. Las reglas operativas para humanos y agentes IA están en [`AGENTS.md`](./AGENTS.md) y [`.cursor/rules/project-conventions.mdc`](./.cursor/rules/project-conventions.mdc).
### Licencia
[MIT](./LICENSE) © 2026 Marco Antonio Blanco.
---
## English
### What is it?
**PriceGrab** is an Android app that answers one very specific supermarket question: *"which of these two products is cheaper per unit?"*. You enter the price and quantity for product A and product B, and the app tells you which is the better deal by comparing their unit prices.
### Background
Years ago I built a preliminary version of this application. This project is the modern rewrite of that idea, as a native Android app.
### Goals
- Modern UI following **Material Design 3**.
- First-class **accessibility** (TalkBack, high contrast, font scaling).
- Native **Spanish and English** support from day one.
- Works **fully offline**, collects **no personal data**.
- Provably correct math: **test-first development**.
### Project status
**`v0.1.0` is out** on [GitHub Releases](https://github.com/mablanco/pricegrab/releases/tag/v0.1.0). The signed APK weighs ~0.91 MB. The first feature is complete: two-offer comparison, absolute and percent savings, full TalkBack support, rotation and language preservation.
- How the APK is signed and released: [`docs/release.md`](./docs/release.md).
- Spec, plan and tasks: [`specs/001-unit-price-comparison/`](./specs/001-unit-price-comparison/).
- Product principles: [`.specify/memory/constitution.md`](./.specify/memory/constitution.md) (version 1.0.1).
- Pending for F-Droid submission: open the merge request against [`fdroiddata`](https://gitlab.com/fdroid/fdroiddata) using the recipe in [`docs/fdroid.md`](./docs/fdroid.md) and keep the signing chain stable across future tags.
### How to build
Prerequisites: JDK 17 and, to run the app, Android Studio Ladybug (2024.2.1) or the command-line SDK for API 35.
```bash
git clone git@github.com:mablanco/pricegrab.git
cd pricegrab/android
./gradlew :app:assembleDebug # build the debug APK
./gradlew :app:test :app:detekt # unit tests + static analysis
```
Full guide in [`specs/001-unit-price-comparison/quickstart.md`](./specs/001-unit-price-comparison/quickstart.md).
### Distribution
Releases are published as signed APKs on [GitHub Releases](../../releases). **Google Play is not a target.** The project stays compatible with [F-Droid](https://f-droid.org/) (fully open-source toolchain, no proprietary dependencies) and the store metadata lives in [`fastlane/metadata/android/`](./fastlane/metadata/android/) in both languages. The `fdroiddata` recipe lives in [`docs/fdroid.md`](./docs/fdroid.md).
### Contributing
The project follows a **Spec-Driven Development** workflow: every new feature goes through `/speckit.specify` → `/speckit.plan` → `/speckit.tasks` → `/speckit.implement`. Operating rules for humans and AI agents live in [`AGENTS.md`](./AGENTS.md) and [`.cursor/rules/project-conventions.mdc`](./.cursor/rules/project-conventions.mdc).
### License
[MIT](./LICENSE) © 2026 Marco Antonio Blanco.