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_WEBHOOK_SECRET=""
|
||||
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",
|
||||
devtools: { enabled: true },
|
||||
css: ["~/assets/css/main.css"],
|
||||
|
||||
vite: {
|
||||
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",
|
||||
"preview": "nuxt preview",
|
||||
"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": {
|
||||
"@ai-sdk/vue": "^3.0.91",
|
||||
"@apollo/client": "^3.14.0",
|
||||
"@langchain/core": "^0.3.77",
|
||||
"@langchain/langgraph": "^0.2.74",
|
||||
"@langchain/openai": "^0.6.9",
|
||||
"@nuxt/eslint": "^1.15.1",
|
||||
"@nuxtjs/apollo": "^4.0.1-rc.5",
|
||||
"@prisma/client": "^6.16.1",
|
||||
"@tailwindcss/vite": "^4.1.18",
|
||||
"@tiptap/extension-collaboration": "^2.27.2",
|
||||
@@ -28,11 +34,13 @@
|
||||
"@tiptap/extension-placeholder": "^2.27.2",
|
||||
"@tiptap/starter-kit": "^2.27.2",
|
||||
"@tiptap/vue-3": "^2.27.2",
|
||||
"@vue/apollo-composable": "^4.2.2",
|
||||
"@xenova/transformers": "^2.17.2",
|
||||
"ai": "^6.0.91",
|
||||
"bullmq": "^5.58.2",
|
||||
"daisyui": "^5.5.18",
|
||||
"graphql": "^16.12.0",
|
||||
"graphql-tag": "^2.12.6",
|
||||
"ioredis": "^5.7.0",
|
||||
"langfuse": "^3.38.6",
|
||||
"langsmith": "^0.5.4",
|
||||
@@ -45,7 +53,17 @@
|
||||
"zod": "^4.1.5"
|
||||
},
|
||||
"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",
|
||||
"storybook": "^8.6.17",
|
||||
"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