# Heygo iOS App (黑狗)

A comprehensive iOS link management application that replicates the functionality of the Django-based link management system. Built with SwiftUI, Core Data, and modern iOS development practices.

## Features

### Core Link Management
- ✅ Create, edit, and delete links with unique aliases
- ✅ Support for regular links, custom markdown content, and template URLs
- ✅ URL template processing with parameter placeholders (`{param,default=value}`)
- ✅ Real-time alias validation and duplicate prevention
- ✅ Click tracking and analytics

### Advanced Features
- ✅ Tag-based organization with auto-completion
- ✅ Powerful search with fuzzy matching
- ✅ Comprehensive analytics with charts
- ✅ Markdown rendering for custom content
- ✅ Multi-language support (English and Chinese)
- ✅ Dark mode support
- ✅ Accessibility features

### Analytics & Insights
- ✅ Click tracking with timestamps
- ✅ Visual charts showing usage trends
- ✅ Top performing links analysis
- ✅ Link type distribution
- ✅ Time-based filtering (1 week to all time)
- ✅ Export capabilities

### User Experience
- ✅ Clean, modern SwiftUI interface
- ✅ Intuitive navigation with tab-based structure
- ✅ Pull-to-refresh functionality
- ✅ Swipe actions for quick operations
- ✅ Real-time search and filtering
- ✅ Template parameter input dialogs

## Architecture

### Design Pattern
- **MVVM** (Model-View-ViewModel) with Combine framework
- **Core Data** for persistent storage
- **SwiftUI** for modern, declarative UI

### Key Components

#### Models
- `Link` - Core link entity with alias, URL, type, and metadata
- `Tag` - Categorization system with many-to-many relationship
- `ClickLog` - Track individual clicks with timestamps
- `ChangeLog` - Audit trail for link modifications

#### ViewModels
- `LinkViewModel` - Manages link CRUD operations and business logic
- `TagManager` - Handles tag creation, search, and suggestions

#### Views
- `LinkListView` - Main interface showing all links with search/filter
- `LinkFormView` - Create/edit links with validation
- `LinkDetailView` - Comprehensive link information and analytics
- `SearchView` - Advanced search with filters and suggestions
- `AnalyticsView` - Charts and insights dashboard

#### Utilities
- `URLTemplateProcessor` - Parse and process template URLs
- `MarkdownRenderer` - Render markdown content to AttributedString
- `AnalyticsCalculator` - Generate chart data and statistics
- `PersistenceController` - Core Data stack management

## Technology Stack

### Frameworks & Libraries
- **SwiftUI** - Modern declarative UI framework
- **Core Data** - Local data persistence
- **Charts** - Native charting framework (iOS 16+)
- **Combine** - Reactive programming framework
- **Foundation** - Core system services

### iOS Features Used
- **Universal App** - Supports iPhone and iPad
- **Internationalization** - English and Chinese localization
- **Accessibility** - VoiceOver and accessibility features
- **URL Schemes** - Handle external link opening
- **Share Extensions** - (Future enhancement)

## Project Structure

```
Heygo/
├── HeygoApp.swift              # App entry point
├── ContentView.swift           # Main tab navigation
├── Views/                      # SwiftUI views
│   ├── LinkListView.swift      # Main link list interface
│   ├── LinkFormView.swift      # Link creation/editing
│   ├── LinkDetailView.swift    # Detailed link information
│   ├── SearchView.swift        # Advanced search interface
│   └── AnalyticsView.swift     # Analytics dashboard
├── ViewModels/                 # Business logic
│   └── LinkViewModel.swift     # Main view model
├── Models/                     # Core Data entities
│   ├── CoreDataModel.xcdatamodeld
│   ├── PersistenceController.swift
│   └── [Entity]+CoreDataClass.swift
├── Utils/                      # Utility classes
│   ├── URLTemplateProcessor.swift
│   ├── TagManager.swift
│   ├── MarkdownRenderer.swift
│   └── AnalyticsCalculator.swift
└── Resources/                  # Assets and localization
    ├── Assets.xcassets
    ├── Info.plist
    ├── en.lproj/
    └── zh-Hans.lproj/
```

## Requirements

- **iOS 17.0+** (for Charts framework and latest SwiftUI features)
- **Xcode 15.0+**
- **Swift 5.9+**

## Installation & Setup

1. Open `Heygo.xcodeproj` in Xcode
2. Select your development team in project settings
3. Choose your target device or simulator
4. Build and run (⌘+R)

## Key Features Implementation

### URL Template System
The app supports dynamic URL templates with parameters:
```
https://google.com/search?q={query}
https://github.com/{user}/{repo}
https://maps.apple.com/?q={location,default=New York}
```

### Analytics Engine
Comprehensive analytics with multiple time ranges and metrics:
- Click trends over time
- Top performing links
- Link type distribution
- Activity timeline

### Tag Management
Intelligent tag system with:
- Auto-completion based on existing tags
- Tag suggestions based on URL patterns
- Bulk tag operations
- Usage statistics

### Search & Filter
Advanced search capabilities:
- Fuzzy text matching
- Filter by link type and tags
- Search history
- Quick URL opening

## Performance Considerations

- **Lazy Loading** - Large link collections loaded incrementally
- **Core Data Optimization** - Proper indexing and fetch request optimization
- **Memory Management** - Efficient image and data caching
- **Background Processing** - Analytics calculations performed off main thread

## Accessibility

- **VoiceOver Support** - All UI elements properly labeled
- **Dynamic Type** - Respects user's text size preferences
- **High Contrast** - Supports accessibility color schemes
- **Keyboard Navigation** - Full keyboard accessibility

## Localization

Currently supports:
- **English (en)**
- **Simplified Chinese (zh-Hans)**

Easy to extend for additional languages by adding new `.lproj` directories.

## Future Enhancements

- [ ] iCloud sync capabilities
- [ ] Share extension for adding links from other apps
- [ ] Widgets for quick access to popular links
- [ ] Shortcuts app integration
- [ ] Export/import functionality
- [ ] QR code generation for links
- [ ] Backup and restore features

## Contributing

This iOS app is designed to be a faithful replica of the Django web application. When adding new features, ensure they maintain parity with the web version while taking advantage of iOS-specific capabilities.

## License

[Add your license information here]
