feat: add child actions menu and achievements feature design
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 4m51s

- Introduced a new feature specification for displaying a menu with actions (Award Certificate, Award Badge) when a child's card is clicked in ParentView.
- Created a detailed plan for an achievements system, outlining phases for implementation, including achievement taxonomy, MVP set, and UX considerations.
- Added a template for future feature specifications to standardize documentation.
This commit is contained in:
2026-07-12 18:52:59 -04:00
parent 06d17e3d34
commit 7f0326eff1
51 changed files with 419 additions and 20 deletions
+6 -6
View File
@@ -2,20 +2,20 @@
"cookies": [
{
"name": "refresh_token",
"value": "reYniSI2OIXUAcXkeBNTaaOD7MJOzNEhwxwSDO42bew",
"value": "G_lq6dT7MCHBDgoW18PimjumaPeyWi7hRSwj2WKA_JI",
"domain": "localhost",
"path": "/api/auth",
"expires": 1787504746.987795,
"expires": 1791672153.30646,
"httpOnly": true,
"secure": true,
"sameSite": "Strict"
},
{
"name": "access_token",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImUyZS1jY0B0ZXN0LmNvbSIsInVzZXJfaWQiOiJhNDQyY2E4Ni1lNGIzLTRjZjEtYThmYS0zNWJmYmZhNzk5NjYiLCJ0b2tlbl92ZXJzaW9uIjowLCJleHAiOjE3Nzk3Mzk1NDZ9.3zqjc9RdG9jpr5wbmhbqYUCvzxUl9d8tcc4EY1-BYJc",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImUyZS1jY0B0ZXN0LmNvbSIsInVzZXJfaWQiOiJkMWU3MzM3OC04N2I4LTQ2ZjQtYmE2ZC1hMDdhYjE0YjFkOWUiLCJ0b2tlbl92ZXJzaW9uIjowLCJleHAiOjE3ODM5MDY5NTN9.9GiSopufAFJ7qa9Cu0AhYpUDfempiYayhLaYIA_IoSc",
"domain": "localhost",
"path": "/",
"expires": 1779739546.987748,
"expires": 1783906953.306413,
"httpOnly": true,
"secure": true,
"sameSite": "Lax"
@@ -27,11 +27,11 @@
"localStorage": [
{
"name": "authSyncEvent",
"value": "{\"type\":\"logout\",\"at\":1779728746835}"
"value": "{\"type\":\"logout\",\"at\":1783896153166}"
},
{
"name": "parentAuth",
"value": "{\"expiresAt\":1779901547148}"
"value": "{\"expiresAt\":1784068953466}"
}
]
}
+6 -6
View File
@@ -2,20 +2,20 @@
"cookies": [
{
"name": "refresh_token",
"value": "DlW9UoiIvVxuPPp3wfo3qsVP5tlO2Iw2e8TZThWeMDw",
"value": "fgz_j-G_5UJ-xLf2dJBqcrtiWJkC3amMr8Y90dx_Kdo",
"domain": "localhost",
"path": "/api/auth",
"expires": 1787504746.877459,
"expires": 1791672153.435032,
"httpOnly": true,
"secure": true,
"sameSite": "Strict"
},
{
"name": "access_token",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImUyZS1kZWxldGVAdGVzdC5jb20iLCJ1c2VyX2lkIjoiM2E3ZDA3NjYtYTQyNy00NTQ5LWE0NGEtMWU0ZjUwOGRhZDBhIiwidG9rZW5fdmVyc2lvbiI6MCwiZXhwIjoxNzc5NzM5NTQ2fQ.jFLpGeJBM7U-x-N1jT-muHjBStXFyeb5oQS0LryWwr0",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImUyZS1kZWxldGVAdGVzdC5jb20iLCJ1c2VyX2lkIjoiYjExZTViNzItNGJlOC00YmY1LTk0ODYtMjE2Nzc5ZGU4Y2ViIiwidG9rZW5fdmVyc2lvbiI6MCwiZXhwIjoxNzgzOTA2OTUzfQ.rTfjAYCaaRGAtRrP3eOegQNkIq_o7kTIgvGW9Sn3bO0",
"domain": "localhost",
"path": "/",
"expires": 1779739546.877411,
"expires": 1783906953.43499,
"httpOnly": true,
"secure": true,
"sameSite": "Lax"
@@ -27,11 +27,11 @@
"localStorage": [
{
"name": "authSyncEvent",
"value": "{\"type\":\"logout\",\"at\":1779728746722}"
"value": "{\"type\":\"logout\",\"at\":1783896153271}"
},
{
"name": "parentAuth",
"value": "{\"expiresAt\":1779901547028}"
"value": "{\"expiresAt\":1784068953610}"
}
]
}
+6 -6
View File
@@ -2,20 +2,20 @@
"cookies": [
{
"name": "refresh_token",
"value": "Xz4WQkQNdryfFsS3GaA09dGDz3yEaRwHxF2VdIh8LwQ",
"value": "5-wHHNkUIcILfUZqXFDTiggTIE4F_rhifieI07DQ6WQ",
"domain": "localhost",
"path": "/api/auth",
"expires": 1787504745.201123,
"expires": 1791672151.681425,
"httpOnly": true,
"secure": true,
"sameSite": "Strict"
},
{
"name": "access_token",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImUyZUB0ZXN0LmNvbSIsInVzZXJfaWQiOiJhMWVlZGNkOC1hMGE0LTQyYjMtOWU3ZC01MWRmNGM1ZTFiNTUiLCJ0b2tlbl92ZXJzaW9uIjowLCJleHAiOjE3Nzk3Mzk1NDV9.Q2q-xiDjAw8pu3t8ioaawUpGK1__5wBiPZ-vFvXHnmw",
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImUyZUB0ZXN0LmNvbSIsInVzZXJfaWQiOiIyNTgxZmQwOS05OTMxLTQ3ZTctYmRkYi00MjEwZmQxM2U1MDkiLCJ0b2tlbl92ZXJzaW9uIjowLCJleHAiOjE3ODM5MDY5NTF9.8qvDLe203vx2YOUnzAoOmBDcT6uov4HhsM5o00UseMg",
"domain": "localhost",
"path": "/",
"expires": 1779739545.201078,
"expires": 1783906951.68138,
"httpOnly": true,
"secure": true,
"sameSite": "Lax"
@@ -27,11 +27,11 @@
"localStorage": [
{
"name": "authSyncEvent",
"value": "{\"type\":\"logout\",\"at\":1779728745058}"
"value": "{\"type\":\"logout\",\"at\":1783896151561}"
},
{
"name": "parentAuth",
"value": "{\"expiresAt\":1779901545328}"
"value": "{\"expiresAt\":1784068951811}"
}
]
}