Extending the advanced search system
The current advanced filtering system is pretty limiting (all/any), and doesn't apply to tags, so filtering for the kind of movies you want to see often requires manual effort. The planned "exclude" will play nicely.
I'd like to propose three directions current genre filtering system can be expanded without being too low level on user or requiring lots of infrastructure.
Expanding to tags: I honestly don't know why this is currently not implemented. If this was a thing you could filter things like cyberpunk body horror movies. But to make this even more detailed
More granularity than "any/all": Something similar to how Letterboxd does it. Where every genre have three modes, along the lines of, "maybe", "must", "not", and by default everything is set to maybe. This way you can say things like sci-fi horror movies that are not comedies.
These three should be rather realistic and I would love to see in this website. I will give some more ideas but they are much more utopian and require some more infrastructure though they'd be lovely additions. Be warned...
a. A Boolean Algebra for Filtering: Instead of giving each genre/tag three modes for filtering. And handle in background, expose the users a filtering DSL, essentially just a boolean algebra that uses words instead. Like "not documentary and drama". Here, because "not" has higher precedence than "and", no parentheses are required.
b. Genres and Tags, combined: Using the DSL above, genres and tags can be mixed and matched to allow things like: "not comedy and body horror"
c. Bringing back wildcardness: In the DSL when a genre or tag is used once, it must be shadowed to change its behaviour in a different subterm which is normal but this also means we cannot wildcard an already used genre/tag. This can be solved by extending the DSL with some nonclassical approach like a modalities or extra values like "any" or "all" but I'm not sure about the semantics, but it'd be something like:
(not romance and horror) or (optional romance and comedy) or (any and romance) where any is essentially infinitary form of "or" where every operand is prepended with optional (optional action or optional comedy or ...).
After a little thought sketched some simple semantics for the DSL I was talking
about. Has some holes here and there but it should give the idea.
include: sets a genre or a tag required, default modality of referred
optional: sets a genre or a tag optional, default modality of non-referred
exclude: sets a genre or a tag excluded
when a genre is mentioned in a modality, it'll be assumed in every sub-term
unless its shadowed, i.e. another explicit definition different than its first,
or an implicit shadowing as done by all, which essentially locally resets the
all x = optional (x or x or .. or x[n-1] or x[n])
where x can be either genres or tags which it'll range over, an order is not
required but is defined as a list for simplicity
Precedence: or < and < optional == include == exclude < all
include, exclude and optional distributes over "and" and "or"
"and" distributes over "or"
a comma (,) operator can be added such that it would iterate the parser
to next operator until it reaches an "and" or an "or" which it will
then replace itself with. i.e. horror, sci-fi and drama is equalivent
to horror and sci-fi and drama.
1. horror and (sci-fi or fantasy)
2. (exclude romance and include comedy) or (optional romance and include drama)
3. (include all genres and exclude documentary)
4. include (romance, drama and comedy) or (include all genres and exclude comedy)
Note that in third example include all genres is redundant but in fourth, removing it will change the meaning
CPS test is an online game where you require making the maximum variety of clicks per second. https://spacebarcounter.org/cpstest