Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1d43dc2
Add staging environment support to data pipeline
jacksonlester Oct 8, 2025
b49bae7
Merge pull request #3 from jacksonlester/staging
jacksonlester Oct 8, 2025
a61f57d
adding Chandler Flex service to the map
jacksonlester Oct 11, 2025
8bc9436
Merge pull request #4 from jacksonlester/add-chandler-flex
jacksonlester Oct 11, 2025
a07c8d0
Remove Chandler Flex test service
jacksonlester Oct 14, 2025
80e70a9
Clarify README for external contributors vs maintainers
jacksonlester Oct 14, 2025
3b35a81
Remove temp files
jacksonlester Oct 14, 2025
9c1d1be
Update coverage timeline and companies
jacksonlester Oct 14, 2025
233a887
Add temp files to gitignore
jacksonlester Oct 14, 2025
50a5934
Update contributing workflow to fork from main instead of staging
jacksonlester Oct 14, 2025
19d9436
Add flexibility field to distinguish point-to-point vs stop-to-stop s…
jacksonlester Oct 15, 2025
2221d0a
Add CSV import script to sync events.csv to Supabase database
jacksonlester Oct 15, 2025
942184a
Fix field naming: transform snake_case to camelCase in cache
jacksonlester Oct 15, 2025
dd65545
Fix CSV column alignment for update events
jacksonlester Oct 15, 2025
2d2369b
Add CSV import step to rebuild cache workflow
jacksonlester Oct 15, 2025
a783f8a
Add automatic area calculation from GeoJSON geometries
jacksonlester Oct 15, 2025
4064794
adding cruise service areas
jacksonlester Oct 15, 2025
873afa7
updated language around flexibility
jacksonlester Oct 15, 2025
15653f3
updating flexibility to service model
jacksonlester Oct 15, 2025
cc2d6b8
Add service links to CSV data
jacksonlester Oct 16, 2025
481663d
Add Cruise and May Mobility services
jacksonlester Oct 16, 2025
12832cf
Add scripts for uploading and syncing geometry files
jacksonlester Oct 16, 2025
9ba430c
Add GitHub Actions workflow for automatic cache updates
jacksonlester Oct 16, 2025
a8628ae
Fix geometry field names to camelCase in cache
jacksonlester Oct 16, 2025
ebbe1df
Add platform for Grand Rapids MI initial service
jacksonlester Oct 16, 2025
a76ff1d
adding new geometries to the map!
jacksonlester Oct 16, 2025
cb954e3
Merge branch 'main' into staging
jacksonlester Oct 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/rebuild-cache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@ jobs:
- name: Install dependencies
run: npm install

- name: Import CSV to database
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}
STAGING: ${{ steps.env.outputs.STAGING }}
run: |
echo "Importing events.csv to ${{ steps.env.outputs.ENV_NAME }} database..."
node import-csv.js

- name: Rebuild cache
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
Expand Down
107 changes: 107 additions & 0 deletions .github/workflows/update-cache.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: Update Data Cache

on:
push:
branches:
- main
- staging
paths:
- 'events.csv'
- 'geometries/**'

workflow_dispatch:
inputs:
environment:
description: 'Environment to update'
required: true
default: 'staging'
type: choice
options:
- staging
- production

jobs:
update-cache:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Determine environment
id: env
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "environment=${{ github.event.inputs.environment }}" >> $GITHUB_OUTPUT
elif [ "${{ github.ref }}" = "refs/heads/main" ]; then
echo "environment=production" >> $GITHUB_OUTPUT
else
echo "environment=staging" >> $GITHUB_OUTPUT
fi

- name: Import CSV to database
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}
STAGING: ${{ steps.env.outputs.environment == 'staging' }}
GITHUB_ACTIONS: true
run: |
if [ "${{ steps.env.outputs.environment }}" = "staging" ]; then
STAGING=true node import-csv.js
else
node import-csv.js
fi

- name: Upload geometry files to storage
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}
STAGING: ${{ steps.env.outputs.environment == 'staging' }}
GITHUB_ACTIONS: true
run: |
if [ "${{ steps.env.outputs.environment }}" = "staging" ]; then
STAGING=true node upload-geometries.js
else
node upload-geometries.js
fi

