Add deployment map, Nixpacks, ESLint, Storybook, and GraphQL codegen setup
This commit is contained in:
@@ -28,3 +28,8 @@ CF_WHISPER_LANGUAGE="ru"
|
|||||||
TELEGRAM_BOT_TOKEN=""
|
TELEGRAM_BOT_TOKEN=""
|
||||||
TELEGRAM_WEBHOOK_SECRET=""
|
TELEGRAM_WEBHOOK_SECRET=""
|
||||||
TELEGRAM_DEFAULT_TEAM_ID="demo-team"
|
TELEGRAM_DEFAULT_TEAM_ID="demo-team"
|
||||||
|
|
||||||
|
# Frontend GraphQL endpoint for Apollo client runtime
|
||||||
|
GRAPHQL_HTTP_ENDPOINT="http://localhost:3000/api/graphql"
|
||||||
|
# Remote GraphQL schema URL for codegen (used by `pnpm codegen` / `npm run codegen`)
|
||||||
|
GRAPHQL_SCHEMA_URL=""
|
||||||
|
|||||||
12
Frontend/.storybook/main.ts
Normal file
12
Frontend/.storybook/main.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import type { StorybookConfig } from "@storybook/vue3-vite";
|
||||||
|
|
||||||
|
const config: StorybookConfig = {
|
||||||
|
stories: ["../components/**/*.stories.@(ts|tsx)"],
|
||||||
|
addons: ["@storybook/addon-essentials", "@storybook/addon-interactions"],
|
||||||
|
framework: {
|
||||||
|
name: "@storybook/vue3-vite",
|
||||||
|
options: {},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
16
Frontend/.storybook/preview.ts
Normal file
16
Frontend/.storybook/preview.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import type { Preview } from "@storybook/vue3-vite";
|
||||||
|
import "../assets/css/main.css";
|
||||||
|
|
||||||
|
const preview: Preview = {
|
||||||
|
parameters: {
|
||||||
|
actions: { argTypesRegex: "^on[A-Z].*" },
|
||||||
|
controls: {
|
||||||
|
matchers: {
|
||||||
|
color: /(background|color)$/i,
|
||||||
|
date: /Date$/i,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default preview;
|
||||||
27
Frontend/codegen.ts
Normal file
27
Frontend/codegen.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import type { CodegenConfig } from "@graphql-codegen/cli";
|
||||||
|
|
||||||
|
const schemaUrl = process.env.GRAPHQL_SCHEMA_URL || process.env.GRAPHQL_HTTP_ENDPOINT || "http://localhost:3000/api/graphql";
|
||||||
|
|
||||||
|
const config: CodegenConfig = {
|
||||||
|
schema: schemaUrl,
|
||||||
|
documents: ["graphql/operations/**/*.graphql"],
|
||||||
|
generates: {
|
||||||
|
"composables/graphql/generated.ts": {
|
||||||
|
plugins: [
|
||||||
|
"typescript",
|
||||||
|
"typescript-operations",
|
||||||
|
"typed-document-node",
|
||||||
|
"typescript-vue-apollo",
|
||||||
|
],
|
||||||
|
config: {
|
||||||
|
withCompositionFunctions: true,
|
||||||
|
vueCompositionApiImportFrom: "vue",
|
||||||
|
dedupeFragments: true,
|
||||||
|
namingConvention: "keep",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ignoreNoDocuments: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import type { Meta, StoryObj } from "@storybook/vue3";
|
||||||
|
import ContactCollaborativeEditor from "./ContactCollaborativeEditor.client.vue";
|
||||||
|
|
||||||
|
const meta: Meta<typeof ContactCollaborativeEditor> = {
|
||||||
|
title: "Components/ContactCollaborativeEditor",
|
||||||
|
component: ContactCollaborativeEditor,
|
||||||
|
args: {
|
||||||
|
modelValue: "<p>Client summary draft...</p>",
|
||||||
|
room: "storybook-contact-editor-room",
|
||||||
|
placeholder: "Type here...",
|
||||||
|
plain: false,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
|
||||||
|
type Story = StoryObj<typeof ContactCollaborativeEditor>;
|
||||||
|
|
||||||
|
export const Default: Story = {};
|
||||||
6
Frontend/eslint.config.mjs
Normal file
6
Frontend/eslint.config.mjs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
// @ts-check
|
||||||
|
import withNuxt from './.nuxt/eslint.config.mjs'
|
||||||
|
|
||||||
|
export default withNuxt(
|
||||||
|
// Your custom configs here
|
||||||
|
)
|
||||||
8
Frontend/nixpacks.toml
Normal file
8
Frontend/nixpacks.toml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[phases.install]
|
||||||
|
cmds = ["npm ci --legacy-peer-deps"]
|
||||||
|
|
||||||
|
[phases.build]
|
||||||
|
cmds = ["npm run db:generate", "npm run build"]
|
||||||
|
|
||||||
|
[start]
|
||||||
|
cmd = "npm run preview -- --host 0.0.0.0 --port ${PORT:-3000}"
|
||||||
@@ -4,7 +4,16 @@ export default defineNuxtConfig({
|
|||||||
compatibilityDate: "2025-07-15",
|
compatibilityDate: "2025-07-15",
|
||||||
devtools: { enabled: true },
|
devtools: { enabled: true },
|
||||||
css: ["~/assets/css/main.css"],
|
css: ["~/assets/css/main.css"],
|
||||||
|
|
||||||
vite: {
|
vite: {
|
||||||
plugins: [tailwindcss() as any],
|
plugins: [tailwindcss() as any],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
modules: ["@nuxt/eslint"],
|
||||||
|
|
||||||
|
runtimeConfig: {
|
||||||
|
public: {
|
||||||
|
graphqlHttpEndpoint: process.env.GRAPHQL_HTTP_ENDPOINT || "http://localhost:3000/api/graphql",
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
18759
Frontend/package-lock.json
generated
18759
Frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -14,13 +14,19 @@
|
|||||||
"postinstall": "nuxt prepare && prisma generate",
|
"postinstall": "nuxt prepare && prisma generate",
|
||||||
"preview": "nuxt preview",
|
"preview": "nuxt preview",
|
||||||
"typecheck": "nuxt typecheck",
|
"typecheck": "nuxt typecheck",
|
||||||
"worker:delivery": "tsx server/queues/worker.ts"
|
"worker:delivery": "tsx server/queues/worker.ts",
|
||||||
|
"codegen": "graphql-codegen --config codegen.ts",
|
||||||
|
"storybook": "storybook dev -p 6006",
|
||||||
|
"storybook:build": "storybook build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ai-sdk/vue": "^3.0.91",
|
"@ai-sdk/vue": "^3.0.91",
|
||||||
|
"@apollo/client": "^3.14.0",
|
||||||
"@langchain/core": "^0.3.77",
|
"@langchain/core": "^0.3.77",
|
||||||
"@langchain/langgraph": "^0.2.74",
|
"@langchain/langgraph": "^0.2.74",
|
||||||
"@langchain/openai": "^0.6.9",
|
"@langchain/openai": "^0.6.9",
|
||||||
|
"@nuxt/eslint": "^1.15.1",
|
||||||
|
"@nuxtjs/apollo": "^4.0.1-rc.5",
|
||||||
"@prisma/client": "^6.16.1",
|
"@prisma/client": "^6.16.1",
|
||||||
"@tailwindcss/vite": "^4.1.18",
|
"@tailwindcss/vite": "^4.1.18",
|
||||||
"@tiptap/extension-collaboration": "^2.27.2",
|
"@tiptap/extension-collaboration": "^2.27.2",
|
||||||
@@ -28,11 +34,13 @@
|
|||||||
"@tiptap/extension-placeholder": "^2.27.2",
|
"@tiptap/extension-placeholder": "^2.27.2",
|
||||||
"@tiptap/starter-kit": "^2.27.2",
|
"@tiptap/starter-kit": "^2.27.2",
|
||||||
"@tiptap/vue-3": "^2.27.2",
|
"@tiptap/vue-3": "^2.27.2",
|
||||||
|
"@vue/apollo-composable": "^4.2.2",
|
||||||
"@xenova/transformers": "^2.17.2",
|
"@xenova/transformers": "^2.17.2",
|
||||||
"ai": "^6.0.91",
|
"ai": "^6.0.91",
|
||||||
"bullmq": "^5.58.2",
|
"bullmq": "^5.58.2",
|
||||||
"daisyui": "^5.5.18",
|
"daisyui": "^5.5.18",
|
||||||
"graphql": "^16.12.0",
|
"graphql": "^16.12.0",
|
||||||
|
"graphql-tag": "^2.12.6",
|
||||||
"ioredis": "^5.7.0",
|
"ioredis": "^5.7.0",
|
||||||
"langfuse": "^3.38.6",
|
"langfuse": "^3.38.6",
|
||||||
"langsmith": "^0.5.4",
|
"langsmith": "^0.5.4",
|
||||||
@@ -45,7 +53,17 @@
|
|||||||
"zod": "^4.1.5"
|
"zod": "^4.1.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@graphql-codegen/cli": "^6.1.1",
|
||||||
|
"@graphql-codegen/typed-document-node": "^6.1.6",
|
||||||
|
"@graphql-codegen/typescript": "^5.0.8",
|
||||||
|
"@graphql-codegen/typescript-operations": "^5.0.8",
|
||||||
|
"@graphql-codegen/typescript-vue-apollo": "^4.1.2",
|
||||||
|
"@storybook/addon-essentials": "^8.6.17",
|
||||||
|
"@storybook/addon-interactions": "^8.6.17",
|
||||||
|
"@storybook/test": "^8.6.17",
|
||||||
|
"@storybook/vue3-vite": "^8.6.17",
|
||||||
"prisma": "^6.16.1",
|
"prisma": "^6.16.1",
|
||||||
|
"storybook": "^8.6.17",
|
||||||
"tsx": "^4.20.5"
|
"tsx": "^4.20.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
5
deploy-map.toml
Normal file
5
deploy-map.toml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
version = 1
|
||||||
|
|
||||||
|
[services]
|
||||||
|
frontend = { deploy_mode = "dokploy_webhook", env_storage = "dokploy_ui" }
|
||||||
|
delivery_worker = { deploy_mode = "dokploy_webhook", env_storage = "dokploy_ui" }
|
||||||
8
nixpacks.toml
Normal file
8
nixpacks.toml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[phases.install]
|
||||||
|
cmds = ["cd Frontend && npm ci --legacy-peer-deps"]
|
||||||
|
|
||||||
|
[phases.build]
|
||||||
|
cmds = ["cd Frontend && npm run db:generate", "cd Frontend && npm run build"]
|
||||||
|
|
||||||
|
[start]
|
||||||
|
cmd = "cd Frontend && npm run preview -- --host 0.0.0.0 --port ${PORT:-3000}"
|
||||||
Reference in New Issue
Block a user