Look at your database structure first, something like this will allow for multiple shifts in one day.

Datatype: Shift
startTime (date)
endTime (date)
duration (number, in seconds)
employee (User)
location (geographical address)

They hit “Clock in” create a new Shift, sets the startTime. and employee When they hit “Clock out” it sets the endTime, and calculates the duration (endTime - startTime:format as seconds).

If I am understanding correctly, you could put a condition on the “Clock in” button so it only works if Current date/time - Search for Shift:first item's endTime:format as hours ≥ 8 (search constraints employee = Current User sorted by endTime descending yes)

Then another workflow on the same button but < 8 (meaning they tried to clock in within 8 hours) and send an email to a supervisor and let the User know via popup or alert.

The duration number field will be useful later when you go to add up the week’s hours. you can simply do Search for Shift:each item's duration:sum/3600 (convert seconds to hours) (you will need search constraints for employee and pay period)