~/progetti/aplomb/README.md

COOKIES_ADVICE PRIVACY_POLICY.

~/progetti/aplomb/README.md

Aplomb

{ date: “2026-05-01”, status: “live”, stack_modules: 7 }

A polished, cross-platform digital spirit level built with React Native and Expo

Aplomb is a fully-featured digital level application available on iOS, Android and Web. It replaces the classic bubble level with a sleek, physics-accurate UI that reacts in real time to the device's orientation. Whether you're hanging a picture frame, levelling a shelf, or checking a surface on a job site, Aplomb gives you precise tilt readings with instant visual, audio and haptic feedback.

The name aplomb (from the French word for "plumb line") reflects both the purpose of the app and the care taken in building it — steady, precise and well-balanced.

## Two interactive view modes

The app offers two complementary visualizations that adapt to how you're holding the device:

·Disc Level — classic circular bubble level for flat/horizontal surfaces; a smooth indicator tracks X/Y tilt across both axes simultaneously
·Horizon Mode — a full-screen horizon line that rotates in real time to show the roll angle, ideal when the device is held vertically (e.g. against a wall)
·Auto-switching — the app detects device elevation from accelerometer data and smoothly cross-fades between the two modes, with the option to lock either one manually

## Real-time sensor processing

Accelerometer data is sampled at 20 Hz and processed through a dedicated math module that computes:

·Elevation angle — distinguishes flat from vertical device orientation
·Roll angle — drives the horizon line rotation
·X/Y tilt in degrees — displayed numerically on screen
·Level detection — configurable tolerance thresholds for both horizontal and vertical surfaces

## Multi-sensory feedback

When the surface is perfectly level, the app confirms it in three ways: a clean audio tone via expo-audio, a satisfying vibration pattern via expo-haptics and a visual highlight on the indicator and readout. The user can toggle between sound, vibration or silent mode with a single tap.

## Calibration and saved measurements

A built-in calibration modal lets users set a custom zero-angle offset, persisted across sessions on the device. This is essential for correcting slight inaccuracies in older devices or measuring angles relative to an existing reference surface. Measurements can be snapshotted with a custom label and reviewed later as a history of cards with timestamps and delete actions.

## Adaptive design and theming

Responsive layout adapts to phones and tablets (iPhone and iPad), including landscape orientation on all devices. Dynamic sizing calculations based on screen diagonal ensure the UI fills the screen on every form factor. Light, dark and automatic system-following themes are all switchable at runtime without restarting the app.

## Internationalization

The app ships with 15 languages out of the box, with automatic detection of the device locale: English, Italian, German, French, Spanish, Portuguese, Russian, Chinese, Japanese, Arabic, Hindi, Urdu, Bengali, Indonesian and Turkish. The app name itself is localized on the OS home screen via a custom Expo config plugin.

## Tech stack

Technical choices reflect the need for a fluid, responsive experience:

·React Native 0.83 with React 19 and the experimental React Compiler enabled
·Expo ~55 in managed workflow for tooling and native modules
·TypeScript 5.9 for static typing across the entire codebase
·Expo Router for file-based navigation with typed routes
·expo-sensors, expo-haptics and expo-audio for hardware access
·React Native Reanimated 4 with shared values for spring-physics animations on the UI thread
·react-native-worklets and react-native-gesture-handler for gesture interop and frame-synchronised calculations
·TailwindCSS via Uniwind, tailwind-variants, heroui-native and react-native-svg for the UI
·expo-glass-effect and expo-symbols for glassmorphism surfaces and SF Symbols on iOS
·i18next with expo-localization for runtime language switching
·AsyncStorage for local persistence of calibration and saved measurements
·EAS Build for cloud iOS and Android builds, with expo-dev-client and expo-build-properties

## Architecture highlights

Five principles that characterize the codebase:

·Separation of concerns — sensor math lives in a dedicated module, fully isolated from the UI; rendering consumes clean, typed values exposed by a dedicated hook
·Performance — animated values run on the native UI thread via Reanimated, avoiding JS bridge round-trips on every frame
·Responsive geometry — layout constants are recomputed dynamically from live screen dimensions, ensuring correct scaling from a 4" iPhone SE to a 13" iPad Pro
·Platform splits — platform-specific tab bar implementations are selected at bundle time for iOS, Android and Web, without runtime branching in shared code
·Multi-sensory accessibility — redundant visual, audio and haptic feedback ensures usability in noisy or variable-light environments

Aplomb is available as an app on iOS, Android and Web with bundle id com.mariustrica.aplomb.

// stack
[react-native”, expo”, typescript”, ios”, android”, mobile”, sensors”, ]