Time Tracking Application for Freelance Web Developers *pronounced like "time sheet"
A comprehensive time-tracking application built with Laravel 12, designe to manage clients, projects, time entries, and invoices.
- Create and manage client profiles
- Store contact information and billing details
- Set default hourly rates per client## About Laravel
- Track client activity status
- Organize work by client and project
- Set project-specific hourly rates and budgets
- Track project status (active, on hold, completed, cancelled)
- Monitor project timelines with start and end dates
- View total hours and earnings per project
- Start/stop timer for time entries
- Manual time entry with description
- Track billable and non-billable hours
- Automatic duration calculation
- Override hourly rates per time entry
- Associate time entries with specific projects
- Create invoices from time entries
- Automatic invoice numbering
- Support for tax calculations
- Multiple invoice statuses (draft, sent, paid, overdue, cancelled)
- Export invoices to PDF
- Track invoice items and totals
- Framework: Laravel 12
- Authentication: Laravel Breeze## Contributing
- Database: SQLite (configurable for MySQL/PostgreSQL)
- Frontend: Blade Templates + Tailwind CSS
- Charts: Chart.js
- PDF Generation: DomPDF
- Build Tool: Vite
If you discover a security vulnerability within Laravel, please send an e-mail to Shane Pearson via bubbafoley@gmail.com. All security vulnerabilities will be promptly addressed.
- PHP 8.2 or higher
- Composer
- Node.js & NPM
- SQLite (or MySQL/PostgreSQL)
-
Clone the repository (if applicable)
git clone <repository-url> cd timeshit
-
Install PHP dependencies
composer install
-
Install Node dependencies
npm install
-
Environment configuration
cp .env.example .env php artisan key:generate
-
Configure database
The application is pre-configured to use SQLite. If you want to use MySQL or PostgreSQL, update the
.envfile:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=timetracking DB_USERNAME=root DB_PASSWORD=
-
Run migrations
php artisan migrate
-
Build frontend assets
npm run build
-
Start development server
php artisan serve
-
Access the application
Open your browser and visit:
http://localhost:8000
- Navigate to Clients section
- Click "Add New Client"
- Fill in client details (name, email, company, etc.)
- Set default hourly rate (optional)
- Save
- Navigate to Time Entries
- Click "Start Timer"
- Select project
- Add description
- Timer starts automatically
- Click "Stop" when done
- Navigate to Invoices
- Click "Create Invoice"
- Select client
- Choose unbilled time entries
- Review and adjust amounts
- Set due date and tax rate
- Save as draft or mark as sent
- Download PDF for sending to client
- users - User authentication and profiles
- clients - Client information and billing rates
- projects - Project details linked to clients
- time_entries - Individual time tracking records
- invoices - Invoice header information
- invoice_items - Line items for invoices
- A User has many Clients, Projects, Time Entries, and Invoices
- A Client has many Projects and Invoices
- A Project belongs to a Client and has many Time Entries
- A Time Entry belongs to a Project and User
- An Invoice belongs to a Client and has many Invoice Items
- An Invoice Item can reference a Time Entry
The application uses web routes with authentication middleware:
GET /dashboard- Dashboard with analytics- Resource routes for:
/clients- Client CRUD operations/projects- Project CRUD operations/time-entries- Time entry CRUD operations/invoices- Invoice CRUD operations
Special routes:
POST /time-entries/{id}/stop- Stop a running timerGET /invoices/{id}/pdf- Download invoice as PDF
# Run tests
php artisan testThis project is open-sourced software licensed under the MIT license.
Contributions are welcome! Please feel free to submit a Pull Request.
For issues, questions, or contributions, please open an issue in the repository.