- docs/skill.md teaches a Claude what Logbuch is for, how an entry sounds and in which order the calls go, served at GET /api/v1/skill and as a download next to the spec and the guide - a test keeps the skill from drifting: frontmatter, only endpoints that exist, house rules - resolveClient stamps last_used_at, the access list said never used even after eleven entries
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import type { NextConfig } from 'next'
|
|
import createNextIntlPlugin from 'next-intl/plugin'
|
|
|
|
const sharpNative = [
|
|
'./node_modules/.pnpm/@img+sharp-libvips-*/**',
|
|
'./node_modules/.pnpm/@img+sharp-linux*/**',
|
|
'./node_modules/@img/**',
|
|
]
|
|
|
|
const config: NextConfig = {
|
|
output: 'standalone',
|
|
outputFileTracingIncludes: {
|
|
'/api/v1/style-guide': ['./docs/style-guide.md'],
|
|
'/api/v1/skill': ['./docs/skill.md'],
|
|
'/admin/api/files/skill': ['./docs/skill.md'],
|
|
'/admin/api/files/style-guide': ['./docs/style-guide.md'],
|
|
'/': ['./node_modules/drizzle-orm/**'],
|
|
'/api/v1/media': sharpNative,
|
|
'/admin/media': sharpNative,
|
|
'/admin/media/[slug]': sharpNative,
|
|
'/admin/entries/[id]': sharpNative,
|
|
'/admin/entries/new': sharpNative,
|
|
},
|
|
typedRoutes: true,
|
|
experimental: {
|
|
useTypeScriptCli: true,
|
|
serverActions: {
|
|
bodySizeLimit: '16mb',
|
|
},
|
|
},
|
|
images: {
|
|
formats: ['image/webp'],
|
|
deviceSizes: [480, 640, 960, 1200, 1600, 1920],
|
|
imageSizes: [96, 160, 240, 320],
|
|
minimumCacheTTL: 31536000,
|
|
},
|
|
}
|
|
|
|
const withNextIntl = createNextIntlPlugin('./src/i18n/request.ts')
|
|
|
|
export default withNextIntl(config)
|