📊
Data and analytics
Personal project

My Timesheet

My Timesheet is a personal time tracking application combining schedules, a calendar, confirmations and monthly reporting. I improved its React frontend and Symfony API to make calculations consistent, actions safer and the interface comfortable on both desktop and mobile.

Scheduling and business rules

Entries distinguish work, leave, rest and overtime, including breaks, teams and work locations. Ordinary days use an eight-hour reference; absences keep worked hours separate from reference hours. Validation handles overlaps and shifts crossing midnight. A details modal displays the complete entry, its activity and confirmation status.

Confirmation and data protection

Users can manually resend a schedule confirmation email from the day before its date onward while it remains unconfirmed, and can also send confirmations for exceptions. Success, error and warning notifications clearly show action outcomes. SMTP submission is logged with a message identifier; acceptance by the mail server is distinguished from delivery to the recipient’s inbox. Confirmed entries and entries with a past date are protected against deletion and archiving. Eligible archived entries can be restored after checking for conflicts.

Reporting, languages and mobile

The dashboard provides six charts and monthly indicators, alongside a calendar, history and CSV exports. The application supports Italian, French and English, with Italian as the default and a remembered language preference. On phones, scheduling, history and archive tables become readable cards; filters, touch actions and modals adapt to the screen.

Technical delivery

My work covers full stack development, JWT access restricted to the user’s own data, service and interface tests, export validation and mobile visual checks. VPS deployments use identified releases, backups and a rollback path.

Screenshots show the actual interface with entirely fictional data: Alex Demo, an example.test address and demo teams. No production account, schedule or email is exposed; the displayed email submission is simulated.