# Gerrit User Summit at GerritForge Inc. 2023 - Location

## USA - Hosted by GerritForge Inc.

The User Summit is hosted by GerritForge at [The Satellite - Sunnyvale](https://goo.gl/maps/no8vCBpqi61pv2jx5).

See below the full address of the location:

```
100 S Murphy Ave Suite 200
Sunnyvale, CA 94086
USA
```

## How to reach GerritForge from the San Jose Airport

__By Taxi__

[Uber](http://www.uber.com) and [Lyft](http://www.lyft.com) are the most popular ways of moving
around in the Silicon Valley. Use them if you are concerned about not finding parking space in Sunnyvale.

__By Car__

The travelling time from the San Jose Airport to downtown Sunnyvale is typically around 20 mins. However,
traffic conditions change rapidily in the Silicon Valley and the best route changes consequently.

Under normal conditions (very early morning, late evening and week-ends), the best route is:
- Get on CA-87 N from Airport Blvd
- Take US-101 N to N Mathilda Ave in Sunnyvale. Take the exit for Mathilda Avenue S from US-101 N
- Continue on N Mathilda Ave. Drive to S Murphy Ave

## Parking

There are several options for parking in the area. See the map below.

Please note that on Saturday morning, a farmer’s market runs in Murphy Avenue, therefore this street is closed
for cars and the area can get busy with pedestrians.

![USA venue parking](images/sunnyvale-parking.jpg)

## Hotels and Places to Stay

GerritForge has agreed a discounted rate for the *TBC*

Staying in the same Hotel helps __to reduce the overall carbon footprint__ of the event by leveraging Carpooling
and saving costs on the transfer via Taxi or Shuttle.
Also, allows continuing the __networking of the event with the other participants__ to the Hackathon and Summit.
Most of the Gerrit maintainers and contributors will stay at the same Hotel, so you would have more chances
to have interesting conversations.

## Facility Resources

__Food and Drink__

Lunch will be provided at The Satellite location during the Summit.
Water and coffee will be available on-site also.

__Internet__

Wifi will be available to all attendees.

## Check-in Instructions

When you arrive at 100 S Murphy Avenue, please enter through the
[east entrance](https://goo.gl/maps/dcWVSNoytvBvTLpv8) between E Evelyn Ave and S Sunnyvale Ave
which faces the parking lot. Once entered into the building, go to the 2nd floor (for americans)
or 1st floor above ground (for europeans).

You will then find the signs of the Gerrit User Summit and GerritForge Inc. outside the door and the
welcome desk of the event.

You will receive at check-in:

- The Gerrit User Summit conference badge
- The Gerrit 15 years celebration T-Shirt
- Stickers to remember about the event and on Gerrit Code Review