Team: Full-stack Frogs
The purpose of this project is to create a simple, user-friendly mobile and desktop application that helps managers monitor and improve team wellbeing, mood, and workload. The dashboard will allow team members to share how they are feeling on a weekly basis and report their current workload, providing a clear, real-time view of the team’s overall health.
Provide Guest users ability to post sticky notes to a live event board. Once posted, users can view all posts for live event. Admin and approver access will allow events boards to be created, sticky notes to be edited, approved and exported.
| Type | Access | Role type assignment |
|---|---|---|
| Superuser | - All access - Can log in - Can log out - Create and manage Teams - Create and manage Moods - Create and manage Workloads - View users list - Update user details - Submit and manage Pulse Logs |
Full-stack frogs team |
| Manager | - Can log in - Can log out - Create and manage Teams - Create and manage Moods - Create and manage Workloads - View users list - View user details - Submit Pulse Logs |
Managers |
| User | - Can log in - Can log out - Submit Pulse Log - View and update own details - Send kudos to another user |
Logged in User |
User can submit a Pulse Log containing a chosen mood, chosen workload and optional comment. Restrictions apply:
- User can only submit once a week.
- User can not update submitted data.
- If user belongs to the team "Showcase 2026", then they can submit a Pulse Log repeatedly as it will never be saved.
- Reminder email at a set time in the week to prompt user to submit their Pulse Log for the current week
- A trend of the user's own mood and workload score over time
- Send kudos from one user to another
- Django / DRF API
- Python
- React / JavaScript
- HTML/CSS
- Heroku
- Netlify
- GitHub
This application's back-end will be deployed to Heroku. The front-end will be deployed separately to Netlify.
We will also use Insomnia to ensure API endpoints are working smoothly (we will utilise a local and deployed environment in Insomnia).
Team Pulse is for remote or hybrid teams and their managers. Team members use it to share weekly mood and workload check-ins, while managers get a clear overview of team wellbeing.
| HTTP Method | URL | Purpose | Request Body | Successful Response Code | Authentication and Authorization |
|---|---|---|---|---|---|
| POST | /api-token-auth | Allow users to log in | ““Username”:”string”, “password”:”string” | 200 | N/A |
| POST | /me | Return details of the currently logged on user | 200 | Token auth | |
| GET | /moods | Returns a list of Moods | 200 | Open access | |
| POST | /moods | Create new Mood | "value": integer, "description": "string", "image_url": "string" | 201 | Superuser or Staff |
| PUT | /moods/id | Update existing Mood | "value": integer, "description": "string", "image_url": "string" | 200 | Superuser or Staff |
| GET | /workloads | Returns a list of Workloads | 200 | Open access | |
| POST | /workloads | Create new Workload | "value": integer, "description": "string", "image_url": "string" | 201 | Superuser or Staff |
| PUT | /workloads/id | Update existing Workload | "value": integer, "description": "string", "image_url": "string" | 200 | Superuser or Staff |
| GET | /teams | Return a list of Teams | 200 | Open access | |
| GET | /teams | Return a list of Teams with more details | 200 | Superuser or Staff | |
| POST | /teams/ | Create new Team | "team_name": "string" | 201 | Superuser or Staff |
| PUT | /teams/id | Update existing Team | "team_name": "string", "team_manager": integer | 200 | Superuser or Staff |
| GET | /users | Return a list of users | 200 | Superuser or Staff | |
| POST | /users | Create a new User | "username": "string", "password": "string", "first_name": "string", "last_name": "string", "team": integer | 201 | Open access |
| PUT | /users/id | Update existing User | "username": "string", "password": "string", "first_name": "string", "last_name": "string", "team": integer | 200 | Superuser or Owner of data |
| GET | /users/id | Return User details and their last 26 logged Pulse Log | 200 | Superuser, Staff, Owner of data | |
| GET | /users/id/?limit=3 | Return User details and their last 3 logged Pulse Log | 200 | Superuser, Staff, Owner of data | |
| GET | /users/?year_week=index | Return a list of users who have Pulse Log data for the specified year_week | 200 | Superuser or Staff | |
| GET | /users/?year_week=index&missing_log=true | Return a list of users who do NOT have Pulse Log data for the specified year_week | 200 | Superuser or Staff | |
| GET | /pulse_logs | Return a list of Pulse Logs | 200 | Superuser or Staff | |
| POST | /pulse_logs | Create a new Pulse Log | "team": integer, "timestamp_local": "datetime", "mood": integer, "workload": integer | 201 | Token auth |
| PUT | /pulse_logs/id | Update existing Pulse Log | "timestamp_local": "datetime", "mood": integer, "workload": integer | 200 | Superuser |
| GET | /pulse_logs/?year_week=index | Return a list of Pulse Logs for the selected year_week index | 200 | Superuser or Staff | |
| GET | /event_logs | Return a list of event_logs | 200 | Superuser | |
| GET | /rewards | Returns a list of Rewards | 200 | Token auth | |
| POST | /rewards | Create new Reward | "points": integer, "name": "string" | 201 | Superuser or Staff |
| PUT | /rewards/id | Update existing Reward | "points": integer, "name": "string" | 200 | Superuser or Staff |
| DELETE | /rewards/id | Delete existing Reward | 204 | Superuser or Staff | |
| GET | /user_points | Returns either User Point for logged in user or a list of User Points for Superuser | 200 | Token auth (single) or Superuser (list) | |
| POST | /user_points | Create new or update existing User Point (method was overloaded) | "user": integer, "points": "integer" | 201 | Token auth |
| PUT | /user_points/id | Update existing User Point | "user": integer, "points": "integer" | 200 | Token auth or Superuser |
| GET | /kudos | Returns Kudos where user is the recipient, or a list of all Kudos for Manager or Superuser | 200 | Token auth | |
| POST | /kudos | Create new Kudos | "message": string, "recipient": "string" | 201 | Token auth |
| PUT | /kudos/id | Update existing Kudos | "message": string, "recipient": "string", "is_acknowledged": bool | 200 | Token auth |
| Field | Data type |
|---|---|
| id (PK) | |
| username | string |
| string | |
| first_name | string |
| last_name | string |
| team (FK) | integer |
| is_staff | boolean |
| is_active | boolean |
| logged_pulses | collection of pulse_log data |
| Field | Data Type | Note |
|---|---|---|
| id (PK) | integer | |
| team_name | string | |
| team_manager | integer | Only viewable by logged in user |
| user_count | integer | Only viewable by logged in user |
| Field | Data type |
|---|---|
| id (PK) | |
| value | integer |
| description | string |
| image_url | string |
| Field | Data type |
|---|---|
| id (PK) | |
| value | integer |
| description | string |
| image_url | string |
| Field | Data type |
|---|---|
| id (PK) | |
| user (FK) | integer |
| first_name | string |
| last_name | string |
| team | integer |
| year | integer |
| week_index | integer |
| year_week | integer |
| timestamp | datetime |
| timestamp_local | datetime |
| mood (FK) | integer |
| workload (FK) | integer |
| comment | string |
| Field | Data type |
|---|---|
| id (PK) | |
| points | integer |
| name | string |
| Field | Data Type | Note |
|---|---|---|
| id (PK) | integer | |
| user (FK) | integer | |
| points | integer |
| Field | Data Type | Note |
|---|---|---|
| id (PK) | integer | |
| sender (FK) | integer | |
| sender_first_name | string | |
| sender_last_name | string | |
| recipient | integer | |
| message | string | |
| is_acknowledged | boolean |
