0a3aaa5798
Stack matches sibling buildfor_life_* apps: SvelteKit 5 with adapter-node, Svelte 5 runes, TypeScript, Tailwind v4 with @theme inline tokens, PostgreSQL via Drizzle ORM, Argon2id sessions via @node-rs/argon2 and @oslojs/crypto, EasyMDE ready for wiki/decision markdown, Sharp for thumbnails. Included in this commit: - Config: package.json, svelte.config.js, vite.config.ts, tsconfig.json, drizzle.config.ts, .gitignore, .env.example, .gitattributes, .npmrc - Tenancy schema: companies, users, company_users, sessions (10 enums pre-declared for the full domain so downstream migrations don't re-diff them; decision_scope widened to include asset + work_package per product decision) - Auth: password hashing + SHA-256-hashed session cookies, session lifetime 30d with sliding renewal at T-15d, login + logout + session refresh in hooks - Storage: StorageAdapter interface + LocalDiskStorage with HMAC-signed URLs served by /api/files, S3 drop-in with zero schema change - UI shell: dark-mode bootstrap in app.html identical to siblings, sidebar (w-64, h-14 header, amber attention band pattern from repair), topbar with breadcrumbs, theme toggle with cross-tab sync via storage event, blue-600 primary, responsive drawer - Routes: (app) authed group with auto-redirect to /login, (auth) login group, dashboard placeholder, error page, signed-file API - Scripts: create-user script for bootstrapping first admin user - Drizzle: initial migration generated (0000_init.sql) - Shared agents and skills committed under .claude/; per-user permissions gitignored Typecheck: 0 errors / 0 warnings across 555 files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.4 KiB
JSON
54 lines
1.4 KiB
JSON
{
|
|
"name": "buildfor-life-ops",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite dev",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --threshold warning",
|
|
"validate": "npm run check && npm run build",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "drizzle-kit migrate",
|
|
"db:push": "drizzle-kit push",
|
|
"db:studio": "drizzle-kit studio",
|
|
"db:seed": "tsx scripts/seed/system-asset-types.ts",
|
|
"create-user": "tsx scripts/create-user.ts",
|
|
"prepare": "husky"
|
|
},
|
|
"dependencies": {
|
|
"@node-rs/argon2": "^2.0.2",
|
|
"@oslojs/crypto": "^1.0.1",
|
|
"@oslojs/encoding": "^1.1.0",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"date-fns": "^4.1.0",
|
|
"dotenv": "^17.4.1",
|
|
"drizzle-orm": "^0.38.4",
|
|
"easymde": "^2.20.0",
|
|
"marked": "^18.0.0",
|
|
"pg": "^8.13.1",
|
|
"sharp": "^0.33.5",
|
|
"zod": "^3.24.2"
|
|
},
|
|
"devDependencies": {
|
|
"@sveltejs/adapter-node": "^5.2.12",
|
|
"@sveltejs/kit": "^2.15.2",
|
|
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
|
"@tailwindcss/vite": "^4.1.3",
|
|
"@types/node": "^22.10.5",
|
|
"@types/pg": "^8.11.11",
|
|
"drizzle-kit": "^0.30.5",
|
|
"husky": "^9.1.7",
|
|
"svelte": "^5.19.0",
|
|
"svelte-check": "^4.1.4",
|
|
"tailwindcss": "^4.1.3",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^5.7.3",
|
|
"vite": "^6.1.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20"
|
|
}
|
|
}
|