##See it work
##Two pieces
CellTraceLogger is an Android app (Kotlin) with a foreground service that records every observation of the cellular network: MCC, MNC, LAC/TAC, Cell ID and signal (RSRP, RSRQ, RSSNR) on 5G NR, LTE and 3G. It writes self-rotating NDJSON files and shows the cells it sees on an OpenStreetMap map. celltrace is the Python library that takes those observations and matches them against public OpenCellID data
##Uncertainty is a result too
celltrace doesn't just hand you an answer: every inference comes with a confidence level (low, medium or high), based on how stable the signal was and whether one cell dominates over time. If cells overlap or the network is unstable, it says so instead of guessing. Once the data is there, it works offline
##Fewer API calls
To place cells that aren't in the OpenCellID file, the app can ask an external API (Unwired Labs). Every resolved cell is saved to a cache (cached_cells.csv), so each cell is looked up once even if it shows up a thousand times
##What it doesn't do
It doesn't track people or give anyone's exact coordinates: it infers infrastructure (which tower or sector), not where a user is
phone (CellTraceLogger) │ Cell ID · LTE / 5G NR · signal ▼ celltrace_events_001.ndjson │ ▼ celltrace (Python) ◄── OpenCellID (CSV) │ area filter + consensus over time ▼ most likely tower · confidence HIGH
##Log
- The libraryFirst version of celltrace: load OpenCellID, filter by area, estimate from observations, and a command line to try it. Automated tests with pytest on every change
- The appCellTraceLogger in one day: the foreground service, NDJSON logging, the map and the cell cache
- Optimizing on ChristmasFewer API calls. The commit message says it all: "optimize the damn api calls"