Media
vehicle-tracker
Track vehicle expenses (gas, maintenance, parts) in Google
---
name: vehicle-tracker
description: Track vehicle expenses (gas, maintenance, parts) in Google Sheets and save related photos. Handles mileage, cost, category, and photo organization.
---
# Vehicle Expense Tracker
A multi-language vehicle expense tracking tool that supports Google Sheets and local Excel files.
## Features
- **i18n Support**: Multiple languages via locale files (`locales/*.json`)
- **Google Sheets Integration**: Write directly to Google Sheets via API
- **Local Excel Fallback**: Saves to local `.xlsx` files if no Spreadsheet ID configured
- **Metric/Imperial Units**: Configurable unit system (km/L vs mi/gal)
- **Photo Management**: Auto-saves and renames photos with timestamps
- **Aliases**: Support vehicle aliases (e.g., "my car" → "Toyota Camry 2020")
- **Defaults**: Auto-fill quantity and unit based on category
---
## 🚀 Initialization (First-Time Setup)
### Step 1: Choose Your Locale
Available locales:
- `zh-TW` - 繁體中文 (Taiwan)
- `en-US` - English (US)
- `ja-JP` - 日本語
### Step 2: Create config.json
Copy the template below and save as `skills/vehicle-tracker/config.json`:
```json
{
"locale": "en-US",
"unit_system": "metric",
"vehicles": {},
"aliases": {},
"default_vehicle": null,
"category_defaults": {}
}
```
### Step 3: Copy Category Defaults from Locale
Based on your chosen locale and unit system, copy the appropriate category defaults.
**For English (metric):**
```json
{
"category_defaults": {
"Gas": { "unit": "liter" },
"Accessory": { "unit": "pc", "quantity": 1 },
"Repair": { "unit": "job", "quantity": 1 },
"Maintenance": { "unit": "service", "quantity": 1 },
"Purchase": { "unit": "unit", "quantity": 1 }
}
}
```
**For English (imperial):**
```json
{
"category_defaults": {
"Gas": { "unit": "gallon" },
"Accessory": { "unit": "pc", "quantity": 1 },
"Repair": { "unit": "job", "quantity": 1 },
"Maintenance": { "unit": "service", "quantity": 1 },
"Purchase": { "unit": "unit", "quantity": 1 }
}
}
```
**For 繁體中文 (metric):**
```json
{
"category_defaults": {
"加油": { "unit": "公升" },
"周邊": { "unit": "個", "quantity": 1 },
"維修": { "unit": "件", "quantity": 1 },
"保養": { "unit": "次", "quantity": 1 },
"買車": { "unit": "輛", "quantity": 1 }
}
}
```
**For 日本語 (metric):**
```json
{
"category_defaults": {
"給油": { "unit": "リットル" },
"アクセサリー": { "unit": "個", "quantity": 1 },
"修理": { "unit": "件", "quantity": 1 },
"メンテナンス": { "unit": "回", "quantity": 1 },
"購入": { "unit": "台", "quantity": 1 }
}
}
```
### Step 4: Add Your Vehicle
**Option A: Google Sheets (recommended for cloud sync)**
1. Create a Google Spreadsheet
2. Share it with a Google Service Account (see `google-workspace` skill)
3. Add the Spreadsheet ID to config:
```json
{
"vehicles": {
"My Car 2020": "1ABC123...xyz"
},
"default_vehicle": "My Car 2020"
}
```
**Option B: Local Excel (no setup required)**
Just add the vehicle name without an ID:
```json
{
"vehicles": {
"My Car 2020": null
},
"default_vehicle": "My Car 2020"
}
```
Files will be saved to `~/vehicle_tracker/My_Car_2020.xlsx`.
### Step 5: Add Aliases (Optional)
```json
{
"aliases": {
"car": "My Car 2020",
"toyota": "My Car 2020"
}
}
```
### Step 6: Custom Paths (Optional)
Override default directories:
```json
{
"photo_base_dir": "/path/to/photos",
"local_excel_dir": "/path/to/excel/files",
"sheet_name": "Expenses"
}
```
Default paths: `~/vehicle_tracker`
---
## Complete config.json Example
```json
{
"locale": "en-US",
"unit_system": "imperial",
"vehicles": {
"Toyota Camry 2020": "1ABC123...spreadsheet_id",
"Honda Civic 2018": null
},
"aliases": {
"camry": "Toyota Camry 2020",
"civic": "Honda Civic 2018",
"car": "Toyota Camry 2020"
},
"default_vehicle": "Toyota Camry 2020",
"category_defaults": {
"Gas": { "unit": "gallon" },
"Accessory": { "unit": "pc", "quantity": 1 },
"Repair": { "unit": "job", "quantity": 1 },
"Maintenance": { "unit": "service", "quantity": 1 },
"Purchase": { "unit": "unit", "quantity": 1 }
},
"photo_base_dir": "~/vehicle_tracker",
"local_excel_dir": "~/vehicle_tracker"
}
```
---
## Usage
### Preview (Dry Run) - Always do this first!
```bash
python3 skills/vehicle-tracker/tracker.py \
--vehicle "camry" \
--mileage 15000 \
--category "Gas" \
--cost 45.50 \
--quantity 12.5 \
--dry-run
```
### Execute (After user confirms)
```bash
python3 skills/vehicle-tracker/tracker.py \
--vehicle "camry" \
--mileage 15000 \
--category "Gas" \
--cost 45.50 \
--quantity 12.5
```
### With Photos
```bash
python3 skills/vehicle-tracker/tracker.py \
--vehicle "camry" \
--mileage 15200 \
--category "Maintenance" \
--cost 89.99 \
--description "Oil change" \
--photos "/path/to/receipt.jpg" \
--dry-run
```
---
## Arguments
| Argument | Required | Description |
|----------|----------|-------------|
| `--vehicle` | Optional | Vehicle name or alias. Uses default if omitted. |
| `--mileage` | Required | Current odometer reading |
| `--category` | Required | Expense category |
| `--cost` | Required | Expense amount (currency symbols auto-removed) |
| `--quantity` | Optional | Quantity (uses default if available) |
| `--unit` | Optional | Unit (uses category mapping if available) |
| `--date` | Optional | Date YYYY-MM-DD (defaults to today) |
| `--description` | Optional | Additional notes |
| `--photos` | Optional | Photo file paths to save |
| `--dry-run` | Flag | Preview only, no write |
---
## Adding a New Locale
Create `locales/{code}.json` based on existing locale files. Required fields:
- `language_name`
- `sheet_name`
- `columns_metric` / `columns_imperial`
- `photo_prefix`
- `messages`
- `units_metric` / `units_imperial`
- `default_units_metric` / `default_units_imperial`
---
## Supported Locales
| Code | Language | Unit Systems |
|------|----------|--------------|
| `zh-TW` | 繁體中文 | metric, imperial |
| `en-US` | English (US) | metric, imperial |
| `ja-JP` | 日本語 | metric, imperial |
media
By
Comments
Sign in to leave a comment