Skip to main content
← cases

Resoniqa — Structural Health from Smartphones

Own product: continuous structural-health scores for every building in a portfolio, measured from vibration recorded by ordinary smartphones already inside the buildings. The public product site and design system are live, built in about 4 days with Next.js 16, hand-built SVG data visualisation, per-request nonce CSP, and a privacy-preserving waitlist. The monitoring platform is in development.

View Live→
39Components
~390Test Cases
48Test Files
4 daysBuild Time
2Themes
Next.js 16React 19TypeScriptTailwind CSS v4Motionnext-intlZodMongoDBVitestTesting LibraryPlaywright

The Product

Resoniqa is my own product. The idea: continuous structural-health scores for every building in a portfolio, measured from vibration recorded by ordinary smartphones that are already inside the buildings.

The planned platform works like this. Residents register their building once. The phone is designed to record only when it is still, charging, in the night window, and at its registered building. That check happens on the device, and no location is uploaded.

Recordings are 3-axis acceleration at 50 Hz in 5-minute segments. They are to be aggregated per building into modal-frequency estimates, corrected for temperature, humidity, occupancy, and season, and compared against the building's own history. The planned output is a health score, a confidence level (HIGH, MEDIUM, LOW, or NO DATA), and an anomaly state (NONE, WATCH, or INSPECT).

It is a prioritisation tool for human engineers — it tells them where to look first. It is not a safety determination. The audience is municipalities, civil protection, insurers, property portfolio managers, and engineering firms, starting with Italy.

What Is Built

The public product site and its design system are built and live. The monitoring platform — the dashboard and everything behind it — is in development.

The site was built in about 4 days: Next.js 16 App Router, React 19, TypeScript in strict mode, Tailwind CSS v4, Motion, Zod, and the MongoDB native driver. All copy lives in a next-intl translation catalogue; there are no hardcoded strings.

Data Visualisation

The charts are hand-built SVG components, each with its own geometry module and tests:

  • Frequency trace — a raw line, a corrected line, a residual band, and gaps where data is missing
  • Waveform trace — min/max decimation, with dropout marks
  • Live trace, night strip, portfolio view, and sparklines

NO DATA is a first-class state, drawn as dashed absence. A gap in the recordings is never drawn as a reading.

Security

Every request gets its own nonce. The Content-Security-Policy uses strict-dynamic, with no unsafe-inline or unsafe-eval for scripts. Responses also carry HSTS with preload, X-Frame-Options: DENY, a restrictive Permissions-Policy, and a request id for correlation.

Light and dark themes load without a flash, using an inline script that carries the nonce.

Waitlist

The waitlist endpoint validates input with Zod and is rate limited through MongoDB at 5 requests per hour per source. Client addresses are salted and hashed, never stored raw. A duplicate signup returns the same success response as a new one, so the endpoint cannot be used to check which emails are on the list. Error responses carry only a code and a request id.

Quality

Logging is structured, with redaction, and console is banned by lint. Reduced motion is respected.

The codebase has 39 components and about 390 test cases across 46 unit and component test files, plus 2 Playwright end-to-end specs, using Vitest and Testing Library.

Status

The product site is live. The monitoring platform is in development.