Tideprint

Review water-level data. Keep the originals. Share a record anyone can check.

Track: Climate Data & Environmental Monitoring

Open Tideprint · Source code and documentation

Inspiration

A coastal researcher receives a water-level file with an unusual reading. Is it a sensor fault, a normal tide, or something that needs investigation? Removing the row from a spreadsheet can remove the evidence too. When that cleaned file changes hands, the next person may never see the original value, the checks used, or the reason for excluding it.

Tideprint makes that review traceable. Its central idea is simple: preserve the observations, explain the checks, record the decisions, and let the recipient reproduce the result.

What it does

Open a day of public NOAA observations or import a CSV. A time-series chart, a reading inspector, transparent quality rules and a seeded Isolation Forest highlight observations that deserve attention. The reviewer keeps or excludes a flagged reading and records a reason. Original rows remain available throughout.

Seal the completed review into a portable JSON receipt containing the original CSV, source information, check settings, reproducible audit and decisions. Export the original data, reviewed CSV or receipt. The next person can reopen the receipt, rerun its checks and compare its digest with one received through a trusted channel. Altering a sealed note or reading fails against the original seal.

Optional OpenTimestamps support adds a salted commitment to Bitcoin without a wallet or transaction fee. The interface distinguishes a pending calendar promise from an upgraded proof. It can check the hash path, Bitcoin Merkle root, block-header hash and proof of work; chain selection and confirmations rely on Blockstream's chain view. This is not full-node consensus verification.

Who it helps and a practical scenario

The current workflow suits coastal-data researchers, student field teams and analysts passing a small observation file to another reviewer.

For example, a student team preparing a coastal report opens the archived San Francisco record for 1 October 2024: 241 NOAA observations, with UTC time, metres and MLLW stated. They inspect flagged readings and record why each should remain in the reviewed output. A supervisor receives both the original observations and the review receipt, rather than a cleaned file with unexplained deletions. They can reproduce the checks before using the data in their own analysis.

The immediate value is an inspectable handoff: original values, decisions and check settings travel together. We have not measured time saved by independent analysts, reductions in real sensor errors, or downstream climate outcomes. The supplied analyst-study protocol and observed-task note export support that next evaluation.

How we built it

React and TypeScript power the interface. A separate Web Worker parses and analyses data without blocking normal interaction. The pure TypeScript core is shared with Node tests. Canonical sorted-key JSON and SHA-256 bind the record.

Rules cover missing values, repeated or out-of-order times, gaps, ranges, isolated spikes, fast changes and flat stretches. They draw on IOOS QARTOD guidance without claiming certification. The Isolation Forest uses 64 seeded trees and four documented features; its score represents relative unusualness, not the probability that a sensor is wrong.

Vercel Node functions adapt NOAA and OpenTimestamps using fixed outgoing hosts, strict inputs, timeouts and response bounds. Successful NOAA requests use a short CDN cache. A deployed regional IP rule limits API requests. Private CSVs and review notes stay in the browser unless exported. No account, paid model, API key or database is required to use the application.

Challenges we solved

The hardest boundary was separating an unusual value from an incorrect one. Tideprint asks for review instead of silently deleting evidence. Another challenge was portable verification: a matching hash is insufficient if an audit cannot be reproduced, so the verifier reparses the data, reruns analysis and validates decisions.

Independent AI code review also exposed delayed-response and workspace-state defects. Regression fixes now reject stale verification results, keep unrelated active records separate, and validate exportable proof attachments. Local recovery includes complete workspace backups, validated restore and stale-tab conflict protection.

What works and what we tested

  • 73 automated tests cover parsing, model determinism, review actions, sealing, tampering, safe CSV exports, restore, comparison disagreements and asynchronous state races. The TypeScript/Vite build passes.
  • 2,226 cross-implementation comparisons against IOOS ioos_qc 2.2.1 show zero differences for the three supported semantics compared: range, missing-value and rate checks.
  • 21 selected injected-fault cases, distributed across three actual NOAA station-days, produced the expected flags. Injected faults are documented test inputs, not observed sensor failures or a general accuracy benchmark.
  • A bounded Node-host run on a synthetic 3,000-row file measured 49.51 ms p95 analysis and 59.32 ms p95 receipt verification, from 20 measured samples after warmup. Five concurrent local workers produced matching audits; a complete 30-draft maximum-row workspace restored successfully.
  • Browser checks exercised desktop and phone-size flows. Live spot checks confirmed NOAA caching, API throttling and recovery while the static site remained available. These checks do not establish an uptime guarantee or organization-scale deployment.

Exact methods, datasets, outputs and limits are retained in the repository's validation, evaluation and operations documents. Walkthrough decisions and comparison examples are AI-assisted test work, not an independent human analyst study.

Try the complete workflow

  1. Open the website and choose Review this day, or fetch a NOAA station-day.
  2. Inspect the chart, rule explanations and flagged reading list.
  3. Keep or exclude each flagged reading with a reason.
  4. Name and seal the review; export its JSON receipt and reviewed CSV.
  5. Open Verify a receipt and load that receipt. Compare a separately received sender digest.
  6. Change a sealed note in a copy of the JSON and verify that the original seal no longer matches.

Adoption and scale

The browser-first workflow makes a small review easy to try without account setup. Portable exports avoid requiring a recipient to use the same browser workspace. Current bounds are deliberate: a 1 MiB CSV, up to 3,000 rows, a six-minute observation profile, UTC timestamps, metres and a declared datum. Local storage holds up to 30 workspace items; backup input is limited to 32 MiB.

Larger continuous feeds, authenticated team review, cloud synchronization, globally coordinated quotas and full-node verification need additional engineering and operational evidence. They are future work, not current capabilities.

What we learned and what comes next

Integrity, sensor accuracy and reviewer identity are separate questions. A reproducible record answers what was received and how it was reviewed; a timestamp supports prior existence of bytes. Neither proves that the sensor was correct or authenticates the self-declared reviewer label.

Next we want independent coastal analysts and labelled datasets to evaluate the flags and recipient workflow, followed by station-specific profiles, more units and datums, and authenticated multi-person review. Field benefit will be reported only after real measurements.

Sources

AI assistance was used for research, implementation, testing and walkthrough media.

Built With

Share this project:

Updates

Submission history