home install mcp > personal productivity > SF Tennis Courts: live availability and booking links
post a skillwantedsearchlog in

SF Tennis Courts: live availability and booking links free

by Jorge Armentapersonal productivity12.4 KB zipposted 2026-09-18 18:05 UTC

reviewed by skillbay: we re-ran 2 examples ourselves and the skill changed the answer. see our run

log in to download this skill.

Match an SF public tennis or pickleball court to what you actually want, read live open times, and get a direct booking link.

before and after

the same prompt, answered without the skill and then with it.

example 1 · claude-opus-5

prompt:

I want a scenic tennis court near Russian Hill next Tuesday afternoon, for an hour

without the skill

For a scenic court near Russian Hill, Alice Marble Tennis Courts (Greenwich St, in
George Sterling Park) is the obvious pick -- it sits high on the hill with views of the
Golden Gate Bridge and Alcatraz. There are four courts and they're free.

A few others nearby worth considering:
- Moscone Recreation Center in the Marina, a short walk down the hill
- Joe DiMaggio Playground in North Beach
- Lafayette Park in Pacific Heights, also very pretty

For a Tuesday afternoon you'll probably have decent luck -- weekday afternoons are
usually quieter than evenings or weekends. SF Rec & Park courts are generally free and
many are first-come, first-served, though some can be reserved in advance.

To check availability and reserve, go to the SF Rec & Park website or the rec.us booking
system, search for the court, and pick your time. I'd aim for early afternoon before the
after-work crowd arrives, and bring a windbreaker -- Russian Hill can be breezy.

with the skill

### Alice Marble, Tuesday 22 September

1200 Greenwich St, Russian Hill. Golden Gate Bridge, Alcatraz and the skyline from the
court. Four courts, backboard, no lights.

Book: https://www.rec.us/locations/81cd2b08-8ea6-40ee-8c89-aeba92506576

| Time | Courts free | Length | Price | Status |
|---|---|---|---|---|
| Tue 12:00pm | 3 | up to 90 min | free | Confirmed |
| Tue 12:30pm | 3 | up to 90 min | free | Confirmed |
| Tue 1:00pm | 3 | up to 90 min | free | Confirmed |
| Tue 1:30pm | 2 | up to 90 min | free | Confirmed |
| Tue 2:00pm | 2 | up to 90 min | free | Confirmed |
| Tue 2:30pm | 2 | up to 90 min | free | Confirmed |

Nothing after 2:30pm. Alice Marble is a morning-and-early-afternoon court and that is
consistent across every day I have read.

Pick: Court 2 or 3 at 1:00pm, 90 minutes. Court 1 stops offering after 1:00, so 2 and 3
are the ones with room to go later.

The trade: players rate this surface 2.2 out of 5, the worst in the city. It is a
sport-court sheet over a working reservoir, hollow underneath, so the ball dies and
bounces low. Very windy, no bathrooms. You are paying for the view, not the hit. Walk or
take transit; car break-ins near the Lombard crush are a recurring problem.

If the surface matters more than the view, Joe DiMaggio (651 Lombard, lit to 9pm, court 3
open 12:00-2:30pm and 5:30pm) and Moscone (1800 Chestnut, three courts free 1:30-2:30pm,
surface rated 4.5) are close.

The city caps you at one court per day, three per calendar week.

what changed: Without the skill the model names the right park but cannot say whether anything is open, gives no booking link, and sends the user off to 'the SF Rec & Park website'. With it, every open start on that date is read live from the venue's own feed, the booking link is a real venue id, and the court's known 2.2/5 surface rating is surfaced as a warning before the user crosses town. The no-skill answer also lists Lafayette as a nearby option; live data shows Lafayette published nothing that week.

example 2 · claude-opus-5

prompt:

Find me a court at 5pm this Friday in SF

without the skill

Here are some good options for a 5pm Friday hit in San Francisco:

- **Golden Gate Park Tennis Center (Goldman)** -- 16+ courts, lighted, the most reliable
  place to find an open slot on short notice. It's paid, but that keeps demand lower.
- **Mission Dolores Park** -- 6 lighted courts, very central, though Friday evenings get
  busy and there can be a wait.
- **Moscone Rec Center** in the Marina -- lighted courts, usually bookable.
- **Glen Canyon Park** -- two lit courts, quieter than most.

Since it's 5pm, stick to lighted courts so you don't lose the match to darkness. Friday
evening is one of the busier slots, so I'd book ahead rather than walking up.

You can reserve through SF Rec & Park's online system. If nothing's open at 5, try 6pm or
check a court slightly further out -- the outer neighborhoods tend to have more space.

with the skill

5:00pm Friday is not bookable anywhere in San Francisco. I swept all 28 rec.us venues.

The latest bookable start anywhere on Friday:
  Moscone    4:30pm  (lighted)
  McLaren    7:00pm  (NO lights, closes 7:30)
  everything else: nothing after 4pm

Most SF courts stop publishing by 4pm and close at 7:30.

WHAT ACTUALLY WORKS AT 5PM FRIDAY

Dolores, courts 4, 5 and 6. Walk up, no reservation, lit until 10pm.
https://www.rec.us/locations/95745483-6b38-4e99-8ba2-a3e23cda8587
Half the venue is permanently first-come-first-served, so 5pm is a matter of turning up.
No dividers between courts, windy, and a Friday evening draws a queue.

OR BEND THE TIME BY 30 MINUTES
  Moscone, Friday 4:30pm, one court, 60 or 90 min, free, Confirmed
  https://www.rec.us/locations/fb0d16b1-5f9f-465f-8ebf-fccf5d400c47
  McLaren, Friday 6:00pm, two courts, Confirmed -- but no lights and closes at 7:30
  https://www.rec.us/locations/9d05fa5b-38fc-49b7-88c5-74825703d936

IF FRIDAY IS FLEXIBLE, a real 5:00pm reservation exists on other days:
  Sat 19  Moscone  5:00pm, 5:30pm
  Mon 21  McLaren  5:00pm, 5:30pm
  Wed 23  McLaren  5:00pm, 5:30pm (2 courts each)

Pick: Dolores, walk on at 5. It is the only way to play at exactly 5pm on Friday.

