diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index f8cdf1f..025fb23 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -8,7 +8,7 @@ on: env: REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} + IMAGE_NAME: Dvorinka/trackeep jobs: test: diff --git a/.playwright-cli/page-2026-02-26T12-34-09-331Z.yml b/.playwright-cli/page-2026-02-26T12-34-09-331Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T12-34-09-331Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T12-34-28-645Z.yml b/.playwright-cli/page-2026-02-26T12-34-28-645Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T12-34-28-645Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T12-34-30-732Z.yml b/.playwright-cli/page-2026-02-26T12-34-30-732Z.yml new file mode 100644 index 0000000..b492428 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T12-34-30-732Z.yml @@ -0,0 +1,18 @@ +- generic [ref=e26]: + - generic [ref=e27]: + - img "Trackeep Logo" [ref=e29] + - heading "Trackeep" [level=1] [ref=e30] + - paragraph [ref=e31]: Welcome back + - generic [ref=e32]: + - generic [ref=e35]: Registration Disabled + - paragraph [ref=e36]: Accounts can only be created by the administrator. Please contact your admin to get an account. + - generic [ref=e37]: + - generic [ref=e38]: + - generic [ref=e39]: Email + - textbox "Email" [ref=e40]: + - /placeholder: your@email.com + - generic [ref=e41]: + - generic [ref=e42]: Password + - textbox "Password" [ref=e43]: + - /placeholder: •••••••• + - button "Sign In" [ref=e44] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T12-35-04-145Z.yml b/.playwright-cli/page-2026-02-26T12-35-04-145Z.yml new file mode 100644 index 0000000..ce96320 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T12-35-04-145Z.yml @@ -0,0 +1,21 @@ +- generic [ref=e26]: + - generic [ref=e27]: + - img "Trackeep Logo" [ref=e29] + - heading "Trackeep" [level=1] [ref=e30] + - paragraph [ref=e31]: Welcome back + - generic [ref=e32]: + - generic [ref=e35]: Registration Disabled + - paragraph [ref=e36]: Accounts can only be created by the administrator. Please contact your admin to get an account. + - generic [ref=e37]: + - generic [ref=e45]: Invalid credentials + - generic [ref=e38]: + - generic [ref=e39]: Email + - textbox "Email" [ref=e40]: + - /placeholder: your@email.com + - text: demo@trackeep.com + - generic [ref=e41]: + - generic [ref=e42]: Password + - textbox "Password" [ref=e43]: + - /placeholder: •••••••• + - text: password + - button "Sign In" [ref=e44] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T14-54-09-111Z.yml b/.playwright-cli/page-2026-02-26T14-54-09-111Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T14-54-09-111Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T14-54-13-078Z.yml b/.playwright-cli/page-2026-02-26T14-54-13-078Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T14-54-13-078Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T14-56-03-022Z.yml b/.playwright-cli/page-2026-02-26T14-56-03-022Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T14-56-03-022Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T14-56-27-005Z.yml b/.playwright-cli/page-2026-02-26T14-56-27-005Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T14-56-27-005Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T14-56-28-029Z.yml b/.playwright-cli/page-2026-02-26T14-56-28-029Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T14-56-28-029Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-18-21-814Z.yml b/.playwright-cli/page-2026-02-26T15-18-21-814Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-18-21-814Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-18-37-422Z.yml b/.playwright-cli/page-2026-02-26T15-18-37-422Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-18-37-422Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-18-42-009Z.yml b/.playwright-cli/page-2026-02-26T15-18-42-009Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-18-42-009Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-18-52-746Z.yml b/.playwright-cli/page-2026-02-26T15-18-52-746Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-18-52-746Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-18-56-756Z.yml b/.playwright-cli/page-2026-02-26T15-18-56-756Z.yml new file mode 100644 index 0000000..5f7d3b2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-18-56-756Z.yml @@ -0,0 +1 @@ +- paragraph [ref=e6]: Checking authentication... \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-19-45-237Z.yml b/.playwright-cli/page-2026-02-26T15-19-45-237Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-19-45-237Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-19-48-248Z.yml b/.playwright-cli/page-2026-02-26T15-19-48-248Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-19-48-248Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-06-638Z.yml b/.playwright-cli/page-2026-02-26T15-20-06-638Z.yml new file mode 100644 index 0000000..7045b78 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-06-638Z.yml @@ -0,0 +1,18 @@ +- generic [ref=e4]: + - generic [ref=e5]: + - img "Trackeep Logo" [ref=e7] + - heading "Trackeep" [level=1] [ref=e8] + - paragraph [ref=e9]: Welcome back + - generic [ref=e10]: + - generic [ref=e13]: Registration Disabled + - paragraph [ref=e14]: Accounts can only be created by the administrator. Please contact your admin to get an account. + - generic [ref=e15]: + - generic [ref=e16]: + - generic [ref=e17]: Email + - textbox "Email" [ref=e18]: + - /placeholder: your@email.com + - generic [ref=e19]: + - generic [ref=e20]: Password + - textbox "Password" [ref=e21]: + - /placeholder: •••••••• + - button "Sign In" [ref=e22] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-18-095Z.yml b/.playwright-cli/page-2026-02-26T15-20-18-095Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-18-095Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-20-118Z.yml b/.playwright-cli/page-2026-02-26T15-20-20-118Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-20-118Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-32-231Z.yml b/.playwright-cli/page-2026-02-26T15-20-32-231Z.yml new file mode 100644 index 0000000..7045b78 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-32-231Z.yml @@ -0,0 +1,18 @@ +- generic [ref=e4]: + - generic [ref=e5]: + - img "Trackeep Logo" [ref=e7] + - heading "Trackeep" [level=1] [ref=e8] + - paragraph [ref=e9]: Welcome back + - generic [ref=e10]: + - generic [ref=e13]: Registration Disabled + - paragraph [ref=e14]: Accounts can only be created by the administrator. Please contact your admin to get an account. + - generic [ref=e15]: + - generic [ref=e16]: + - generic [ref=e17]: Email + - textbox "Email" [ref=e18]: + - /placeholder: your@email.com + - generic [ref=e19]: + - generic [ref=e20]: Password + - textbox "Password" [ref=e21]: + - /placeholder: •••••••• + - button "Sign In" [ref=e22] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-42-660Z.yml b/.playwright-cli/page-2026-02-26T15-20-42-660Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-42-660Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-43-674Z.yml b/.playwright-cli/page-2026-02-26T15-20-43-674Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-43-674Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-20-59-270Z.yml b/.playwright-cli/page-2026-02-26T15-20-59-270Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-20-59-270Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-21-08-629Z.yml b/.playwright-cli/page-2026-02-26T15-21-08-629Z.yml new file mode 100644 index 0000000..17488e5 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-21-08-629Z.yml @@ -0,0 +1,237 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:21 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-21-11-692Z.yml b/.playwright-cli/page-2026-02-26T15-21-11-692Z.yml new file mode 100644 index 0000000..17488e5 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-21-11-692Z.yml @@ -0,0 +1,237 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:21 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-03-788Z.yml b/.playwright-cli/page-2026-02-26T15-22-03-788Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-03-788Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-13-101Z.yml b/.playwright-cli/page-2026-02-26T15-22-13-101Z.yml new file mode 100644 index 0000000..ee07269 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-13-101Z.yml @@ -0,0 +1,237 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:22 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-17-372Z.yml b/.playwright-cli/page-2026-02-26T15-22-17-372Z.yml new file mode 100644 index 0000000..f86782e --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-17-372Z.yml @@ -0,0 +1,257 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:22 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] + - generic [ref=e279]: + - generic [ref=e280]: + - heading "Create Workspace" [level=3] [ref=e281] + - paragraph [ref=e282]: Add a new workspace for your team or projects. + - generic [ref=e283]: + - generic [ref=e284]: + - text: Name + - textbox "Workspace name" [ref=e285] + - generic [ref=e286]: + - text: Description + - textbox "Description" [ref=e287]: + - /placeholder: Optional description + - generic [ref=e288]: + - generic [ref=e289]: + - paragraph [ref=e290]: Public workspace + - paragraph [ref=e291]: Allow all members to discover this workspace. + - switch [ref=e292] [cursor=pointer] + - generic [ref=e293]: + - button "Cancel" [ref=e294] [cursor=pointer] + - button "Create Workspace" [ref=e295] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-28-352Z.yml b/.playwright-cli/page-2026-02-26T15-22-28-352Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-28-352Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-37-589Z.yml b/.playwright-cli/page-2026-02-26T15-22-37-589Z.yml new file mode 100644 index 0000000..ee07269 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-37-589Z.yml @@ -0,0 +1,237 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:22 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-39-697Z.yml b/.playwright-cli/page-2026-02-26T15-22-39-697Z.yml new file mode 100644 index 0000000..9b17589 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-39-697Z.yml @@ -0,0 +1,244 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [expanded] [active] [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - listbox [ref=e266]: + - option "Trackeep Workspace" [ref=e267] [cursor=pointer]: + - img [ref=e268] + - generic [ref=e271]: Trackeep Workspace + - button "Create Workspace" [ref=e274] [cursor=pointer]: + - img [ref=e275] + - generic [ref=e276]: Create Workspace + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:22 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-40-730Z.yml b/.playwright-cli/page-2026-02-26T15-22-40-730Z.yml new file mode 100644 index 0000000..9b17589 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-40-730Z.yml @@ -0,0 +1,244 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [expanded] [active] [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - listbox [ref=e266]: + - option "Trackeep Workspace" [ref=e267] [cursor=pointer]: + - img [ref=e268] + - generic [ref=e271]: Trackeep Workspace + - button "Create Workspace" [ref=e274] [cursor=pointer]: + - img [ref=e275] + - generic [ref=e276]: Create Workspace + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:22 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-22-58-998Z.yml b/.playwright-cli/page-2026-02-26T15-22-58-998Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-22-58-998Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-08-291Z.yml b/.playwright-cli/page-2026-02-26T15-23-08-291Z.yml new file mode 100644 index 0000000..17ec7fc --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-08-291Z.yml @@ -0,0 +1,237 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-10-396Z.yml b/.playwright-cli/page-2026-02-26T15-23-10-396Z.yml new file mode 100644 index 0000000..0d48d15 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-10-396Z.yml @@ -0,0 +1,244 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [expanded] [active] [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - listbox [ref=e266]: + - option "Trackeep Workspace" [ref=e267] [cursor=pointer]: + - img [ref=e268] + - generic [ref=e271]: Trackeep Workspace + - button "Create Workspace" [ref=e274] [cursor=pointer]: + - img [ref=e275] + - generic [ref=e276]: Create Workspace + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-12-458Z.yml b/.playwright-cli/page-2026-02-26T15-23-12-458Z.yml new file mode 100644 index 0000000..ff293e6 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-12-458Z.yml @@ -0,0 +1,257 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] + - generic [ref=e279]: + - generic [ref=e280]: + - heading "Create Workspace" [level=3] [ref=e281] + - paragraph [ref=e282]: Add a new workspace for your team or projects. + - generic [ref=e283]: + - generic [ref=e284]: + - text: Name + - textbox "Workspace name" [ref=e285] + - generic [ref=e286]: + - text: Description + - textbox "Description" [ref=e287]: + - /placeholder: Optional description + - generic [ref=e288]: + - generic [ref=e289]: + - paragraph [ref=e290]: Public workspace + - paragraph [ref=e291]: Allow all members to discover this workspace. + - switch [ref=e292] [cursor=pointer] + - generic [ref=e293]: + - button "Cancel" [ref=e294] [cursor=pointer] + - button "Create Workspace" [ref=e295] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-13-524Z.yml b/.playwright-cli/page-2026-02-26T15-23-13-524Z.yml new file mode 100644 index 0000000..ff293e6 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-13-524Z.yml @@ -0,0 +1,257 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] + - generic [ref=e279]: + - generic [ref=e280]: + - heading "Create Workspace" [level=3] [ref=e281] + - paragraph [ref=e282]: Add a new workspace for your team or projects. + - generic [ref=e283]: + - generic [ref=e284]: + - text: Name + - textbox "Workspace name" [ref=e285] + - generic [ref=e286]: + - text: Description + - textbox "Description" [ref=e287]: + - /placeholder: Optional description + - generic [ref=e288]: + - generic [ref=e289]: + - paragraph [ref=e290]: Public workspace + - paragraph [ref=e291]: Allow all members to discover this workspace. + - switch [ref=e292] [cursor=pointer] + - generic [ref=e293]: + - button "Cancel" [ref=e294] [cursor=pointer] + - button "Create Workspace" [ref=e295] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-27-789Z.yml b/.playwright-cli/page-2026-02-26T15-23-27-789Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-27-789Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-37-523Z.yml b/.playwright-cli/page-2026-02-26T15-23-37-523Z.yml new file mode 100644 index 0000000..17ec7fc --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-37-523Z.yml @@ -0,0 +1,237 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-39-611Z.yml b/.playwright-cli/page-2026-02-26T15-23-39-611Z.yml new file mode 100644 index 0000000..b8740a6 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-39-611Z.yml @@ -0,0 +1,263 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - generic [ref=e178]: + - button "AU" [active] [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - generic [ref=e267]: + - generic [ref=e269]: + - generic [ref=e270]: AU + - generic [ref=e271]: + - paragraph [ref=e272]: Admin User + - paragraph [ref=e273]: admin@trackeep.com + - generic [ref=e275]: + - generic [ref=e276]: + - paragraph [ref=e277]: "0" + - paragraph [ref=e278]: Bookmarks + - generic [ref=e279]: + - paragraph [ref=e280]: "0" + - paragraph [ref=e281]: Tasks + - button "Profile" [ref=e282] [cursor=pointer]: + - img [ref=e283] + - text: Profile + - button "Statistics" [ref=e286] [cursor=pointer]: + - img [ref=e287] + - text: Statistics + - button "Settings" [ref=e289] [cursor=pointer]: + - img [ref=e290] + - text: Settings + - button "Logout" [ref=e294] [cursor=pointer]: + - img [ref=e295] + - text: Logout + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-23-40-633Z.yml b/.playwright-cli/page-2026-02-26T15-23-40-633Z.yml new file mode 100644 index 0000000..b8740a6 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-23-40-633Z.yml @@ -0,0 +1,263 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - generic [ref=e178]: + - button "AU" [active] [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - generic [ref=e267]: + - generic [ref=e269]: + - generic [ref=e270]: AU + - generic [ref=e271]: + - paragraph [ref=e272]: Admin User + - paragraph [ref=e273]: admin@trackeep.com + - generic [ref=e275]: + - generic [ref=e276]: + - paragraph [ref=e277]: "0" + - paragraph [ref=e278]: Bookmarks + - generic [ref=e279]: + - paragraph [ref=e280]: "0" + - paragraph [ref=e281]: Tasks + - button "Profile" [ref=e282] [cursor=pointer]: + - img [ref=e283] + - text: Profile + - button "Statistics" [ref=e286] [cursor=pointer]: + - img [ref=e287] + - text: Statistics + - button "Settings" [ref=e289] [cursor=pointer]: + - img [ref=e290] + - text: Settings + - button "Logout" [ref=e294] [cursor=pointer]: + - img [ref=e295] + - text: Logout + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Tasks" [level=1] [ref=e188] + - button "Add Task" [ref=e189] [cursor=pointer] + - generic [ref=e190]: + - generic [ref=e191]: + - paragraph [ref=e192]: "0" + - paragraph [ref=e193]: Total Tasks + - generic [ref=e194]: + - paragraph [ref=e195]: "0" + - paragraph [ref=e196]: Active + - generic [ref=e197]: + - paragraph [ref=e198]: "0" + - paragraph [ref=e199]: Completed + - generic [ref=e201]: + - textbox "Search tasks..." [ref=e202] + - combobox [ref=e203]: + - option "All Priorities" [selected] + - option "high" + - option "medium" + - option "low" + - generic [ref=e204]: + - button "all" [ref=e205] [cursor=pointer] + - button "active" [ref=e206] [cursor=pointer] + - button "completed" [ref=e207] [cursor=pointer] + - paragraph [ref=e210]: No tasks yet. Add your first task! + - button "AI Assistant" [ref=e211] [cursor=pointer]: + - img [ref=e212] + - generic [ref=e219]: + - generic [ref=e220]: + - generic [ref=e221]: + - img [ref=e223] + - generic [ref=e230]: + - heading "AI Assistant" [level=3] [ref=e231] + - paragraph [ref=e232]: Always here to help + - button [ref=e234] [cursor=pointer]: + - img [ref=e235] + - generic [ref=e239]: + - img [ref=e241] + - generic [ref=e248]: + - paragraph [ref=e249]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e250]: 04:23 PM + - generic [ref=e251]: + - generic [ref=e252]: + - textbox "Type your message..." [ref=e253] + - button [disabled]: + - img + - generic [ref=e255]: + - button "longcat icon LongCat" [ref=e257] [cursor=pointer]: + - img "longcat icon" [ref=e258] + - generic [ref=e259]: LongCat + - img [ref=e260] + - generic [ref=e262]: + - generic [ref=e263]: longcat + - link "AI settings" [ref=e264] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - heading "Add New Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Add Task" [disabled] + - generic: + - generic: + - generic: + - heading "Edit Task" [level=3] + - button: + - img + - generic: + - textbox "Task title *" + - textbox "Description (optional)" + - generic: + - combobox: + - option "Low Priority" + - option "Medium Priority" [selected] + - option "High Priority" + - generic: + - button "Due date (optional)": + - generic: Due date (optional) + - img + - generic: + - button "Cancel" + - button "Save Changes" [disabled] + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-05-157Z.yml b/.playwright-cli/page-2026-02-26T15-24-05-157Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-05-157Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-14-602Z.yml b/.playwright-cli/page-2026-02-26T15-24-14-602Z.yml new file mode 100644 index 0000000..6dd2582 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-14-602Z.yml @@ -0,0 +1,197 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:24 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-15-685Z.yml b/.playwright-cli/page-2026-02-26T15-24-15-685Z.yml new file mode 100644 index 0000000..6dd2582 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-15-685Z.yml @@ -0,0 +1,197 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:24 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-30-848Z.yml b/.playwright-cli/page-2026-02-26T15-24-30-848Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-30-848Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-40-199Z.yml b/.playwright-cli/page-2026-02-26T15-24-40-199Z.yml new file mode 100644 index 0000000..6dd2582 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-40-199Z.yml @@ -0,0 +1,197 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:24 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-42-323Z.yml b/.playwright-cli/page-2026-02-26T15-24-42-323Z.yml new file mode 100644 index 0000000..2584a1c --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-42-323Z.yml @@ -0,0 +1,197 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [active] [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:24 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-24-43-380Z.yml b/.playwright-cli/page-2026-02-26T15-24-43-380Z.yml new file mode 100644 index 0000000..2584a1c --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-24-43-380Z.yml @@ -0,0 +1,197 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [active] [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:24 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-25-29-514Z.yml b/.playwright-cli/page-2026-02-26T15-25-29-514Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-25-29-514Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-25-38-932Z.yml b/.playwright-cli/page-2026-02-26T15-25-38-932Z.yml new file mode 100644 index 0000000..a7e9817 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-25-38-932Z.yml @@ -0,0 +1,197 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:25 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-25-41-019Z.yml b/.playwright-cli/page-2026-02-26T15-25-41-019Z.yml new file mode 100644 index 0000000..76078dd --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-25-41-019Z.yml @@ -0,0 +1,197 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [active] [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:25 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-25-43-063Z.yml b/.playwright-cli/page-2026-02-26T15-25-43-063Z.yml new file mode 100644 index 0000000..76078dd --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-25-43-063Z.yml @@ -0,0 +1,197 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [active] [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:25 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-26-36-435Z.yml b/.playwright-cli/page-2026-02-26T15-26-36-435Z.yml new file mode 100644 index 0000000..0a86ad7 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-26-36-435Z.yml @@ -0,0 +1,14 @@ +- generic [ref=e5]: + - generic [ref=e7]: + - img "Trackeep Logo" [ref=e10] + - heading "Authentication Required" [level=1] [ref=e11] + - paragraph [ref=e12]: Please sign in to access Trackeep + - generic [ref=e13]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e19]: + - heading "Authentication Required" [level=3] [ref=e20] + - paragraph [ref=e21]: You need to be authenticated to access this page. Please sign in or create an account to continue. + - generic [ref=e22]: + - button "Sign In" [ref=e23] [cursor=pointer] + - button "Create Account" [ref=e24] [cursor=pointer] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-26-45-970Z.yml b/.playwright-cli/page-2026-02-26T15-26-45-970Z.yml new file mode 100644 index 0000000..985c2f2 --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-26-45-970Z.yml @@ -0,0 +1,197 @@ +- generic [active] [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:26 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/.playwright-cli/page-2026-02-26T15-26-48-313Z.yml b/.playwright-cli/page-2026-02-26T15-26-48-313Z.yml new file mode 100644 index 0000000..4854d6e --- /dev/null +++ b/.playwright-cli/page-2026-02-26T15-26-48-313Z.yml @@ -0,0 +1,197 @@ +- generic [ref=e1]: + - generic [ref=e4]: + - generic [ref=e7]: + - link "Trackeep Logo Trackeep" [ref=e9] [cursor=pointer]: + - /url: /app + - img "Trackeep Logo" [ref=e10] + - generic [ref=e11]: Trackeep + - group [ref=e13]: + - button "Trackeep Workspace" [ref=e14] [cursor=pointer]: + - generic [ref=e15]: + - img [ref=e17] + - generic [ref=e20]: Trackeep Workspace + - img [ref=e22] + - navigation [ref=e24]: + - link "Home" [ref=e25] [cursor=pointer]: + - /url: /app + - generic [ref=e26]: + - img [ref=e27] + - generic [ref=e31]: Home + - link "Bookmarks" [ref=e33] [cursor=pointer]: + - /url: /app/bookmarks + - generic [ref=e34]: + - img [ref=e35] + - generic [ref=e37]: Bookmarks + - link "Tasks" [ref=e39] [cursor=pointer]: + - /url: /app/tasks + - generic [ref=e40]: + - img [ref=e41] + - generic [ref=e44]: Tasks + - link "Time Tracking" [ref=e46] [cursor=pointer]: + - /url: /app/time-tracking + - generic [ref=e47]: + - img [ref=e48] + - generic [ref=e51]: Time Tracking + - link "Calendar" [ref=e53] [cursor=pointer]: + - /url: /app/calendar + - generic [ref=e54]: + - img [ref=e55] + - generic [ref=e57]: Calendar + - link "Files" [ref=e59] [cursor=pointer]: + - /url: /app/files + - generic [ref=e60]: + - img [ref=e61] + - generic [ref=e63]: Files + - link "Notes" [ref=e65] [cursor=pointer]: + - /url: /app/notes + - generic [ref=e66]: + - img [ref=e67] + - generic [ref=e69]: Notes + - link "Messages" [ref=e71] [cursor=pointer]: + - /url: /app/messages + - generic [ref=e72]: + - img [ref=e73] + - generic [ref=e75]: Messages + - link "YouTube" [ref=e77] [cursor=pointer]: + - /url: /app/youtube + - generic [ref=e78]: + - img [ref=e79] + - generic [ref=e82]: YouTube + - link "Members" [ref=e84] [cursor=pointer]: + - /url: /app/members + - generic [ref=e85]: + - img [ref=e86] + - generic [ref=e91]: Members + - link "Learning" [ref=e93] [cursor=pointer]: + - /url: /app/learning-paths + - generic [ref=e94]: + - img [ref=e95] + - generic [ref=e98]: Learning + - link "Stats" [ref=e100] [cursor=pointer]: + - /url: /app/stats + - generic [ref=e101]: + - img [ref=e102] + - generic [ref=e104]: Stats + - link "GitHub" [ref=e106] [cursor=pointer]: + - /url: /app/github + - generic [ref=e107]: + - img [ref=e108] + - generic [ref=e110]: GitHub + - link "AI Assistant" [ref=e112] [cursor=pointer]: + - /url: /app/chat + - generic [ref=e113]: + - img [ref=e114] + - generic [ref=e121]: AI Assistant + - generic [ref=e124]: + - generic [ref=e125]: Version 1.0.0 + - button "Update Failed" [ref=e126] [cursor=pointer]: + - generic [ref=e127]: + - img [ref=e128] + - generic [ref=e130]: Update Failed + - navigation [ref=e132]: + - link "Removed stuff" [ref=e133] [cursor=pointer]: + - /url: /app/removed-stuff + - generic [ref=e134]: + - img [ref=e135] + - generic [ref=e138]: Removed stuff + - link "Settings" [ref=e140] [cursor=pointer]: + - /url: /app/settings + - generic [ref=e141]: + - img [ref=e142] + - generic [ref=e145]: Settings + - button "Logout" [ref=e147] [cursor=pointer]: + - generic [ref=e148]: + - img [ref=e149] + - generic [ref=e153]: Logout + - generic [ref=e155]: + - generic [ref=e156]: + - generic [ref=e157]: + - button [ref=e158] [cursor=pointer]: + - img [ref=e159] + - button "Quick search" [ref=e160] [cursor=pointer]: + - img [ref=e161] + - text: Quick search + - generic [ref=e164]: + - button "Import a document" [ref=e165] [cursor=pointer]: + - img [ref=e166] + - text: Import a document + - button [ref=e170] [cursor=pointer]: + - img [ref=e171] + - img [ref=e176] + - button "AU" [ref=e180] [cursor=pointer]: + - generic [ref=e181]: AU + - img [ref=e182] + - main [ref=e184]: + - generic [ref=e186]: + - generic [ref=e187]: + - heading "Files" [level=1] [ref=e188] + - button "Upload File" [active] [ref=e189] [cursor=pointer]: + - img [ref=e190] + - text: Upload File + - generic [ref=e194]: + - textbox "Search files..." [ref=e195] + - combobox [ref=e196]: + - option "All Tags" [selected] + - paragraph [ref=e198]: No files uploaded yet. Upload your first file! + - button "AI Assistant" [ref=e199] [cursor=pointer]: + - img [ref=e200] + - generic [ref=e207]: + - generic [ref=e208]: + - generic [ref=e209]: + - img [ref=e211] + - generic [ref=e218]: + - heading "AI Assistant" [level=3] [ref=e219] + - paragraph [ref=e220]: Always here to help + - button [ref=e222] [cursor=pointer]: + - img [ref=e223] + - generic [ref=e227]: + - img [ref=e229] + - generic [ref=e236]: + - paragraph [ref=e237]: Hello! I'm your AI assistant. How can I help you today? + - paragraph [ref=e238]: 04:26 PM + - generic [ref=e239]: + - generic [ref=e240]: + - textbox "Type your message..." [ref=e241] + - button [disabled]: + - img + - generic [ref=e243]: + - button "longcat icon LongCat" [ref=e245] [cursor=pointer]: + - img "longcat icon" [ref=e246] + - generic [ref=e247]: LongCat + - img [ref=e248] + - generic [ref=e250]: + - generic [ref=e251]: longcat + - link "AI settings" [ref=e252] [cursor=pointer]: + - /url: /app/settings#ai + - generic: + - generic: + - generic: + - generic: + - heading [level=3] + - generic: Unknown size + - button: + - img + - generic: + - generic: Unknown file type + - generic: + - button "Download": + - img + - text: Download + - button "Open": + - img + - text: Open + - generic: + - generic: + - generic: + - heading "Import Documents" [level=3] + - button: + - img + - generic: + - generic: + - img + - heading "Drop files here" [level=4] + - paragraph: or click to browse + - button "Browse Files" + - generic: + - button "Cancel" + - button "Upload 0 Files" [disabled] \ No newline at end of file diff --git a/Dockerfile.youtube-search b/Dockerfile.youtube-search deleted file mode 100644 index 3eaa291..0000000 --- a/Dockerfile.youtube-search +++ /dev/null @@ -1,45 +0,0 @@ -# Build stage for YouTube search service -FROM golang:1.21-alpine AS builder - -# Install git and other build dependencies -RUN apk add --no-cache git - -# Set working directory -WORKDIR /app - -# Copy go mod files -COPY search.go ./ - -# Build the search service -RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o youtube-search search.go - -# Final stage -FROM alpine:latest - -# Install ca-certificates for HTTPS requests -RUN apk --no-cache add ca-certificates wget - -# Create non-root user -RUN addgroup -g 1001 -S appgroup && \ - adduser -u 1001 -S appuser -G appgroup - -WORKDIR /app - -# Copy the binary from builder stage -COPY --from=builder /app/youtube-search . - -# Change ownership to non-root user -RUN chown appuser:appgroup youtube-search - -# Switch to non-root user -USER appuser - -# Expose port -EXPOSE 8090 - -# Health check -HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \ - CMD wget --no-verbose --tries=1 --spider http://localhost:8090/youtube?q=test || exit 1 - -# Run the binary -CMD ["./youtube-search"] \ No newline at end of file diff --git a/Others/browser-extension/icons/icon128.png b/Others/browser-extension/icons/icon128.png index 97d9280..97f5795 100644 Binary files a/Others/browser-extension/icons/icon128.png and b/Others/browser-extension/icons/icon128.png differ diff --git a/Others/browser-extension/icons/icon16.png b/Others/browser-extension/icons/icon16.png index 97d9280..c49afdb 100644 Binary files a/Others/browser-extension/icons/icon16.png and b/Others/browser-extension/icons/icon16.png differ diff --git a/Others/browser-extension/icons/icon32.png b/Others/browser-extension/icons/icon32.png index 97d9280..6bd6c23 100644 Binary files a/Others/browser-extension/icons/icon32.png and b/Others/browser-extension/icons/icon32.png differ diff --git a/Others/browser-extension/icons/icon48.png b/Others/browser-extension/icons/icon48.png index 97d9280..bdab2a4 100644 Binary files a/Others/browser-extension/icons/icon48.png and b/Others/browser-extension/icons/icon48.png differ diff --git a/Others/browser-extension/options.html b/Others/browser-extension/options.html index 940fce1..7fd1053 100644 --- a/Others/browser-extension/options.html +++ b/Others/browser-extension/options.html @@ -4,260 +4,527 @@ Trackeep Saver – Options -

- - Trackeep Saver – Options -

-

Configure how the extension connects to your Trackeep backend.

- -
-
API Configuration
- - - - - -
- How to get your token:
- 1. Log into Trackeep in your browser.
- 2. Open DevTools → Application → Local Storage.
- 3. Find the key trackeep_token and copy its value.
- 4. Paste it above. Never share this token publicly. + +
+
+
+ +
+

Trackeep Saver

+

Configure your extension settings

+
+
+
- -
-
+ +
+
+
+
+ + + + +
+

API Configuration

+
+ +
+ + +
+ +
+ + +
+ +
+
+ + + + + + + + How to get your authentication token: +
+
    +
  1. Log into your Trackeep account in your browser
  2. +
  3. Open Developer Tools (F12) → Application → Local Storage
  4. +
  5. Find key trackeep_token and copy its value
  6. +
  7. Paste token in field above
  8. +
  9. Never share this token publicly - it provides full access to your account
  10. +
+
+ + + + +
+
diff --git a/Others/browser-extension/options.js b/Others/browser-extension/options.js index 9e03ad3..cdbe1f0 100644 --- a/Others/browser-extension/options.js +++ b/Others/browser-extension/options.js @@ -3,13 +3,41 @@ const apiBaseUrlInput = document.getElementById('apiBaseUrl'); const authTokenInput = document.getElementById('authToken'); const saveBtn = document.getElementById('saveBtn'); -const statusEl = document.getElementById('status'); +const statusMessageEl = document.getElementById('statusMessage'); -function setStatus(message, type) { - statusEl.textContent = message || ''; - statusEl.classList.remove('success', 'error'); - if (type) { - statusEl.classList.add(type); +function showMessage(message, type = 'info', duration = 5000) { + statusMessageEl.textContent = message; + statusMessageEl.className = `status-message ${type}`; + statusMessageEl.style.display = 'flex'; + + if (duration > 0) { + setTimeout(() => { + statusMessageEl.style.display = 'none'; + }, duration); + } +} + +function hideMessage() { + statusMessageEl.style.display = 'none'; +} + +function setButtonLoading(button, loading = true) { + if (loading) { + button.disabled = true; + const originalContent = button.innerHTML; + button.dataset.originalContent = originalContent; + button.innerHTML = ` + + + + Saving... + `; + } else { + button.disabled = false; + if (button.dataset.originalContent) { + button.innerHTML = button.dataset.originalContent; + delete button.dataset.originalContent; + } } } @@ -63,17 +91,17 @@ function saveSettings() { const authToken = authTokenInput.value.trim(); if (!apiBaseUrl) { - setStatus('API base URL is required.', 'error'); + showMessage('API base URL is required.', 'error'); return; } if (!authToken) { - setStatus('Auth token is required.', 'error'); + showMessage('Authentication token is required.', 'error'); return; } - saveBtn.disabled = true; - setStatus('Saving…', null); + setButtonLoading(saveBtn, true); + hideMessage(); chrome.storage.sync.set( { @@ -81,18 +109,22 @@ function saveSettings() { trackeepAuthToken: authToken }, () => { - saveBtn.disabled = false; + setButtonLoading(saveBtn, false); if (chrome.runtime.lastError) { - setStatus(`Failed to save: ${chrome.runtime.lastError.message}`, 'error'); + showMessage(`Failed to save: ${chrome.runtime.lastError.message}`, 'error'); } else { - setStatus('Settings saved. You can now use the popup to save bookmarks and files.', 'success'); + showMessage(` + + + + Settings saved successfully! You can now use the extension to save bookmarks and files. + `, 'success'); } } ); } -// Init - +// Initialize everything when DOM is loaded document.addEventListener('DOMContentLoaded', () => { detectAndPrefillApiBaseUrl(() => { loadSettings(); diff --git a/Others/browser-extension/popup.html b/Others/browser-extension/popup.html index cd7c62e..82e4a8a 100644 --- a/Others/browser-extension/popup.html +++ b/Others/browser-extension/popup.html @@ -4,136 +4,345 @@ Trackeep Saver -

- - Trackeep Saver -

-
- - - -
-
Save current page / video
- - - - - - - - - - - - -
-
- - + +
+
+
+ +

Trackeep

- +
+
+ + +
+
+
Checking configuration...
-
- -
-
Upload file to Trackeep
- - - - - - -
- + +
+ +
+ +
-
-
+ +
+
+
+
+ + + + +
+

Save Current Page

+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+ + + + + +
+

Upload File

+
+ +
+ + +
+ +
+ + +
+ + +
+
+ + + + diff --git a/Others/browser-extension/popup.js b/Others/browser-extension/popup.js index e90b37c..2006dd8 100644 --- a/Others/browser-extension/popup.js +++ b/Others/browser-extension/popup.js @@ -1,9 +1,16 @@ /* global chrome */ -const statusEl = document.getElementById('status'); -const configHintEl = document.getElementById('configHint'); +// DOM Elements +const statusIndicatorEl = document.getElementById('statusIndicator'); +const statusTextEl = document.getElementById('statusText'); +const statusMessageEl = document.getElementById('statusMessage'); const openOptionsBtn = document.getElementById('openOptions'); +// Tab elements +const tabBtns = document.querySelectorAll('.tab'); +const tabContents = document.querySelectorAll('.tab-content'); + +// Bookmark elements const bookmarkTitleInput = document.getElementById('bookmarkTitle'); const bookmarkUrlInput = document.getElementById('bookmarkUrl'); const bookmarkDescriptionInput = document.getElementById('bookmarkDescription'); @@ -11,6 +18,7 @@ const bookmarkTagsInput = document.getElementById('bookmarkTags'); const bookmarkPublicInput = document.getElementById('bookmarkPublic'); const saveBookmarkBtn = document.getElementById('saveBookmarkBtn'); +// File elements const fileInput = document.getElementById('fileInput'); const fileDescriptionInput = document.getElementById('fileDescription'); const uploadFileBtn = document.getElementById('uploadFileBtn'); @@ -20,19 +28,86 @@ let trackeepConfig = { authToken: '' }; -function setStatus(message, type) { - statusEl.textContent = message || ''; - statusEl.classList.remove('error', 'success'); - if (type) { - statusEl.classList.add(type); +// Tab switching functionality +function initTabs() { + tabBtns.forEach(btn => { + btn.addEventListener('click', () => { + const targetTab = btn.dataset.tab; + + // Update button states + tabBtns.forEach(b => b.classList.remove('active')); + btn.classList.add('active'); + + // Update content visibility + tabContents.forEach(content => { + content.classList.remove('active'); + if (content.id === `${targetTab}-tab`) { + content.classList.add('active'); + } + }); + }); + }); +} + +// Status management +function updateStatus(text, type = 'info') { + statusTextEl.textContent = text; + statusIndicatorEl.className = 'status-indicator'; + + if (type === 'success') { + statusIndicatorEl.classList.add('connected'); + } else if (type === 'error') { + statusIndicatorEl.classList.add('error'); + } +} + +function showMessage(message, type = 'info', duration = 5000) { + statusMessageEl.textContent = message; + statusMessageEl.className = `status-message ${type}`; + statusMessageEl.style.display = 'flex'; + + // Auto-hide after duration + if (duration > 0) { + setTimeout(() => { + statusMessageEl.style.display = 'none'; + }, duration); + } +} + +function hideMessage() { + statusMessageEl.style.display = 'none'; +} + +// Loading states +function setButtonLoading(button, loading = true) { + if (loading) { + button.disabled = true; + const originalContent = button.innerHTML; + button.dataset.originalContent = originalContent; + button.innerHTML = ` + + + + Processing... + `; + } else { + button.disabled = false; + if (button.dataset.originalContent) { + button.innerHTML = button.dataset.originalContent; + delete button.dataset.originalContent; + } } } function disableForms(disabled) { - [bookmarkTitleInput, bookmarkUrlInput, bookmarkDescriptionInput, bookmarkTagsInput, bookmarkPublicInput, saveBookmarkBtn, - fileInput, fileDescriptionInput, uploadFileBtn].forEach((el) => { - if (!el) return; - el.disabled = disabled; + const elements = [ + bookmarkTitleInput, bookmarkUrlInput, bookmarkDescriptionInput, + bookmarkTagsInput, bookmarkPublicInput, saveBookmarkBtn, + fileInput, fileDescriptionInput, uploadFileBtn + ]; + + elements.forEach(el => { + if (el) el.disabled = disabled; }); } @@ -44,10 +119,12 @@ function loadConfig(callback) { trackeepConfig = { apiBaseUrl, authToken }; if (!apiBaseUrl || !authToken) { - configHintEl.textContent = 'Configure API URL and token in Options to enable saving.'; + updateStatus('Configuration required', 'error'); + showMessage('Configure API URL and token in Options to enable saving.', 'error'); disableForms(true); } else { - configHintEl.textContent = `Using API: ${apiBaseUrl}`; + updateStatus(`Connected to ${apiBaseUrl}`, 'success'); + hideMessage(); disableForms(false); } @@ -67,11 +144,9 @@ function detectTrackeepDomain(callback) { try { const url = new URL(tab.url); - // Common Trackeep domains: localhost, trackeep.*, etc. const isTrackeepDomain = url.hostname.includes('trackeep') || url.hostname === 'localhost'; if (isTrackeepDomain && url.protocol === 'https:') { const candidate = `${url.origin}/api/v1`; - // Only pre-fill if not already set chrome.storage.sync.get(['trackeepApiBaseUrl'], (items) => { if (!items.trackeepApiBaseUrl) { chrome.storage.sync.set({ trackeepApiBaseUrl: candidate }, () => { @@ -96,11 +171,9 @@ function initActiveTab() { const tab = tabs && tabs[0]; if (!tab) return; - // Check for context menu data first chrome.storage.local.get(['contextMenuData'], (items) => { const ctx = items.contextMenuData; if (ctx && ctx.timestamp && Date.now() - ctx.timestamp < 5000) { - // Use context menu data if recent if (ctx.url && !bookmarkUrlInput.value) { bookmarkUrlInput.value = ctx.url; } @@ -110,10 +183,8 @@ function initActiveTab() { if (ctx.selection && !bookmarkDescriptionInput.value) { bookmarkDescriptionInput.value = ctx.selection; } - // Clear after using chrome.storage.local.remove(['contextMenuData']); } else { - // Fallback to active tab if (tab.title && !bookmarkTitleInput.value) { bookmarkTitleInput.value = tab.title; } @@ -127,17 +198,17 @@ function initActiveTab() { async function saveBookmark(event) { event.preventDefault(); - setStatus('', null); + hideMessage(); const { apiBaseUrl, authToken } = trackeepConfig; if (!apiBaseUrl || !authToken) { - setStatus('Missing API URL or auth token. Open options first.', 'error'); + showMessage('Missing API URL or auth token. Open options first.', 'error'); return; } const url = bookmarkUrlInput.value.trim(); if (!url) { - setStatus('URL is required.', 'error'); + showMessage('URL is required.', 'error'); return; } @@ -158,8 +229,8 @@ async function saveBookmark(event) { is_public: isPublic }; - saveBookmarkBtn.disabled = true; - setStatus('Saving bookmark…', null); + setButtonLoading(saveBookmarkBtn, true); + showMessage('Saving bookmark...', 'info', 0); try { const base = apiBaseUrl.replace(/\/$/, ''); @@ -185,28 +256,41 @@ async function saveBookmark(event) { throw new Error(errorMessage); } - setStatus('Bookmark saved to Trackeep.', 'success'); + showMessage(` + + + + Bookmark saved successfully! + `, 'success'); + + // Clear form after successful save + setTimeout(() => { + bookmarkDescriptionInput.value = ''; + bookmarkTagsInput.value = ''; + bookmarkPublicInput.checked = false; + }, 2000); + } catch (err) { console.error('Error saving bookmark', err); - setStatus(err && err.message ? err.message : 'Failed to save bookmark.', 'error'); + showMessage(err && err.message ? err.message : 'Failed to save bookmark.', 'error'); } finally { - saveBookmarkBtn.disabled = false; + setButtonLoading(saveBookmarkBtn, false); } } async function uploadFile(event) { event.preventDefault(); - setStatus('', null); + hideMessage(); const { apiBaseUrl, authToken } = trackeepConfig; if (!apiBaseUrl || !authToken) { - setStatus('Missing API URL or auth token. Open options first.', 'error'); + showMessage('Missing API URL or auth token. Open options first.', 'error'); return; } const file = fileInput.files && fileInput.files[0]; if (!file) { - setStatus('Please choose a file to upload.', 'error'); + showMessage('Please choose a file to upload.', 'error'); return; } @@ -218,8 +302,8 @@ async function uploadFile(event) { formData.append('description', description); } - uploadFileBtn.disabled = true; - setStatus('Uploading file…', null); + setButtonLoading(uploadFileBtn, true); + showMessage('Uploading file...', 'info', 0); try { const base = apiBaseUrl.replace(/\/$/, ''); @@ -244,14 +328,24 @@ async function uploadFile(event) { throw new Error(errorMessage); } - setStatus('File uploaded to Trackeep.', 'success'); - fileInput.value = ''; - fileDescriptionInput.value = ''; + showMessage(` + + + + File uploaded successfully! + `, 'success'); + + // Clear form after successful upload + setTimeout(() => { + fileInput.value = ''; + fileDescriptionInput.value = ''; + }, 2000); + } catch (err) { console.error('Error uploading file', err); - setStatus(err && err.message ? err.message : 'Failed to upload file.', 'error'); + showMessage(err && err.message ? err.message : 'Failed to upload file.', 'error'); } finally { - uploadFileBtn.disabled = false; + setButtonLoading(uploadFileBtn, false); } } @@ -263,9 +357,12 @@ function openOptions() { } } -// Init - +// Initialize everything when DOM is loaded document.addEventListener('DOMContentLoaded', () => { + // Initialize tabs + initTabs(); + + // Event listeners openOptionsBtn.addEventListener('click', openOptions); saveBookmarkBtn.addEventListener('click', (e) => { e.preventDefault(); @@ -276,6 +373,7 @@ document.addEventListener('DOMContentLoaded', () => { uploadFile(e); }); + // Initialize configuration and active tab detectTrackeepDomain(() => { loadConfig(() => { initActiveTab(); diff --git a/backend/handlers/admin.go b/backend/handlers/admin.go index aba19ae..574b58d 100644 --- a/backend/handlers/admin.go +++ b/backend/handlers/admin.go @@ -8,6 +8,7 @@ import ( "github.com/gin-gonic/gin" "github.com/trackeep/backend/config" "github.com/trackeep/backend/models" + "golang.org/x/crypto/bcrypt" ) // AdminMiddleware checks if user is admin @@ -212,6 +213,71 @@ func AdminGetUsers(c *gin.Context) { }) } +// AdminCreateUser handles POST /api/v1/admin/users +func AdminCreateUser(c *gin.Context) { + db := config.GetDB() + + var req struct { + Email string `json:"email" binding:"required,email"` + Username string `json:"username" binding:"required,min=3,max=50"` + Password string `json:"password" binding:"required,min=6"` + FullName string `json:"fullName" binding:"required,min=1,max=100"` + Role string `json:"role"` + } + + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + role := req.Role + if role == "" { + role = "user" + } + if role != "user" && role != "admin" { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid role. Must be 'user' or 'admin'"}) + return + } + + var existing models.User + if err := db.Where("email = ?", req.Email).First(&existing).Error; err == nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "User with this email already exists"}) + return + } + if err := db.Where("username = ?", req.Username).First(&existing).Error; err == nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Username already taken"}) + return + } + + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to hash password"}) + return + } + + user := models.User{ + Email: req.Email, + Username: req.Username, + Password: string(hashedPassword), + FullName: req.FullName, + Role: role, + Theme: "dark", + } + + if err := db.Create(&user).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create user"}) + return + } + + _ = ensureMessagingDefaults(db, user.ID) + + user.Password = "" + c.JSON(http.StatusCreated, gin.H{ + "message": "User created successfully", + "user": user, + }) +} + // AdminUpdateUserRole handles PUT /api/v1/admin/users/:id/role func AdminUpdateUserRole(c *gin.Context) { db := config.GetDB() diff --git a/backend/handlers/ai_features.go b/backend/handlers/ai_features.go index 193e079..e416c5a 100644 --- a/backend/handlers/ai_features.go +++ b/backend/handlers/ai_features.go @@ -588,7 +588,7 @@ Provide a JSON array of task objects with: - context_data: Additional context - deadline: Suggested deadline (ISO date or null) - estimated_time: Estimated time in minutes -- confidence: Confidence score 0-1`, contextData, limit) +- confidence: Confidence score 0-1`, limit, contextData) messages := []services.Message{ {Role: "system", Content: "You are a productivity assistant. Always respond with valid JSON array."}, diff --git a/backend/handlers/auth.go b/backend/handlers/auth.go index 333d913..379beb1 100644 --- a/backend/handlers/auth.go +++ b/backend/handlers/auth.go @@ -95,6 +95,33 @@ func ValidateJWT(tokenString string) (*Claims, error) { return nil, errors.New("invalid token") } +func getAuthenticatedUserFromHeader(c *gin.Context, db *gorm.DB) (*models.User, error) { + authHeader := c.GetHeader("Authorization") + if authHeader == "" { + return nil, errors.New("authorization header required") + } + + tokenString := authHeader + if strings.HasPrefix(authHeader, "Bearer ") { + tokenString = strings.TrimSpace(strings.TrimPrefix(authHeader, "Bearer ")) + } + if tokenString == "" { + return nil, errors.New("invalid authorization header") + } + + claims, err := ValidateJWT(tokenString) + if err != nil { + return nil, err + } + + var user models.User + if err := db.First(&user, claims.UserID).Error; err != nil { + return nil, err + } + + return &user, nil +} + // AuthMiddleware validates JWT tokens func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { @@ -202,6 +229,24 @@ func Register(c *gin.Context) { db := config.GetDB() + // Registration rules: + // - First user can self-register and becomes admin. + // - After that, only authenticated admins can create users. + var userCount int64 + if err := db.Model(&models.User{}).Count(&userCount).Error; err != nil { + c.JSON(500, gin.H{"error": "Failed to check existing users"}) + return + } + + isFirstUser := userCount == 0 + if !isFirstUser { + requester, err := getAuthenticatedUserFromHeader(c, db) + if err != nil || requester.Role != "admin" { + c.JSON(403, gin.H{"error": "Registration is disabled. Only an administrator can create users."}) + return + } + } + // Check if user already exists var existingUser models.User if err := db.Where("email = ?", req.Email).First(&existingUser).Error; err == nil { @@ -222,11 +267,17 @@ func Register(c *gin.Context) { } // Create user + role := "user" + if isFirstUser { + role = "admin" + } + user := models.User{ Email: req.Email, Username: req.Username, Password: string(hashedPassword), FullName: req.FullName, + Role: role, Theme: "dark", } diff --git a/backend/handlers/file.go b/backend/handlers/file.go index 1b82979..15c964d 100644 --- a/backend/handlers/file.go +++ b/backend/handlers/file.go @@ -6,6 +6,7 @@ import ( "net/http" "os" "path/filepath" + "strconv" "strings" "time" @@ -18,10 +19,40 @@ import ( func GetFiles(c *gin.Context) { var files []models.File - // TODO: Get user ID from authentication context - userID := uint(1) // Placeholder + userID := c.GetUint("user_id") + if userID == 0 { + userID = c.GetUint("userID") + } + if userID == 0 { + c.JSON(http.StatusUnauthorized, gin.H{"error": "User not authenticated"}) + return + } - if err := models.DB.Where("user_id = ?", userID).Find(&files).Error; err != nil { + query := models.DB.Where("user_id = ?", userID) + + if rawQuery := strings.TrimSpace(c.Query("q")); rawQuery != "" { + needle := "%" + strings.ToLower(rawQuery) + "%" + query = query.Where("LOWER(original_name) LIKE ? OR LOWER(description) LIKE ?", needle, needle) + } + + limitApplied := false + if limitRaw := strings.TrimSpace(c.Query("limit")); limitRaw != "" { + limit, err := strconv.Atoi(limitRaw) + if err != nil || limit <= 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid limit"}) + return + } + if limit > 100 { + limit = 100 + } + query = query.Limit(limit) + limitApplied = true + } + if !limitApplied && strings.TrimSpace(c.Query("q")) != "" { + query = query.Limit(20) + } + + if err := query.Order("created_at DESC").Find(&files).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve files"}) return } diff --git a/backend/handlers/messages.go b/backend/handlers/messages.go index 3927869..9450006 100644 --- a/backend/handlers/messages.go +++ b/backend/handlers/messages.go @@ -640,41 +640,23 @@ func CreateConversationMessage(c *gin.Context) { return } - if strings.TrimSpace(req.Body) == "" && len(req.Attachments) == 0 { + trimmedBody := strings.TrimSpace(req.Body) + if trimmedBody == "" && len(req.Attachments) == 0 { c.JSON(http.StatusBadRequest, gin.H{"error": "Message body or attachments are required"}) return } - metadataJSON := "{}" - if req.Metadata != nil { - if raw, err := json.Marshal(req.Metadata); err == nil { - metadataJSON = string(raw) - } - } - - message := models.Message{ - ConversationID: conversationID, - SenderID: userID, - Body: strings.TrimSpace(req.Body), - MetadataJSON: metadataJSON, - } - if err := models.DB.Create(&message).Error; err != nil { - c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create message"}) - return - } - attachmentRows := make([]models.MessageAttachment, 0, len(req.Attachments)) for _, a := range req.Attachments { attachmentRows = append(attachmentRows, models.MessageAttachment{ - MessageID: message.ID, - Kind: normalizeAttachmentKind(a.Kind), - FileID: a.FileID, - URL: a.URL, - Title: a.Title, + Kind: normalizeAttachmentKind(a.Kind), + FileID: a.FileID, + URL: a.URL, + Title: a.Title, }) } - suggestions, inferredAttachments, isSensitive := services.DetectMessageContent(message.Body) + suggestions, inferredAttachments, isSensitive := services.DetectMessageContent(trimmedBody) for _, inferred := range inferredAttachments { if hasAttachment(attachmentRows, inferred.Kind, inferred.URL) { continue @@ -684,13 +666,55 @@ func CreateConversationMessage(c *gin.Context) { previewJSON = string(raw) } attachmentRows = append(attachmentRows, models.MessageAttachment{ - MessageID: message.ID, Kind: normalizeAttachmentKind(inferred.Kind), URL: inferred.URL, Title: inferred.Title, PreviewJSON: previewJSON, }) } + + metadataMap := map[string]interface{}{} + for k, v := range req.Metadata { + metadataMap[k] = v + } + + storedBody := trimmedBody + if isSensitive && (conv.Type == models.ConversationTypeDM || conv.Type == models.ConversationTypeSelf) && trimmedBody != "" { + ciphertext, err := utils.Encrypt(trimmedBody) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to encrypt sensitive message"}) + return + } + storedBody = maskSensitiveBody(trimmedBody) + metadataMap["sensitive_payload"] = map[string]interface{}{ + "version": "v1", + "ciphertext": ciphertext, + "masked_body": storedBody, + "scope": string(conv.Type), + } + } + + metadataJSON := "{}" + if len(metadataMap) > 0 { + if raw, err := json.Marshal(metadataMap); err == nil { + metadataJSON = string(raw) + } + } + + message := models.Message{ + ConversationID: conversationID, + SenderID: userID, + Body: storedBody, + MetadataJSON: metadataJSON, + } + if err := models.DB.Create(&message).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create message"}) + return + } + + for i := range attachmentRows { + attachmentRows[i].MessageID = message.ID + } if len(attachmentRows) > 0 { models.DB.Create(&attachmentRows) } @@ -1187,6 +1211,37 @@ func DismissMessageSuggestion(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"suggestion": suggestion}) } +// RevealSensitiveMessage decrypts and returns sensitive message plaintext for authorized members. +func RevealSensitiveMessage(c *gin.Context) { + userID := getAuthUserID(c) + messageID, err := parseUintParam(c, "id") + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid message id"}) + return + } + + var msg models.Message + if err := models.DB.First(&msg, messageID).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "Message not found"}) + return + } + if _, _, err := getConversationWithMembership(models.DB, msg.ConversationID, userID); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": "Access denied"}) + return + } + + plaintext, ok := extractSensitivePlaintext(msg.MetadataJSON) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "Sensitive payload not found"}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message_id": msg.ID, + "plaintext": plaintext, + }) +} + // GetPasswordVaultItems returns owned and explicitly shared vault items. func GetPasswordVaultItems(c *gin.Context) { userID := getAuthUserID(c) @@ -1760,11 +1815,15 @@ func applySuggestionAction(db *gorm.DB, userID uint, message *models.Message, su return gin.H{"deep_link": ref.DeepLink}, nil case "move_to_password_vault": + secretSource := message.Body + if sensitivePlaintext, ok := extractSensitivePlaintext(message.MetadataJSON); ok { + secretSource = sensitivePlaintext + } label := "Imported from chat" - if compact := compactMessageTitle(message.Body, 50); compact != "" { + if compact := compactMessageTitle(secretSource, 50); compact != "" { label = compact } - encryptedSecret, err := utils.Encrypt(message.Body) + encryptedSecret, err := utils.Encrypt(secretSource) if err != nil { return nil, err } @@ -2026,6 +2085,70 @@ func hasAttachment(rows []models.MessageAttachment, kind, url string) bool { return false } +func maskSensitiveBody(text string) string { + trimmed := strings.TrimSpace(text) + if trimmed == "" { + return "[sensitive content hidden]" + } + + parts := strings.Fields(trimmed) + if len(parts) == 0 { + return "[sensitive content hidden]" + } + + maskedParts := make([]string, 0, len(parts)) + for _, part := range parts { + runes := []rune(part) + if len(runes) <= 2 { + maskedParts = append(maskedParts, "**") + continue + } + maskedParts = append(maskedParts, strings.Repeat("*", len(runes))) + } + return strings.Join(maskedParts, " ") +} + +func extractSensitivePlaintext(metadataJSON string) (string, bool) { + payload := extractSensitivePayload(metadataJSON) + if payload == nil { + return "", false + } + + ciphertext := asString(payload["ciphertext"]) + if ciphertext == "" { + return "", false + } + + plaintext, err := utils.Decrypt(ciphertext) + if err != nil { + return "", false + } + return plaintext, true +} + +func extractSensitivePayload(metadataJSON string) map[string]interface{} { + trimmed := strings.TrimSpace(metadataJSON) + if trimmed == "" || trimmed == "{}" { + return nil + } + + metadata := map[string]interface{}{} + if err := json.Unmarshal([]byte(trimmed), &metadata); err != nil { + return nil + } + + rawPayload, ok := metadata["sensitive_payload"] + if !ok || rawPayload == nil { + return nil + } + + payload, ok := rawPayload.(map[string]interface{}) + if !ok { + return nil + } + return payload +} + func normalizeAttachmentKind(kind string) string { k := strings.ToLower(strings.TrimSpace(kind)) switch k { diff --git a/backend/main.go b/backend/main.go index 7e60b01..c32e442 100644 --- a/backend/main.go +++ b/backend/main.go @@ -369,6 +369,7 @@ func main() { messages.GET("/messages/:id/suggestions", handlers.GetMessageSuggestions) messages.POST("/messages/:id/suggestions/:suggestionId/accept", handlers.AcceptMessageSuggestion) messages.POST("/messages/:id/suggestions/:suggestionId/dismiss", handlers.DismissMessageSuggestion) + messages.POST("/messages/:id/reveal-sensitive", handlers.RevealSensitiveMessage) messages.GET("/ws", handlers.MessagesWebSocket) messages.GET("/password-vault/items", handlers.GetPasswordVaultItems) diff --git a/backend/services/favicon_fetcher.go b/backend/services/favicon_fetcher.go index 70aae10..6cbb07c 100644 --- a/backend/services/favicon_fetcher.go +++ b/backend/services/favicon_fetcher.go @@ -196,6 +196,10 @@ func (ff *FaviconFetcher) makeAbsoluteURL(href string, baseURL *url.URL) string if idx := strings.Index(href, "#"); idx != -1 { href = href[:idx] } + href = strings.TrimSpace(href) + if href == "" { + return "" + } // Handle different URL types if strings.HasPrefix(href, "http://") || strings.HasPrefix(href, "https://") { @@ -206,22 +210,11 @@ func (ff *FaviconFetcher) makeAbsoluteURL(href string, baseURL *url.URL) string return baseURL.Scheme + ":" + href } - if strings.HasPrefix(href, "/") { - return baseURL.Scheme + "://" + baseURL.Host + href + ref, err := url.Parse(href) + if err != nil { + return href } - - // Relative path - construct proper URL - if baseURL.Path == "" || baseURL.Path == "/" { - return baseURL.Scheme + "://" + baseURL.Host + "/" + href - } - - // Remove filename from base path - basePath := baseURL.Path - if lastSlash := strings.LastIndex(basePath, "/"); lastSlash != -1 { - basePath = basePath[:lastSlash+1] - } - - return baseURL.Scheme + "://" + baseURL.Host + basePath + href + return baseURL.ResolveReference(ref).String() } // tryCommonLocations tries common favicon file paths diff --git a/docker-compose.published.yml b/docker-compose.published.yml new file mode 100644 index 0000000..fde10e6 --- /dev/null +++ b/docker-compose.published.yml @@ -0,0 +1,56 @@ +services: + postgres: + image: postgres:15-alpine + environment: + POSTGRES_DB: ${DB_NAME:-trackeep} + POSTGRES_USER: ${DB_USER:-trackeep} + POSTGRES_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-trackeep} -d ${DB_NAME:-trackeep}"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + trackeep-backend: + image: ghcr.io/Dvorinka/trackeep/backend:latest + ports: + - "${PORT:-8080}:8080" + env_file: + - .env + volumes: + - ./data:/data + - ./uploads:/app/uploads + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8080/health || wget --no-verbose --tries=1 --spider http://localhost:8080/live"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + trackeep-frontend: + image: ghcr.io/Dvorinka/trackeep/frontend:latest + ports: + - "5173:80" + depends_on: + trackeep-backend: + condition: service_healthy + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pgrep nginx > /dev/null || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s + +volumes: + postgres_data: diff --git a/docker-compose.yml b/docker-compose.yml index bc864c4..56e1771 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,16 +2,16 @@ services: postgres: image: postgres:15-alpine environment: - POSTGRES_DB: ${POSTGRES_DB:-trackeep} - POSTGRES_USER: ${POSTGRES_USER:-trackeep} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} + POSTGRES_DB: ${DB_NAME:-trackeep} + POSTGRES_USER: ${DB_USER:-trackeep} + POSTGRES_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-trackeep} -d ${POSTGRES_DB:-trackeep}"] + test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-trackeep} -d ${DB_NAME:-trackeep}"] interval: 10s timeout: 5s retries: 5 diff --git a/enable-demo-mode.js b/enable-demo-mode.js deleted file mode 100644 index 3261518..0000000 --- a/enable-demo-mode.js +++ /dev/null @@ -1,4 +0,0 @@ -// Enable demo mode - run this in browser console -localStorage.setItem('demoMode', 'true'); -document.title = 'Trackeep - Demo Mode'; -console.log('Demo mode enabled! Refresh the page to see changes.'); diff --git a/frontend/src/components/AuthenticationWarning.tsx b/frontend/src/components/AuthenticationWarning.tsx index 42b714a..776f444 100644 --- a/frontend/src/components/AuthenticationWarning.tsx +++ b/frontend/src/components/AuthenticationWarning.tsx @@ -27,11 +27,13 @@ export const AuthenticationWarning = () => {
- Trackeep Logo +
+ Trackeep Logo +

Authentication Required

Please sign in to access Trackeep

diff --git a/frontend/src/components/ProtectedRoute.tsx b/frontend/src/components/ProtectedRoute.tsx index a9a3803..16df568 100644 --- a/frontend/src/components/ProtectedRoute.tsx +++ b/frontend/src/components/ProtectedRoute.tsx @@ -1,32 +1,32 @@ import { useAuth } from '@/lib/auth'; import { AuthenticationWarning } from '@/components/AuthenticationWarning'; import { isDemoMode } from '@/lib/demo-mode'; +import { Show } from 'solid-js'; interface ProtectedRouteProps { children: any; } export const ProtectedRoute = (props: ProtectedRouteProps) => { - // In demo mode, show UI immediately without any checks - if (isDemoMode()) { - console.log('[ProtectedRoute] Demo mode active - showing UI immediately'); - return props.children; - } - const { authState } = useAuth(); - console.log('[ProtectedRoute] Render:', { - isDemoMode: isDemoMode(), - isAuthenticated: authState.isAuthenticated, - isLoading: authState.isLoading - }); - - // If not authenticated, show authentication warning (no loading state) - if (!authState.isAuthenticated) { - console.log('[ProtectedRoute] Rendering authentication warning'); - return ; - } - - console.log('[ProtectedRoute] Rendering children'); - return props.children; + return ( + + +
+
+

Checking authentication...

+
+
+ } + > + }> + {props.children} + + + + ); }; diff --git a/frontend/src/components/Timer.tsx b/frontend/src/components/Timer.tsx index e8264ed..09756b0 100644 --- a/frontend/src/components/Timer.tsx +++ b/frontend/src/components/Timer.tsx @@ -16,6 +16,7 @@ import { type TimeEntry } from '../lib/api'; import { TagPicker } from '@/components/ui/TagPicker'; +import { isDemoMode } from '@/lib/demo-mode'; interface TimerProps { onTimeEntryCreated?: (timeEntry: TimeEntry) => void; @@ -38,13 +39,6 @@ export const Timer = (props: TimerProps) => { const [showSettings, setShowSettings] = createSignal(false); const [availableTags, setAvailableTags] = createSignal([]); - // Check if we're in demo mode - const isDemoMode = () => { - return localStorage.getItem('demoMode') === 'true' || - document.title.includes('Demo Mode') || - window.location.search.includes('demo=true'); - }; - // Use appropriate API based on demo mode const getApi = () => isDemoMode() ? demoTimeEntriesApi : timeEntriesApi; diff --git a/frontend/src/components/layout/FloatingAI.tsx b/frontend/src/components/layout/FloatingAI.tsx index 051412e..051450a 100644 --- a/frontend/src/components/layout/FloatingAI.tsx +++ b/frontend/src/components/layout/FloatingAI.tsx @@ -1,6 +1,7 @@ import { createSignal, Show } from 'solid-js' import { IconX, IconSend, IconUser, IconChevronDown } from '@tabler/icons-solidjs' import longcatIcon from '@/assets/longcat-color.svg' +import { ModalPortal } from '@/components/ui/ModalPortal' interface FloatingAIProps { onToggleChat: () => void @@ -79,8 +80,9 @@ export function FloatingAI(props: FloatingAIProps) { {/* AI Chat Modal */} -
-
+ +
+
{/* Header */}
@@ -177,8 +179,9 @@ export function FloatingAI(props: FloatingAIProps) {
+
-
+ ) diff --git a/frontend/src/components/layout/Header.tsx b/frontend/src/components/layout/Header.tsx index 8a60fd1..1b4d6b1 100644 --- a/frontend/src/components/layout/Header.tsx +++ b/frontend/src/components/layout/Header.tsx @@ -56,6 +56,18 @@ export function Header(props: HeaderProps) {
{/* Left side */}
+ + {/* Menu button */} - - -
-
+
+
+ + {/* Organization Selector */} -
+
+ + + + <> +
+
+
+
+

Create Workspace

+

Add a new workspace for your team or projects.

+
+ +
+
+ + setWorkspaceName((event.currentTarget as HTMLInputElement).value)} + required + disabled={isCreatingWorkspace()} + /> +
+ +
+ +