Before creating a project, users must create a team that will hold their projects. This provide a stable infrastructure to add collaboration and multiple user projects later on.
Frontend
When accessing the dashboard, user must be faced with a data table containing their different teams, a search box, and a create team button.
When clicking a team (column) in the data table, they must be taken to the projects page of that team.
Backend
Each team should hold a unique slug (My Team! -> my-team-f73h) with 4 letters UUID at the end to make it unique. This slug should be used to access the team in the URL (/dashboard/my-team-f73h) so it's human readable while staying unique. If there was a collision while creating the slug (UUID collision), the server should retry 3 times to create a new slug.
To make many to many relations between users and team, a team_members table must be created with each row holding a relation between a team and a user. To lookup all of the teams a user is in, just lookup in team_members where user_id equals the user's id. To lookup all of the users in a team, just lookup in team_members where team_id equals to the target team id.
Before creating a project, users must create a team that will hold their projects. This provide a stable infrastructure to add collaboration and multiple user projects later on.
Frontend
When accessing the dashboard, user must be faced with a data table containing their different teams, a search box, and a create team button.
When clicking a team (column) in the data table, they must be taken to the projects page of that team.
Backend
Each team should hold a unique slug (My Team! -> my-team-f73h) with 4 letters UUID at the end to make it unique. This slug should be used to access the team in the URL (/dashboard/my-team-f73h) so it's human readable while staying unique. If there was a collision while creating the slug (UUID collision), the server should retry 3 times to create a new slug.
To make many to many relations between users and team, a team_members table must be created with each row holding a relation between a team and a user. To lookup all of the teams a user is in, just lookup in team_members where user_id equals the user's id. To lookup all of the users in a team, just lookup in team_members where team_id equals to the target team id.