You have two types of tasks: routine tasks (general cleaning) and occasional (window cleaning, etc).
For routine tasks, you don't need to track how much time each employee spends on each activity: in practice this can be too cumbersome. You just want to track how much time each employee spends on each client.
For this, HR Timesheets would probably be the best solution.
Each customer contract is an "Analytic Account", and you record, for each employee, how much time was spent on each Analytic Account.
For the occasional tasks, e.g.: carpet cleaning once a months, window cleaning every 6 months, you might be better off using Project Tasks for them.
A Project is just an Analytic Account/Contract that can have Tasks, so actually they are the "same" thing.
You can record Work on Tasks for these occasional Tasks, and it will be also written in the HR Timesheet.
(The other way around doesn't work, because the HR Timesheet let's you select Projects/Analytic Account, but not specific Tasks inside them).
The routine tasks would just go on the Projects notes/long description field.
There's no out-of-the box function to auto-generate recurring tasks.
It's possible to achieve that, but I don't think it's worth the trouble for you: it's just the matter of spending a few more minutes planning all the "occasional" Tasks of your contract for, say, the next 12 months.
Project Tasks can be seen in Calendar view and in Gantt view, so they can be a good solution to help you plan.
The disadvantage of this solution is that there are two place to record time, HE Timesheets and Tasks.
If you find this too confusing, you could try recording everything in Project Tasks, by creating a Task for "Routine cleaning" for each period (week or month). Each day/employee is a line in the Task's Work.