ℹ️ [WEBSITE] INFO: [RouteGuard] Auth page detected Timestamp: 2026-01-17T15:51:02.368Z Source: website [SESSION] Using server component cookies, length: 0 [SESSION] Cookie string: [SESSION] No cookies found, returning null ℹ️ [WEBSITE] INFO: [RouteGuard] No session, allowing access to auth page Timestamp: 2026-01-17T15:51:02.377Z Source: website GET /auth/login?returnTo=%2Fdashboard 200 in 90ms ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST START ========== %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Request details %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/', method: 'GET', url: 'http://localhost:3000/', cookieHeaderLength: 0, cookiePreview: '' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Fetching session... %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z %cSource: color: #666; font-weight: bold; website [SESSION] NextRequest cookie header length: 0 [SESSION] NextRequest cookie header: [SESSION] Using provided cookie header, length: 0 [SESSION] Cookie string: [SESSION] No cookies found, returning null ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Session fetched %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { hasSession: false, userId: undefined, role: undefined, sessionData: 'null' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Auth session converted %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { authSession: 'null' } ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match) %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Route classification %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/', isPublic: true, requiresRole: null } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Calling handleAuthFlow... %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { hasSession: false, sessionRole: undefined, requestedPath: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match) %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/' } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { requestedPath: '/', isPublic: true, hasSession: false, requiredRoles: null } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] Public route, showing page %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Action determined %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { actionType: 'SHOW_PAGE', action: '{\n "type": "SHOW_PAGE"\n}' } ℹ️ [WEBSITE] INFO: [handleAuthFlow] Returning SHOW_PAGE %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [MIDDLEWARE] handleAuthFlow result %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { result: '{\n "shouldRedirect": false,\n "shouldShowPage": true\n}' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Decision summary %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/', hasSession: false, role: undefined, shouldRedirect: false, redirectUrl: undefined } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ALLOWING ACCESS %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST END (ALLOW) ========== %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: Global error handler skipped (server-side) Timestamp: 2026-01-17T15:51:07.517Z Source: website 🐛 [WEBSITE] DEBUG: API Request: GET http://api:3000/auth/session Timestamp: 2026-01-17T15:51:07.519Z Source: website Context: { requestId: 'req_1768665067519_1', timestamp: '2026-01-17T15:51:07.519Z', headers: { 'Content-Type': 'application/json' }, body: undefined } ℹ️ [WEBSITE] INFO: API Response: GET http://api:3000/auth/session Timestamp: 2026-01-17T15:51:07.559Z Source: website Context: { requestId: 'req_1768665067519_1', duration: '39.00ms', status: '200 OK', body: null } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST START ========== %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Request details %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/dashboard', method: 'GET', url: 'http://localhost:3000/dashboard', cookieHeaderLength: 0, cookiePreview: '' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Fetching session... %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website [SESSION] NextRequest cookie header length: 0 [SESSION] NextRequest cookie header: [SESSION] Using provided cookie header, length: 0 [SESSION] Cookie string: [SESSION] No cookies found, returning null ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Session fetched %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { hasSession: false, userId: undefined, role: undefined, sessionData: 'null' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Auth session converted %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { authSession: 'null' } ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path is NOT public %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Route classification %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard', isPublic: false, requiresRole: null } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Calling handleAuthFlow... %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { hasSession: false, sessionRole: undefined, requestedPath: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path is NOT public %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/dashboard' } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { requestedPath: '/dashboard', isPublic: false, hasSession: false, requiredRoles: null } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] No session, redirecting to login %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Action determined %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { actionType: 'REDIRECT_TO_LOGIN', action: '{\n "type": "REDIRECT_TO_LOGIN",\n "returnTo": "/dashboard"\n}' } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { requestedPath: '/dashboard', isPublic: false, hasSession: false, requiredRoles: null } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] No session, redirecting to login %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Returning REDIRECT_TO_LOGIN %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { loginUrl: '/auth/login?returnTo=%2Fdashboard' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] handleAuthFlow result %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { result: '{\n' + ' "shouldRedirect": true,\n' + ' "redirectUrl": "/auth/login?returnTo=%2Fdashboard"\n' + '}' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Decision summary %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/dashboard', hasSession: false, role: undefined, shouldRedirect: true, redirectUrl: '/auth/login?returnTo=%2Fdashboard' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] REDIRECTING %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { from: '/dashboard', to: 'http://localhost:3000/auth/login?returnTo=%2Fdashboard' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST END (REDIRECT) ========== %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.597Z %cSource: color: #666; font-weight: bold; website GET / 307 in 106ms ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST START ========== %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Request details %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/auth/login', method: 'GET', url: 'http://localhost:3000/auth/login?returnTo=%2Fdashboard', cookieHeaderLength: 0, cookiePreview: '' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Fetching session... %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website [SESSION] NextRequest cookie header length: 0 [SESSION] NextRequest cookie header: [SESSION] Using provided cookie header, length: 0 [SESSION] Cookie string: [SESSION] No cookies found, returning null ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Session fetched %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { hasSession: false, userId: undefined, role: undefined, sessionData: 'null' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Auth session converted %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { authSession: 'null' } ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match) %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Route classification %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login', isPublic: true, requiresRole: null } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Calling handleAuthFlow... %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { hasSession: false, sessionRole: undefined, requestedPath: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match) %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { path: '/auth/login' } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { requestedPath: '/auth/login', isPublic: true, hasSession: false, requiredRoles: null } ℹ️ [WEBSITE] INFO: [AuthFlowRouter] Public route, showing page %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [handleAuthFlow] Action determined %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { actionType: 'SHOW_PAGE', action: '{\n "type": "SHOW_PAGE"\n}' } ℹ️ [WEBSITE] INFO: [handleAuthFlow] Returning SHOW_PAGE %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: [MIDDLEWARE] handleAuthFlow result %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { result: '{\n "shouldRedirect": false,\n "shouldShowPage": true\n}' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Decision summary %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/auth/login', hasSession: false, role: undefined, shouldRedirect: false, redirectUrl: undefined } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ALLOWING ACCESS %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website %cContext: color: #666; font-weight: bold; { pathname: '/auth/login' } ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST END (ALLOW) ========== %cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z %cSource: color: #666; font-weight: bold; website ℹ️ [WEBSITE] INFO: Global error handler skipped (server-side) Timestamp: 2026-01-17T15:51:07.652Z Source: website ℹ️ [WEBSITE] INFO: [RouteGuard] enforce called Timestamp: 2026-01-17T15:51:07.668Z Source: website Context: { pathname: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteGuard] logicalPathname Timestamp: 2026-01-17T15:51:07.668Z Source: website Context: { logicalPathname: '/auth/login' } ℹ️ [WEBSITE] INFO: [RouteGuard] Auth page detected Timestamp: 2026-01-17T15:51:07.669Z Source: website [SESSION] Using server component cookies, length: 0 [SESSION] Cookie string: [SESSION] No cookies found, returning null ℹ️ [WEBSITE] INFO: [RouteGuard] No session, allowing access to auth page Timestamp: 2026-01-17T15:51:07.737Z Source: website GET /auth/login?returnTo=%2Fdashboard 200 in 203ms