Complete the Time Entry Templates feature by adding timer integration and dashboard UI (70% → 100% complete). Features Added: - One-click start timer from template via new route - Template selector in dashboard "Start Timer" modal - Template pre-fill for manual time entries - Auto-populate timer forms with template data - Usage tracking when templates are used Backend Changes: - Added template support to /timer/start route - Added template pre-fill to /timer/manual route - New route: /timer/start/from-template/<id> for direct timer start - Load recent templates (top 5) on dashboard - All changes include proper validation and error handling Frontend Changes: - Template list in dashboard start timer modal - JavaScript function to apply template data to forms - Template cards show project/task information - Link to full template management page - Responsive design for mobile Testing: - Added 6 new integration tests for timer features - Test start timer from template (success and error cases) - Test manual entry pre-fill from template - Test active timer validation - All 32 tests passing with no linting errors Documentation: - Complete user guide (docs/TIME_ENTRY_TEMPLATES.md) - Technical documentation (docs/features/TIME_ENTRY_TEMPLATES.md) - Implementation summary with usage examples Use Case: Quickly start timers for recurring activities - 80% faster timer start for recurring tasks - Zero retyping of project, task, notes, tags - Consistent data across similar time entries
7.2 KiB
Time Entry Templates
Time Entry Templates allow you to create reusable templates for frequently logged activities, saving time and ensuring consistency in your time tracking.
Overview
Time Entry Templates help you:
- Save time: Start timers or create entries with pre-filled data
- Ensure consistency: Use the same project, task, and notes for recurring activities
- Track patterns: See which templates you use most often
- Reduce errors: Avoid manually entering the same information repeatedly
Features
Template Properties
Each template can include:
- Name (required): A descriptive name for quick identification
- Description (optional): Additional details about when to use this template
- Project: Pre-select a project for this activity
- Task: Pre-select a specific task within the project
- Default Duration: Set a standard duration in hours (e.g., 1.0, 0.5)
- Default Notes: Pre-fill notes/description for the time entry
- Tags: Comma-separated tags for categorization
- Billable: Whether time entries from this template should be billable
Usage Tracking
Templates track:
- Usage Count: How many times the template has been used
- Last Used: When the template was last used
- Templates are automatically sorted by most recently used
Using Templates
Creating a Template
- Navigate to Templates from the main navigation
- Click "New Template"
- Fill in the template details:
- Enter a descriptive name
- Select a project (and optionally a task)
- Set default duration if desired
- Add default notes and tags
- Click "Create Template"
Starting a Timer from a Template
There are three ways to use a template:
1. From the Templates Page
- Go to Templates
- Click "Use Template" on any template card
- You'll be redirected to create a time entry with pre-filled data
2. From the Dashboard
- On the dashboard, click "Start Timer"
- In the start timer modal, you'll see a list of your recent templates
- Click on any template to apply its data to the timer form
- Click "Start" to begin tracking time
3. Direct Timer Start
Some templates (those with a project assigned) have a direct "Start Timer" button that:
- Immediately starts a timer with the template's data
- Increments the template's usage count
- Takes you back to the dashboard
Editing a Template
- Navigate to Templates
- Click the edit icon (pencil) on the template card
- Update any fields as needed
- Click "Save Changes"
Deleting a Template
- Navigate to Templates
- Click the delete icon (trash) on the template card
- Confirm the deletion
Note: Deleting a template does not affect any time entries that were created using it.
Best Practices
Naming Conventions
Use clear, descriptive names:
- ✅ Good: "Daily Standup", "Client Meeting - ProjectX", "Code Review"
- ❌ Poor: "Meeting", "Work", "Task1"
When to Use Templates
Templates are ideal for:
- Recurring meetings: Daily standups, weekly syncs, client calls
- Regular activities: Code reviews, testing, documentation
- Standard tasks: Email correspondence, administrative work
- Frequent projects: Activities you do multiple times per week
Organizing Templates
- Keep your template list focused (5-10 most-used templates)
- Delete or update templates you no longer use
- Use consistent naming and tagging schemes
- Review and clean up templates quarterly
Duration Settings
- Leave duration blank for activities with variable length (start/stop timer)
- Set a duration for activities with predictable length (meetings, standup)
- Common durations: 0.25 (15 min), 0.5 (30 min), 1.0 (1 hour)
API Integration
Get All Templates
GET /api/templates
Returns all templates for the current user.
Response:
{
"templates": [
{
"id": 1,
"name": "Daily Standup",
"project_id": 5,
"project_name": "Internal",
"task_id": 12,
"task_name": "Team Meetings",
"default_duration": 0.25,
"default_notes": "Discussed progress and blockers",
"tags": "meeting,standup",
"billable": false,
"usage_count": 45,
"last_used_at": "2024-01-15T09:00:00Z"
}
]
}
Get Single Template
GET /api/templates/{template_id}
Returns a specific template by ID.
Mark Template as Used
POST /api/templates/{template_id}/use
Records that the template was used (increments usage count and updates last_used_at).
Troubleshooting
Template Not Showing in Dashboard
- The dashboard shows only your 5 most recently used templates
- Visit the Templates page to see all your templates
- Use a template to move it to the top of the list
Cannot Start Timer from Template
- Ensure the template has a project assigned
- Verify the project is active (not archived)
- Stop any active timers before starting a new one
Template Data Not Pre-filling
- Check that you're using the correct method (template button, not manual form)
- Verify the template has the fields you expect filled in
- Try editing and re-saving the template
Migration Notes
If you're upgrading to a version with time entry templates:
- Templates are stored in a new
time_entry_templatestable - No migration is needed - the feature is additive
- Templates are user-specific and don't affect existing time entries
Related Features
- Time Tracking: Learn about manual time entries and timer
- Projects: Understanding projects and their settings
- Tasks: Using tasks within projects
- Reports: Analyzing your time data
Tips and Tricks
Quick Template Creation
Create templates from your most frequent activities by:
- Track your time for a week
- Review your time entries
- Create templates for activities that appear 3+ times
Template Chains
For complex workflows:
- Create separate templates for each phase
- Use consistent naming: "ProjectX - Phase 1", "ProjectX - Phase 2"
- This helps with reporting and analysis
Keyboard Shortcuts
When using templates on the dashboard:
- The templates list is keyboard accessible
- Use Tab to navigate, Enter to select
- This speeds up your workflow significantly
Frequently Asked Questions
Q: Can I share templates with my team? A: Templates are currently user-specific. Each team member needs to create their own templates.
Q: Will deleting a template affect my past time entries? A: No, time entries are independent once created. Deleting a template doesn't affect any existing time entries.
Q: How many templates can I create? A: There's no hard limit, but we recommend keeping 10-20 active templates for ease of use.
Q: Can I import/export templates? A: Currently, templates are managed through the UI. API support allows for programmatic creation if needed.
Q: Do templates work with the mobile interface? A: Yes, templates are fully functional on mobile devices through the responsive web interface.
Feedback
We'd love to hear how you're using time entry templates! If you have suggestions or encounter issues, please:
- Open an issue on GitHub
- Contact support
- Contribute improvements via pull request