I've been brainstorming about this problem for over a week now and cannot come up with a sensible way to do it.
Basically, I am building a component the purpose which is to let a user select a series of time ranges that can either be specific or general. This needs to be presented in a braindead-simple manner so that even non-tech-savvy users can figure it out with no effort and without looking at an instruction video or reading more than two lines of text. Specifically, the time ranges will be used to schedule deliveries (and are thus intended to let the user specify when they are available to accept them).
There will be two modes: specific and general, which I've decided I will separate with tabs. The "specific" mode is easy and is something I have covered (the user will pick two time windows); however, the more complicated one (and the one we want as default - so it is crucial for it to be very straightforward) will be the "generic" mode, in which the user should be able to communicate their availability in as specific and simple a manner as possible (for instance, "This week I am available weekdays after 6pm, except for Thursday, and also all day on Saturday").
I've thought about various ways of implementing this, but everything I come up with feels either counterintuitive, ugly, or weird. Some of the ideas I ran through were: bunch of checkboxes/text fields (simplest but ugly), a calendar where they can select time ranges (pleasant to look at but might confuse less-technical people; also cumbersome if I need to select, for example, 6-10pm each weeknight - I'd need to do it 5 times), I also thought of a free-form textbox where people can simply type a blurb about when they are available - but this is going to be ridiculously complex and bug-prone for such a simple task, etc.
So, I was wondering if anyone has any ideas on how to best approach this. I am primarily a developer, not a UX guy, so I am sure this problem has already been solved by the UX community because I can't imagine that this use case is so rare. However, after searching, I wasn't able to find anything relevant (maybe there is a term for this that I'm not familiar with?).
Many thanks in advance.