← back to Watches

OMEGA_WATCHES_SYSTEM.md

351 lines

# ⌚ Omega Watch Price History System

A comprehensive web application for tracking and visualizing historical price data for Omega watches throughout history.

## 🌐 Live Access

- **Dashboard**: http://45.61.58.125:7600
- **API**: http://45.61.58.125:7600/api
- **Port**: 7600

## 🎯 Features

### Interactive Dashboard
- Real-time statistics and metrics
- Top performing watches analysis
- Watch collection breakdowns
- Comprehensive price appreciation tracking

### Watch Catalog
- Browse all Omega watch models
- Filter by series (Speedmaster, Seamaster, Constellation, De Ville)
- Search by model name or reference number
- Detailed specifications for each model

### Price History Charts
- Interactive line charts powered by Chart.js
- Historical price data from introduction year to present
- Year-over-year price change analysis
- Detailed price history tables

### Comparison Tool
- Compare up to 5 watches simultaneously
- Side-by-side price performance analysis
- Multi-watch chart overlay
- Appreciation rankings

## 📊 Watch Collections Included

### Speedmaster
- Speedmaster Professional Moonwatch (1969)
- Speedmaster Racing (2008)
- Speedmaster Dark Side of the Moon (2013)

### Seamaster
- Seamaster 300 (1957)
- Seamaster Diver 300M (1993) - James Bond Edition
- Seamaster Planet Ocean (2005)
- Seamaster Aqua Terra (2002)

### Constellation
- Constellation (1952)
- Constellation Manhattan (2009)

### De Ville
- De Ville (1967)

## 🏗️ Architecture

### Frontend
- **Framework**: React 19
- **Build Tool**: Vite
- **Styling**: Tailwind CSS 4
- **Charts**: Chart.js + react-chartjs-2
- **Components**: Modular React components

### Backend
- **Server**: Express.js (Node.js)
- **API**: RESTful JSON API
- **Data Storage**: JSON file database
- **Port**: 7600

### File Structure
```
/root/Projects/watches/
├── server.js                 # Express backend server
├── package.json              # Dependencies
├── vite.config.js            # Vite configuration
├── tailwind.config.js        # Tailwind CSS config
├── postcss.config.js         # PostCSS config
├── index.html                # HTML entry point
├── data/
│   └── watches.json          # Watch database
├── src/
│   ├── main.jsx              # React entry point
│   ├── App.jsx               # Main App component
│   ├── index.css             # Global styles
│   └── components/
│       ├── Header.jsx        # Navigation header
│       ├── Dashboard.jsx     # Statistics dashboard
│       ├── WatchList.jsx     # Watch catalog grid
│       ├── PriceChart.jsx    # Individual watch charts
│       └── ComparisonView.jsx # Multi-watch comparison
└── dist/                     # Production build output
```

## 🚀 API Endpoints

### GET /api/watches
Returns array of all watches with basic information.

**Response**:
```json
[
  {
    "id": "speedmaster-moonwatch-1969",
    "model": "Speedmaster Professional Moonwatch",
    "series": "Speedmaster",
    "reference": "ST 105.012",
    "yearIntroduced": 1969,
    "description": "...",
    "priceHistory": [...]
  }
]
```

### GET /api/watches/:id/history
Returns detailed price history for a specific watch.

**Parameters**:
- `id`: Watch ID (e.g., "speedmaster-moonwatch-1969")

### GET /api/statistics
Returns system-wide statistics.

**Response**:
```json
{
  "totalWatches": 10,
  "totalSeries": 4,
  "averageAppreciation": "1389.86",
  "topPerformers": [...],
  "lastUpdated": "2024-..."
}
```

### POST /api/compare
Compare multiple watches.

**Request Body**:
```json
{
  "watchIds": ["speedmaster-moonwatch-1969", "seamaster-300-1957"]
}
```

## 💾 Data Structure

### Watch Object
```json
{
  "id": "unique-watch-id",
  "model": "Watch Model Name",
  "series": "Collection Name",
  "reference": "Reference Number",
  "yearIntroduced": 1969,
  "description": "Watch description",
  "priceHistory": [
    {
      "year": 1969,
      "price": 275,
      "condition": "new"
    }
  ]
}
```

