
Shoes for one kid
$15/month
A new pair of court shoes each season for a player who'd otherwise play in slides.
- One pair a season
- Fitted at Thursday shoe night
Sponsor
A season costs about $96,000 to run. Every dollar comes from neighbors, local businesses and one city youth grant. No family pays to play.

Monthly
Every level is monthly and you can stop any time. Businesses at the team level get their name on a banner at Cypress Gym.

$15/month
A new pair of court shoes each season for a player who'd otherwise play in slides.
Most chosen$40/month
Gas, insurance and the driver's stipend for one route, all season long.

$125/month
Jerseys, ref stipends and gym time for one team of ten, for a full season.
Westside Youth Hoops is a 501(c)(3) nonprofit. Tax receipts by email every January.
Where it goes
Fall 2026: fifteen weeks, four divisions, 412 players.
Fall 2026 budget
From the budget approved by the board in August 2026.
Read last year's report (PDF)Team sponsors
Most of our sponsors are businesses within six blocks of the gym. Their names hang over the court all season, and every kid knows them.
Ask about sponsoringFree cuts on picture day for any player who wants one.
Water and orange slices at every Saturday game.
Services both vans at cost and checks the tires every month.
Has sponsored the girls' division banner since its first season.
Brings twenty sports wheelchairs on the third Saturday of every month.
Rents us the court at cost and leaves the lights on late.
Design notes
A free youth league site built for the parent standing in a school pickup line with one hand free. The first thing it answers is where practice is tonight, and the second is how to get a kid onto a team.
Bebas Neue is set in caps with almost no tracking, the way gym banners and jersey backs are lettered, and it carries every heading and the giant footer wordmark. Body copy is Geologica, a plain geometric sans that holds up at small sizes on old phones. Times and figures use Overpass Mono, which comes from Highway Gothic road signs and gives the schedule the look of a scorer's book.
The green is the deep oak green of Oakland's city tree, and the orange is the pebbled leather of a game ball. The site opens dark, like a gym at seven o'clock under the lights, with a muted court green rather than a neon one. The light theme is tinted toward Bay fog instead of white so it doesn't glare at Saturday-morning games.
Six pages sit in a dock at the bottom of the screen, where a thumb already is. Most visits happen on a phone between work and practice, so every page is one tap away and the dock never scrolls away. On a laptop the dock stays put and the header carries only the logo and the sign-up button.
The home page opens on this week's schedule, day by day, with the next session counting down. The most common call to the office is "which gym is it tonight?", and this answers it before anything else. Sunday shows as a rest day because the gym really is closed.
The header button says "Sign up a player" because getting a kid onto a team is the whole point. The other actions are just as literal: "Coach a team", "Save a seat on the van", "Sponsor a team". Nothing asks a family for money; the sponsor page is written for neighbors and businesses.
Photos are of kids actually playing, mostly on outdoor courts, and the captions say so: they are labeled as summer league on the 10th Street court instead of pretending to be the winter gym. Adults appear only where they are coaching or volunteering. There are no crowd shots, because a Minis game draws about forty people.
Body text is 17px and every color pair passes WCAG AA in both themes. Dock buttons have full-height tap targets with text labels under each icon. Copy is written at about a sixth-grade reading level for parents reading in a second language, and the gym list notes step-free entrances and Wheels Night.
Every text pairing is checked against WCAG 2.2 in both themes.
| Pairing | Sample | Ratio | WCAG |
|---|---|---|---|
| Body text on page | Aa | 15.88:1 | AAA |
| Body text on cards | Aa | 14.39:1 | AAA |
| Secondary text | Aa | 6.98:1 | AA |
| Links | Aa | 9.26:1 | AAA |
| Button text | Aa | 9.36:1 | AAA |
| Accent label text | Aa | 7.63:1 | AAA |
| Text on dark bands | Aa | 16.74:1 | AAA |
| Muted text on dark bands | Aa | 8.34:1 | AAA |
| Text on brand bands | Aa | 9.36:1 | AAA |
| Muted text on brand bands | Aa | 5.65:1 | AA |
| Pairing | Sample | Ratio | WCAG |
|---|---|---|---|
| Body text on page | Aa | 15.32:1 | AAA |
| Body text on cards | Aa | 16.94:1 | AAA |
| Secondary text | Aa | 5.76:1 | AA |
| Links | Aa | 6.43:1 | AA |
| Button text | Aa | 7.47:1 | AAA |
| Accent label text | Aa | 5.07:1 | AA |
| Text on dark bands | Aa | 15.32:1 | AAA |
| Muted text on dark bands | Aa | 7.97:1 | AAA |
| Text on brand bands | Aa | 7.47:1 | AAA |
| Muted text on brand bands | Aa | 4.99:1 | AA |
Designed by Greater Purpose Web. Names, people and events are sample content.