https://github.com/ignaciohermosillacornejo/skiparker
CLI for automated ski resort parking reservations on HONK-powered sites
https://github.com/ignaciohermosillacornejo/skiparker
automation cli parking playwright ski typescript
Last synced: 3 months ago
JSON representation
CLI for automated ski resort parking reservations on HONK-powered sites
- Host: GitHub
- URL: https://github.com/ignaciohermosillacornejo/skiparker
- Owner: ignaciohermosillacornejo
- License: mit
- Created: 2026-01-30T08:10:21.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-01-31T07:45:17.000Z (4 months ago)
- Last Synced: 2026-01-31T13:30:57.747Z (4 months ago)
- Topics: automation, cli, parking, playwright, ski, typescript
- Language: TypeScript
- Size: 2.13 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# ski-parker
[](https://www.npmjs.com/package/ski-parker)
[](https://github.com/ignaciohermosillacornejo/skiparker/actions/workflows/ci.yml)
[](https://codecov.io/gh/ignaciohermosillacornejo/skiparker)

> **Beta Software**: This tool is under active development. Please report any issues using `ski-parker bug` or by [opening an issue](https://github.com/ignaciohermosillacornejo/skiparker/issues/new).
Automated CLI for booking ski resort parking on [HONK](https://parking.honkmobile.com/)-powered sites.
HONK is the parking reservation platform used by many ski resorts across North America. This tool automates the process of checking availability, watching for openings, and booking spots.
## Supported Resorts
Validated against all 13 HONK Reserve 'N Ski portals:
| Resort | Location | URL | Type |
|--------|----------|-----|------|
| Stevens Pass | WA | reservenski.parkstevenspass.com | Single-lot |
| Northstar | CA | reservenski.parknorthstar.com | Multi-lot |
| Heavenly | CA/NV | reservenski.parkheavenly.com | Single-lot |
| Kirkwood | CA | reservenski.parkkirkwood.com | Single-lot |
| Palisades Tahoe | CA | reservenski.parkpalisadestahoe.com | Multi-lot |
| Breckenridge | CO | reservenski.breckpark.com | Multi-lot |
| A-Basin | CO | reservenski.parkabasin.com | Multi-lot |
| Park City Surface | UT | reserve.parkatparkcitymountain.com | Single-lot |
| Park City Garage | UT | reserve-garage.parkatparkcitymountain.com | Single-lot |
| Solitude | UT | reservenski.parksolitude.com | Single-lot |
| Brighton | UT | reservenski.parkbrightonresort.com | Single-lot |
| Alta | UT | reserve.altaparking.com | Single-lot |
| Whistler Blackcomb | BC | reservenski.whistlerblackcombparking.com | Multi-lot |
See [docs/honk-resorts-research.md](docs/honk-resorts-research.md) for detailed resort information including pricing, carpool rules, and edge cases.
## Installation
```bash
# Run directly with npx (no install needed)
npx ski-parker
# Or install globally
npm install -g ski-parker
```
## Quick Start
```bash
# 1. Configure your resort and preferences
ski-parker setup
# 2. Authenticate (one-time setup)
ski-parker auth
# 3. Check availability
ski-parker check --date 2026-02-15
# 4. Watch for availability
ski-parker watch --date 2026-02-15 --type paid
# 5. Book immediately
ski-parker book --date 2026-02-15 --type paid --plate ABC1234
```
## Commands
### `ski-parker setup`
Interactive configuration for your resort URL, default plate, and reservation type.
### `ski-parker auth`
Opens a browser window for manual login to HONK. Saves session for future use.
### `ski-parker check`
Check availability for a specific date.
```bash
ski-parker check --date 2026-02-15 [--lot "Zone A"] [--headed] [--verbose]
```
### `ski-parker watch`
Poll for availability until a spot opens.
```bash
ski-parker watch --date 2026-02-15 --type paid \
[--lot "Zone A"] \
[--interval 60] [--jitter 20] \
[--auto-book --plate ABC1234] \
[--no-notify] [--no-sound] \
[--headed] [--dry-run] [--verbose]
```
### `ski-parker book`
Book a spot immediately if available.
```bash
ski-parker book --date 2026-02-15 --type paid --plate ABC1234 \
[--lot "Zone A"] \
[--headed] [--dry-run] [--verbose]
```
### `ski-parker bug`
Open a pre-filled GitHub issue to report a bug.
```bash
ski-parker bug # Opens browser with issue form
ski-parker bug --no-open # Prints URL instead
```
## Options
| Option | Description |
|--------|-------------|
| `-d, --date ` | Date to check/book (YYYY-MM-DD) |
| `-t, --type ` | Reservation type: `paid` or `carpool` |
| `-l, --lot ` | Lot preference(s) for multi-lot resorts |
| `-p, --plate ` | License plate number |
| `-i, --interval ` | Poll interval in seconds (default: 60) |
| `-j, --jitter ` | Random jitter added to interval (default: 20) |
| `--auto-book` | Automatically book when available |
| `--headed` | Show browser window |
| `--dry-run` | Stop before final confirmation |
| `-v, --verbose` | Enable verbose logging |
## Multi-Lot Resorts
Some resorts (like Whistler) have multiple parking zones. Use `--lot` to specify your preference:
```bash
ski-parker book --date 2026-02-15 --type paid --plate ABC1234 --lot "CREEKSIDE" "UPPER LOTS"
```
The tool will try lots in order until one has availability.
## Configuration
Config file: `~/.ski-parker/config.json`
```json
{
"resortUrl": "https://parking.honkmobile.com/zones/stevens-pass",
"defaultPlate": "ABC1234",
"defaultType": "paid",
"lotPreferences": ["CREEKSIDE", "UPPER LOTS"],
"pollInterval": 60,
"jitter": 20
}
```
## Troubleshooting
### Session expired
Run `ski-parker auth` again to re-authenticate.
### Selectors not working
The HONK site may have changed. Update selectors in `src/lib/scraper.ts`.
### Lot not found
Run `ski-parker setup` to discover available lots for your resort.
## Reporting Issues
Found a bug or have a feature request?
```bash
# Easiest way - opens browser with system info pre-filled
ski-parker bug
```
Or [open an issue](https://github.com/ignaciohermosillacornejo/skiparker/issues/new) directly on GitHub.
## Development
### Testing
```bash
# Unit tests (91%+ coverage)
npm test
# E2E tests with mock HONK server
npm run test:e2e
# Validate selectors against all real HONK sites
npx tsx scripts/validate-selectors.ts
```
### Project Structure
```
src/
lib/
selectors.ts # Pure selector functions (unit tested)
scraper.ts # Browser automation (e2e tested)
config.ts # Configuration management
utils.ts # Utility functions
tests/
lib/ # Unit tests
e2e/ # End-to-end tests
mock-server/ # Mock HONK server for e2e
scripts/
validate-selectors.ts # Test selectors against real sites
```