Matthieu
5ffb4bbedc
chore : bump version to 0.2.3 and add Monolog logging
...
Auto Tag Develop / tag (push) Successful in 6s
Build Release Artefact / build (push) Successful in 1m22s
Add symfony/monolog-bundle with rotating file logs in dev (7 days)
and fingers_crossed + rotating file in prod (30 days).
Deploy script now ensures var/log/ permissions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.2.3
2026-03-17 08:52:06 +01:00
Matthieu
d2e9f9ed65
chore : bump version to 0.2.2
...
Auto Tag Develop / tag (push) Successful in 4s
Build Release Artefact / build (push) Successful in 1m31s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.2.2
2026-03-16 16:35:08 +01:00
Matthieu
c5898fbf74
feat(ui) : add create task button on my-tasks and responsive kanban columns
...
- Add "Créer une tâche" button on my-tasks page with mandatory project selector
- TaskModal now accepts optional projects prop for project selection in create mode
- Replace fixed-width kanban columns (w-72 shrink-0) with flexible layout (min-w-36 flex-1)
- Add min-w-0 and overflow-x-hidden on default layout to properly contain content
- Kanban now adapts to screen size from 1024px to 1920px+
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 16:35:02 +01:00
Matthieu
0180dd3715
chore : bump version to 0.2.1
...
Auto Tag Develop / tag (push) Successful in 5s
Build Release Artefact / build (push) Successful in 1m32s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.2.1
2026-03-16 14:41:38 +01:00
Matthieu
0f99098291
chore : bump version to 0.2.0 and update deploy doc
...
Auto Tag Develop / tag (push) Successful in 5s
Build Release Artefact / build (push) Failing after 1m25s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.2.0
2026-03-16 14:29:41 +01:00
Matthieu
1c6f473dff
feat(mcp) : add clientTicket relation to time entries
...
Add ManyToOne relation from TimeEntry to ClientTicket entity.
MCP tools create-time-entry, update-time-entry, and list-time-entries
now support clientTicketId parameter for linking tickets to time entries.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 14:28:31 +01:00
Matthieu
c95fff530c
docs(deploy) : add deployment guide and MCP connection tutorial
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 14:28:31 +01:00
gitea-actions
fb0e6c1ea4
chore: bump version to v0.1.2
Auto Tag Develop / tag (push) Successful in 4s
Build Release Artefact / build (push) Successful in 1m19s
v0.1.2
2026-03-16 08:52:02 +00:00
Matthieu
6d3ecc1322
Merge branch 'feature/client-portal' into develop
Auto Tag Develop / tag (push) Has been cancelled
2026-03-16 09:51:48 +01:00
Matthieu
f5986090c0
feat(deploy) : add deploy script and nginx config for bare Ubuntu server
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:51:29 +01:00
Matthieu
d6399c20e1
fix : fix MCP create-task tool crashing on task creation
...
CreateTaskTool called nonexistent findMaxNumberByProject instead of
findMaxNumberByProjectForUpdate. Also removed FOR UPDATE clause from the
query as PostgreSQL does not support it with aggregate functions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:36 +01:00
Matthieu
a972d243f5
style : center and resize view toggle buttons on my-tasks page
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:34 +01:00
Matthieu
56bf88f293
fix : prevent document delete button from submitting the TaskModal form
...
The delete button in TaskDocumentList lacked type="button", causing it to
act as a submit button inside the form, which triggered handleSubmit and
closed the modal before the confirmation dialog could appear. Also added
guards to prevent closing TaskModal while a sub-modal is open.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:32 +01:00
9d80e017c2
docs : complete architecture tree in README with all directories
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:27:52 +01:00
4e91507158
docs : rewrite README with full project documentation
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:25:42 +01:00
318f14ea88
docs : update CLAUDE.md with avatar feature context and gotchas
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:21:12 +01:00
202b516dc3
fix(avatar) : install symfony/mime for server-side MIME type detection
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:13:18 +01:00
98782a9849
fix(avatar) : add explicit import for useAvatarService in profile page
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:12:38 +01:00
b978adf9ae
fix(avatar) : move avatar service to composables for Nuxt auto-import
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:11:03 +01:00
e4fc34b90f
refactor : simplify codebase and fix critical issues
...
Backend:
- Add MCP Serializer to centralize entity-to-array conversion (~300 lines deduped)
- Fix race condition in task/ticket number generation (SELECT FOR UPDATE + transaction)
- Add unique constraint on task (project_id, number) with migration
- Fix MIME type validation: use server-detected finfo instead of client-supplied type
- Add allowlist of permitted MIME types for uploads
- Fix TaskDocumentDownloadController: allow ROLE_CLIENT access, add priority:1
- Fix notification sent even when ticket status unchanged
- Remove redundant exception constructors
- Simplify services (BookStackApi double fetch, TokenEncryptor, GiteaApi)
- Consolidate duplicate checks in processors
Frontend:
- Fix useApi isHandlingUnauthorized scope (module-level to prevent double 401 redirect)
- Fix client-tickets toast key copy-paste bug
- Merge duplicated tasks service methods (getByProject + getByProjectArchived)
- Extract shared uploadWithRelation helper in task-documents service
- Extract formatFileSize utility from duplicated component code
- Extract status transition logic into useClientTicketHelpers composable
- Remove dead code (unused router, handleLogout, empty script blocks)
- Merge duplicate watchers and onMounted calls
- Normalize arrow functions to function declarations per convention
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:09:16 +01:00
a5144443a4
fix(avatar) : address review findings — security and UX fixes
...
- Use getMimeType() instead of getClientMimeType() to prevent MIME spoofing
- Change IsGranted to IS_AUTHENTICATED_FULLY so ROLE_CLIENT can access avatars
- Remove Groups from avatarFileName (only avatarUrl needed by frontend)
- Disable aggressive caching to prevent stale avatar images
- Add error handling to avatar upload in profile page
- Use i18n for "Mon profil" button text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:02:27 +01:00
afd4baed92
feat(avatar) : replace initials with UserAvatar component everywhere
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:58:46 +01:00
e8f0202b15
feat(avatar) : add profile page with avatar upload and crop
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:57:55 +01:00
962b3d935c
feat(avatar) : add AvatarCropper modal with vue-advanced-cropper
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:56:11 +01:00
cea22f977b
feat(avatar) : add UserAvatar component with image/initials fallback
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:55:52 +01:00
5613a7c92b
feat(avatar) : add avatar service, DTO update, and cropper dependency
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:55:39 +01:00
4d0aa65920
feat(avatar) : add avatar upload/serve/delete controller
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:54:23 +01:00
63315c0a15
feat(avatar) : add avatarFileName field to User entity
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:53:43 +01:00
cff16611f4
docs : add user avatar implementation plan
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:50:07 +01:00
96f5c7c91c
docs : add user avatar feature design spec
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:47:38 +01:00
f7a76c9e9b
feat(frontend) : add date filter component to time-tracking page
...
Reusable DateFilter component using @vuepic/vue-datepicker with day/week
toggle. Selecting a day switches to day view, selecting a week navigates
the calendar to that week. Includes "Aujourd'hui" and "Cette semaine"
quick shortcuts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:46:48 +01:00
7047f64a6b
fix(portal) : handle submittedBy as object or IRI in canEdit check
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:40:54 +01:00
cd8cea45c1
fix(security) : allow ROLE_CLIENT to read projects
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:39:41 +01:00
1f31a3a33f
fix(portal) : embed project id/name in /me response for client users
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:37:18 +01:00
254f8bc411
fix(admin) : handle null/IRI client in project filter for UserDrawer
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:34:21 +01:00
239cd6398e
docs : update CLAUDE.md with client portal context and gotchas
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:26:05 +01:00
318b6198da
feat(portal) : add drag & drop status change on client ticket kanban
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:16:22 +01:00
4e3e854aa2
fix(portal) : allow admin to edit tickets and enable document deletion
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:12:55 +01:00
49cd971e3e
feat(project) : add client tickets panel to project page
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:28 +01:00
ffe4a0117c
feat(portal) : allow client to edit own tickets
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:25 +01:00
d2f6d84d03
feat(portal) : replace ticket list with kanban board
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:23 +01:00
2a874046d3
feat : allow client to edit own tickets and protect status fields
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:35:11 +01:00
f09ef67117
feat : date filter, project drawer, and misc frontend improvements
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:25:26 +01:00
046ee396d3
feat(fixtures) : add users alice/bob/charlie and distribute task assignees
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:25:14 +01:00
0ba487cfa9
feat(fixtures) : add client users, client tickets, and ticket-task link
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:20:27 +01:00
a2fc8e6e52
feat(task) : add client ticket selector in TaskModal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:14:56 +01:00
6c910e7fcc
fix : use native SQL for JSON roles query in PostgreSQL
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:11:54 +01:00
6d7e6f5f48
fix : allow admin users to create client tickets on any project
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:07:19 +01:00
0c8fb654a9
fix(portal) : allow admin+client users to access both views and add admin link
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:06:09 +01:00
f8748c4061
fix(portal) : handle ticket creation error and hide new ticket button for admins
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:04:20 +01:00