- name: Sync geometries table with storage
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}
STAGING: ${{ steps.env.outputs.environment == 'staging' }}
GITHUB_ACTIONS: true
run: |
if [ "${{ steps.env.outputs.environment }}" = "staging" ]; then
STAGING=true node sync-geometries-table.js
else
node sync-geometries-table.js
fi

- name: Rebuild cache
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}
STAGING: ${{ steps.env.outputs.environment == 'staging' }}
GITHUB_ACTIONS: true
run: |
if [ "${{ steps.env.outputs.environment }}" = "staging" ]; then
STAGING=true node rebuild-cache.js
else
node rebuild-cache.js
fi

- name: Summary
run: |
echo "✅ Cache updated successfully for ${{ steps.env.outputs.environment }}"
echo "Branch: ${{ github.ref_name }}"
echo "Commit: ${{ github.sha }}"
16 changes: 13 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Each row in `events.csv` represents one change to a service. Service creation ev

## CSV structure

14 columns capture service attributes:
15 columns capture service attributes:

| Column | Description | Example | Required? |
| ---------------- | -------------------------- | -------------------------------------------- | ------------- |
Expand All @@ -32,6 +32,7 @@ Each row in `events.csv` represents one change to a service. Service creation ev
| `platform` | Booking app | `Robotaxi` | If applicable |
| `fares` | Charges fares? | `Yes` / `No` | If applicable |
| `direct_booking` | Can book AV directly? | `Yes` / `No` | If applicable |
| `service_model` | Service model | `Flexible` / `Stop-to-Stop` | If applicable |
| `supervision` | Supervision level | `Autonomous` / `Safety Driver` | If applicable |
| `access` | Access policy | `Public` / `Waitlist` | If applicable |
| `fleet_partner` | Fleet partnerships | `Moove` | If applicable |
Expand All @@ -43,10 +44,10 @@ Each row in `events.csv` represents one change to a service. Service creation ev
For `service_created` events, fill in all service attributes:

```csv
2025-09-10,service_created,Zoox,Las Vegas,zoox-las-vegas-september-10-2025-boundary.geojson,Zoox Robotaxi,Zoox,No,Yes,Autonomous,Public,,https://techcrunch.com/2025/09/10/zoox-opens-its-las-vegas-robotaxi-service-to-the-public/,Zoox Las Vegas service
2025-09-10,service_created,Zoox,Las Vegas,zoox-las-vegas-september-10-2025-boundary.geojson,Zoox Robotaxi,Zoox,No,Yes,Stop-to-Stop,Autonomous,Public,,https://techcrunch.com/2025/09/10/zoox-opens-its-las-vegas-robotaxi-service-to-the-public/,Zoox Las Vegas service
```

Required: `date`, `event_type`, `company`, `city`, `vehicles`, `platform`, `fares`, `direct_booking`, `supervision`, `access`, `source_url`
Required: `date`, `event_type`, `company`, `city`, `vehicles`, `platform`, `fares`, `direct_booking`, `service_model`, `supervision`, `access`, `source_url`

## Updating a service

Expand Down Expand Up @@ -80,6 +81,12 @@ Note: Multiple platforms separated by `;` (semicolon). This allows filtering by
2024-11-12,access_policy_changed,Waymo,Los Angeles,,,,,,,Public,,https://waymo.com/blog/2024/11/waymo-one-open-to-all-in-los-angeles,Access policy update
```

### Service model change

```csv
2026-03-15,service_model_updated,Zoox,Las Vegas,,,,,,,Flexible,,,https://example.com,Service now allows flexible travel
```

## Event types

**Service lifecycle:**
Expand All @@ -95,6 +102,7 @@ Note: Multiple platforms separated by `;` (semicolon). This allows filtering by
- `fares_policy_changed` - Fare policy changes
- `access_policy_changed` - Access changes
- `supervision_updated` - Supervision level changes
- `flexibility_updated` - Travel flexibility changes
- `fleet_partner_changed` - Fleet partnership changes

## Field values
Expand All @@ -113,6 +121,8 @@ Add new values when documenting companies, vehicles, platforms, or policies not

**Direct Booking:** `Yes` (book AV directly), `No` (may or may not get AV, like Waymo on UberX)

**Flexibility:** `Point-to-Point` (riders can travel freely between any points in the service area), `Stop-to-Stop` (riders can only travel to/from predetermined stops)

**Supervision:** `Autonomous`, `Safety Driver`, `Safety Attendant`

**Access:** `Public`, `Waitlist`
Expand Down
Loading
Loading