A WorldSkills-themed training companion focused on competition countdown, module-based timers, practice analytics, and timezone coordination. Optimized for landscape use on desktop and tablets.
Chinese version: README_CN.md
- Competition Countdown - Default target: 2026-09-22 00:00:00 Beijing time (stored as UTC internally)
- Unified Module Timer - Competition modules (A-E) and practice modules, countdown with ring progress
- Task Management - Status tracking (current, done, upcoming), estimated duration, edit and reorder
- Timer Controls - Start, pause, reset, and resume
- Competition Timeline - Visual timeline showing competition phases (Arrival, Familiarization, Competition C1, Competition C2, Closing)
- Milestone Tracking - Key milestones with countdown cards (supports localized day unit)
- Timezone Converter - Multi-city timezone display for international participants
- Practice History - Records list and analytics charts
- AI Review (Optional) - Summarize practice data and suggestions (requires .env)
- White Noise - Built-in audio playback for focus
- Cache Cleaning - Clear practice records and AI analysis history from Settings
- Landscape Optimization - Professional landscape layout designed for desktop and tablet use
- Multi-language Support - Chinese, English, Japanese, German, French, Korean
- Modern UI Design - WorldSkills 2026 color scheme with glass morphism effects
- Custom Typography - Inter and JetBrains Mono fonts for optimal readability
- Responsive Layout - Adapts to various screen sizes and orientations
- Auto Fullscreen - Desktop and web launch in fullscreen when supported
- Circular Progress Indicator - Animated ring progress for timer visualization
- Glass Panel System - Backdrop blur effects for modern UI elements
- Timer Display Cards - Large, readable timer displays with digit styling
- Task Cards - Interactive task management with status indicators
- Competition Timeline Widget - Phase-based progress visualization
- Competition countdown display with days, hours, minutes, seconds
- Module selection panel with duration options
- Task management interface with status tracking
- Circular progress indicator with animated transitions
- Timer controls (start, pause, reset)
- Task list with completion status
- Timeline view showing competition phases
- Milestone countdown cards
- Timezone converter for multiple cities
- Dart SDK - 3.9.2 or higher
- Flutter SDK - Latest stable version
- Development Environment
- Android Studio / VS Code with Flutter extension
- iOS development requires Xcode (macOS only)
- Web development requires Chrome or Edge browser
-
Clone the repository
git clone https://github.com/yourusername/skillcount.git cd skillcount -
Install dependencies
flutter pub get
-
Run the application
# Run on connected device/emulator flutter run # Run on web flutter run -d chrome # Run on Windows flutter run -d windows # Run on macOS flutter run -d macos # Run on Linux flutter run -d linux
The main screen displays a real-time countdown to the configured competition opening time (default: 2026-09-22 00:00:00 Beijing time). The countdown shows:
- Days remaining
- Hours, minutes, seconds breakdown
- Current competition phase status
-
Select Module Duration
- Choose from preset durations: 45, 60, 90, 120, or 180 minutes
- The timer is optimized for skill training modules typical in WorldSkills competitions
-
Manage Tasks
- Add new tasks with estimated completion time
- Track task status: Current, Done, or Upcoming
- Toggle task completion by clicking on task cards
-
Control Timer
- Press START to begin the timer
- Press PAUSE to temporarily stop the timer
- Press RESET to return to initial duration
-
Monitor Progress
- View circular progress indicator showing elapsed time
- See remaining time in HH:MM:SS format
- Check completion status badge
View the progression through competition phases:
- Arrival Phase (September 18-19)
- Familiarization (September 19-21)
- Competition C1 (September 22-23)
- Competition C2 (September 23-25)
- Closing (September 25-27)
Monitor and manage key milestones (editable in-app and persisted locally).
Each milestone displays remaining days and status indicators.
Convert between time zones for international coordination:
- Base time: Shanghai (UTC+8)
- Support for multiple major cities
- Real-time display of current local times
skillcount/
├── lib/
│ ├── core/
│ │ ├── constants/
│ │ │ ├── ws_colors.dart # WorldSkills color palette
│ │ │ └── ws_times.dart # Competition time constants
│ │ ├── ai/ # Optional AI review services
│ │ ├── i18n/
│ │ │ ├── locale_provider.dart # Language management
│ │ │ ├── strings.dart # String interface
│ │ │ ├── zh.dart # Chinese translations
│ │ │ ├── zh_tw.dart # Traditional Chinese translations
│ │ │ ├── en.dart # English translations
│ │ │ ├── ja.dart # Japanese translations
│ │ │ ├── de.dart # German translations
│ │ │ ├── fr.dart # French translations
│ │ │ └── ko.dart # Korean translations
│ │ ├── theme/
│ │ │ └── app_theme.dart # Material Design theme
│ │ └── utils/
│ │ ├── time_utils.dart # Time calculation utilities
│ │ ├── fullscreen_helper.dart
│ │ ├── fullscreen_helper_io.dart
│ │ └── fullscreen_helper_web.dart
│ ├── features/
│ │ ├── countdown/
│ │ │ └── countdown_page.dart # Main countdown page
│ │ ├── unified_timer/ # Competition & practice module timer
│ │ ├── practice_history/ # Records, analytics, AI review
│ │ ├── milestones/
│ │ │ ├── milestone_model.dart # Milestone data model
│ │ │ ├── milestone_card.dart # Milestone card widget
│ │ │ └── milestone_list.dart # Milestone list widget
│ │ ├── pomodoro/
│ │ │ ├── pomodoro_controller.dart # Timer state management
│ │ │ └── pomodoro_page.dart # Pomodoro interface
│ │ ├── module_timer/
│ │ │ ├── module_model.dart # Module data model
│ │ │ ├── module_timer_page.dart # Module timer interface
│ │ │ └── module_list_panel.dart # Module list panel
│ │ ├── timezone/
│ │ │ ├── timezone_model.dart # Timezone data model
│ │ │ ├── timezone_converter.dart # Timezone conversion logic
│ │ │ └── timezone_page.dart # Timezone interface
│ │ ├── white_noise/ # White noise player
│ │ └── settings/
│ │ └── settings_page.dart # Settings configuration
│ ├── layout/
│ │ └── landscape_scaffold.dart # Landscape layout scaffold
│ ├── widgets/
│ │ ├── glass_panel.dart # Glass morphism panel widget
│ │ ├── ws_timer_text.dart # Timer text display widget
│ │ ├── grid_background.dart # Background grid decoration
│ │ └── competition_timeline.dart # Competition timeline widget
│ ├── app.dart # App composition (theme/routes/providers)
│ └── main.dart # Application entrypoint
├── test/
│ └── widget_test.dart
├── pubspec.yaml # Dependencies and assets
└── README.md # Project documentation
| Package | Version | Purpose |
|---|---|---|
| Flutter | 3.x | Cross-platform UI Framework |
| Dart | 3.9.2+ | Programming Language |
| flutter_riverpod | ^2.6.1 | Reactive State Management |
| Package | Version | Purpose |
|---|---|---|
| percent_indicator | ^4.2.5 | Circular/Linear progress indicators |
| fl_chart | ^0.68.0 | Data visualization charts |
| flutter_svg | ^2.2.3 | SVG rendering |
| confetti | ^0.8.0 | Celebration particle effects |
| cupertino_icons | ^1.0.8 | iOS style icons |
| Package | Version | Purpose |
|---|---|---|
| timezone | ^0.10.0 | IANA timezone database |
| just_audio | ^0.10.5 | Audio playback (White Noise) |
| shared_preferences | ^2.2.2 | Local persistence (Settings, Milestones) |
| http | ^1.2.0 | HTTP client (AI Review) |
| flutter_dotenv | ^5.1.0 | Environment configuration (.env) |
| Package | Version | Purpose |
|---|---|---|
| window_size | ^0.1.0 | Desktop window size control |
| universal_html | ^2.2.4 | Web compatibility & fullscreen |
| Package | Version | Purpose |
|---|---|---|
| flutter_lints | ^5.0.0 | Static analysis & lints |
| riverpod_generator | ^2.6.1 | Riverpod code generation |
The application uses WorldSkills 2026 color scheme:
- Accent Cyan (#4FB6C7) - Prominent elements (timer digits, progress bars, active states)
- Secondary Mint (#8FD3D1) - Supporting elements (secondary buttons, inactive tracks, icons)
- Background (#D9D9D9) - Application background (light gray)
- Surface (#FFFFFF) - Cards and panels (pure white)
Color constants are defined in lib/core/constants/ws_colors.dart and follow accessibility guidelines for sufficient contrast ratios.
The application is optimized for landscape orientation. To configure:
// In main.dart
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);Default language is Chinese (zh). Available languages:
- Chinese (Simplified, zh)
- Chinese (Traditional, zh-TW / zh-HK / zh-MO)
- English (en)
- Japanese (ja)
- German (de)
- French (fr)
- Korean (ko)
To change the default language, modify the locale parameter in lib/app.dart:
MaterialApp(
locale: const Locale('zh'), // or 'en'
// ...
)The competition opening time is configured in lib/core/constants/ws_times.dart:
static final DateTime competitionOpenTime =
DateTime.utc(2026, 9, 21, 16, 0, 0); // 2026-09-22 00:00:00 UTC+8AI services are configured via .env (do not commit real keys):
AI_ENGINE=volcengine
# Volcengine
VOLCENGINE_API_KEY=your_api_key
VOLCENGINE_ENDPOINT=https://ark.cn-beijing.volces.com/api/v3
VOLCENGINE_MODEL=ep-2024xxxx
VOLCENGINE_TIMEOUT=60
# Dify (optional)
DIFY_API_KEY=your_api_key
DIFY_BASE_URL=https://api.dify.ai/v1
DIFY_APP_ID=your_app_id# Run all tests
flutter test
# Run specific test file
flutter test test/widget_test.dart
# Run tests with coverage
flutter test --coverage# Run static analysis
flutter analyze
# Format code
flutter format lib/
# Format with custom line length
flutter format --line-length=80 lib/# Build Android APK
flutter build apk
# Build iOS app
flutter build ios
# Build web version
flutter build web
# Build Windows app
flutter build windows
# Build Linux app
flutter build linux
# Build macOS app
flutter build macosContributions are welcome! Please follow these guidelines:
- Fork the repository and create a feature branch
- Write clear, descriptive commits following conventional commit format
- Add tests for new features or bug fixes
- Ensure all tests pass (
flutter test) - Run static analysis (
flutter analyze) - Update documentation as needed
- Submit a pull request with a clear description of changes
- Follow Dart official style guide
- Use
constconstructors where possible - Keep functions focused and single-purpose
- Maintain existing naming conventions
When reporting issues, please include:
- Device and OS version
- Flutter version (
flutter --version) - Steps to reproduce the issue
- Expected vs actual behavior
- Screenshots if applicable
This project is licensed under the MIT License - see the LICENSE file for details.
- WorldSkills International - Competition inspiration and branding
- Flutter Team - Excellent cross-platform framework
- Material Design Team - Design system guidelines
For questions, issues, or feature requests:
- Open an issue on GitHub
- Check existing documentation
- Review similar issues before creating new ones
- Persistent data storage for tasks and settings
- Custom timer duration input
- Statistics and analytics dashboard
- Export/import task lists
- Notification support for timer completion
- Multiple competition profiles
- Team collaboration features
- Widget support for Android/iOS
- Performance optimization for animations
- Accessibility improvements (screen reader support)
- Additional language support
- Enhanced testing coverage
Built with Flutter for WorldSkills Competition Participants
Version: 1.0.0+1 Last Updated: February 2026