|
| 1 | +# Anonymous Giver Site |
| 2 | + |
| 3 | +The project is inspired by "Secret Santa" (aka "Secret Nicholas") |
| 4 | +Christmas tradition, but it does not focus on specific celebrations or |
| 5 | +events. The primary objective is to create a place on the internet where |
| 6 | +people can gather together in groups and anonymously give gifts to each |
| 7 | +other. |
| 8 | + |
| 9 | +## Key features |
| 10 | + |
| 11 | +**Wish lists** |
| 12 | + |
| 13 | +Any registered user can create and modify their own wish lists. The wish |
| 14 | +list is generally private and is not visible to other users, unless they |
| 15 | +are assigned as a gift-giver to the wish list owner. |
| 16 | + |
| 17 | +**Many gift-giving campaigns** |
| 18 | + |
| 19 | +Users can join multiple gift-giving campaigns without any limit. |
| 20 | + |
| 21 | +**Personal reminders** |
| 22 | + |
| 23 | +Users with empty wish lists will be prompted to place something there. |
| 24 | +Similarly, dormant users will be prompted to join an existing |
| 25 | +gift-giving campaign. |
| 26 | + |
| 27 | +**Administration can't interfere** |
| 28 | + |
| 29 | +Site admins provide moderation for wish lists and support gift-giving |
| 30 | +campaigns. But they cannot create their own campaigns, or modify or |
| 31 | +remove existing campaigns created by other users. |
| 32 | + |
| 33 | +## Registration and authentication |
| 34 | + |
| 35 | +- Anonymous users may access any publicly available page. |
| 36 | +- Anonymous users can register by providing a username, fullname, and |
| 37 | + password. |
| 38 | +- Anonymous users can log in to their existing account. |
| 39 | +- Authenticated users can log out at any time. |
| 40 | + |
| 41 | +## Wish lists |
| 42 | + |
| 43 | +Wish lists are personal collections of desired gifts. |
| 44 | + |
| 45 | +- A wish list is created for any registered user, except admins. |
| 46 | +- Users must add at least one item to their wish list before using the |
| 47 | + site. |
| 48 | +- A wish list is available only to its owner and site admins. |
| 49 | +- A wish list is temporary available to other users assigned as a |
| 50 | + gift-giver to its owner. |
| 51 | +- Owners can add, modify, or remove entries in their wish lists. |
| 52 | +- Admins can mark any wish list item as restricted, which makes it act |
| 53 | + as a deleted one. |
| 54 | + |
| 55 | +## Gift-giving campaigns |
| 56 | + |
| 57 | +- Non-admin users can create their own gift-giving campaigns. |
| 58 | +- Each campaign should have name, description and members list. |
| 59 | +- The campaign creator is automatically a member and cannot be |
| 60 | + excluded. |
| 61 | +- Campaigns status can be draft, public, private, or completed. |
| 62 | +- Admins or the campaign creator can run the campaign if it has at |
| 63 | + least 3 members. |
| 64 | +- Campaigns cannot be joined once they have started. |
| 65 | +- Any user, except the creator, can leave the campaign if it hasn't |
| 66 | + started. |
| 67 | +- The creator can remove non-running campaigns regardless of members |
| 68 | + list, creation time, or status. |
| 69 | +- Admins can remove the campaigns with 3 or fewer members that hasn't |
| 70 | + started within a specified time. |
| 71 | +- Admins can remove draft campaigns that haven't been published |
| 72 | + within a specified time. |
| 73 | +- The number of campaigns a user can be member of is limited by the |
| 74 | + number of items in their wish list. |
| 75 | + |
| 76 | +**Draft campaigns** |
| 77 | + |
| 78 | +- No user can join a draft campaign. |
| 79 | +- Campaigns can are marked as drafts by default at creation. |
| 80 | +- The creator can publish the campaign by making campaign private or |
| 81 | + public. |
| 82 | +- Draft campaigns cannot be initiated. |
| 83 | + |
| 84 | +**Public campaigns** |
| 85 | + |
| 86 | +- Public campaigns are accessible to both anonymous and authenticated |
| 87 | + users. |
| 88 | +- Authenticated users can join any public campaign, unless it hasn't |
| 89 | + started. |
| 90 | + |
| 91 | +**Private campaigns** |
| 92 | + |
| 93 | +- Private campaign are available only to their members. |
| 94 | +- The campaign creator can share a join link with other users. |
| 95 | +- Once joined, the campaign becomes visible in the user's campaigns |
| 96 | + list. |
| 97 | + |
| 98 | +**Completed campaigns** |
| 99 | + |
| 100 | +Actually this means the campaign has been completed and archived. Admins |
| 101 | +can remove archived campaigns at any time (campaigns clean-up). Running |
| 102 | +campaigns cannot be manually moved to completed status. This is done |
| 103 | +automatically. |
| 104 | + |
| 105 | +**Campaign life-cycle** |
| 106 | + |
| 107 | +```mermaid |
| 108 | +stateDiagram-v2 |
| 109 | + draft: Draft |
| 110 | +
|
| 111 | + state Public { |
| 112 | + state start_condition_public <<choice>> |
| 113 | + state "started" as started_public |
| 114 | +
|
| 115 | + [*] --> start_condition_public |
| 116 | + start_condition_public --> started_public: if 3 or more members |
| 117 | + } |
| 118 | +
|
| 119 | + state Private { |
| 120 | + state start_condition_private <<choice>> |
| 121 | + state "started" as started_private |
| 122 | + [*] --> start_condition_private |
| 123 | + start_condition_private --> started_private: if 3 or more members |
| 124 | + } |
| 125 | +
|
| 126 | + [*] --> draft |
| 127 | + [*] --> Public |
| 128 | + [*] --> Private |
| 129 | + draft --> [*]: Remove |
| 130 | +
|
| 131 | + state publish_campaign <<fork>> |
| 132 | + draft --> publish_campaign |
| 133 | + publish_campaign --> Public |
| 134 | + publish_campaign --> Private |
| 135 | +
|
| 136 | + state completed <<join>> |
| 137 | + Public --> completed |
| 138 | + Private --> completed |
| 139 | + completed --> [*] |
| 140 | +
|
| 141 | +``` |
| 142 | + |
| 143 | +## Running the gift-giving campaign |
| 144 | + |
| 145 | +- The option to start campaigns is available to their creators or |
| 146 | + admins. |
| 147 | +- Once the campaign has started, no one can join or leave it. |
| 148 | +- Each campaign member is assigned to give a gift to a randomly chosen |
| 149 | + person within the same campaign members list. |
| 150 | + |
| 151 | +**Giver access for wish list** |
| 152 | + |
| 153 | +- The wish list of the assigned person becomes visible to the gift |
| 154 | + giver. |
| 155 | +- The giver can mark any single item within this list as a given gift. |
| 156 | +- After the gift is given, wish list returns to normal. |
| 157 | +- Wish list entry marked as given, cannot be changed by other givers. |
| 158 | + |
| 159 | +**Multiple gifts** |
| 160 | + |
| 161 | +Generally, gift-giving campaigns allow for one gift at a time. However, |
| 162 | +if a user is assigned twice to the same giver from different campaigns, |
| 163 | +the giver can mark as many entries as the number of assignments. |
| 164 | + |
| 165 | +**Autocomplete** |
| 166 | + |
| 167 | +Once all the assignments within a campaign are completed, the campaign |
| 168 | +itself is considered to be completed. |
| 169 | + |
| 170 | +## REST API |
| 171 | + |
| 172 | +**All site functions** will be implemented within REST API. |
0 commit comments