My name is Tan — ntan in commit logs — and I write the mobile clients plus most of the sensor and digital signal processing math at uranashel. We are a three-person studio based in Vietnam: I handle SwiftUI, Jetpack Compose, and the physics that sits underneath; atuan runs backend services, CI pipelines, and release trains; and ktuyen owns QA, the garage test matrix, and the Vietnamese copy that keeps our App Store screenshots from sounding like machine translation. No venture capital, no ad SDKs in the sensor apps, no pitch deck pretending we are building "the future of mobility." We ship tools we actually use on real hardware before they reach the store.
Under the bundle family com.uranashel.backtrack, we publish five apps on both App Store and Google Play. Wheria helps you find a parked car when GPS dies in basement garages — it fuses IMU step counting, barometer floor hints, and magnetometer heading into a walked path instead of a lying blue dot. Estua synthesizes non-repeating ambient sleep audio at 48 kHz entirely on your phone. Sonarish is a noise meter and spectrum analyzer with machine baseline comparison for anyone who hears their AC unit change pitch after three years. Phyzix exposes more than a hundred live physics instruments and simulations in English and Vietnamese. Stashio captures links, PDFs, and voice notes from the share sheet and finds them later by keyword or meaning. Each product grew from a specific annoyance, not a market trend slide.
The Tuesday that started everything
The origin story everyone asks about is not glamorous. It was an ordinary Tuesday at Landmark 81 in Ho Chi Minh City — currently the tallest building in Southeast Asia, with a basement parking structure deep enough to swallow radio signals whole. I parked on B3, took a photo of the pillar number, and walked to the elevator. When I came back forty minutes later, the map showed my car floating in the Saigon River, roughly four hundred meters east of reality. I walked two full laps through identical concrete rows before I found it. That evening I opened Xcode and a blank Kotlin project side by side, not because "indoor navigation" sounded impressive on a conference badge, but because the phone in my pocket already contained a three-axis accelerometer, gyroscope, barometer, and magnetometer — a full inertial measurement unit — while every map application still drew a confident pin underground as if satellite geometry were a matter of opinion.
The other apps followed the same pattern of personal friction. Estua exists because my wife could hear the seam in an eight-minute rain loop at two in the morning; the human auditory system is absurdly good at detecting repetition, and recorded loops fail the sleep test no matter how long you make them. Sonarish came from a residential AC unit that developed a 127 Hz hum — a harmonic of mains frequency and motor pole count — that no consumer sound meter could track over weeks. Phyzix came from watching students treat phones as TikTok machines instead of sensor laboratories already in their pockets. Stashio came from my Notes app accumulating 2,400 unsorted links I could never find again. Every uranashel product has a physics or signal-processing spine beneath the UI, which we keep deliberately quiet: monochrome palettes, Nunito type, twelve-pixel corner radius, so the numbers stay readable at a glance in a parking garage at eleven at night.
How the three of us divide the work
I write shared logic modules wherever the math must match exactly between platforms — Kalman filter updates, FFT window functions, step detector thresholds — then mirror the UI in SwiftUI and Compose. atuan keeps Stashio sync honest, manages signing certificates, and tags iOS and Android releases with aligned version numbers so ktuyen never tests a mismatched pair. ktuyen maintains test plans segmented by garage architecture: open slab structures like Landmark, narrow spiral ramps in mall basements, flat outdoor lots, and the magnetometer nightmares around EV charging bays. She catches regressions like "compass drift on iPhone 15 inside a steel garage but fine on Pixel 6" before users do. We ship both platforms together by policy: every feature lands twice, every bug lands twice, and parity is not a nice-to-have but a release gate.
What this blog covers
App Store descriptions cannot explain hydrostatic floor math, why malloc on the audio thread causes clicks at three AM, or why double-integrating accelerometer data sends your position to another building within thirty seconds. This blog is the long-form companion — how the apps actually work, what we tried and discarded, and where physics tells us to stop lying to the user. Most posts come from the mobile and sensor side of the studio. When atuan or ktuyen have release infrastructure or QA stories worth telling, they will appear here too. If you have compass rants, garage logs, or questions about anything we build, write to uralab95@gmail.com. For the engineering philosophy behind keeping computation local, start with why everything runs on your phone.
Mình là Tân — ntan trên commit log — viết client mobile và phần lớn toán cảm biến cùng xử lý tín hiệu số tại uranashel. uranashel là studio ba người ở Việt Nam: mình lo SwiftUI, Jetpack Compose và lớp vật lý bên dưới; atuan vận hành backend, pipeline CI và release train; ktuyen phụ trách QA, ma trận test hầm xe và bản tiếng Việt để screenshot App Store không nghe như dịch máy. Không gọi vốn, không SDK quảng cáo trong app cảm biến, không pitch deck giả vờ đang xây "tương lai di chuyển." Team ship công cụ team thật sự dùng trên máy thật trước khi lên store.
Dưới họ bundle com.uranashel.backtrack, team xuất bản năm app trên cả App Store và Google Play. Wheria giúp tìm xe đỗ khi GPS chết trong hầm — fusion bước chân IMU, gợi ý tầng từ áp kế và hướng từ từ kế thành đường đi thực tế thay vì chấm xanh nói dối. Estua tổng hợp ambient ngủ không lặp ở 48 kHz hoàn toàn trên điện thoại. Sonarish là máy đo ồn và phân tích phổ với so sánh baseline máy móc cho ai nghe điều hòa đổi pitch sau ba năm. Phyzix mở hơn một trăm công cụ vật lý live và mô phỏng song ngữ Anh–Việt. Stashio lưu link, PDF và ghi âm từ share sheet, tìm lại bằng từ khóa hoặc theo nghĩa. Mỗi sản phẩm nảy từ một phiền toái cụ thể, không phải slide xu hướng thị trường.
Thứ Ba khởi đầu mọi thứ
Câu chuyện gốc không hề lộng lẫy. Đó là một thứ Ba bình thường ở Landmark 81, TP.HCM — tòa cao nhất Đông Nam Á hiện nay, với hầm đỗ đủ sâu để nuốt trọn sóng vô tuyến. Mình đỗ ở B3, chụp ảnh số cột, đi thang máy lên. Bốn mươi phút sau quay lại, bản đồ đặt xe nổi trên sông Sài Gòn, lệch khoảng bốn trăm mét so với thực tế. Mình đi hai vòng qua các hàng cột giống hệt nhau mới thấy xe. Tối hôm đó mở Xcode và project Kotlin trống cạnh nhau — không vì "indoor navigation" nghe oai trên huy hiệu hội nghị, mà vì điện thoại trong túi đã có gia tốc kế ba trục, con quay, áp kế và từ kế — một bộ đo quán tính đầy đủ — trong khi mọi app bản đồ vẫn vẽ pin tự tin dưới hầm như thể hình học vệ tinh chỉ là chuyện cảm tính.
Các app khác theo cùng một mô thức ma sát cá nhân. Estua tồn tại vì vợ mình nghe ra đường nối trong vòng lặp mưa tám phút lúc hai giờ sáng; hệ thính giác con người cực kỳ nhạy với sự lặp lại, và track ghi hình không qua bài test giấc ngủ dù kéo dài bao lâu. Sonarish đến từ điều hòa nhà phát tiếng ù 127 Hz — hài của tần số lưới điện và số cực motor — mà máy đo ồn consumer không theo dõi được qua nhiều tuần. Phyzix đến từ việc xem học sinh coi điện thoại như máy TikTok thay vì phòng thí nghiệm cảm biến sẵn trong túi. Stashio đến từ Notes tích lũy 2.400 link không sort, không tìm lại được. Mỗi sản phẩm uranashel có xương sống vật lý hoặc xử lý tín hiệu dưới UI, mà team cố ý giữ trầm: palette monochrome, font Nunito, bo góc mười hai pixel, để con số đọc được trong một cái liếc lúc mười một giờ đêm trong hầm xe.
Ba người chia việc thế nào
Mình viết module logic dùng chung ở những chỗ toán phải khớp tuyệt đối giữa hai nền tảng — cập nhật Kalman, hàm cửa sổ FFT, ngưỡng phát hiện bước — rồi mirror UI bằng SwiftUI và Compose. atuan giữ sync Stashio ổn định, quản lý chứng chỉ ký và tag release iOS/Android với version khớp nhau để ktuyen không bao giờ test cặp lệch. ktuyen duy trì test plan theo kiến trúc hầm: sàn mở kiểu Landmark, ramp xoắn ốc hẹp trong hầm trung tâm thương mại, bãi ngoài trời phẳng, và cơn ác mộng từ kế quanh trạm sạc EV. Cô ấy bắt regression kiểu "la bàn trôi trên iPhone 15 trong hầm thép nhưng Pixel 6 ổn" trước user. Team ship hai nền tảng cùng lúc theo chính sách: mỗi tính năng hai lần, mỗi bug hai lần, và parity không phải nice-to-have mà là cửa release.
Blog này viết về gì
Mô tả App Store không giải thích được toán thủy tĩnh tầng hầm, vì sao malloc trên audio thread gây click lúc ba giờ sáng, hay vì sao tích phân gia tốc hai lần đưa vị trí sang tòa khác trong ba mươi giây. Blog là bản đồng hành dài — app thực sự chạy thế nào, thử gì và bỏ gì, và chỗ nào vật lý bảo đừng nói dối user. Đa số bài từ phía mobile và cảm biến. Khi atuan hoặc ktuyen có chuyện hạ tầng release hay QA đáng kể, sẽ có ở đây. Câu hỏi, rant la bàn, log hầm xe: uralab95@gmail.com. Về triết lý giữ tính toán trên máy, bắt đầu từ vì sao mọi thứ chạy trên điện thoại.