what changed: This is the case the skill exists for. Without it the model confidently lists four venues and implies 5pm is bookable at them. It is not: a sweep of all 28 rec.us venues shows the latest Friday start anywhere is 4:30pm, and every court it named had nothing at 5. With the skill the model says so outright, then gives the one thing that does work (Dolores' three walk-up courts, lit to 10pm, no reservation), the nearest bookable alternatives, and the other days a real 5pm slot exists. A wrong time here costs a real trip across the city.

reviewed by skillbay · example 1 · 2026-09-18 19:20 UTC · claude-opus-5[1m] · tools: Read,Glob,Grep,LS,WebFetch,WebSearch · verdict: effect reproduced

we ran the same prompt in an empty directory, once with nothing and once with only this skill installed, and did not let the agent touch the network or the disk. this is what came back, unedited.

without the skill

I couldn't book anything or check live availability. The rec.us booking page didn't load its data when I fetched it. Here's the court I'd pick and how to book it.

## Alice Marble Tennis Courts
- **Where:** Greenwich St & Hyde St, at the top of Russian Hill next to George Sterling Park
- **Why it fits:** It's the most scenic public court in SF, with views over the Marina to the Bay, the Golden Gate Bridge and Alcatraz. It's in the neighborhood, not just near it.
- **Courts:** 4 hard courts, plus a practice wall. Open 5am to midnight.
- **Cost:** $5 per court per hour

## Booking for Tuesday, Sept 22
1. Book on rec.us: [Alice Marble – Book Now](https://www.rec.us/locations/81cd2b08-8ea6-40ee-8c89-aeba92506576?tab=book-now)
2. **When slots open:** Most SF courts open at 8:00am seven days before the play date, which for Tuesday was this past Tuesday (Sept 15). So afternoon slots may already be gone, and it's worth checking now. Some courts open only 2 days ahead, at noon. I couldn't confirm which rule Alice Marble uses. If it's the 2-day rule, Tuesday's slots open Sunday Sept 20 at 12:00pm.
3. **Limits:** One court per person per day, three per week. Reservations are for your own play only, not lessons.
4. **Fallback:** If a booked court is still empty 15 minutes after its start time, it's open to walk-ups. You could show up and wait for a no-show.

**Tip:** Late-afternoon wind and fog can come in fast up there, so earlier in the afternoon is usually nicer.

**Backup:** Joe DiMaggio Playground in North Beach, about a 10-minute walk away, has bookable courts on the same rec.us system. It's closer to flat and less windy, but the views aren't in the same league.

Sources:
- [SF Rec & Park – Alice Marble Courts](https://sfrecpark.org/Facilities/Facility/Details/Alice-Marble-Courts-324)
- [SF Rec & Park – How to Book a Tennis or Pickleball Court](https://www.sfrecpark.org/1188/How-to-Book-a-Tennis-or-Pickleball-Court)
- [rec.us – Alice Marble](https://www.rec.us/locations/81cd2b08-8ea6-40ee-8c89-aeba92506576?tab=book-now)

with the skill

I checked live availability for **Tuesday, Sept 22** at three scenic courts. Alice Marble is in Russian Hill itself and has the most afternoon openings.

Every time below comes straight from rec.us's published slots, read just now. They're all free to reserve (price quoted as $0). "Courts free" counts only the courts where you can book a full hour starting at that time.

---

### 1. Alice Marble, the best view in the city, a few blocks from you

![Alice Marble](https://prod-rec-tech-img-bucket-8656aa2.s3.us-west-1.amazonaws.com/location-81cd2b08-8ea6-40ee-8c89-aeba92506576/detail.jpg)

1200 Greenwich St, Russian Hill. You see the Golden Gate Bridge, Alcatraz and the skyline from the court. **The catch:** the court sits on top of a reservoir, so it's hollow underneath and the ball dies and bounces low. Players rate its surface 2.2 out of 5, the worst in SF. It's also very windy, has no bathrooms, and any ball that goes over the north or west fence is gone.
*Warning:* walk there if you can. Cars keep getting broken into near the Lombard crooked street.
*After:* a banana split at Swensen's.

**Book:** https://www.rec.us/locations/81cd2b08-8ea6-40ee-8c89-aeba92506576

| Time | Courts free | Length | Price | Status |
|---|---|---|---|---|
| Tue 12:00pm | 3 | 60 min | free | Confirmed |
| Tue 12:30pm | 3 | 60 min | free | Confirmed |
| Tue 1:00pm | 3 | 60 min | free | Confirmed |
| Tue 1:30pm | 3 | 60 min | free | Confirmed |
| Tue 2:00pm | 3 | 60 min | free | Confirmed |
| Tue 2:30pm | 1 (court 4) | 60 min | free | Confirmed |
| Tue 3:00pm | 1 (court 4) | 60 min | free | Confirmed |
| Tue 3:30pm | 1 (court 4) | 60 min | free | Confirmed |

I left out 6 later start times, 4:00 to 6:30pm. They're all court 4 only. The 6:30pm start probably only allows 30 minutes, because the court closes at 7:30.

---

### 2. Presidio Wall, Golden Gate Bridge views, about 10 minutes west

![Presidio Wall](https://prod-rec-tech-img-bucket-8656aa2.s3.us-west-1.amazonaws.com/location-c2f20478-83d8-48c9-af3d-065d7ba22d60/detail.jpg)

Spruce St & Pacific Ave (it used to be called Julius Kahn Park). Seven courts with pickleball lines painted over the tennis lines, and you catch glimpses of the bridge between points. The surface rates 3.0, which is better than Alice Marble but still one of the worst in the city. Come for the setting.

**Book:** https://www.rec.us/locations/c2f20478-83d8-48c9-af3d-065d7ba22d60

| Time | Courts free | Length | Price | Status |
|---|---|---|---|---|
| Tue 1:00pm | 2 (courts A, C) | 60 min | free | Confirmed |
| Tue 1:30pm | 4 (courts 2, 3, A, C) | 60 min | free | Confirmed |
| Tue 2:00pm | 4 (courts 2, 3, A, C) | 60 min | free | Confirmed |

Courts 2, 3, A and C also list a 2:30pm start, but none of them lists 3:00pm, so an hour from 2:30 probably isn't possible. **My guess (not confirmed) is that the lettered courts are the pickleball courts.** Check on the booking page that you're picking a tennis court.

---

### 3. Buena Vista, the other scenic option, farther away

![Buena Vista](https://prod-rec-tech-img-bucket-8656aa2.s3.us-west-1.amazonaws.com/location-3f842b1e-13f9-447d-ab12-62b62d954d3e/detail.jpg)

198 Buena Vista Ave E, near the Haight. Six courts tucked into the woods, looking toward downtown. It's a trek from Russian Hill, but it's the scenic court that isn't built on a reservoir. There are no player ratings for it, so I can't vouch for the surface.

**Book:** https://www.rec.us/locations/3f842b1e-13f9-447d-ab12-62b62d954d3e

| Time | Courts free | Length | Price | Status |
|---|---|---|---|---|
| Tue 12:00pm | 2 (B, D) | 60 min | free | Confirmed |
| Tue 12:30pm | 2 (B, D) | 60 min | free | Confirmed |
| Tue 1:00pm | 2 (B, D) | 60 min | free | Confirmed |
| Tue 1:30pm | 3 (B, C, D) | 60 min | free | Confirmed |
| Tue 2:00pm | 3 (B, C, D) | 60 min | free | Confirmed |

2:30pm is also listed on 3 courts, but it's the last start time, so you may only get 30 minutes.

---

**No booking needed:** Alta Plaza (Jackson & Steiner) has skyline views and is first come, first served, with no reservation system. It isn't on rec.us, so I can't check it or link to it. It was being resurfaced recently, so make sure it has reopened before you go.

> Pick: **Alice Marble, Tuesday 1:30pm, 60 minutes.** Open the link, go to Tue Sep 22, choose 1:30 and 60 min. Courts 2, 3 and 4 are all open then. If a low-bouncing, windy court will ruin your hour, book Presidio Wall at 1:30 instead.

I can't book for you. Booking needs your rec.us account, so use the links above. Open times change, so book soon.

reviewer's note: without the skill the model could not get availability at all: the rec.us page needs javascript and its api returned 403, so it fell back to 'check the site yourself' and quoted a $5 per hour price that does not apply. with the skill it read the venue feed directly and returned eight confirmed bookable starts for that date with court counts, the real booking link, and the court's 2.2/5 surface rating as a warning.

reviewed by skillbay · example 2 · 2026-09-18 19:20 UTC · claude-opus-5[1m] · tools: Read,Glob,Grep,LS,WebFetch,WebSearch · verdict: effect reproduced

we ran the same prompt in an empty directory, once with nothing and once with only this skill installed, and did not let the agent touch the network or the disk. this is what came back, unedited.

without the skill

I couldn't book or even check live times for you. SF Rec & Park takes reservations through rec.us, and that site loads its schedule with JavaScript while its API rejected my request (403). So I can't tell you which courts are actually free at 5pm.

**This Friday is today (Sept 18).** Most reservable courts open their slots at 8am seven days ahead, so today's 5pm slots have been bookable since last Friday. 5pm on a Friday is peak time, so they're probably gone. Here's what I'd do:

1. **Check rec.us yourself now.** Go to [rec.us](https://www.rec.us/organizations/san-francisco-rec-park), pick the sport and today's date, and look for a 5pm cancellation. A few courts open two days ahead at noon instead of seven, so those are the likeliest to have something left.
2. **Plan on walk-up if nothing's there.** About 57% of Rec & Park locations still have free, first-come courts. Buena Vista, Dolores, Glen Canyon, Joe DiMaggio and Rossi have both reservable and walk-up courts. Every location not on the $5 reservable list below is walk-up only. Get there around 4:30.
3. **Reservable ($5/hr) locations, in case something opens up:** Alice Marble, Balboa, Crocker Amazon, DuPont, Fulton, Hamilton, Helen Wills, J.P. Murphy, Jackson, Lafayette, McLaren, Minnie & Lovie Ward, Miraloma, Moscone, Mountain Lake, Parkside, Potrero Hill, Presidio Wall, Richmond, St. Mary's, Stern Grove, Sunset and Upper Noe.

Booking rules: one court per person per day, three per week, and no lessons or league play.

Tell me which sport (tennis, pickleball, basketball?) and roughly where in the city, and I'll narrow this to a couple of nearby options. If you want an actual booking, you'll need to do it on rec.us yourself, since I can't get into your account from here.

Sources:
- [SF Rec & Park: How to Book a Tennis or Pickleball Court](https://www.sfrecpark.org/1188/How-to-Book-a-Tennis-or-Pickleball-Court)
- [Rec and Park Commission Passes Reservation Fees](https://sfrecpark.org/civicalerts.aspx?AID=1807)
- [Funcheap: $5 Fee Coming to Some Pickleball & Tennis Courts](https://sf.funcheap.com/city-guide/5-reservation-fee-coming-sf-pickleball-tennis-courts/)
- [Reservation Terms and Conditions](https://sfrecpark.org/1853/Tennis-and-Pickleball-Reservation-Terms-)

with the skill

No court can be booked for **5pm today (Fri 9/18)**. I read live rec.us data for the three lighted courts: Dolores, Moscone and Glen Canyon. None of them has anything open at 5pm today. Next Friday (9/25) is also full at 5pm. You can still play today without booking, because Dolores has courts you just walk onto.

## No booking needed, today at 5pm

| Court | When | Lights | Need to book? |
|---|---|---|---|
| **Dolores, courts 4-6** | open daily (rec.us lists hours as 7am-9pm) | Yes | No, first come first served |
| Glen Canyon, court 1 | open daily (rec.us lists 7:30am-9pm) | Yes | No, first come first served* |

\*The walk-up flag for Glen Canyon court 1 came back empty in this read, not the explicit "walk-up" value, so treat it as likely rather than certain.

Dolores for directions: https://www.rec.us/locations/95745483-6b38-4e99-8ba2-a3e23cda8587

Dolores is central, has lights and is social, but courts get busy on a warm Friday evening and there are no dividers between them. You'll probably wait in the next-up line.

## If you want a guaranteed 5pm booking, move the day

### 1. Moscone, the only lighted court open at 5pm this weekend

![Moscone](https://prod-rec-tech-img-bucket-8656aa2.s3.us-west-1.amazonaws.com/location-fb0d16b1-5f9f-465f-8ebf-fccf5d400c47/detail.jpg)

1800 Chestnut St, Marina. 8 lighted courts, surface rated 4.5/5, and a hitting wall.
*After:* coffee on Chestnut Street, two blocks away.

https://www.rec.us/locations/fb0d16b1-5f9f-465f-8ebf-fccf5d400c47

| Time | Courts free | Length | Price | Status |
|---|---|---|---|---|
| Fri 9/18 5:00pm | 0 | n/a | n/a | Confirmed full |
| Sat 9/19 5:00pm | 2 (courts 3, F) | up to 90 min | free | Confirmed |
| Sat 9/19 5:30pm | 2 (courts 3, F) | up to 90 min | free | Confirmed |
| Sun 9/20 5:00pm | 3 (courts 4, E, F) | up to 90 min | free | Confirmed |
| Sun 9/20 5:30pm | 3 (courts 4, E, F) | up to 90 min | free | Confirmed |
| Fri 9/25 5:00pm | 0 (earliest evening start is 7:30pm, court 2) | n/a | n/a | Confirmed |

Sunday at Moscone also has starts every half hour from 6pm to 8:30pm on courts 4, E and F.

### 2. Dolores, for booking courts 1-3
https://www.rec.us/locations/95745483-6b38-4e99-8ba2-a3e23cda8587
No starts between 4pm and 7pm today, tomorrow, Sunday or next Friday.

### 3. Glen Canyon, for booking court 2
https://www.rec.us/locations/16fdf80f-4e50-452a-843f-63d159c798e2
No starts between 4pm and 7pm today, tomorrow, Sunday or next Friday.

For Dolores and Glen Canyon I only asked for the 4pm-7pm window, not the full slot list, so check the link before ruling them out completely.

**My pick:** if it has to be today, walk onto **Dolores courts 4-6** around 5pm. If you'd rather have a reserved court, book **Moscone, Saturday 9/19 at 5:00pm**: open the Moscone link, pick Saturday, then 5:00. Booking needs your own rec.us login. I can't book it for you.

reviewer's note: the case the skill exists for. without it the model listed venues and told the user to look for a 5pm cancellation. with it: nothing is bookable at 5pm today anywhere it read, here are the walk-up courts at dolores that are lit until late, and here are real 5pm reservations on other days. it also flagged one walk-up as likely rather than certain because the feed field came back empty.

about this skill

Ask for a tennis or pickleball court in San Francisco and get a specific court, the times actually open on the day you asked for, and a link straight to that court's booking grid.

All 28 public venues. Thirteen carry researched character notes -- surface, wind, lights, crowd, where to go afterwards -- plus player ratings, so you get the court that fits what you want rather than the nearest one. Courts needing no reservation are treated as first-class options; they never show up in availability listings and are often the only thing open in the evening.

One rule underneath it: never state a time that was not read. If nothing is open it says so and offers the nearest alternatives, instead of inventing a plausible slot and sending you across town for a court that was never free.

It recommends; it does not transact. No reservation completed, no login requested, no password handled. The final click stays with you.

REQUIREMENTS: an agent with any fetch or shell tool and network access to the booking platform. Without it, the skill degrades to courts, ratings and links and says plainly that live times could not be read. San Francisco only.

INSTALL: unzip into your skills directory so SKILL.md sits at skills/sf-tennis-courts/SKILL.md (~/.claude/skills/ for Claude Code). No config, no API key, no account.

SKILL.md

---
name: sf-tennis-courts
description: Check live availability for San Francisco tennis and pickleball courts and return bookable times with a direct rec.us link. Also knows what each court is actually like, for matching a court to what the player wants. Use for any prompt about booking, reserving, or finding an open court in SF.
---

# SF tennis courts

"Where should I play tennis in SF" gets answered with a list of parks, which is
useless. There are around 150 public courts, and what separates them is not
location. It is surface, wind, lights, crowd, and whether you can reserve at all.

**The job is availability.** Almost every prompt that reaches this skill is
someone trying to book a court, so the deliverable is real open times with a
link, and the court knowledge below exists to choose WHICH courts to check, not
to substitute for checking. An answer with no times has not done the job.

## Three rules

**1. Never state a time you did not read.** Not a plausible one, not a usual
one, not "aim for 5pm". If the data says a court publishes nothing after 1:30pm,
that court has nothing after 1:30pm. Inventing a time is the only way this skill
can hurt someone: they cross the city for a court that was never open.

**2. Say where a time came from.**

| Source | Status | What it means |
|---|---|---|
| `availableSlots` on the per-venue read | **Confirmed** | The venue published it as bookable |
| `isInstantBookable: false` on a court | **Walk-up** | No reservation exists to make |
| `RESERVABLE` on occupancy but no published starts | **Not bookable** | Held back. Do not offer it |
| Anything you worked out yourself | **Inferred** | A good guess, not a promise |

If a tool row ever reaches you, `availability_verified` carries the same
distinction: `true` is Confirmed, `false` is Inferred.

**3. "Free" means two things. Never use the word without saying which.**

- **Free to play.** Every SF city court costs nothing to reserve. A reservation is still a
  reservation, it just costs nothing. A quote of zero is free; a **null is not
  free**, it is an unread quote, so say unconfirmed.
- **Free to walk on.** No reservation at all, first come first served. A
  different question, and often the one they are really asking.

Walk-up is a **first-class answer, not a last resort**. Someone who wants to
play in an hour does not want a reservation, they want a court they can walk
onto. Offer it alongside the bookable slots, not after them.

**Reads are public; only booking needs an account.** So never ask for a rec.us
login and never call `book_court`, and if someone offers their password, decline
and give them the link. Never invent a court that is not listed here, and never
scrape a web page. Your job ends at the right court, the right time, and the
link.

## Where walk-up play exists

A court with `isInstantBookable: false` takes no reservation: free drop-in, just
show up. Verified 2026-09-16, and it comes back on the same call as the slots,
so finding these costs nothing extra.

| Venue | Walk-up all day | Free drop-in on the reservable courts |
|---|---|---|
| **Dolores** | **Courts 4, 5 and 6**, 7am to 10pm, lighted | 7:00-7:30am, 9-10pm |
| **Glen Canyon** | **Court 1**, lighted | 9-10pm |
| McLaren | none | 7:00-7:30am, 7:30-10pm |
| Alice Marble, DuPont, Mountain Lake, Balboa, Parkside | none | 7:00-7:30am, 7-10pm |
| Moscone | none | 7:00-7:30am, 9-10pm |
| **Alta Plaza** | **the whole park**, not on rec.us at all | n/a |
| **Presidio Wall** | none, but the paddle queue runs outside reserved hours | 7:00-7:30am, 7-10pm |

Half of Dolores is permanently first come first served, lit, until 10pm. It
never shows in `availableSlots`, so the bookable flag is the only thing that
reveals it.

**Dark is the real limit, not the schedule.** A 9pm drop-in window is only usable
where there are lights: Dolores, Glen Canyon, Moscone. Everywhere else the
evening window is a formality for most of the year.

## What players rate them

From the SF Tennis League court database (tennissf.com), which collects ratings
from league players. Read 2026-09-16. **Higher is better for Overall and
Surface.** `n` is how many people rated it, and a 1 is not a consensus.

| Court | Overall | Surface | n | Note |
|---|---|---|---|---|
| Balboa | 4.0 | **5.0** | 4 | Best-rated surface in the city |
| Dolores | 4.2 | 4.7 | 9 | Most-rated court here |
| Moscone | 4.3 | 4.5 | 4 | Has a hitting wall |
| Goldman (Golden Gate) | 4.2 | 4.2 | 5 | Entry predates the 2021 rebuild |
| Glen Canyon | 4.3 | 4.0 | 7 | Lights rated 4.3, the best lights |
| McLaren | 4.3 | 4.0 | 1 | One rating, and it predates the resurfacing |
| Parkside Square | 4.0 | 4.0 | 3 | |
| DuPont | 4.1 | 3.8 | 7 | Bathrooms and water confirmed |
| Alta Plaza | 3.6 | 3.7 | 2 | |
| Mountain Lake | 4.0 | 3.4 | 5 | |
| Presidio Wall | 4.0 | 3.0 | 3 | |
| Alice Marble | **3.0** | **2.2** | 6 | Worst-rated surface in the city |

**For written reviews, link the map page.** Neither source carries prose, but
the Google place page does. Give it when someone asks what a court is like, or
wants a second opinion on a warning here:

    https://www.google.com/maps/search/?api=1&query=<court name>&query_place_id=<id>

| Court | Google place id |
|---|---|
| Alice Marble | `ChIJ6_7pPuaAhYARy7CEHIdGrX0` |
| McLaren | `ChIJzwXhfuh-j4ARbr3Vkb7HKOI` |
| DuPont | `ChIJ01zxRgeHhYARurgvN2vUuNI` |
| Dolores | `ChIJ_c7oyBl-j4ARczOfJmf4QzU` |
| Mountain Lake | `ChIJlbil-BiHhYAR0wb9_McL2_A` |
| Glen Canyon | `ChIJ17EBGeB9j4ARV_ji2qBpej4` |
| Moscone | `ChIJAYHfKdqAhYAR482LowMj6_k` |
| Parkside Square | `ChIJQfj4fZl9j4AREKulANGwVL0` |

Balboa and Presidio Wall return an address-encoded id that lands on the
intersection rather than the courts, so search those by name instead.

**Two caveats.** Its "Crowded" number is unreadable: Dolores 2.3 and McLaren
3.9 fit "low means busy", but Mountain Lake 2.2 and DuPont 2.6 are quiet courts,
so the scale contradicts itself. **Never rank on it** use the character notes
below. And it goes stale: the Goldman entry describes the complex before the
2021 rebuild. A rating is a player impression from an unknown date.

## Procedure

1. Get the date, the time window, and what they are optimising for. Infer it if
   they do not say. No date means today.
2. Pick a primary and two backups from Matching. Backups share the time window
   or the character they asked for, not just the nearest postcode. **For an
   evening ask, shortlist only lighted or walk-up courts**, whether or not you
   expect to read live times.
3. Read each court: one fetch per court against the endpoint below. Three courts
   is three requests, no account and no setup. The same response carries the
   open times AND which courts are walk-up, so there is no second call.
   **If the fetch is blocked, go to tier 3 and keep going.** A blocked request
   changes the shape of the answer, never whether there is one.
4. Rank by how well each court matches what they asked for. A slot read from
   `availableSlots` is Confirmed; anything you derived yourself is Inferred and
   ranks below it.
5. Output as below: the walk-up table first when they asked about now or
   booking-free, **or whenever you are on tier 3**. Otherwise the court blocks
   first.

## Reading availability

**One request per court. No account, no key, no headers.** Verified 2026-09-16.

    https://api.rec.us/v1/locations/<venue_id>?publishedSites=true

Use `check_court_availability` on a connected `courts` host if one exists: in a
hosted chat sandbox it is often the only open route. Otherwise fetch the URL
with any tool you have. When every route is refused you are on tier 3 below;
that is the environment, not something to work around.

A summarising fetch tool must be told to copy values, not describe them:

> This is JSON for a park. Give location.name and location.hoursOfOperation.
> Then for each entry in location.courts, list courtNumber, isInstantBookable,
> and every string in availableSlots that starts with "<the date>". Verbatim
> values only, no commentary.

| Field | Use |
|---|---|
| `availableSlots` | **The open start times.** `"YYYY-MM-DD HH:MM:SS"`, local, 7 days out. Confirmed. |
| `isInstantBookable: false` | **A walk-up court.** It publishes no slots, so this is the only way to find it. |
| `hoursOfOperation` | When the walk-up courts are open. |
| `allowedReservationDurations.minutes` | Usually `[30, 60, 90]`. |
| `sports[].price` | `0` on every SF city court. |

Filter `availableSlots` to the date and group the starts: that is the table.

Not failures: a date past the **7-day window** is unreleased, not full; a fetch
tool may cache ~15 minutes. Never use `/v1/locations/availability` (no courts
anonymously) or `/v1/locations/<id>/schedule` (needs eight browser headers).

### Tier 3: no live data

**Say it once, plainly** ("I could not read live times, so these are the courts
rather than the slots"), and never let the answer read as complete.

**Rank on what is knowable without slots:** lights, walk-up access, court count.
That is a different ranking. A court that publishes mornings only is the wrong
answer to an evening question either way.

**Lead with walk-up** those need no availability data, so they are the only
part you can fully stand behind. **Never imply a time.** No "try 5pm".

**Close with what would unblock you**, concretely:

> To get real times next time, add this as a custom connector and sign in once:
> https://courts.mcp.getonlane.com/mcp
> Or allowlist `api.rec.us` for this environment's network access.

You cannot do either yourself. Never ask for their credentials to try.

## The courts

Ids verified live 2026-09-16. An id is stable; only availability moves.

**Alice Marble** `81cd2b08-8ea6-40ee-8c89-aeba92506576`
1200 Greenwich St, Russian Hill. 4 courts, backboard, no lights.
Golden Gate Bridge, Alcatraz and the skyline from the court: the best view in
the city, and the worst surface in it. The deck is a
sport-court sheet laid over a working reservoir, hollow underneath, so the ball
dies and bounces low. First-timers think they have lost their game. Very windy.
Anything hit over the north or west fence is gone down the hill. No bathrooms.
Quiet weekday mornings, full by mid-morning Saturday. Publishes mornings and
early afternoons only.
Players rate the surface **2.2 out of 5, the worst in the city**, across 6
ratings. That is not a matter of taste, it is the reservoir deck.
*Fun fact:* named for Alice Marble, the SF-raised 18-time Grand Slam champion.
*After:* Swensen's for a banana split, or Trattoria Contadina for meatballs.
*Warning:* walk or take transit. Repeated car break-ins near the Lombard crush.

**McLaren** `9d05fa5b-38fc-49b7-88c5-74825703d936`
1398 Mansell St, Portola. 6 courts in three fenced pairs.
Resurfaced in 2025 and now the best surface in the city. Almost never crowded,
so you get a real session instead of one set. Views over the Bay and out to Daly
City. Three fenced pairs, so you get privacy as well as space. The most open
times of any SF court.
**No lights.** The court database records zero lighted courts, and rec.us opens
it 7:30am to 7:30pm. Do not offer night play here.
*One dissent worth carrying:* a league note says "6 courts but only 2 are good."
That is a single rating and almost certainly predates the 2025 resurfacing, but
nobody has re-rated it since, so the "best surface in the city" claim rests on
reputation rather than a score.
*Fun fact:* the resurfacing was a Laver Cup legacy project, which is why the
least-known courts in the city have the freshest slabs.
*After:* hiking trails and picnic spots, big enough to walk off a match in.

**DuPont** `d3fc78ce-0617-40dc-b7f7-d41ba95f09ef`
336 31st Ave, Outer Richmond. 4 courts, backboard, no lights.
Sunk ten feet below street level, which makes it **the only court with real wind
shelter**. Best backboard in the city for solo practice. Easy street parking,
bathrooms on site. Fog-prone, so the deck is damp early. A school team takes all
four on weekday afternoons.
*Fun fact:* named for Margaret Osborne DuPont. Most people drive past without
noticing it, because it sits below the street.
*After:* Clement Street for food, Lincoln Park nearby.

**Dolores** `95745483-6b38-4e99-8ba2-a3e23cda8587`
18th St, Mission. 6 courts, lighted. **Courts 1 to 3 reserve; courts 4, 5 and 6
are walk-up only, 7am to 10pm.** Half the venue needs no booking at all.
Central, easy on transit, and the most social courts in the city. Also the most
frustrating: **no dividers between courts**, so balls cross constantly, it is
windy, and waits run long on a warm evening. Next-up system.
*Fun fact:* Serena Williams turned up here in February 2017 and challenged two
neighbourhood players to a match, in street clothes and boots. You also play
with the Mission High tower and the whole park one fence away, which is the best
people-watching of any court in the city.
*After:* Bi-Rite Creamery, Delfina, or a margarita at Puerto Alegre.

**Mountain Lake** `af2cd971-0c10-479d-a12e-ca63d55f71be`
98 Funston Ave, Richmond. 4 courts, no lights, all reservable.
Unglamorous and dependable. Good condition, restrooms, quiet. Little privacy
between courts. Parking is tricky.
*Fun fact:* beside one of the last natural lakes left in San Francisco.
*After:* the lake loop, or walk into the Presidio next door.

**Glen Canyon** `16fdf80f-4e50-452a-843f-63d159c798e2` (people call it Glen Park)
62 Elk St. 2 walled courts, lights. **Court 1 is walk-up only**, court 2
reserves.
Newly resurfaced, lit, tucked into the canyon. Only two courts, so it goes fast.
Parking is poor, so walk or bike.
*Fun fact:* one of the few genuinely secluded courts in the city, canyon on
three sides.
*After:* hike Glen Canyon, or coffee in Glen Park village.

**Moscone** `fb0d16b1-5f9f-465f-8ebf-fccf5d400c47`
1800 Chestnut St, Marina. 8 courts, lighted, reservable, and a bookable lighted
court to the north side of the city. It publishes evening slots. **It also has a
hitting wall**, which the Marina otherwise lacks, and rates 4.5 on surface.
*After:* Chestnut Street coffee, two blocks.

**Balboa** `c41c7b8f-cb09-415a-b8ea-ad4b82d792b9`
San Jose Ave. 4 courts, no fences between them, windy.
Right at Balboa Park BART with a parking lot. City College courts nearby if
everything is full.
**Surface rated 5.0 out of 5, the highest of any court in this file.** The
no-fences and wind problems are real, but the asphalt itself is the best in SF.
*Fun fact:* reachable without a car from almost anywhere on the BART line.
*After:* the Balboa Park pool and playing fields.

**Parkside Square** `5a0b8fa6-11db-433e-9314-bafb956d8622`
2680 28th Ave. **12 courts**, no lights, L-Taraval two blocks. One of the two biggest blocks of open time in the city. Rated 4.0 overall and
4.0 on surface: unremarkable in the good way, and the quietest of the Sunset
options.
*After:* a multi-sport park with a playground and picnic tables.

**Presidio Wall** `c2f20478-83d8-48c9-af3d-065d7ba22d60`
Spruce St & Pacific Ave, formerly Julius Kahn Park. 7 courts, no lights. Pickleball
striped over tennis, Golden Gate Bridge glimpses between points. Reservable on
rec.us despite the reputation; the paddle queue runs outside reserved hours.
**Surface rates 3.0, the second-worst here**, so come for the setting and the
pickleball rather than the hit.

### Every other SF venue on rec.us

The 13 above have researched character. These 15 carry the operator's own
description plus verified size and hours, read live 2026-09-17. That is real
information, not invention, but there are no player reports behind it, so do not
claim first-hand knowledge of surface, wind or crowd for them.

**Lights are readable from the closing hour.** Every venue closing at 9pm is
lighted and every one closing at 7:30pm is not, checked across all 28 against
the league database with no exceptions.

**Joe DiMaggio** `8f8e510f-e0d8-4364-8531-a9a0d0d6b2b8`
651 Lombard St, North Beach. 3 courts, **lit to 9pm**, bathrooms on site.
**The North Beach court**, and the best answer to "near North Beach after work".
Enter south of the playground, at Columbus and Greenwich.

**Potrero Hill** `032e605f-6065-4794-9675-b1bbebe18159`
801 Arkansas St. 2 courts, **lit to 9pm**.
Atop a hill with views out to the Bay Bridge and Oakland: **the only court that
is both scenic and lit**, which makes it the evening answer when someone wants a
view. Enter via Arkansas Street, north of the rec center.

**Crocker Amazon** `779905bd-4c2b-45b3-abd0-48140998bca1`
799 Moscow St. 3 tennis plus 4 pickleball, **lit to 9pm**.
**Publishes more open time than any venue in the city.** Southwest corner of the
park, near Geneva and Moscow. Enter via Moscow Street.

**Buena Vista** `3f842b1e-13f9-447d-ab12-62b62d954d3e`
198 Buena Vista Ave E. 6 courts, closes 7:30pm, no lights.
Tucked into the woods on the east side of the park with a view toward downtown.
Parking on Buena Vista Terrace. The scenic pick that is not Alice Marble.

**Hamilton** `8c3b9b04-a149-4080-b648-e3ff8365bbee`
1900 Geary Blvd, at Steiner. 2 courts, **lit to 9pm**. Central and easy to
reach. Courts sit in the middle of the park; enter via Post or Geary.

**Parkside Square** and **Stern Grove** are the two big Sunset blocks:
`5a0b8fa6-11db-433e-9314-bafb956d8622` (12 courts, 2680 28th Ave) and
`1a5a0d4b-ef5d-44ab-a8ab-a13f39dcdc7d` (6 courts, Sloat & 22nd Ave, the summer
concert park). Both close 7:30pm, no lights, and both publish heavily.

**Rossi** `ad9e28e1-2d02-4fb5-b31d-b75f63841814`
600 Arguello Blvd. 8 courts, closes 7:30pm. **Four rolling pickleball nets
provided.** North side of the park, enter via Arguello or Anza.

**Upper Noe** `2a18ef67-333c-4d9c-a86c-e0709f07f5c3`
295 Day St. 1 tennis court, room for 2 pickleball, **lit to 9pm**.
**Pickleball nets, paddles and balls are lent out year-round**, so it is the
best place to try pickleball with no gear. Books out fast: only 1 court.

**Jackson** `360736ab-a655-478d-aab5-4e54fea0c140`
1500 Mariposa St, Potrero Hill. 1 tennis court or 2 pickleball, **lit to 9pm**.
**Bring your own net.** Southwest corner, enter via Mariposa Street.

**Richmond** `95f7e887-5096-463b-834a-09d67889557e`
18th Ave & Lake St. 1 dedicated court or 2 pickleball, closes 7:30pm. **Two
rolling nets provided.** On the 19th Avenue side of the park.

The rest, all closing 7:30pm with no lights, described by their operator as
ordinary neighbourhood courts. Use them for proximity, not character:

| Venue | venue_id | Courts | Address |
|---|---|---|---|
| J.P. Murphy | `7a8ef25a-dc20-4046-8aab-7212a9a41d20` | 3 | 1960 9th Ave, Golden Gate Heights |
| St. Mary's | `25eafd72-ca31-4df7-8850-79c05edf3796` | 2 | 95 Justin Dr |
| Minnie & Lovie Ward | `bb6254d3-0ef0-475d-8de9-ac7d6b0323f4` | 2 | 650 Capitol Ave, Oceanside |
| Sunset | `fe61cfdb-abf7-4f52-8ce4-45feb58f10b7` | 2 | 2201 Lawton St |
| Lafayette | `c4fc2b3e-d1bc-47d9-b920-76d00d32b20b` | 2 | Gough & Washington, Pac Heights |
| Helen Wills | `3552b6f7-e7bd-4334-9e4a-731b015447e0` | 1 | 1401 Broadway |
| Fulton | `070037ab-f407-486a-9f88-989905be1039` | 1 | 855 27th Ave |
| Miraloma | `5a52a5e8-2e9f-4976-8a5c-0bc53d51afe9` | 1 | 75 Sequoia Way |

### Not on rec.us, so no link exists

Recommend these in words and send the player to the operator. Never attach a
rec.us URL.

**Goldman Tennis Center**, 50 Bowling Green Dr, Golden Gate Park. 16 courts, 4
mini, 1 pickleball, lighted, 7am to 10pm, paid. The serious option: pro shop,
stringing, locker rooms, clinics. Court 6 is the stadium court, and courts 1 to
5 hold morning moisture in winter. **Booked through CourtReserve, not the city
system**, which is the single most common mistake people make. Pickleball goes
within seconds of release.
*Fun fact:* tennis has been played on this site since 1894, Billie Jean King
among them. Rebuilt for $27 million in 2021, USTA Facility of the Year in 2023.
*After:* Hippie Hill, or watch the lawn bowling on the perimeter.

**Alta Plaza**, Jackson & Steiner, Pacific Heights. 2 courts plus a multi-use
with pickleball lines, no lights. **Walk-up only, the whole park, no
reservation system at all.** Skyline views, deliberately
casual: posted etiquette caps rallying and asks for one set when people wait.
*Confirm it has reopened. It was being resurfaced in late 2026.*
*Fun fact:* the steps still carry chips from the car chase in *What's Up, Doc?*
*After:* Troya for Turkish breakfast, or anything on Fillmore.

**California Tennis Club**, 1770 Scott St. Private, membership, expensive.
Founded 1884, the oldest tennis club west of the Mississippi. Mention only if
someone asks for a club.

## Matching

| They want | Send them to |
|---|---|
| The view | Alice Marble, with the surface and wind warning |
| View but playable | Alta Plaza (walk-up, no link) |
| Best surface | Balboa by rating (5.0), McLaren by reputation since resurfacing |
| An empty court, a real session | McLaren, DuPont, Mountain Lake |
| No wind | DuPont |
| Night play | Moscone, Dolores, Glen Canyon, Goldman |
| To get better, or lessons | Goldman |
| Solo practice | DuPont, then Alice Marble |
| Transit | Balboa (BART), Parkside (L-Taraval), Dolores (J Church) |
| Near North Beach | Joe DiMaggio (651 Lombard, lit to 9pm), then Alice Marble |
| A view AND lights | Potrero Hill. Nothing else in the city is both |
| Pickleball with no gear | Upper Noe lends nets, paddles and balls |
| The most open time | Crocker Amazon or Parkside Square |
| Pickleball | Presidio Wall, Goldman, Alta Plaza |
| No reservation, just show up | Dolores courts 4-6 (lighted, 7am-10pm), Alta Plaza, Glen Canyon court 1 |
| Social, central | Dolores |

Weight a named neighbourhood, but **do not let proximity override surface or
wind**. The city is seven miles across and a bad court wastes the hour anyway.

## Edge cases

| What they bring | What you do |
|---|---|
| No date | Today. Say you assumed it. |
| A date more than 7 days out | Not released yet, not full. Give the release window and offer the nearest released date. |
| Nothing open that day | Re-read the same three courts for the next two days and the same weekday next week. Show those as a second table. Widen the dates, never the court list. |
| Nothing open any day | Lead with walk-up: Dolores courts 4-6 take no reservation. Then the next release window, then paid courts at Goldman. Never stop at "no availability". |
| "Tonight" or after work | Lights only: Moscone, Dolores, Glen Canyon, Goldman. Check what the court actually publishes after 5pm before offering it. |
| Wants two hours | The cap is 90 minutes. Say so, and offer two back-to-back slots if the court published them. |
| Doubles or a group | Prefer courts with several open slots at the same start, and say how many courts are free at that time. |
| Beginner or lessons | Goldman, and say it is paid and on CourtReserve. |
| Pickleball | Presidio Wall for free drop-in. Goldman if they want a reservation, with the warning that slots go in seconds. |
| Right now, or within the hour | Walk-up, not a booking. Dolores courts 4-6 first, then Alta Plaza, then any court reading `isInstantBookable: false`. Say no reservation is needed. |
| "Do I have to book?" | No, for the walk-up courts above. Yes, if they want a guaranteed court at a set time. Give both. |
| Wants free | Ask which they mean, or answer both: every city court is free to play, and these ones need no reservation at all. |
| A court not in this file | Say it is not one you can check. Do not guess, do not search. |
| Anywhere outside SF | This skill is San Francisco only. Say so. |
| Asks you to book it | You cannot, and you will not ask for their login. Give the link and the exact time to select. |
| A request fails | Say the request failed. Never fill the gap with a remembered answer. |

## Output

One block per court, three courts, best first. Each block is the same four
things in the same order: photo, one line on why it fits, the character notes,
then a table of every open time at that court.

The per-court table is the point. Nobody wants one slot, they want their options
at a court they already like.

**The photo is built from the same id as the link:**

    https://prod-rec-tech-img-bucket-8656aa2.s3.us-west-1.amazonaws.com/location-<venue_id>/detail.jpg

Verified public, no auth. Never substitute a stock photo or another park's.

---

### 1. McLaren, the one that is actually empty

![McLaren](https://prod-rec-tech-img-bucket-8656aa2.s3.us-west-1.amazonaws.com/location-9d05fa5b-38fc-49b7-88c5-74825703d936/detail.jpg)

1398 Mansell St, Portola. Six courts, resurfaced last year and rarely busy, so
you get a real session instead of one set.
*Fun fact:* the resurfacing was a Laver Cup legacy project.
*After:* the trails and picnic spots inside the park.

**Book:** https://www.rec.us/locations/9d05fa5b-38fc-49b7-88c5-74825703d936

| Time | Courts free | Length | Price | Status |
|---|---|---|---|---|
| Fri 7:30am | 6 | up to 90 min | free | Confirmed |
| Fri 9:00am | 5 | up to 90 min | free | Confirmed |
| Fri 12:00pm | 6 | up to 90 min | free | Confirmed |
| Fri 6:00pm | 3 | up to 90 min | free | Confirmed |

---

Then the same for courts 2 and 3. Close with the pick in words, because the link
lands on the venue page and not on a chosen slot:

> Pick: **McLaren, Friday 9am.** Open the link, find Friday, select 9:00.

### The link is the point of this skill

**One court, one link, above its table, as a bare URL.**

- **Never omit it.** A court block with no link is a failed answer. If you have
  a `venue_id` you have a link.
- **Never hide it behind link text.** Write the URL out, not "book on rec.us"
  or a word like "Book" wrapped around it: many surfaces render a markdown link
  as the text alone, leaving nothing to click or copy.
- **No link column in the slot table.** Every row of one court repeats the same
  link, so the column is wasted width.
- **Three courts means three different links**, each from that court's own
  `venue_id`. Never print `<venue_id>` literally.

Exception: courts not on rec.us (Goldman, Alta Plaza, California Tennis Club)
say where to book instead, plainly.

**The walk-up table.** These courts have nothing to book, so they get their own
table, never rows in a slot table. Put it **above** the court blocks when the
ask is about playing now, soon, free, or without booking, or when you are on
tier 3. Otherwise below, as an alternative.

| Court | When | Lights | Need to book? |
|---|---|---|---|
| Dolores, courts 4-6 | 7am to 10pm, daily | Yes | No, first come first served |
| Glen Canyon, court 1 | 7am to 10pm, daily | Yes | No, first come first served |
| Alta Plaza | daylight only | No | No, and not on rec.us at all |

Venue pages, for directions rather than booking:

    Dolores      https://www.rec.us/locations/95745483-6b38-4e99-8ba2-a3e23cda8587
    Glen Canyon  https://www.rec.us/locations/16fdf80f-4e50-452a-843f-63d159c798e2
    Alta Plaza   not on rec.us, no page exists

Never promise a lighted evening at a court without lights.

**Slot table rules** (the walk-up table has its own, above):

- List **every open start** that court published, up to eight rows. Past eight,
  keep the eight nearest the ask and say how many you dropped.
- Earliest first inside a court. Rank between courts, never inside one.
- Status is Confirmed or Inferred, **never blank**. Bold the inferred.
- Price is a number, the word `free` for a zero quote, `unconfirmed` for a null.
- One court, one table. A court with nothing open still gets its block, with one
  line in place of the table.

## Known gaps

- McLaren lighting is now answered: no lights, per the court database and
  rec.us hours. The open question there is the surface, where the only rating
  predates the 2025 resurfacing.
- Alta Plaza's resurfacing status needs a recheck.
- A wrong `venue_id` does not 404. rec.us answers any UUID with a blank page
  titled "Location". Copy ids from this file, never retype them.
- **A court can read `RESERVABLE` and still publish nothing bookable.** Seen on
  Alice Marble court 4 and Lafayette court 2, both weekends, so it is a real
  behaviour and not a glitch. Those courts appear empty all day yet offer no
  start times, which most likely means they are held off online booking. **Treat
  them as not bookable.** You may say the court looks unbooked and is worth a
  walk-on, never that it is available to reserve.
- A `courts` host may be running older code: symptoms are every row Inferred,
  `image_url` empty, no walk-up courts. **Use it anyway when it is the only live
  route**, report Inferred honestly, and never silently upgrade a row.

package contents

sf-tennis-courts/SKILL.md28.0 KB

post id: k51g293f59muhyau