Addresses user deployment issues: 1. PostgreSQL database tables not being created automatically 2. Authentication issues when using multiple admin usernames Documentation improvements: - Added comprehensive troubleshooting sections for PostgreSQL database initialization - Clarified that only the first username in ADMIN_USERNAMES is auto-created during initialization - Documented that additional admin usernames must self-register or be created manually - Added step-by-step solutions for both issues Code improvements: - Fixed whitespace handling in ADMIN_USERNAMES parsing (strip whitespace from all usernames) - Fixed whitespace handling in all database initialization scripts to properly strip the first admin username - Ensured consistent behavior across all initialization paths Files updated: - All Docker setup documentation files - Configuration documentation - README and env.example - Database initialization scripts - Config parsing logic
15 KiB
Getting Started with TimeTracker
A complete guide to get you up and running with TimeTracker in minutes.
📋 Table of Contents
🚀 Installation
Option 1: Docker (Recommended)
The fastest way to get TimeTracker running:
# 1. Clone the repository
git clone https://github.com/drytrix/TimeTracker.git
cd TimeTracker
# 2. Set a strong SECRET_KEY (required for sessions & CSRF)
# Linux/macOS:
export SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
# Windows PowerShell:
$env:SECRET_KEY = python -c "import secrets; print(secrets.token_hex(32))"
# 3. (Optional) Set admin usernames
# Linux/macOS:
export ADMIN_USERNAMES=admin,manager
# Windows PowerShell:
$env:ADMIN_USERNAMES = "admin,manager"
# 4. Start TimeTracker
docker-compose up -d
# 5. Access the application
# Open your browser to: https://localhost
# (Self‑signed certificate; your browser will show a warning the first time.)
# Prefer plain HTTP on port 8080 instead?
# Use the example compose that publishes the app directly:
# docker-compose -f docker-compose.example.yml up -d
# Then open: http://localhost:8080
# Note: Login with the username you set in ADMIN_USERNAMES (default: admin) to get admin access
That's it! TimeTracker is now running with PostgreSQL.
Important: The default
docker-compose.ymlexpectsSECRET_KEYto be set. You can also edit the file and replaceSECRET_KEY=your-secret-key-herewith a securely generated value. Never use weak or guessable keys.
Option 2: Quick Test (SQLite)
Want to try it without setting up a database?
# Start with SQLite (no database setup needed)
docker-compose -f docker-compose.local-test.yml up --build
# Access at: http://localhost:8080
Perfect for testing and development!
Option 3: Manual Installation
For advanced users who prefer manual setup:
# 1. Install dependencies
pip install -r requirements.txt
# 2. Configure environment
cp env.example .env
# Edit .env with your settings
# 3. Initialize database
python -c "from app import create_app; app = create_app(); app.app_context().push(); app.initialize_database()"
# 4. Run the application
python app.py
📖 See Requirements for detailed system requirements
🔑 First Login
-
Open TimeTracker in your browser:
http://localhost:8080 -
Enter your credentials (depends on authentication method configured)
- Default (
AUTH_METHOD=local): Enter username and password - No authentication (
AUTH_METHOD=none): Enter username only (no password) - OIDC (
AUTH_METHOD=oidc): Click "Sign in with SSO" button - Both (
AUTH_METHOD=both): Choose either SSO or local username/password
- Default (
-
Admin users are configured in the environment
- Set via
ADMIN_USERNAMESenvironment variable (default:admin) - When you login with a username matching the list, you get admin role
- Example: If
ADMIN_USERNAMES=admin,manager, logging in as "admin" or "manager" gives admin access - Important: Only the first username in the list is automatically created during database initialization. Additional admin usernames must either self-register (if
ALLOW_SELF_REGISTER=true) or be created manually by an existing admin user.
- Set via
-
You're in! Welcome to your dashboard
Note
: Authentication method is configured via the
AUTH_METHODenvironment variable:
none: Username only (for trusted internal networks)local: Username + password (default, recommended)oidc: Single Sign-On onlyboth: Both OIDC and local password authenticationSee OIDC Setup Guide for detailed explanations of all authentication modes.
⚙️ Initial Setup
Step 1: Configure System Settings
Important
: You need admin access for this step. Login with a username from
ADMIN_USERNAMES(default:admin).
- Go to Admin → Settings (in the left sidebar menu, expand "Admin", then click "Settings")
The Admin Settings page has multiple sections. Configure what you need:
General Settings
- Timezone: Your local timezone (e.g.,
America/New_York,Europe/Rome) - Currency: Your preferred currency (e.g.,
USD,EUR,GBP)
Timer Settings
- Rounding (Minutes): Round to nearest 1/5/15 minutes
- Idle Timeout (Minutes): Auto-pause after idle (default: 30)
- Single Active Timer: Allow only one running timer per user
User Management
- Allow Self-Registration: ☑ Enable this to let users create accounts by entering any username on the login page
- Note: Admin users are set via
ADMIN_USERNAMESenvironment variable, not in this UI
Company Branding
- Company Name: Your company or business name
- Company Email: Contact email for invoices
- Company Phone: Contact phone number
- Company Website: Your website URL
- Company Address: Your billing address (multi-line)
- Tax ID: Optional tax identification number
- Bank Information: Optional bank account details for invoices
- Company Logo: Upload your logo (PNG, JPG, GIF, SVG, WEBP)
Invoice Defaults
- Invoice Prefix: Prefix for invoice numbers (e.g.,
INV) - Invoice Start Number: Starting number for invoices (e.g., 1000)
- Default Payment Terms: Terms text (e.g., "Payment due within 30 days")
- Default Invoice Notes: Footer notes (e.g., "Thank you for your business!")
Additional Settings
- Backup Settings: Retention days and backup time
- Export Settings: CSV delimiter preference
- Privacy & Analytics: Allow analytics to help improve the application
- Click "Save Settings" at the bottom to apply all changes
💡 Tip: Don't confuse this with the Settings option in your account dropdown (top right) - that's for personal/user preferences. System-wide settings are in Admin → Settings in the left sidebar.
Step 2: Add Your First Client
-
Navigate to Clients → Create Client
-
Enter client information:
- Name: Client or company name (required)
- Contact Person: Primary contact
- Email: Client email address
- Phone: Contact number
- Address: Billing address
-
Set billing defaults:
- Default Hourly Rate: Your rate for this client (e.g.,
100.00) - This will auto-populate when creating projects
- Default Hourly Rate: Your rate for this client (e.g.,
-
Click Create to save the client
Step 3: Create Your First Project
-
Go to Projects → Create Project
-
Basic information:
- Name: Project name (required)
- Client: Select from dropdown (auto-filled with client info)
- Description: Brief project description
-
Billing information:
- Billable: Toggle on if you'll invoice this project
- Hourly Rate: Auto-filled from client (can override)
- Estimated Hours: Optional project estimate
-
Advanced settings (optional):
- Status: Active/Archived
- Start/End Dates: Project timeline
- Budget Alert Threshold: Get notified at X% budget used
-
Click Create to save the project
Step 4: Create Tasks (Optional)
Break your project into manageable tasks:
-
Go to Tasks → Create Task
-
Task details:
- Project: Select your project
- Name: Task name (e.g., "Design homepage")
- Description: What needs to be done
- Priority: Low/Medium/High/Urgent
-
Planning:
- Estimated Hours: Time estimate for this task
- Due Date: When it should be completed
- Assign To: Team member responsible
-
Click Create to save the task
🎯 Core Workflows
Workflow 1: Track Time with Timer
Quick time tracking for active work:
- On the Dashboard, find the timer section
- Select a project (and optionally a task)
- Click Start — the timer begins
- Work on your task — timer continues even if you close the browser
- Click Stop when finished — time entry is saved automatically
💡 Tip: The timer runs on the server, so it keeps going even if you:
- Close your browser
- Switch devices
- Lose internet connection temporarily
Workflow 2: Manual Time Entry
Add historical or bulk time entries:
-
Go to Timer → Log Time
-
Choose entry type:
- Single entry
- Bulk entry (multiple entries at once)
- Calendar view (visual entry)
-
Fill in details:
- Project: Required
- Task: Optional
- Start Time: When you started
- End Time: When you finished
- Notes: What you worked on
- Tags: Categorize your work (e.g.,
design,meeting,bugfix)
-
Click Save to record the entry
Workflow 3: Generate an Invoice
Turn tracked time into a professional invoice:
-
Go to Invoices → Create Invoice
-
Select project and fill in client details
- Client info auto-populated from project
-
Set invoice details:
- Issue Date: Today (default)
- Due Date: Payment deadline (e.g., 30 days)
- Tax Rate: Your tax rate (e.g.,
21.00for 21%)
-
Click "Generate from Time Entries":
- Select time entries to bill
- Choose grouping (by task or project)
- Preview the total
-
Review and customize:
- Edit descriptions
- Add manual line items
- Adjust quantities or rates
-
Save and send:
- Status: Draft → Sent → Paid
- Export as CSV
- (PDF export coming soon!)
Workflow 4: View Reports
Analyze your time and productivity:
-
Go to Reports
-
Choose report type:
- Project Report: Time breakdown by project
- User Report: Individual productivity
- Summary Report: Overall statistics
-
Set filters:
- Date Range: Today/This Week/This Month/Custom
- Project: Specific project or all
- User: Specific user or all
- Billable: Billable only/Non-billable only/Both
-
View insights:
- Total hours worked
- Billable vs non-billable
- Time distribution
- Estimated costs
-
Export data:
- Click Export CSV for spreadsheet analysis
- Choose delimiter (comma, semicolon, tab)
🎓 Next Steps
Learn Advanced Features
- Task Management — Master task boards and workflows
- Calendar View — Visual time entry and planning
- Command Palette — Keyboard shortcuts for power users
- Bulk Operations — Batch time entry creation
Customize Your Experience
- Company branding: Upload your logo and set company info in Admin → Settings
- Configure notifications for task due dates
- Set up recurring time blocks for regular tasks
- Create saved filters for common report views
- Add custom tags for better categorization
Team Setup
If you're setting up for a team:
-
Add team members:
- Self-registration (recommended): Enable in Admin → Settings → "Allow Self-Registration"
- Admin creates users: Go to Admin → Users → Create User
- Admin roles: Set via
ADMIN_USERNAMESenvironment variable (comma-separated list) - Regular users can be assigned Manager or User roles via Admin → Users → Edit
-
Assign projects:
- Projects are visible to all users
- Use permissions to control access (coming soon)
-
Assign tasks:
- Create tasks and assign to team members
- Set priorities and due dates
- Track progress in task board
-
Review reports:
- See team productivity
- Identify bottlenecks
- Optimize resource allocation
Production Deployment
Ready to deploy for real use?
-
Use PostgreSQL instead of SQLite:
# Edit .env file DATABASE_URL=postgresql://user:pass@localhost:5432/timetracker -
Set a secure secret key and admin users:
# Generate a random key SECRET_KEY=$(python -c 'import secrets; print(secrets.token_hex(32))') # Set admin usernames (comma-separated) ADMIN_USERNAMES=admin,yourusername -
Configure for production:
FLASK_ENV=production FLASK_DEBUG=false SESSION_COOKIE_SECURE=true REMEMBER_COOKIE_SECURE=true -
Set up backups:
- Configure automatic database backups
- Store backups off-site
- Test restore procedures
-
Optional: Add reverse proxy:
- Use Caddy or nginx for HTTPS
- Add authentication layer if needed
- Configure firewall rules
📖 See Docker Public Setup for production deployment
💡 Tips & Tricks
Keyboard Shortcuts
Press Ctrl+K (or Cmd+K on Mac) to open the command palette:
- Quickly start/stop timers
- Navigate to any page
- Search projects and tasks
- Log time entries
Mobile Access
TimeTracker is fully responsive:
- Access from any device
- Mobile-optimized interface
- Touch-friendly controls
- Works in any browser
Time Entry Best Practices
- Add descriptive notes — Future you will thank you
- Use consistent tags — Makes reporting easier
- Track regularly — Don't let entries pile up
- Review weekly — Catch missing time or errors
- Categorize accurately — Billable vs non-billable matters
Project Management Tips
- Set realistic estimates — Helps with planning
- Break into tasks — Makes tracking easier
- Use task priorities — Focus on what matters
- Review progress regularly — Stay on track
- Archive completed projects — Keep your list clean
❓ Common Questions
How do I reset my database?
# ⚠️ This deletes all data
docker-compose down -v
docker-compose up -d
How do I add more users?
- Enable self-registration: In Admin → Settings, enable "Allow Self-Registration" - then anyone can create an account by entering a username on the login page
- Admin creates users: In Admin → Users → Create User (requires admin access)
- Users in ADMIN_USERNAMES: Any username listed in the
ADMIN_USERNAMESenvironment variable will automatically get admin role when they login
Can I export my data?
Yes! Multiple export options:
- CSV export from reports
- Database backup via scripts
- API access for custom integrations (coming soon)
How do I upgrade TimeTracker?
# Pull latest changes
git pull origin main
# Rebuild and restart
docker-compose up -d --build
# Migrations run automatically
Is there a mobile app?
TimeTracker is a web application that works great on mobile browsers. A Progressive Web App (PWA) version with offline support is planned.
🆘 Need Help?
- Documentation — Complete documentation index
- Troubleshooting — Fix common issues
- GitHub Issues — Report bugs or request features
- Contributing — Help improve TimeTracker
Ready to track your time like a pro? 🚀