I was thinking about this and came across a post seeing that your considering applying something.
One way to get around the need for cron, is maybe have the creation of a file for each day and every time one of the modules is accessed a function can check to see if the creation date is the same day. If not and is the previous day, remove the old file, check for jobs (if new campaigns need to be created), then create a new file to check against.
For example you could use the tmp folder in the web root and create a empty file name jdonation.cron in that tmp folder and use the creation date to decide when to run other functions.
Just a thought