-
Notifications
You must be signed in to change notification settings - Fork 0
First MVP
- A user creates a login
- user specifies and verifies their email address for account recovery
- User logs in with their password
- in spite of passwords being inherently insecure (password strength requirements)
- (stretch) User logs in with their Google/Facebook/discord account
- User recovers their password (through their verified e-mail)
- (stretch) User deletes their account
- (later): MFA
- passkey (account automation) to avoid using passwords (biometrics can act as a passkey; password managers);
- in the future, have an option to remove the password entirely (so they don't have to have one)
- have multiple ways to login into the system
- User can populate their description field
- linktr.ee field
- User can opt-in into making their profile publicly viewable
- (later) social media entries, writing-related fields (e.g., favorite books, authors, own books, other links)
- User can create a project (writing, editing, writing & editing)
- Start date = date of creation or whatever the user specifies
- User can set the target end date
- User can set optional separate writing and editing goals
- Writing measured in # words
- Editing measured in one of: hours, days, pages, chapters
- Project title (optional)
- Project description (optional)
- Project genre(s) (optional)
- (stretch) cover image
- User can enter their progress (# words written, # hours spent, # days spent, # pages edited, # chapters edited) for today or a specified date for an existing project. This isn't the cumulative progress, just what they've accomplished for the date specified.
- decimals, not integers
- Behind the scenes, we will calculate their cumulative progress (combining like units) and also will combine entries for a common day/unit.
- For comparison: % completion
- There will be a simple table presented to the user on the web interface showing their progress (day/date, # words, # hours|days|pages|chapters)
- could do unit descriptions (writing and editing) and let them track it however they want
- in the future, there may be people to track things like # queries sent (or other custom units: ideas, recipes, poems, drawings, monsters)
- (stretch) they can edit/delete any progress entries
- (stretch) there may be an individual graph
- word count (integer) --> fixed precision (2 digit precision decimal)
- User can opt-into enabling world visibility of their project via APIs
- users can opt-into enabling world visibility of their profile via APIs
- world visibility = publicly visible
- Levels of privacy: public | buddies | private
- use case: discord bot fetching data from APIs
- for a specified userid, API can retrieve
- username, user profile description, linktr.ee, list of visible projects (project key and project title, genre(s), project start date, project end date, goals)
- for a specified userid and project key, API can retrieve
- all the progress data: date vs #words, # hours, # days spent, # pages edited, # chapters edited, % complete vs. goals
- (stretch) provide this with smoothed data up until the latest day
- will consume the APIs
- These will be implemented via cron jobs and gnuplot in the MVP; later, we can build this onto the solution, along with Quests and Communities, buddies, etc.
- tell users how to use it
- knowledge-based documentation
- github issues for system issues
- google form for human issues (good to have people to help)
- we can point people to a public discord (but who can join it, community manage it)
- we can point people to the /r/writingquests reddit (with moderators)
- MVP: people should be able to report inappropriate text; moderators can then set the profile private until it can be investigated
- Some users should have moderator powers to do this privacy setting and check things out.
- Consequences --> warning, banning, banning of e-mail, banning by IP
- (later) Code of Conduct - Moderator's choice
- Keep it PG-13 (visible note to users)
- php framework: Laravel (a bit big), Symphony (huge but modular, DB-abstraction layer), Slim (an Express clone)
- front-end: react (well-documented, really small; huge community), VUE (also small)
-
What type of auth do we want? Some options are username/password, email/password (with a separate display name), or some sort of magic login button (basically single-use passwords sent over email). I normally like the last one since it means we don't have to store passwords, but idk if Dreamhost has reliable email-sending capability.
- Suggested requirements: give some freedom to user on their displayed username; one username per email; unique userid that can be used in API queries; MVP should minimize the development cost. Username should be case-insensitive
- Dreamhost is roughly reliable (sometimes there have been outages, but while running, it should be okay)
- I like the magic login button and OAuth with google or Facebook accounts if we can easily do these
- if someone is intercepting the user e-mails, then they have other problems (not a system problem)
- username/password is faster to implement (a big plus); with email for password recovery (username is immutable; can't change it once selected)
- userid = lowercase, alphanumeric + - + _ + .
- username = userid? postgres has a column type that is case-insensitive, but case is preserved. Then username could have some caps but equivalent to lowercase. Okay to preserve case but do comparisons in lowercase.
-
How will this integrate with Quests in the future? I wonder if a Quest object should be part of the MVP with only one configured manually (Novel Quest: 50k words in November) while allowing people to overwrite their own goals
- I wanted to keep the MVP small; and if we have APIs with the data, we can provide graphs and such outside of the MVP without expanding it.
- no Quests on the front end but enough of the DB to support the future growth. E.g., projects would have start/end date and goals. per-project goals
- Quest is something that participants are attaching their projects to (multiple Quests per project are possible).
-
Quests == Buddies? (buddies in the future, not as part of the MVP)
- people have different groupings of buddies (Quest might be a user-defined group that potential buddies could join)
- one buddy universe with a profile wall
- or instagram-style? dashboard you login and see cards at what your buddies are doing
- or instagram: you can follow each other but not have to mutually follow each other (people can follow each other but not necessarily follow back)
- so a follow system
- buddies are people who follow each other (maybe with special permissions)
- direct messaging (1:1 buddy)
- to comment on something, you have to be their friend
-
How can we send transactional emails (I think Dreamhost might offer an SMTP server?). The only ones in the MVP are password reset and email address verification emails
- Dreamhost does offer SMTP for sending mails
-
Does Dreamhost allow cron jobs?
- Yes
-
Is oauth an option to consider for user login as well? It also offloads password management and I know as a user, I'm more likely to hit an oauth button if I see one.
- Supporting OAuth (google, facebook, discord) --> can still store information for their account (just a way to avoid dealing with passwords)
- an option in addition to username/password
- can leave this for later (stretch goal for MVP)
-
IDEA: Discord bot to post images of graphs to writing communities
- top ten lists
- winners list
- list of top ten daily gains
- there are many regions that use discord
- authorize it to a guild
- to foster competition between teams (update word count through the bot)
-
The only other thing that jumps out to me in the MVP is having the start date of a project be the creation date. I know a lot of planners who would want to put a project in in advance of the challenge, and having a project graph/stat section show a start date as creation rather than when they intend to start probably wouldn't land.
- ok: allow a special start date
- Get the basic tooling and framework up and running
- Database schema (graphql would be similar)
- Next Friday, 5 PM CDT