{"id":16,"date":"2026-08-21T01:08:39","date_gmt":"2026-08-21T01:08:39","guid":{"rendered":"https:\/\/johnsparks.dev\/index.php\/project\/"},"modified":"2026-08-21T01:08:39","modified_gmt":"2026-08-21T01:08:39","slug":"project","status":"publish","type":"page","link":"https:\/\/johnsparks.dev\/index.php\/project\/","title":{"rendered":"The Project"},"content":{"rendered":"\n<div class=\"wp-block-group alignfull iss-ai-demo iss-ai-demo--project is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-cover alignfull ai-section ai-hero\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-60 has-background-dim\" style=\"background-color:#000000\"><\/span><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1281\" class=\"wp-block-cover__image-background wp-image-11\" alt=\"Aerial view of dark ocean waves at dusk\" src=\"https:\/\/johnsparks.dev\/wp-content\/uploads\/2026\/08\/pexels-photo-15305609-1.jpeg\" data-object-fit=\"cover\"\/><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-kicker wp-block-paragraph\">The Project<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Every mile has a <span class=\"ai-highlight\">signature<\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tidepoint began as a question: what does a cellular network actually look like when you drive through it? The answer required building our own hardware \u2014 because no off-the-shelf logger records GPS, signal strength, and bandwidth in the same breath.<\/p>\n\n<\/div>\n\n<\/div><\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--project is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container ai-split is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-img is-layout-flow wp-block-group-is-layout-flow\">\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1280\" src=\"https:\/\/johnsparks.dev\/wp-content\/uploads\/2026\/08\/pexels-photo-35652456-1.jpeg\" alt=\"ESP32-based logger prototype circuit board\" class=\"wp-image-12\" style=\"aspect-ratio:4\/3;object-fit:cover\"\/><\/figure>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">The Hardware<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">An ESP32 core built for the field, not the bench<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The logger pairs an ESP32-S3 with a u-blox GNSS module and a cellular modem capable of reading RSRP, RSRQ, and live throughput. Everything runs on a low-power duty cycle designed for multi-day field deployments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Firmware polls all three subsystems in parallel, tags each reading with a shared clock, and writes to onboard flash before anything ever touches a laptop. No phone required, no app, no fragile Bluetooth link to babysit.<\/p>\n\n\n\n<div class=\"wp-block-group ai-tag-strip is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"wp-block-paragraph\">ESP32-S3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GNSS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LTE Cat-1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Onboard Flash<\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--project is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section ai-section-alt is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">How It Works<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">From raw radio noise to a clean row of data<\/h2>\n\n\n\n<div class=\"wp-block-group ai-process-item is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-index wp-block-paragraph\">01<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Capture<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014 GNSS fixes and modem diagnostics are sampled continuously, even in marginal coverage where most trackers give up.<\/p>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group ai-process-item is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-index wp-block-paragraph\">02<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Timestamp<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014 Every reading is stamped against a single synchronized clock so position and signal never drift apart.<\/p>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group ai-process-item is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-index wp-block-paragraph\">03<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Correlate<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014 Location, signal strength, and bandwidth are fused into one unified record per interval \u2014 no post-hoc matching required.<\/p>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group ai-process-item is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-index wp-block-paragraph\">04<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Export<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014 The complete log is packaged into a single file, ready to drop straight into Google Maps or Sheets.<\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--project is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-note is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">Data Formats<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Built for the tools you already use<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Logs export as clean CSV for spreadsheet analysis, or as KML for instant plotting in Google Earth and Maps. Every row carries latitude, longitude, timestamp, signal strength, and measured bandwidth \u2014 no proprietary viewer needed, no lock-in.<\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull iss-ai-demo iss-ai-demo--project is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-cover alignfull ai-section ai-section-dark\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-40 has-background-dim\" style=\"background-color:#000000\"><\/span><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1280\" class=\"wp-block-cover__image-background wp-image-15\" alt=\"Map visualization with route and data overlays\" src=\"https:\/\/johnsparks.dev\/wp-content\/uploads\/2026\/08\/pexels-photo-17279851.jpeg\" data-object-fit=\"cover\"\/><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-kicker wp-block-paragraph\">Data Gallery Preview<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Speed and signal, laid over the road itself<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Each trip renders as a colored route: green where bandwidth is strong, amber where it thins out, red where the connection nearly disappears. A second overlay traces speed, so dead zones and highway stretches tell their own story at a glance.<\/p>\n\n<\/div>\n\n<\/div><\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--project is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section ai-section-alt is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">Spec Sheet<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s inside the enclosure<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex\">\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<div class=\"wp-block-group ai-card is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-stat wp-block-paragraph\">14<\/p>\n\n\n\n<p class=\"ai-stat-label wp-block-paragraph\">Days Battery<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Continuous logging on a single 5000mAh cell at standard sample rates.<\/p>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<div class=\"wp-block-group ai-card is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-stat wp-block-paragraph\">72ch<\/p>\n\n\n\n<p class=\"ai-stat-label wp-block-paragraph\">GNSS Chipset<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">u-blox multi-band receiver, sub-3-meter accuracy in open sky.<\/p>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<div class=\"wp-block-group ai-card is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-stat wp-block-paragraph\">Cat-1<\/p>\n\n\n\n<p class=\"ai-stat-label wp-block-paragraph\">Cellular Modem<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LTE Cat-1 modem reporting live RSRP, RSRQ, and throughput.<\/p>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<div class=\"wp-block-group ai-card is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-stat wp-block-paragraph\">32GB<\/p>\n\n\n\n<p class=\"ai-stat-label wp-block-paragraph\">Onboard Storage<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MicroSD logging with automatic CSV and KML file rotation.<\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Hardware An ESP32 core built for the field, not the bench The logger pairs an ESP32-S3 with a u-blox GNSS module and a cellular modem capable of reading RSRP, RSRQ, and live throughput. Everything runs on a low-power duty cycle designed for multi-day field deployments. Firmware polls all three subsystems in parallel, tags each &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/johnsparks.dev\/index.php\/project\/\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;The Project&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"page-templates\/full-width-no-title.php","meta":{"inspiro_hide_title":false,"inspiro_hide_featured_image":false,"footnotes":""},"class_list":["post-16","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/pages\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":0,"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/pages\/16\/revisions"}],"wp:attachment":[{"href":"https:\/\/johnsparks.dev\/index.php\/wp-json\/wp\/v2\/media?parent=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}