UNNC Computer Psycho Union Debate Competition Timing System A professional, flexible, and easy-to-use debate timer suitable for various debate competitions
This project is a debate competition timing system developed for UNNC Computer Psycho Union, aiming to provide professional and flexible timing solutions for debate competitions.
Maintainer of the project: @Gentle-Lijie, @HNRobert
Core Features:
- ✨ Visual and JSON dual-mode configuration
- ⏱️ Precise millisecond-level timing system
- 🔔 Intelligent bell reminders (start/warning/end)
- ⌨️ Complete keyboard shortcut support
- 🎨 Elegant gradient themes and animation effects
- 📱 Responsive design, supporting multiple screen sizes
- 🎭 Support for one-sided and two-sided timing modes
- 🚀 Built with Vue 3 + TypeScript + Vite
- Node.js >= 18.0.0
- pnpm >= 8.0.0 (recommended) or npm
# Using pnpm (recommended)
pnpm install
# Or using npm
npm installpnpm dev
# or
npm run devVisit http://localhost:5173 to view the application
pnpm build
# or
npm run buildpnpm preview
# or
npm run preview| Shortcut | Function |
|---|---|
Space |
Start/Pause Timer |
S |
Switch Timer Side (Dual Mode) |
R |
Reset Current Timer |
← |
Previous Stage |
→ |
Next Stage |
- Click the "Configure" button in the top right
- Choose "Visual Edit" or "JSON Source" mode
- Add/Edit debate stages
- Configure speakers, durations, bell timings
- Save configuration
debate-timer/
├── config/
│ ├── eslint.config.ts # ESLint configuration
│ ├── postcss.config.js # PostCSS configuration
│ ├── tailwind.config.js # Tailwind CSS configuration
│ ├── tsconfig.json # TypeScript configuration
│ ├── vite.config.ts # Vite configuration
├── src/
│ ├── components/
│ │ └── screen/
│ │ ├── debateTimer.vue # Core timer component
│ │ └── TimerConfigPanel.vue # Configuration panel component
│ ├── views/
│ │ └── Screen.vue # Main screen view
│ ├── types/
│ │ └── screen.ts # TypeScript type definitions
│ ├── utils/
│ │ └── timerDefaults.ts # Default timer configuration
│ ├── style/
│ │ └── index.css # Global styles
│ ├── App.vue # Root component
│ └── main.ts # Application entry
├── index.html # HTML template
├── package.json # Project dependencies
└── README.md # Chinese README
-
Optimize configuration panel visual effects
- Improve card shadows and spacing
- Add smoother transition animations
- Optimize color contrast for better readability
-
Unify overall UI design language
- Unify button styles (size, border radius, shadows)
- Unify font sizes and line heights
- Create complete design system documentation
-
Improve timer display effects
- Add more animation effects (like number scrolling)
- Optimize time color change gradient effects
- Add progress bar indicators
-
Responsive design optimization
- Optimize tablet display
- Optimize mobile display
- Add touch gesture support
-
Use professional JSON editor
- Integrate Monaco Editor or CodeMirror
- Add syntax highlighting
- Add autocomplete and error hints
-
Configuration management features
- Export configuration as JSON file
- Import configuration from JSON file
- Save multiple configuration presets
- Configuration template library (different debate formats)
-
Custom bell sounds
- Upload custom bell sound files
- Adjust bell volume
- Test bell functionality
-
Fullscreen mode
- Add fullscreen toggle button
- Optimize layout in fullscreen mode
- Support ESC key to exit fullscreen
-
Theme switching
- Light/dark theme switching
- Multiple color schemes
- Custom theme editor
-
Accessibility features
- Add ARIA label support
- Optimize keyboard navigation
- Screen reader support
-
Component splitting
- Split
debateTimer.vue(400+ lines) into smaller sub-components - Extract
StageDisplaycomponent - Extract
TimerDisplaycomponent - Extract
NavigationControlscomponent
- Split
-
Logic extraction
- Create
useTimercomposable to manage timing logic - Create
useBellcomposable to manage bell logic - Create
useKeyboardcomposable to manage keyboard events
- Create
-
Utility function extraction
- Extract bell generation logic to
utils/audio.ts - Extract time formatting logic to
utils/time.ts
- Extract bell generation logic to
-
Add code comments
- Add JSDoc comments to all public functions
- Add inline comments to complex logic
- Create component usage example documentation
-
Unit tests
- Write tests for utility functions
- Write tests for composables
- Set up testing environment with Vitest
-
Component tests
- Write tests for key components
- Use Vue Test Utils
- Test keyboard shortcut functionality
-
E2E tests
- Use Playwright or Cypress
- Test complete timing workflow
- Test configuration save and load
-
Component documentation
- Write usage instructions for each component
- Add Props, Events, Slots documentation
- Create component API reference
-
User manual
- Write detailed user operation guide
- Add FAQ
- Create usage video tutorials
-
Developer guide
- Write contribution guide (CONTRIBUTING.md)
- Code standards explanation
- Git commit standards
- Multi-language support
- Integrate vue-i18n
- Extract all Chinese text
- Add English translation
- Support language switching
-
Code optimization
- Use
computedto optimize repeated calculations - Use
v-memoto optimize list rendering - Lazy load large components
- Use
-
Build optimization
- Configure code splitting
- Optimize resource loading
- Add PWA support
-
TimerConfigPanel validation improvement
- Show specific error messages when save fails
- Improve form validation prompts
- Add data format validation
-
Timing precision optimization
- Handle timing deviation in background browser tabs
- Use Web Worker for better precision
We welcome all forms of contributions! Whether it's fixing bugs, adding new features, improving documentation, or suggesting ideas.
- Fork this repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add some AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Submit Pull Request
# Check code style
pnpm lint:check
# Auto-fix code style
pnpm lint:fix
# Format code
pnpm formatUse Conventional Commits specification:
feat:New featuresfix:Bug fixesdocs:Documentation updatesstyle:Code formatting adjustmentsrefactor:Code refactoringtest:Test relatedchore:Build/toolchain related
Examples:
feat: Add configuration export feature
fix: Fix timer state error when resetting
docs: Update shortcut explanations in README
- Framework: Vue 3.5 with Composition API
- Language: TypeScript 5.8
- Build Tool: Vite 7.1
- Styling: Tailwind CSS 4.1 + DaisyUI 5.1
- Code Standards: ESLint + Prettier
This project uses the MIT License - see LICENSE file for details
Thanks to all classmates who contributed to this project!
- Organization: UNNC Computer Psycho Union
- GitHub: CompPsyUnion/debate-timer
If this project helps you, please give us a Star ⭐️
Built with ❤️ by UNNC Computer Psycho Union
Make every debate precisely timed, make every speech resounding