Marker Golf
iOS · Expo Supabase · PostGIS Claude Haiku Solo build

Marker

Golf course explorer and trip planner.

Every golf course in the United States on one map — 12,640 of them. Log the ones you've played, rate them, keep bucket lists, and plan a golf trip in one place instead of across twenty tabs.

12,640Courses
51States + DC
50/50Ground truth matched
48/48Planner eval
0Metered map APIs

The whole country, filtered live

Real data · 12,640 points
Hover a course
12,640 Courses shown
Holes
Access
Setting

No tile server, no geocoding call, nothing metered. The state outlines are one 111 KB static file and every dot is a real course from the same dataset the app bundles, both projected and filtered in the browser — which is exactly how the phone does it.

In the app

iPhone · 6.9″
Map screen showing clustered course pins across California with filter controls.
01Map
A course preview card opened from a map pin, with the option to log a round.
02Preview
A full course page with an aerial photo, facts and a rating control.
03Course
Profile screen showing a personal map of played courses and a collector rank.
04Profile
A generated day-by-day trip itinerary built from real courses.
05Itinerary
Curated bucket lists of notable courses.
06Lists

What it does

01

Every course, one map

12,640 US courses with an aerial photo of nearly every one. Filter by holes, access and distance; search by course or by town. Pins ship with the app and cluster on the device, so the map works with no network.

02

A log worth keeping

Mark courses played or want-to-play in a tap, rate out of 10, keep private notes. Your played courses become a map you can share, with a collector rank attached.

03

Bucket lists

Curated lists — iconic American publics, major venues — plus your own. Progress is tracked against the same log, so nothing is entered twice.

04

Trips, planned with friends

Day-by-day itineraries you can plan together. Invite friends with a code; everyone sees and edits the same plan, with tee-time reminders 24 hours and 4 hours out.

05

A planner that declines

Ask for Wisconsin in January and it says no, and tells you the courses there usually play April to October. The refusal is computed from stored season data, not from the model's opinion.

How the trip planner works

Retrieve first, validate after

Describe a trip the way you'd say it out loud — five days in Scottsdale in March, four rounds, mid budget, prefer walkable — and get back a day-by-day itinerary with real courses, real driving distances between them, and a reason for each pick.

The model never supplies facts. Our code retrieves real rows from the database first; the model may only choose among them by ID; the server then discards any ID it did not itself supply. The client renders from validated IDs, never from the model's prose.

An end-to-end eval runs the whole thing against the deployed function on every change. Twice during development it caught a defect that every other check had passed, which is the part of the build worth reading about.

Read the engineering case study →

01
ParseFree text to structured constraints, strict JSON schema.
02
RetrieveOur code runs PostGIS + pgvector. 15–40 real candidates.
03
ComposeModel sees only those candidates, answers in IDs.
04
ValidateUnknown IDs dropped. Untraceable numbers rejected. Region checked.
05
RenderClient draws from database rows, never from prose.