Backend: - Add acl.ts with requireAuth/requireRole/requireOwnerOrAdmin helpers - Gate premium videos from unauthenticated users in videos query/resolver - Fix updateVideoPlay to verify ownership before updating - Add admin mutations: adminListUsers, adminUpdateUser, adminDeleteUser - Add admin mutations: createVideo, updateVideo, deleteVideo, setVideoModels, adminListVideos - Add admin mutations: createArticle, updateArticle, deleteArticle, adminListArticles - Add deleteComment mutation (owner or admin only) - Add AdminUserListType to GraphQL types - Fix featured filter on articles query Frontend: - Install marked for markdown rendering - Add /admin/* section with sidebar layout and admin-only guard - Admin users page: paginated table with search, role filter, inline role change, delete - Admin videos pages: list, create form, edit form with file upload and model assignment - Admin articles pages: list, create form, edit form with split-pane markdown editor - Add admin nav link in header (desktop + mobile) for admin users - Render article content through marked in magazine detail page - Add all admin GraphQL service functions to services.ts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
55 lines
1.5 KiB
JSON
55 lines
1.5 KiB
JSON
{
|
|
"name": "@sexy.pivoine.art/frontend",
|
|
"version": "1.0.0",
|
|
"author": "valknarogg",
|
|
"type": "module",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"start": "node ./build",
|
|
"check": "svelte-check --tsconfig ./tsconfig.json --threshold warning"
|
|
},
|
|
"devDependencies": {
|
|
"@iconify-json/ri": "^1.2.10",
|
|
"@iconify/tailwind4": "^1.2.1",
|
|
"@internationalized/date": "^3.11.0",
|
|
"@lucide/svelte": "^0.577.0",
|
|
"@sveltejs/adapter-node": "^5.5.4",
|
|
"@sveltejs/adapter-static": "^3.0.10",
|
|
"@sveltejs/kit": "^2.53.4",
|
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
"@tailwindcss/forms": "^0.5.11",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@tailwindcss/vite": "^4.2.1",
|
|
"@tsconfig/svelte": "^5.0.8",
|
|
"bits-ui": "2.16.2",
|
|
"clsx": "^2.1.1",
|
|
"glob": "^13.0.6",
|
|
"mode-watcher": "^1.1.0",
|
|
"prettier-plugin-svelte": "^3.5.1",
|
|
"super-sitemap": "^1.0.7",
|
|
"svelte": "^5.53.7",
|
|
"svelte-check": "^4.4.4",
|
|
"svelte-sonner": "^1.0.8",
|
|
"tailwind-merge": "^3.5.0",
|
|
"tailwind-variants": "^3.2.2",
|
|
"tailwindcss": "^4.2.1",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "^5.9.3",
|
|
"vite": "^7.3.1",
|
|
"vite-plugin-wasm": "3.5.0"
|
|
},
|
|
"dependencies": {
|
|
"@sexy.pivoine.art/buttplug": "workspace:*",
|
|
"@sexy.pivoine.art/types": "workspace:*",
|
|
"graphql": "^16.11.0",
|
|
"graphql-request": "^7.1.2",
|
|
"javascript-time-ago": "^2.6.4",
|
|
"marked": "^17.0.4",
|
|
"media-chrome": "^4.18.0",
|
|
"svelte-i18n": "^4.0.1"
|
|
}
|
|
}
|