Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - drumhead39/Timeclock-pro: Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system. · GitHub
Skip to content

TimeClock Pro

PHP syntax check

TimeClock Pro is a self-hosted PHP and MySQL application for biweekly employee timecards, PTO tracking, pay-period approvals, payroll PDF reports, and optional provider-production reporting. It is designed for small clinics and service businesses using Apache-based shared hosting.

Features

Employees

  • Secure email and password authentication
  • Mobile-friendly time entry
  • Configurable increments and rounding
  • PTO balance and usage display
  • Final submission with locking controls
  • Optional per-pay-period sales or encounter counters

Administrators

  • Employee and provider management
  • Timecard review, correction, submission, and locking
  • Versioned timecard preferences
  • Provider rates and production totals
  • PDF payroll report generation and email delivery
  • Pay-period selection and historical reporting

Security and privacy

TimeClock Pro handles employee and payroll-related information. Production credentials, sessions, logs, database exports, and generated reports must never be committed to Git.

The repository includes protection for these files, but administrators remain responsible for HTTPS, server permissions, backups, access controls, and applicable privacy or employment-law requirements. Review SECURITY.md before deployment.

Requirements

  • PHP 8.0 or newer; PHP 8.1 or newer is recommended
  • MySQL 5.7+ or MariaDB 10.3+
  • Apache with mod_rewrite, or an equivalent web-server configuration
  • HTTPS
  • PHP PDO and pdo_mysql
  • PHP write access to the required storage/ subdirectories

Installation

1. Download the source

Clone the repository or download a release archive. Place the project outside the public web root whenever the hosting provider permits it.

git clone https://github.com/drumhead39/Timeclock-pro.git
cd Timeclock-pro

2. Create the database

Create an empty MySQL or MariaDB database and database user. Grant that user the required privileges, then import:

database/schema.sql

The fresh-install schema creates the complete table structure and default application settings. It does not create a default administrator.

3. Configure the application

Copy the sample configuration on the server:

cp app/config.sample.php app/config.php

Edit app/config.php and supply the database name, username, password, base URL, and timezone. Keep debug mode disabled in production. The real configuration file is ignored by Git.

4. Create the first administrator

From the project directory, run:

php bin/create-admin.php "Administrator Name" admin@example.com

The command will request a password containing at least 12 characters. To avoid an interactive prompt, the password may be supplied temporarily through TIMECLOCK_ADMIN_PASSWORD.

5. Configure the document root

Point the domain or subdomain document root to the project's public/ directory. This is the recommended deployment arrangement because application code, configuration, database scripts, and runtime data remain outside the web root.

If the entire project must be placed under a web-accessible shared-hosting directory, keep both .htaccess files in place and confirm that direct requests to app/, database/, storage/, cron/, and bin/ return HTTP 403.

6. Set writable directories

PHP must be able to write to:

storage/logs/
storage/rate-limits/
storage/reports/
storage/sessions/

Permissions of 0775 are commonly appropriate on shared hosting, but follow the provider's guidance and avoid world-writable permissions.

Usage

  • Employees sign in and use My Timecard.
  • Administrators use Time Cards and the Admin menu.
  • Generated payroll PDFs are stored in storage/reports/ and excluded from Git.
  • Application and PHP logs are stored in storage/logs/ and excluded from Git.

Optional cron job

Create upcoming pay periods automatically by running this command daily with the correct server path:

php /full/path/to/timeclock-pro/cron/ensure_pay_period.php

Updating an installation

  1. Back up the production database and files.
  2. Preserve the server-only app/config.php.
  3. Upload the new tracked source files.
  4. Apply only the new SQL files under database/migrations/.
  5. Verify login, time entry, PTO totals, report generation, and email delivery.

Never replace production runtime data with files from a source archive.

Development checks

Run the lightweight regression test with:

php tests/TimeServiceTest.php

GitHub Actions checks every PHP file for syntax errors, runs the regression test, and confirms that known production-only files have not been committed.

Contributing

Bug reports and contributions are welcome. Read CONTRIBUTING.md before opening an issue or pull request. Security vulnerabilities must be reported privately according to SECURITY.md.

License

TimeClock Pro is free software released under the GNU General Public License version 3.

About

Self-hosted PHP/MySQL employee timecard, PTO tracking, approval, and payroll reporting system.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages