Commit Graph

177 Commits

Author SHA1 Message Date
David
14c5073b12 fix types check
All checks were successful
Dev CI / Backend — Lint (push) Successful in 10m23s
Dev CI / Frontend — Lint & Type-check (push) Successful in 10m57s
Dev CI / Backend — Unit Tests (push) Successful in 10m12s
Dev CI / Frontend — Unit Tests (push) Successful in 10m33s
Dev CI / Notify Failure (push) Has been skipped
2026-04-04 15:28:13 +02:00
David
fca1cf051a fix test
Some checks failed
Dev CI / Notify Failure (push) Blocked by required conditions
Dev CI / Frontend — Lint & Type-check (push) Failing after 6m16s
Dev CI / Frontend — Unit Tests (push) Has been skipped
Dev CI / Backend — Lint (push) Successful in 10m24s
Dev CI / Backend — Unit Tests (push) Has been cancelled
2026-04-04 15:08:53 +02:00
David
62698de952 Merge branch 'cicd' into dev
Some checks failed
Dev CI / Backend — Lint (push) Successful in 10m24s
Dev CI / Frontend — Lint & Type-check (push) Successful in 10m52s
Dev CI / Frontend — Unit Tests (push) Failing after 5m50s
Dev CI / Backend — Unit Tests (push) Successful in 10m12s
Dev CI / Notify Failure (push) Has been skipped
# Conflicts:
#	apps/backend/src/application/auth/auth.service.ts
#	apps/backend/src/application/dto/subscription.dto.ts
#	apps/backend/src/application/services/subscription.service.ts
#	apps/backend/src/domain/value-objects/plan-feature.vo.ts
#	apps/backend/src/domain/value-objects/subscription-plan.vo.ts
#	apps/backend/src/infrastructure/persistence/typeorm/mappers/subscription-orm.mapper.ts
#	apps/backend/src/infrastructure/stripe/stripe.adapter.ts
#	apps/frontend/e2e/booking-workflow.spec.ts
2026-04-04 14:21:15 +02:00
David
1d248b3cc9 fix test 2026-04-04 14:18:41 +02:00
David
711aca5f40 fix(cicd): sync corrected pipelines from cicd branch
Some checks failed
Dev CI / Frontend — Lint & Type-check (push) Failing after 6m12s
Dev CI / Frontend — Unit Tests (push) Has been skipped
Dev CI / Backend — Lint (push) Successful in 10m24s
Dev CI / Backend — Unit Tests (push) Failing after 5m30s
Dev CI / Notify Failure (push) Has been skipped
2026-04-04 13:16:46 +02:00
David
1fcf5d0032 fix(cicd): rewrite all pipelines — fix npm install, health endpoints, prod security gate 2026-04-04 13:16:40 +02:00
David
3ba87fbb42 revert: restore root-level docs mistakenly deleted
Some checks failed
Dev CI / Quality (${{ matrix.app }}) (frontend) (push) Failing after 6m16s
Dev CI / Quality (${{ matrix.app }}) (backend) (push) Successful in 10m26s
Dev CI / Unit Tests (${{ matrix.app }}) (backend) (push) Has been skipped
Dev CI / Unit Tests (${{ matrix.app }}) (frontend) (push) Has been skipped
Dev CI / Notify Failure (push) Has been skipped
2026-04-04 13:02:27 +02:00
David
9a5c8c92e0 chore: remove stale root-level docs (already in docs/installation/)
Some checks are pending
Dev CI / Quality (${{ matrix.app }}) (backend) (push) Waiting to run
Dev CI / Quality (${{ matrix.app }}) (frontend) (push) Waiting to run
Dev CI / Unit Tests (${{ matrix.app }}) (backend) (push) Blocked by required conditions
Dev CI / Unit Tests (${{ matrix.app }}) (frontend) (push) Blocked by required conditions
Dev CI / Notify Failure (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:58:29 +02:00
David
08787c89c8 chore: sync full codebase from cicd branch
Some checks failed
Dev CI / Unit Tests (${{ matrix.app }}) (backend) (push) Blocked by required conditions
Dev CI / Unit Tests (${{ matrix.app }}) (frontend) (push) Blocked by required conditions
Dev CI / Notify Failure (push) Blocked by required conditions
Dev CI / Quality (${{ matrix.app }}) (backend) (push) Has been cancelled
Dev CI / Quality (${{ matrix.app }}) (frontend) (push) Has been cancelled
Aligns dev with the complete application codebase (cicd branch).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:56:16 +02:00
David
8400d203e8 feat(cicd): sync CI/CD pipeline from cicd branch
Some checks failed
Dev CI / Unit Tests (${{ matrix.app }}) (backend) (push) Blocked by required conditions
Dev CI / Unit Tests (${{ matrix.app }}) (frontend) (push) Blocked by required conditions
Dev CI / Notify Failure (push) Blocked by required conditions
Dev CI / Quality (${{ matrix.app }}) (backend) (push) Has been cancelled
Dev CI / Quality (${{ matrix.app }}) (frontend) (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:52:40 +02:00
David
da93e86756 feat(cicd): add complete CI/CD pipeline for dev/preprod/prod (Hetzner k3s)
- ci.yml: dev branch CI — lint, type-check, unit tests (~5min)
- pr-checks.yml: PR gate to preprod (+ integration tests) and main
- cd-preprod.yml: full preprod pipeline — quality → integration → docker → deploy → smoke tests
- cd-main.yml: prod pipeline — promote Scaleway preprod image → kubectl rollout on k3s
- rollback.yml: emergency rollback (kubectl undo or specific tag, Portainer for preprod)
- docs: replace GHCR references with Scaleway registry in Hetzner k8s manifests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:52:14 +02:00
David
26a3412658 feat(admin): add 3-dot action menus, document deletion, and company email in CSV configs
- Bookings: replace static action cell with vertical dots menu (view details modal, validate transfer, delete)
- Documents: replace download button with dots menu (download, delete) + new admin DELETE endpoint bypassing status/ownership restrictions
- CSV rates: show company email (from upload form metadata) in active configs table, fix header layout (title left, reload right, same line)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 23:43:47 +02:00
David
74221d576e feat(contact): wire contact form to real backend — sends email to contact@xpeditis.com 2026-04-02 14:19:50 +02:00
David
ed0f43ba32 fix(contact): remove card links, fix support email, single Paris office, remove Europe map section 2026-04-02 13:47:49 +02:00
David
317de48765 feat: fix auth flows — reset password, 2-step register, remember me, SIRET
- Backend: add forgot-password and reset-password endpoints with token-based
  flow (1h expiry, secure random token, email via existing EmailPort)
- Backend: add PasswordResetTokenOrmEntity + migration
- Backend: add siret field to RegisterOrganizationDto and pass it to org creation
- Backend: remove MinLength(12) from LoginDto.password (wrong for login use case)
- Backend: add rememberMe to LoginDto (optional, informational)
- Frontend: register page rewritten as 2-step flow (account info → org info)
  with SIRET field, Suspense wrapper, "Centre d'aide" link removed
- Frontend: forgot-password page rewritten in French, matching login style
- Frontend: reset-password page rewritten in French, matching login style, with Suspense
- Frontend: remember me now works — localStorage when checked, sessionStorage otherwise
- Frontend: login page removes "Centre d'aide" link, connects rememberMe to login
- Frontend: auth-context and api/auth updated to pass rememberMe through full chain

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 13:10:08 +02:00
David
6a38c236b2 feat: add centralized logging stack with log exporter
- Add Loki + Promtail + Grafana logging infrastructure
- Add log-exporter service (REST API to query logs)
- Add docker-compose.logging.yml (standalone logging stack)
- Add docker-compose.full.yml (merged dev + logging in one file)
- Update docker-compose.dev.yml with network labels for Promtail
- Add admin logs dashboard page
- Fix invitation DTO and users settings page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 12:46:10 +02:00
David
e1f813bd92 fix documentation et landing page 2026-04-01 20:33:22 +02:00
David
0e4c0d7785 fix email and documentation api 2026-04-01 19:51:57 +02:00
David
ccc64b939a fix documentation et api key 2026-03-31 16:19:35 +02:00
David
6adcb2b9f8 fix docs 2026-03-26 18:08:28 +01:00
David
420e52311c fix system payment and other missing 2026-03-19 19:04:31 +01:00
David
230d06dc98 payment methode 2026-03-18 15:11:09 +01:00
David
1c6edb9d41 adding middleware for auth 2026-03-17 18:39:07 +01:00
David
7f31aa59a9 fix contact 2026-03-17 11:58:29 +01:00
David
737d94e99a fix
All checks were successful
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 5m0s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 15m10s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 1s
CI/CD Pipeline / Deploy to Portainer (push) Successful in 12s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 1s
2026-02-10 23:17:11 +01:00
David
071d5f198c fix
All checks were successful
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 12m3s
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 15m39s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 1s
CI/CD Pipeline / Deploy to Portainer (push) Successful in 11s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 1s
2026-02-10 22:48:23 +01:00
David
9bed6b54a7 fix 404
Some checks failed
CI/CD Pipeline / Backend - Build, Test & Push (push) Failing after 10m59s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 37m59s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Has been skipped
CI/CD Pipeline / Deploy to Portainer (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
2026-02-10 21:50:40 +01:00
David
baf5981847 fix improve 2026-02-10 17:16:35 +01:00
David
fd1f57dd1d fix 2026-02-05 11:53:22 +01:00
David
1d279a0e12 fix 2026-02-04 21:51:03 +01:00
David
1a86864d1f fix 2026-02-03 22:14:03 +01:00
David
cf19c36586 fix ui 2026-02-03 16:08:00 +01:00
David
3e654af8a3 fix 2026-01-27 19:57:15 +01:00
David
4c7b07a911 fix error login 2026-01-27 19:33:51 +01:00
David
94039598d9 fix
All checks were successful
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 20m31s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 38m16s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 1s
CI/CD Pipeline / Deploy to Portainer (push) Successful in 12s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 1s
2026-01-26 11:56:46 +01:00
David
a200987288 fix 2026-01-26 00:08:04 +01:00
David
10b45599ae fix 2026-01-25 16:00:22 +01:00
David
301409624b Merge branch 'track_and_trace' into landing_page 2026-01-20 15:38:26 +01:00
David
40f785ddeb feature track and trace 2026-01-20 15:35:59 +01:00
David
5c7834c7e4 fix licensing 2026-01-20 11:28:54 +01:00
David
dd5d806180 fix wiki 2026-01-19 10:48:19 +01:00
David
de4126a657 fix document 2026-01-17 15:47:03 +01:00
David
0a8e2043cc fix documents 2026-01-17 15:46:55 +01:00
David
0d814e9a94 fix 2026-01-16 15:44:16 +01:00
David
d9868dd49f fix: prevent password fields from being pre-filled in profile page
All checks were successful
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 2m42s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 27m20s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 1s
CI/CD Pipeline / Deploy to Portainer (push) Successful in 12s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 2s
Fixed issue where password form fields (especially "New Password")
were being pre-filled with values, either from browser autocomplete
or residual form state.

Changes:
1. Added explicit empty defaultValues to password form
   - currentPassword: ''
   - newPassword: ''
   - confirmPassword: ''

2. Added autoComplete attributes to prevent browser pre-fill:
   - currentPassword: autoComplete="current-password"
   - newPassword: autoComplete="new-password"
   - confirmPassword: autoComplete="new-password"

3. Added useEffect to reset password form when switching tabs:
   - Ensures clean state when navigating to "Change Password" tab
   - Prevents stale values from persisting

4. Explicit reset values on successful password change:
   - Previously used passwordForm.reset() without values
   - Now explicitly sets all fields to empty strings

This ensures password fields are always empty and never pre-filled
by the browser or by residual form state.

Refs: apps/frontend/app/dashboard/profile/page.tsx:64-70,85-95

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12 18:24:13 +01:00
David
2054e73e78 fix: resolve profile page data persistence and password change issues
Fixed critical issues with the profile page (/dashboard/profile):

1. **Form data not persisting on page refresh**:
   - Added useEffect to update form values when user data loads
   - Forms now properly populate after auth context loads user data

2. **Blank page on refresh**:
   - Added loading and error states for better UX
   - Handle case where user is not loaded yet (loading spinner)
   - Handle case where user fails to load (retry button)

3. **Password change API endpoint correction**:
   - Fixed: POST /api/v1/users/change-password (incorrect)
   - Corrected to: PATCH /api/v1/users/me/password (matches backend)
   - Updated return type to include { message: string }

The root cause was that useForm defaultValues were set once at
component mount when user was still null. The form never updated
when user data was subsequently loaded by the auth context.

Now the form properly resets with user data via useEffect, and
proper loading/error states prevent showing a blank page.

Refs: apps/frontend/app/dashboard/profile/page.tsx:68-78

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12 18:18:04 +01:00
David
905a56888a fix: implement password change functionality in profile page
Fix password change feature that was previously non-functional:
- Add changePassword function in frontend API (src/lib/api/users.ts)
- Update API endpoint to match backend: PATCH /api/v1/users/me/password
- Connect profile page to real API instead of mock implementation
- Export changePassword function from API index

The backend endpoint was already implemented but frontend was using
a placeholder Promise.resolve(). Now properly calls the backend API.

Refs: apps/frontend/app/dashboard/profile/page.tsx:87-105

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12 17:56:10 +01:00
David
4ce7d2ec07 fix icon
All checks were successful
CI/CD Pipeline / Backend - Build, Test & Push (push) Successful in 2m16s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Successful in 26m44s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Successful in 1s
CI/CD Pipeline / Deploy to Portainer (push) Successful in 12s
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Successful in 1s
2025-12-23 19:14:13 +01:00
David
13857628bb feat: add theme-adaptive favicon
- Replace full logo (1875x1699) with simplified icon (512x512) optimized for favicon display
- Implement CSS media queries for automatic theme adaptation:
  * Dark mode: white X (#FFFFFF) with cyan dot (#34CCCD)
  * Light mode: dark blue X and dot (#1D3865)
- Remove old logo files (xpeditis-icon.svg, xpeditis-logo.svg)
- Simplified design with clean X shape and accent dot for better visibility at small sizes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 13:43:31 +01:00
David
5878b63a0a chore: update favicon to use full Xpeditis logo
Replace the icon with the full Xpeditis logo (logo-black.svg) as requested.
Updated references in:
- app/icon.svg (favicon)
- app/layout.tsx (metadata and social cards)
- public/manifest.json (PWA icon)

Note: The full logo (1875x1699px) will be scaled down in browser tabs.
Consider creating a square optimized version for better display in small sizes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 13:34:19 +01:00