Compare commits

...

5 Commits

Author SHA1 Message Date
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
David
e1aeb9ccd7 feat: add Xpeditis logo as favicon and improve metadata
Add site favicon and enhance metadata for better SEO and social sharing:
- Added app/icon.svg from existing logo for browser tab icon
- Enhanced metadata with Open Graph and Twitter card support
- Created manifest.json for PWA support
- Added metadataBase for proper social image resolution
- Updated .env.example with NEXT_PUBLIC_APP_URL

The Xpeditis logo (blue background with cyan X) now appears in:
- Browser tabs (favicon)
- Bookmarks
- Mobile home screen (PWA)
- Social media shares (Open Graph)

Configuration for different environments:
- Dev: NEXT_PUBLIC_APP_URL=http://localhost:3000
- Preprod: NEXT_PUBLIC_APP_URL=https://app.preprod.xpeditis.com
- Prod: NEXT_PUBLIC_APP_URL=https://xpeditis.com

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 13:29:45 +01:00
David
618b3064c3 fix: use environment variable for API URL in carrier accept/reject pages
Replace hardcoded localhost:4000 URLs with NEXT_PUBLIC_API_URL environment variable
in carrier portal pages to support different environments (dev/staging/production).

Pages updated:
- app/carrier/accept/[token]/page.tsx
- app/carrier/reject/[token]/page.tsx

This fixes the issue where preprod environment (app.preprod.xpeditis.com) was calling
localhost:4000 instead of the correct API endpoint (api.preprod.xpeditis.com).

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 13:04:29 +01:00
9 changed files with 86 additions and 20 deletions

View File

@ -2,6 +2,9 @@
NEXT_PUBLIC_API_URL=http://localhost:4000 NEXT_PUBLIC_API_URL=http://localhost:4000
NEXT_PUBLIC_API_PREFIX=api/v1 NEXT_PUBLIC_API_PREFIX=api/v1
# App Configuration
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Authentication # Authentication
NEXTAUTH_URL=http://localhost:3000 NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-nextauth-secret-change-this-in-production NEXTAUTH_SECRET=your-nextauth-secret-change-this-in-production

View File

@ -32,7 +32,8 @@ export default function CarrierAcceptPage() {
try { try {
// Appeler l'API backend pour accepter le booking // Appeler l'API backend pour accepter le booking
const response = await fetch(`http://localhost:4000/api/v1/csv-booking-actions/accept/${token}`, { const apiUrl = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000';
const response = await fetch(`${apiUrl}/api/v1/csv-booking-actions/accept/${token}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

View File

@ -32,7 +32,8 @@ export default function CarrierRejectPage() {
try { try {
// Appeler l'API backend pour refuser le booking // Appeler l'API backend pour refuser le booking
const response = await fetch(`http://localhost:4000/api/v1/csv-booking-actions/reject/${token}`, { const apiUrl = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000';
const response = await fetch(`${apiUrl}/api/v1/csv-booking-actions/reject/${token}`, {
method: 'GET', method: 'GET',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -4,8 +4,40 @@ import { manrope, montserrat } from '@/lib/fonts';
import { Providers } from '@/components/providers'; import { Providers } from '@/components/providers';
export const metadata: Metadata = { export const metadata: Metadata = {
metadataBase: new URL(process.env.NEXT_PUBLIC_APP_URL || 'https://xpeditis.com'),
title: {
default: 'Xpeditis - Maritime Freight Booking Platform',
template: '%s | Xpeditis',
},
description: 'Search, compare, and book maritime freight in real-time. Get instant LCL shipping quotes and manage your shipments with Xpeditis.',
icons: {
icon: '/assets/logos/logo-black.svg',
shortcut: '/assets/logos/logo-black.svg',
apple: '/assets/logos/logo-black.svg',
},
manifest: '/manifest.json',
openGraph: {
type: 'website',
locale: 'fr_FR',
url: 'https://xpeditis.com',
siteName: 'Xpeditis',
title: 'Xpeditis - Maritime Freight Booking Platform', title: 'Xpeditis - Maritime Freight Booking Platform',
description: 'Search, compare, and book maritime freight in real-time', description: 'Search, compare, and book maritime freight in real-time',
images: [
{
url: '/assets/logos/logo-black.svg',
width: 1875,
height: 1699,
alt: 'Xpeditis Logo',
},
],
},
twitter: {
card: 'summary_large_image',
title: 'Xpeditis - Maritime Freight Booking Platform',
description: 'Search, compare, and book maritime freight in real-time',
images: ['/assets/logos/logo-black.svg'],
},
}; };
export default function RootLayout({ children }: { children: React.ReactNode }) { export default function RootLayout({ children }: { children: React.ReactNode }) {

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -1,5 +0,0 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="48" height="48" rx="8" fill="#10183A"/>
<path d="M14 14L34 34M34 14L14 34" stroke="#34CCCD" stroke-width="4" stroke-linecap="round"/>
<circle cx="24" cy="24" r="3" fill="#34CCCD"/>
</svg>

Before

Width:  |  Height:  |  Size: 308 B

View File

@ -1,11 +0,0 @@
<svg width="180" height="48" viewBox="0 0 180 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- Icon/Symbol -->
<rect width="48" height="48" rx="8" fill="#10183A"/>
<path d="M14 14L34 34M34 14L14 34" stroke="#34CCCD" stroke-width="4" stroke-linecap="round"/>
<circle cx="24" cy="24" r="3" fill="#34CCCD"/>
<!-- Text "XPEDITIS" -->
<text x="58" y="34" font-family="Manrope, sans-serif" font-size="24" font-weight="700" fill="#10183A" letter-spacing="-0.5">
XPEDITIS
</text>
</svg>

Before

Width:  |  Height:  |  Size: 517 B

View File

@ -0,0 +1,17 @@
{
"name": "Xpeditis - Maritime Freight Booking",
"short_name": "Xpeditis",
"description": "Search, compare, and book maritime freight in real-time",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#10183A",
"icons": [
{
"src": "/assets/logos/logo-black.svg",
"sizes": "any",
"type": "image/svg+xml",
"purpose": "any maskable"
}
]
}