Tagging for puzzles
E.g. "themeless", "cryptic", "meta", etc.
A follow up issue would be to ignore a specific tag, as suggested by kieran. That would probably have to happen client-side as I don't think we can query for that efficiently
Been thinking about implementing this - seems in order to query for combos of tags (e.g. mini superman metas) efficiently we need to build an ancillary tag index field which is an array of tag combos. So for a puzzle tagged [superman, comics, themed, mini, meta] we'd have a hidden field that gets autopopulated with [superman, superman_comics, superman_themed, superman_mini, ...].
Obviously that field gets big fast. To address that I'm thinking:
- Limit how many tags constructors can add to a puzzle to something reasonable, say 5 or 6.
- Limit how many tags users can query by in combination to something reasonable, say 3.
We also should have some auto-tags, that constructors aren't allowed to manually use but that crosshare auto-creates. So far I'm thinking:
- size (one of 'mini', 'midi', 'full', or 'jumbo')
- 'meta' if using the contest features
- 'rating-sub-1000' 'rating-sub-1200' 'rating-sub-1300', etc., or some other way to tag based on difficulty?
So there'd be three new fields - user tags, auto tags, and tag index.
The tag index for a puzzle with 10 tags (6 user and 4 auto) and a max of 3 tags for filtering would be 10c3 + 10c2 + 10c1 = 175 entries.
~~Need a dynamic way to disallow tags (could potentially use that collection to add description / metadata about a tag as well). This would allow us to disallow users from adding tags that are supposed to be auto added, but would also allow us to use tags for something like monthly contest submissions and then turn the tag off once submissions are over.~~
~~Noindex tag pages by default, but in the same collection where we can add a description also create a setting to allow indexing. That way we can have some tag pages (like "meta" or "cryptic") that are designed to be indexed, but the majority of user-created tags won't be~~
- [ ] "Follow" for tag pages
- [ ] RSS for tag pages
- [ ] Use browser language detect for suggesting language tags