## 🛠️ Adding New Watches

To add a new watch model to the system:

1. Edit `/root/Projects/watches/data/watches.json`
2. Add a new watch object to the `watches` array
3. Include complete price history data
4. Restart the server: `pm2 restart omega-watches`

### Example:
```json
{
  "id": "new-watch-model",
  "model": "New Model Name",
  "series": "Speedmaster",
  "reference": "REF-123",
  "yearIntroduced": 2024,
  "description": "Model description",
  "priceHistory": [
    { "year": 2024, "price": 8000, "condition": "new" }
  ]
}
```

## 📈 Price Data Updates

Historical price data is based on:
- Original retail prices (when available)
- Market values from auction results
- Price guides and watch databases
- Dealer pricing archives

**Note**: Prices are in USD and represent approximate market values. Data is for educational and historical reference purposes.

## 🔧 Development

### Install Dependencies
```bash
cd /root/Projects/watches
npm install
```

### Build Frontend
```bash
npm run build
```

### Start Development Server
```bash
npm run dev  # Vite dev server on port 5173
```

### Start Production Server
```bash
npm start    # Express server on port 7600
```

### PM2 Management
```bash
pm2 start server.js --name omega-watches
pm2 restart omega-watches
pm2 logs omega-watches
pm2 stop omega-watches
```

## 🎨 Customization

### Colors (Tailwind Config)
```javascript
colors: {
  omega: {
    red: '#C8102E',      // Omega brand red
    gold: '#FFD700',     // Gold accents
    navy: '#1A1A2E',     // Dark navy
    silver: '#C0C0C0'    // Silver accents
  }
}
```

### Adding New Features

1. **New Chart Types**: Modify `PriceChart.jsx` to add bar charts, area charts, etc.
2. **Filters**: Extend `WatchList.jsx` with year range, price range filters
3. **Export**: Add CSV/PDF export functionality
4. **User Accounts**: Integrate authentication for saved favorites
5. **Price Alerts**: Add notification system for price changes

## 🚀 Deployment

The system is currently deployed and running via PM2:

- **Process Name**: omega-watches
- **Status**: ✅ Online
- **Port**: 7600
- **Firewall**: Port 7600 open (TCP)
- **Auto-restart**: Enabled

### Verification
```bash
# Check server status
pm2 status omega-watches

# Test API
curl http://localhost:7600/api/watches

# Test external access
curl http://45.61.58.125:7600/api/statistics
```

## 📝 Future Enhancements

### Planned Features
- [ ] Real-time price tracking via watch market APIs
- [ ] User authentication and favorites
- [ ] Price prediction using historical trends
- [ ] Export charts as images/PDFs
- [ ] Mobile app version
- [ ] Email alerts for price changes
- [ ] Integration with auction house data
- [ ] Community price submissions
- [ ] Compare with other luxury watch brands
- [ ] Investment calculator (ROI analysis)

### Data Expansion
- [ ] Add vintage Omega models (pre-1950s)
- [ ] Limited edition watches
- [ ] Olympic Games editions
- [ ] Vintage condition pricing
- [ ] Regional price variations
- [ ] Secondary market data

## 🤝 Contributing

To contribute new watch data or features:

1. Add watch data to `data/watches.json`
2. Test locally
3. Rebuild frontend: `npm run build`
4. Restart server: `pm2 restart omega-watches`

## 📄 License

MIT License - Educational and historical reference purposes

## 🔗 Related Links

- Omega Official Website: https://www.omegawatches.com
- Watch Price Databases: Various auction and dealer sites
- Horological Resources: Watch collecting communities

---

## ⚙️ Technical Details

### Dependencies
```json
{
  "express": "^4.21.2",
  "cors": "^2.8.5",
  "react": "^19.2.0",
  "react-dom": "^19.2.0",
  "chart.js": "^4.5.1",
  "react-chartjs-2": "^5.3.1",
  "tailwindcss": "^4.1.17",
  "vite": "^7.2.2"
}
```

### Browser Support
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)

### Performance
- Frontend bundle size: ~420KB (gzipped: ~137KB)
- API response time: <50ms
- Page load time: <2s

---

**Built with ❤️ for watch enthusiasts and collectors**

Server: http://45.61.58.125:7600