mirror_match/next.config.ts
ilia 08914dc469 Implements a comprehensive structured logging system to replace verbose console.* calls throughout the codebase, addressing all cleanup tasks from CLEANUP.md. (#4)
# Structured Logging System Implementation

## Summary
Implements a comprehensive structured logging system to replace verbose console.* calls throughout the codebase, addressing all cleanup tasks from CLEANUP.md.

## What Changed

### Core Features
-  **Structured Logging System** - New `lib/logger.ts` with DEBUG, INFO, WARN, ERROR levels
-  **Environment-Based Control** - `LOG_LEVEL` env var controls verbosity (DEBUG/INFO/WARN/ERROR/NONE)
-  **JSON Logging Option** - `LOG_FORMAT=json` for structured JSON output
-  **Shared Constants** - Extracted session cookie name to `lib/constants.ts`

### Code Refactoring
-  Replaced all `console.*` calls in API routes with structured logger
-  Refactored `activity-log.ts` to use new logger system
-  Reduced verbose logging in auth, photos page, and upload routes
-  Updated proxy.ts to use structured logging
-  Removed unused legacy `/api/photos` route (replaced by `/api/photos/upload`)

### Security Improvements
-  Protected `/api/debug/session` endpoint with admin-only access
-  Added proper error logging with structured context

### Documentation
-  Documented multiple upload routes usage
-  Enhanced watch-activity.sh script documentation
-  Updated README.md with upload endpoint information
-  Added configuration documentation to next.config.ts

### Testing
-  Added 23 tests for logger system
-  Added 8 tests for refactored activity-log
-  All 43 tests passing

## Benefits

1. **Production-Ready Logging** - Environment-based control, defaults to INFO in production
2. **Reduced Verbosity** - DEBUG logs only show in development or when explicitly enabled
3. **Structured Output** - JSON format option for log aggregation tools
4. **Better Organization** - Shared constants, consistent logging patterns
5. **Improved Security** - Debug endpoint now requires admin access

## Testing

### Manual Testing
-  Server builds successfully
-  All tests pass (43/43)
-  Type checking passes
-  Linting passes
-  Production server runs with logs visible
-  Log levels work correctly (DEBUG shows all, INFO shows activity, etc.)

### Test Coverage
- Logger system: 100% coverage
- Activity log: 100% coverage
- All existing tests still pass

## Configuration

### Environment Variables
```bash
# Control log verbosity (DEBUG, INFO, WARN, ERROR, NONE)
LOG_LEVEL=INFO

# Use structured JSON logging
LOG_FORMAT=json
```

### Defaults
- Development: `LOG_LEVEL=DEBUG` (shows all logs)
- Production: `LOG_LEVEL=INFO` (shows activity and above)

## Migration Notes

- No breaking changes (legacy route was unused)
- All existing functionality preserved
- Logs are now structured and filterable
- Debug endpoint now requires admin authentication
- Legacy `/api/photos` endpoint removed (use `/api/photos/upload` instead)

## Checklist

- [x] All console.* calls replaced in API routes
- [x] Logger system implemented with tests
- [x] Activity logging refactored
- [x] Debug endpoint protected
- [x] Documentation updated
- [x] All tests passing
- [x] Type checking passes
- [x] Linting passes
- [x] Build succeeds
- [x] Manual testing completed

## Related Issues
Addresses cleanup tasks from CLEANUP.md:
- Task 1: Verbose logging in production 
- Task 2: Activity logging optimization 
- Task 3: Upload verification logging 
- Task 4: Middleware debug logging 
- Task 5: Legacy upload route documentation 
- Task 6: Multiple upload routes documentation 
- Task 7: Cookie name constant extraction 
- Task 8: Next.js config documentation 
- Task 9: ARCHITECTURE.md (already correct) 
- Task 10: Watch activity script documentation 

Reviewed-on: #4
2026-01-04 19:42:49 -05:00

83 lines
2.5 KiB
TypeScript

import type { NextConfig } from "next";
/**
* Next.js Configuration
*
* Configuration decisions:
*
* 1. Image Optimization:
* - Enabled (unoptimized: false) for better performance and bandwidth usage
* - Remote patterns allow all hosts (http/https) - this is permissive but necessary
* for the photo guessing game where users may upload images from any URL.
* - Consider restricting in production if security is a concern, but this would
* limit functionality for URL-based photo uploads.
*
* 2. Turbopack Configuration:
* - Currently configured but not actively used (dev script uses --webpack flag)
* - Kept for future migration to Turbopack when stable
* - Can be removed if not planning to use Turbopack
*
* 3. Webpack Configuration:
* - Prisma client is externalized on server-side to prevent bundling issues
* - This is necessary because Prisma generates client code that shouldn't be bundled
* - Required for proper Prisma functionality in Next.js
*
* 4. Page Extensions:
* - Only processes TypeScript/JavaScript files (ts, tsx, js, jsx)
* - Prevents processing of other file types as pages
*/
const nextConfig: NextConfig = {
// Only process specific file extensions
pageExtensions: ["ts", "tsx", "js", "jsx"],
// Image optimization configuration
images: {
remotePatterns: [
{
protocol: "http",
hostname: "**",
},
{
protocol: "https",
hostname: "**",
},
],
// Enable optimization for better performance and bandwidth usage
// Note: Remote patterns are permissive to allow URL-based photo uploads
// Consider restricting in production if security is a concern
unoptimized: false,
},
// Configure Turbopack (currently not used - dev script uses --webpack)
// Kept for future migration when Turbopack is stable
// Can be removed if not planning to use Turbopack
turbopack: {
resolveExtensions: [
".tsx",
".ts",
".jsx",
".js",
".mjs",
".json",
],
rules: {
"*.md": {
loaders: [],
as: "*.txt",
},
},
},
// Webpack configuration to externalize Prisma
// Required: Prisma client must be externalized on server-side to prevent bundling issues
webpack: (config, { isServer }) => {
if (isServer) {
config.externals = config.externals || [];
config.externals.push("@prisma/client");
}
return config;
},
};
export default nextConfig;