Problem

Japan has 2,768 legally designated fishing ports as of April 1, 2026, but travelers do not have one friendly place to discover nearby ports, understand what makes each one special, and record their visits. Coastal communities also need credible ways to create reasons for repeat visits without treating working harbors as ordinary tourist attractions.

Visitors may notice issues involving signs, lighting, litter, or fences, but free-form photos are expensive for a future local reviewer to triage. At the same time, neither AI nor tourism should be presented as a substitute for harbor safety procedures, professional inspection, or public administration.

UMIPASS tests a focused hypothesis: a delightful collection experience can create interest in coastal communities, while optional observations can be organized into safer, human-reviewable drafts.

Inspiration

Japan is surrounded by the sea, and every fishing port has its own food, culture, scenery, and story. I wanted the differences between ports to become something people would enjoy collecting. Distance from the nearest station becomes an access score, turning a harder journey into part of the adventure.

I also wanted the journey to mean more than a private travel log. A visit can become a reason to learn about a coastal community, return later, and notice the place with care.

What it does

UMIPASS is a friendly, mobile-first fishing-port stamp rally designed for everyday travelers, not engineers.

  • On launch, it can show the three nearest demo ports and their straight-line distance. Raw location for this nearby view is used only for on-device calculation and is not stored, logged, or sent to an API.
  • Hakodate, Choshi, and Odawara have distinct harbor-style backgrounds and dimensional local-specialty stamps.
  • The signed-out judge demo simulates check-in, stamps, access points, a stamp book, and rankings without sending location or mixing demo data with persistent records.
  • With ChatGPT sign-in, a private login identity is mapped to an opaque D1 account and kept separate from the public display name. Profile settings, passport, stamps, scores, and opt-in monthly and yearly rankings persist in D1.
  • The authenticated check-in path validates a 90-second one-time challenge and at least three location samples over 15 seconds. Only active and verified checkpoints may award a stamp. All three current ports are demo-unverified, so authenticated awards fail closed.
  • Optional Sea Guard AI accepts a selected test photo and note for GPT-5.6 to organize as normal_candidate, needs_review, or unknown. Every result is human_review_required. The prototype does not diagnose infrastructure, automatically report to a region, or change stamps and scores.

How it works

The nearby-port flow computes Haversine distance in the browser and discards raw location after deriving the display. The authenticated flow binds a nonce to the user, port, and expiry; validates timing, accuracy, distance, sample count, replay, and idempotency; and only then writes a receipt, stamp, and score event to Cloudflare D1. Because browser GPS cannot prove its own origin, unverified checkpoints are rejected and no prize or financial value is attached.

For Sea Guard AI, the browser prepares an image at up to 1,200 px and 5 MB. A server-only API route calls the OpenAI Responses API with GPT-5.6 and strict Structured Outputs. The server validates the result again and maps low-confidence, irrelevant, refused, incomplete, or privacy-sensitive cases to unknown. The API key remains server-side and requests use store: false. The integration is implemented; live inference verification in the final submission environment is still pending.

The application uses Next.js, React, and TypeScript. vinext runs its route handlers on Cloudflare Workers. ChatGPT sign-in provides authentication, and D1 with a Drizzle SQLite schema provides persistence.

How Codex helped

I defined the core product decisions: a nationwide fishing-port stamp rally, local-specialty stamps, station-distance scoring, monthly and yearly rankings, separate private login and public display identities, a friendly non-engineer UI, distinct harbor visuals, dimensional stamps, and nearby ports on launch.

Codex accelerated official-rule and public-data research, requirements and specifications, threat modeling, mobile UI iterations, on-device geolocation, demo and authenticated data boundaries, D1 passport and ranking APIs, one-time check-in challenges, GPT-5.6 image integration, strict output validation, security hardening, tests, and documentation.

I reviewed the results and made the product calls that real port data must not be presented as verified, AI must not diagnose safety or modify scores, GPS limitations must be explicit, and raw location should not be retained beyond its stated purpose. I also directed visual iterations from the running UI, including per-port photographic backgrounds, dimensional specialty stamps, and a nearest-port launch experience.

Why GPT-5.6 matters

GPT-5.6 is not a decorative chatbot. Its image understanding and Structured Outputs turn an unstructured observation photo into a consistent first-pass record that a person could review: subject category, summary, visibility limits, whether another photo may help, and privacy cautions.

The stamp rally still works if AI is unavailable, but UMIPASS loses its bridge from a traveler's observation to a human-reviewable candidate. GPT-5.6 is deliberately not the authority: every result requires human review, and the model has no permission to alter identity, stamps, scores, rankings, checkpoint status, or administrative decisions.

Challenges

The hardest challenge was balancing the delight of a real-world visit with honest location security. Short-lived challenges, multiple samples, replay protection, and idempotency help, but they cannot prove that browser GPS is genuine. We therefore attach no prize value and reject all current unverified checkpoints.

The second challenge was respecting fishing ports as working and potentially hazardous places. Public representative points, award checkpoints, and safety information are separate concepts, and only locally verified safe points should ever become active.

The third challenge was making AI useful without making it sound certain. A valid JSON object can still be wrong, so ambiguous or incomplete outputs fail to unknown and every output remains a draft for human review.

Accomplishments

  • Built a coherent mobile prototype spanning nearby discovery, port browsing, demo check-in, dimensional stamps, passport, rankings, profile controls, and AI-assisted observation structuring.
  • Separated the zero-friction signed-out demo from the authenticated D1 ledger.
  • Separated private authentication identity from the public ranking name.
  • Implemented purpose-specific privacy boundaries for nearby location and authenticated check-in samples.
  • Isolated GPT-5.6 from scoring and safety authority and made human review mandatory.
  • As of July 19, 2026, lint, TypeScript checks, the production build, and 48 automated tests pass; npm audit reports zero known dependency vulnerabilities.

These checks do not prove production safety or model accuracy. Field validation, rights review, durable shared rate limits, evaluations, and an operating process are still required.

What I learned

Receiving a GPS coordinate is not the same as proving a visit. Privacy is strongest when it is architectural: calculate nearby ports on device, retain only coarse ledger facts, and publish only opted-in display names and aggregates.

For generative AI, schema validity is not factual validity. Separating GPT-5.6's strength in first-pass organization from a person's responsibility to verify the result made the feature both more useful and more honest.

Codex made it possible to iterate rapidly from a short concept through product specification, implementation, testing, and threat modeling. Human responsibility remained deciding what was true, what was safe to ship, and what must stay explicitly unfinished.

What's next

  • Run a 20 to 30 port pilot using official sources and checkpoints approved by local managers.
  • Add an English UI and a scalable on-device index for nationwide discovery.
  • Combine dynamic QR or NFC with native device attestation and location before attaching any rewards.
  • Add consented, time-limited image storage and a human review workflow, never automatic regional reporting.
  • Build evaluations with synthetic or licensed images and publish measured schema validity, abstention behavior, latency, and cost.
  • Add durable shared rate limits, spend caps, monitoring, and audit controls before public launch.
  • Measure verified visits that lead to local actions, rather than claiming impact from raw check-in volume.

Built With

Share this project:

Updates