diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8f85a79 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +PORT=1349 +AUTH_ENABLED=true +DEFAULT_USERNAME=admin +DEFAULT_PASSWORD=admin +STORAGE_MODE=local +FILE_MAX_AGE_HOURS=24 +CLEANUP_INTERVAL_MINUTES=30 +MAX_UPLOAD_SIZE_MB=100 +MAX_BATCH_SIZE=200 +CONCURRENT_JOBS=3 +MAX_MEGAPIXELS=100 +RATE_LIMIT_PER_MIN=100 +DB_PATH=./data/stirling.db +WORKSPACE_PATH=./tmp/workspace +DEFAULT_THEME=light +DEFAULT_LOCALE=en +APP_NAME=Stirling Image diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bc3828 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +node_modules/ +dist/ +.turbo/ +*.db +*.db-journal +*.db-wal +.env +.env.local +.DS_Store +.playwright-mcp/ diff --git a/package.json b/package.json new file mode 100644 index 0000000..23a9829 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "stirling-image", + "private": true, + "packageManager": "pnpm@9.15.4", + "scripts": { + "dev": "turbo dev", + "build": "turbo build", + "lint": "turbo lint", + "clean": "turbo clean", + "typecheck": "turbo typecheck" + }, + "devDependencies": { + "turbo": "^2.4.0", + "typescript": "^5.7.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..42a1b5c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,88 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + turbo: + specifier: ^2.4.0 + version: 2.8.20 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + +packages: + + '@turbo/darwin-64@2.8.20': + resolution: {integrity: sha512-FQ9EX1xMU5nbwjxXxM3yU88AQQ6Sqc6S44exPRroMcx9XZHqqppl5ymJF0Ig/z3nvQNwDmz1Gsnvxubo+nXWjQ==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.8.20': + resolution: {integrity: sha512-Gpyh9ATFGThD6/s9L95YWY54cizg/VRWl2B67h0yofG8BpHf67DFAh9nuJVKG7bY0+SBJDAo5cMur+wOl9YOYw==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.8.20': + resolution: {integrity: sha512-p2QxWUYyYUgUFG0b0kR+pPi8t7c9uaVlRtjTTI1AbCvVqkpjUfCcReBn6DgG/Hu8xrWdKLuyQFaLYFzQskZbcA==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.8.20': + resolution: {integrity: sha512-Gn5yjlZGLRZWarLWqdQzv0wMqyBNIdq1QLi48F1oY5Lo9kiohuf7BPQWtWxeNVS2NgJ1+nb/DzK1JduYC4AWOA==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.8.20': + resolution: {integrity: sha512-vyaDpYk/8T6Qz5V/X+ihKvKFEZFUoC0oxYpC1sZanK6gaESJlmV3cMRT3Qhcg4D2VxvtC2Jjs9IRkrZGL+exLw==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.8.20': + resolution: {integrity: sha512-voicVULvUV5yaGXo0Iue13BcHGYW3u0VgqSbfQwBaHbpj1zLjYV4KIe+7fYIo6DO8FVUJzxFps3ODCQG/Wy2Qw==} + cpu: [arm64] + os: [win32] + + turbo@2.8.20: + resolution: {integrity: sha512-Rb4qk5YT8RUwwdXtkLpkVhNEe/lor6+WV7S5tTlLpxSz6MjV5Qi8jGNn4gS6NAvrYGA/rNrE6YUQM85sCZUDbQ==} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + +snapshots: + + '@turbo/darwin-64@2.8.20': + optional: true + + '@turbo/darwin-arm64@2.8.20': + optional: true + + '@turbo/linux-64@2.8.20': + optional: true + + '@turbo/linux-arm64@2.8.20': + optional: true + + '@turbo/windows-64@2.8.20': + optional: true + + '@turbo/windows-arm64@2.8.20': + optional: true + + turbo@2.8.20: + optionalDependencies: + '@turbo/darwin-64': 2.8.20 + '@turbo/darwin-arm64': 2.8.20 + '@turbo/linux-64': 2.8.20 + '@turbo/linux-arm64': 2.8.20 + '@turbo/windows-64': 2.8.20 + '@turbo/windows-arm64': 2.8.20 + + typescript@5.9.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..3ff5faa --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "apps/*" + - "packages/*" diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..3bb28fe --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ES2022"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true + } +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..bd010fe --- /dev/null +++ b/turbo.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "dev": { + "cache": false, + "persistent": true + }, + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**"] + }, + "lint": { + "dependsOn": ["^build"] + }, + "typecheck": { + "dependsOn": ["^build"] + }, + "clean": { + "cache": false + } + } +}