diff --git a/Golem/.eslintrc b/Golem/.eslintrc new file mode 100644 index 0000000..485d431 --- /dev/null +++ b/Golem/.eslintrc @@ -0,0 +1,9 @@ +{ + "extends": "@antfu", + "rules": { + "vue/html-indent": ["error", 4], + "@typescript-eslint/indent": ["error", 4], + "no-console": "off", + "curly": ["error", "all"] + } +} \ No newline at end of file diff --git a/Golem/.github/workflows/release-preview.yml b/Golem/.github/workflows/release-preview.yml new file mode 100644 index 0000000..2733dd5 --- /dev/null +++ b/Golem/.github/workflows/release-preview.yml @@ -0,0 +1,59 @@ +name: Deploy preview environment + +on: + pull_request: + types: [ opened, synchronize, reopened ] + +jobs: + release: + name: Push application to Vercel + runs-on: ubuntu-latest + steps: + - id: script + uses: actions/github-script@f05a81df23035049204b043b50c3322045ce7eb3 # pin@v3 + with: + script: | + const isPr = [ 'pull_request', 'pull_request_target' ].includes(context.eventName) + core.setOutput('ref', isPr ? context.payload.pull_request.head.ref : context.ref) + core.setOutput('repo', isPr ? context.payload.pull_request.head.repo.full_name : context.repo.full_name) + core.setOutput('pr-number', context.payload.pull_request.number) + core.setOutput('repo-name', context.payload.pull_request.head.repo.full_name.split('/')[1]) + + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + ref: ${{ steps.script.outputs.ref }} + repository: ${{ steps.script.outputs.repo }} + + - name: Deploy to Vercel + id: deploy + uses: BetaHuhn/deploy-to-vercel-action@v1 # pin@ffcc89a6d79de43d964945ce053395c2958610b1 + env: + DOMAIN: golem-${{ steps.script.outputs.pr-number }}.vercel.app + with: + GITHUB_TOKEN: ${{ steps.auth.outputs.token }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + VERCEL_SCOPE: ${{ secrets.VERCEL_ORG_ID }} + PR_PREVIEW_DOMAIN: ${{ env.DOMAIN }} + BUILD_ENV: | + REDIRECT_URL=${{ env.DOMAIN }} + GOLEM_PASSWORD=${{ secrets.GEPPETO_PASSWORD }}#${{ steps.script.outputs.pr-number }} + APP_VERSION=${{ steps.script.outputs.ref }}#${{ steps.script.outputs.pr-number }} + + - name: Deta Space Deployment + uses: neobrains/space-deployment-github-action@v0.5 + with: + access_token: ${{ secrets.DETA_ACCESS_TOKEN }} + project_id: ${{ secrets.DETA_PROJECT_ID }} + space_push: true + diff --git a/Golem/.github/workflows/release-production.yml b/Golem/.github/workflows/release-production.yml new file mode 100644 index 0000000..fabf83c --- /dev/null +++ b/Golem/.github/workflows/release-production.yml @@ -0,0 +1,125 @@ +name: Deploy production environment + +on: + workflow_dispatch: + +jobs: + create-release: + name: Create release + runs-on: ubuntu-latest + steps: + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + ref: ${{ steps.script.outputs.ref }} + repository: ${{ steps.script.outputs.repo }} + + - uses: clicampo/action-publish-semver-release@v1 + id: release + with: + github-token: ${{ steps.auth.outputs.token }} + git-committer-name: Release bot + git-committer-email: release@bot.com + release-candidate: false + # slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }} + # project-url: ${{ github.server_url }}/${{ github.repository }} + # production-action-url: ${{ github.server_url }}/${{ github.repository }}/actions/workflows/release-production.yml + + - name: Create release artifacts + # Create a artifact with the release version, the name is the commit hash + run: | + mkdir -p artifacts + echo "${{ steps.release.outputs.next-version }}" > artifacts/${{ github.sha }}.txt + + - name: Upload release artifacts + uses: actions/upload-artifact@v2 + with: + name: release-artifacts + path: artifacts + + publish-to-vercel: + name: Push application to Vercel + runs-on: ubuntu-latest + needs: create-release + steps: + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + + - name: Deploy to Vercel + id: deploy + uses: BetaHuhn/deploy-to-vercel-action@v1 # pin@ffcc89a6d79de43d964945ce053395c2958610b1 + env: + DOMAIN: app.golem.chat + with: + GITHUB_TOKEN: ${{ steps.auth.outputs.token }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + VERCEL_SCOPE: ${{ secrets.VERCEL_ORG_ID }} + PR_PREVIEW_DOMAIN: ${{ env.DOMAIN }} + PRODUCTION: true + ALIAS_DOMAINS: | + ${{ env.DOMAIN }} + BUILD_ENV: | + REDIRECT_URL=${{ env.DOMAIN }} + APP_VERSION=${{ steps.script.outputs.ref }}#${{ steps.script.outputs.pr-number }} + + + publish-to-deta-space: + name: Push application to Deta Space + runs-on: ubuntu-latest + needs: create-release + steps: + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + + - name: Get release artifacts + uses: actions/download-artifact@v2 + with: + name: release-artifacts + path: artifacts + + - name: Read release version # and set as a output + id: release + run: | + echo "::set-output name=release-version::$(cat artifacts/${{ github.sha }}.txt)" + + - name: Deta Space Deployment + uses: henrycunh/space-deployment-github-action@05e4e73d6801abed32a3580c8e794ea790fab827 + with: + access_token: ${{ secrets.DETA_ACCESS_TOKEN }} + project_id: ${{ secrets.DETA_PROJECT_ID }} + release_version: ${{ steps.release.outputs.release-version }} + use_experimental_build_pipeline: true + space_push: true + list_on_discovery: true + space_release: true + + + \ No newline at end of file diff --git a/Golem/.github/workflows/release-staging.yml b/Golem/.github/workflows/release-staging.yml new file mode 100644 index 0000000..30df9e1 --- /dev/null +++ b/Golem/.github/workflows/release-staging.yml @@ -0,0 +1,117 @@ +name: Deploy staging environment + +on: + push: + branches: + - main + +jobs: + create-release: + name: Create release + runs-on: ubuntu-latest + steps: + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + ref: ${{ steps.script.outputs.ref }} + repository: ${{ steps.script.outputs.repo }} + + - uses: clicampo/action-publish-semver-release@v1 + id: release + with: + github-token: ${{ steps.auth.outputs.token }} + git-committer-name: Release bot + git-committer-email: release@bot.com + # slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }} + # project-url: ${{ github.server_url }}/${{ github.repository }} + # production-action-url: ${{ github.server_url }}/${{ github.repository }}/actions/workflows/release-production.yml + + - name: Create release artifacts + # Create a artifact with the release version, the name is the commit hash + run: | + mkdir -p artifacts + echo "${{ steps.release.outputs.next-version }}" > artifacts/${{ github.sha }}.txt + + - name: Upload release artifacts + uses: actions/upload-artifact@v2 + with: + name: release-artifacts + path: artifacts + + publish-to-vercel: + name: Push application to Vercel + runs-on: ubuntu-latest + needs: create-release + steps: + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + + - name: Deploy to Vercel + id: deploy + uses: BetaHuhn/deploy-to-vercel-action@v1 # pin@ffcc89a6d79de43d964945ce053395c2958610b1 + env: + DOMAIN: golem-chat-staging.vercel.app + with: + GITHUB_TOKEN: ${{ steps.auth.outputs.token }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + VERCEL_SCOPE: ${{ secrets.VERCEL_ORG_ID }} + PR_PREVIEW_DOMAIN: ${{ env.DOMAIN }} + ALIAS_DOMAINS: | + ${{ env.DOMAIN }} + + + publish-to-deta-space: + name: Push application to Deta Space + runs-on: ubuntu-latest + needs: create-release + steps: + - name: Get Token + id: auth + uses: peter-murray/workflow-application-token-action@e8782d687a306fb13d733244d0f2a50e272d3752 # pin@v1 + with: + application_id: ${{ secrets.APPLICATION_ID }} + application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # pin@v3 + with: + fetch-depth: 0 + + - name: Get release artifacts + uses: actions/download-artifact@v2 + with: + name: release-artifacts + path: artifacts + + - name: Read release version # and set as a output + id: release + run: | + echo "::set-output name=release-version::$(cat artifacts/${{ github.sha }}.txt)" + + - name: Deta Space Deployment + uses: henrycunh/space-deployment-github-action@05e4e73d6801abed32a3580c8e794ea790fab827 + with: + access_token: ${{ secrets.DETA_ACCESS_TOKEN }} + project_id: ${{ secrets.DETA_PROJECT_ID }} + release_version: ${{ steps.release.outputs.release-version }} + use_experimental_build_pipeline: true + space_push: true \ No newline at end of file diff --git a/Golem/.gitignore b/Golem/.gitignore new file mode 100644 index 0000000..ec0df72 --- /dev/null +++ b/Golem/.gitignore @@ -0,0 +1,12 @@ +node_modules +*.log* +.nuxt +.nitro +.cache +.output +.env +dist + +.space +.vercel +.DS_Store \ No newline at end of file diff --git a/Golem/.npmrc b/Golem/.npmrc new file mode 100644 index 0000000..bf2e764 --- /dev/null +++ b/Golem/.npmrc @@ -0,0 +1 @@ +shamefully-hoist=true diff --git a/Golem/Discovery.md b/Golem/Discovery.md new file mode 100644 index 0000000..219f910 --- /dev/null +++ b/Golem/Discovery.md @@ -0,0 +1,37 @@ +--- +app_name: Golem +tagline: An open-source ChatGPT UI alternative +theme_color: "#f7f7f7" +git: "https://github.com/henrycunh/golem" +--- + + +
+ + + +
+ +![](./docs/screenshot.png) + +## 🚀 Key Features: + +- ✅ Access to GPT-3.5 / GPT-4 APIs +- 🎨 Customizable UI +- ⭐️ Favorite messages and conversations +- 🔎 Search messages +- 🗑️ Delete message + +## ☁ Hosted on the Personal Cloud with Deta + +- 🔑 Your data and conversations only belong to you +- 📦  Integrate easily with other apps, everything on the personal cloud is programmable +- 🍻 Share chat history + +## 🗺️ Roadmap: + +- 📄 External knowledge (documents, websites, etc.) support +- 🤖 Additional AI language models support +- ☁️ User accounts and cross device synchronisation +- 🌍 Multi-language support +- 🔌 Plugins support \ No newline at end of file diff --git a/Golem/Dockerfile b/Golem/Dockerfile new file mode 100644 index 0000000..ac206a0 --- /dev/null +++ b/Golem/Dockerfile @@ -0,0 +1,29 @@ +# Use a builder stage to install and build dependencies +FROM node:16-alpine AS builder + +WORKDIR /app + +# Install pnpm globally and copy package files +COPY pnpm-lock.yaml package.json ./ +COPY scripts/prepare.ts ./scripts/prepare.ts +RUN yarn global add pnpm && pnpm install + +# Copy app source code and build for production +COPY . . +RUN pnpm run build +RUN ls + +# Use a second stage to create a smaller image without build dependencies +FROM node:16-alpine + +WORKDIR /app + +# Copy built app from previous stage +COPY --from=builder /app/.output /app + +# Expose the port and switch to non-root user +EXPOSE 3000 +USER node + +# Start the app by running the server entrypoint +CMD ["node", "./server/index.mjs"] \ No newline at end of file diff --git a/Golem/LICENSE b/Golem/LICENSE new file mode 100644 index 0000000..6996a78 --- /dev/null +++ b/Golem/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 henrycunh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Golem/README.md b/Golem/README.md new file mode 100644 index 0000000..5539781 --- /dev/null +++ b/Golem/README.md @@ -0,0 +1,61 @@ +
+ + + + +

Golem is an open-source conversational UI and alternative to ChatGPT

+ + + + +

+ + + +## 🚀 Key Features: + +- ✅ Access to GPT-3.5 / GPT-4 APIs +- 🎨 Customizable UI +- 🌑 Dark mode +- 🗑️ Delete messages +- ⭐️ Favorite messages and conversations +- 🔎 Search messages +- ⚙️ Custom settings for conversations + +## ☁ Host on the Personal Cloud with Deta + +- 🔑 Your data and conversations only belong to you +- 📦 Integrate easily with other apps, everything on the personal cloud is programmable +- 💠 Cross device synchronisation +- 🍻 Share chat history + +
+ + + +
+ +## 🛠 Configuration +You can use **environment variables** to customize your instance. + +| Variable | Description | +| -------- | ----------- | +| **`GOLEM_PASSWORD`** | Protects the instance with this password, which will be prompted at every usage. | +| **`OPENAI_API_KEY`** | Enforces the usage of this API Key on the instance. | + +## 🐳 Running on Docker +You can run Golem on Docker with the following command: + +```bash +docker run -p3000:3000 theajax/golem +``` + +## 🗺️ Roadmap: + +- 📄 External knowledge (documents, websites, etc.) support +- 🤖 Additional AI language models support +- 🌍 Multi-language support +- 🔌 Plugins support + + + diff --git a/Golem/Spacefile b/Golem/Spacefile new file mode 100644 index 0000000..df9a69f --- /dev/null +++ b/Golem/Spacefile @@ -0,0 +1,18 @@ +# Spacefile Docs: https://go.deta.dev/docs/spacefile/v0 +v: 0 +icon: assets/logo.png +micros: + - name: golem + src: . + engine: nuxt + primary: true + public_routes: + - /chat/share/* + - /_nuxt/* + - /api/trpc/deta* + - /shiki/* + - /image/* + - /*.png + - /*.ico + - /sw.js + - /manifest.json \ No newline at end of file diff --git a/Golem/app.vue b/Golem/app.vue new file mode 100644 index 0000000..0a2f3c8 --- /dev/null +++ b/Golem/app.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/Golem/assets/css/main.css b/Golem/assets/css/main.css new file mode 100644 index 0000000..7a1d66c --- /dev/null +++ b/Golem/assets/css/main.css @@ -0,0 +1,187 @@ +* { + box-sizing: border-box; + touch-action: manipulation; +} + +html { + @apply font-text; +} + +input, textarea { + @apply font-text; +} + +html.scroll-lock { + position: fixed; + overflow-y: scroll; + top: var(--window-scroll-top); + width: 100%; +} + +.bg-enter-active, +.bg-leave-active { + transition: background-color 0.2s ease-in-out, filter 0.2s ease-in-out; +} + +.bg-enter-from, +.bg-leave-to { + background-color: transparent !important; + filter: blur(0px) !important; +} + +.scale-enter-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.18s cubic-bezier(0.5, 1, 0.89, 1), + margin 0.18s cubic-bezier(0.5, 1, 0.89, 1); +} + +.scale-leave-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.25s cubic-bezier(0, 0.55, 0.45, 1), + margin 0.25s cubic-bezier(0, 0.55, 0.45, 1); +} + +.scale-enter-from, +.scale-leave-to { + opacity: 0; + transform: scale(0.45) !important; + margin: 0 !important; +} + +/* Appear from right */ +.appear-right-enter-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.18s cubic-bezier(0.5, 1, 0.89, 1), + width 0.18s cubic-bezier(0.5, 1, 0.89, 1), + padding-left 0.18s cubic-bezier(0.5, 1, 0.89, 1), + padding-right 0.18s cubic-bezier(0.5, 1, 0.89, 1), + margin 0.18s cubic-bezier(0.5, 1, 0.89, 1); +} + +.appear-right-leave-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.25s cubic-bezier(0, 0.55, 0.45, 1), + width 0.25s cubic-bezier(0, 0.55, 0.45, 1), + padding-left 0.25s cubic-bezier(0, 0.55, 0.45, 1), + padding-right 0.25s cubic-bezier(0, 0.55, 0.45, 1), + margin 0.25s cubic-bezier(0, 0.55, 0.45, 1); +} + +.appear-right-enter-from, +.appear-right-leave-to { + opacity: 0 !important; + transform: translateX(20px) !important; + width: 0 !important; + padding-right: 0 !important; + padding-left: 0 !important; + margin: 0 !important; +} + + +/* Appear from left */ +.appear-left-enter-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.18s cubic-bezier(0.5, 1, 0.89, 1), + width 0.18s cubic-bezier(0.5, 1, 0.89, 1), + margin 0.18s cubic-bezier(0.5, 1, 0.89, 1); +} + +.appear-left-leave-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.25s cubic-bezier(0, 0.55, 0.45, 1), + width 0.25s cubic-bezier(0, 0.55, 0.45, 1), + margin 0.25s cubic-bezier(0, 0.55, 0.45, 1); +} + +.appear-left-enter-from, +.appear-left-leave-to { + opacity: 0 !important; + transform: translateX(-20px) !important; + width: 0 !important; + margin: 0 !important; +} + +/* Appear from top */ +.appear-top-enter-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.18s cubic-bezier(0.5, 1, 0.89, 1), + height 0.18s cubic-bezier(0.5, 1, 0.89, 1), + margin 0.18s cubic-bezier(0.5, 1, 0.89, 1); +} + +.appear-top-leave-active { + transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1), + opacity 0.25s cubic-bezier(0, 0.55, 0.45, 1), + height 0.25s cubic-bezier(0, 0.55, 0.45, 1), + margin 0.25s cubic-bezier(0, 0.55, 0.45, 1); +} + +.appear-top-enter-from, +.appear-top-leave-to { + opacity: 0 !important; + transform: translateY(-20px) !important; + height: 0 !important; + margin: 0 !important; +} + +.page-enter-active, +.page-leave-active { + transition: all 0.250s cubic-bezier(0.5, 1, 0.89, 1); +} +.page-enter-from, +.page-leave-to { + opacity: 0; + transform: translateY(20px); + filter: grayscale(1); +} + +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.25s cubic-bezier(0.5, 1, 0.89, 1); +} + +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +.slide-top-enter-active, +.slide-top-leave-active { + transition: transform 0.25s cubic-bezier(0.5, 1, 0.89, 1), + opacity 0.25s cubic-bezier(0.5, 1, 0.89, 1), + height 0.25s cubic-bezier(0.5, 1, 0.89, 1), + margin 0.25s cubic-bezier(0.5, 1, 0.89, 1), + padding 0.25s cubic-bezier(0.5, 1, 0.89, 1); +} + +.slide-top-enter-from, +.slide-top-leave-to { + opacity: 0 !important; + transform: translateY(-20px) !important; + height: 0 !important; + margin: 0 !important; + padding: 0 !important; +} + +.slide-right-enter-active, +.slide-right-leave-active { + transition: transform 0.25s cubic-bezier(0.5, 1, 0.89, 1), + opacity 0.25s cubic-bezier(0.5, 1, 0.89, 1), + padding 0.25s cubic-bezier(0.5, 1, 0.89, 1); +} + +.slide-right-enter-from, +.slide-right-leave-to { + opacity: 0 !important; + transform: translateX(200px) !important; +} + +.v-popper__inner { + font-size: 14px; +} + +@media (max-width: 640px) { + .v-popper__inner { + font-size: 11px; + } +} \ No newline at end of file diff --git a/Golem/assets/logo.png b/Golem/assets/logo.png new file mode 100644 index 0000000..eaca898 Binary files /dev/null and b/Golem/assets/logo.png differ diff --git a/Golem/components/animated-text.vue b/Golem/components/animated-text.vue new file mode 100644 index 0000000..9357817 --- /dev/null +++ b/Golem/components/animated-text.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/Golem/components/app-chat/header.vue b/Golem/components/app-chat/header.vue new file mode 100644 index 0000000..28b35b2 --- /dev/null +++ b/Golem/components/app-chat/header.vue @@ -0,0 +1,146 @@ + + + diff --git a/Golem/components/app-chat/history-container.vue b/Golem/components/app-chat/history-container.vue new file mode 100644 index 0000000..a587b28 --- /dev/null +++ b/Golem/components/app-chat/history-container.vue @@ -0,0 +1,108 @@ + + + diff --git a/Golem/components/app-chat/history-empty.vue b/Golem/components/app-chat/history-empty.vue new file mode 100644 index 0000000..adac9f3 --- /dev/null +++ b/Golem/components/app-chat/history-empty.vue @@ -0,0 +1,17 @@ + + + diff --git a/Golem/components/app-chat/history-typing.vue b/Golem/components/app-chat/history-typing.vue new file mode 100644 index 0000000..951e732 --- /dev/null +++ b/Golem/components/app-chat/history-typing.vue @@ -0,0 +1,17 @@ + + + diff --git a/Golem/components/app-chat/history.vue b/Golem/components/app-chat/history.vue new file mode 100644 index 0000000..6464a3c --- /dev/null +++ b/Golem/components/app-chat/history.vue @@ -0,0 +1,45 @@ + + + diff --git a/Golem/components/app-chat/index.vue b/Golem/components/app-chat/index.vue new file mode 100644 index 0000000..741468e --- /dev/null +++ b/Golem/components/app-chat/index.vue @@ -0,0 +1,23 @@ + + + diff --git a/Golem/components/app-chat/prompt.vue b/Golem/components/app-chat/prompt.vue new file mode 100644 index 0000000..bda548f --- /dev/null +++ b/Golem/components/app-chat/prompt.vue @@ -0,0 +1,62 @@ + + + diff --git a/Golem/components/app-chat/scroll-to-bottom-button.vue b/Golem/components/app-chat/scroll-to-bottom-button.vue new file mode 100644 index 0000000..9d62f63 --- /dev/null +++ b/Golem/components/app-chat/scroll-to-bottom-button.vue @@ -0,0 +1,30 @@ + + + diff --git a/Golem/components/app-chat/settings-value.vue b/Golem/components/app-chat/settings-value.vue new file mode 100644 index 0000000..c1eb4f9 --- /dev/null +++ b/Golem/components/app-chat/settings-value.vue @@ -0,0 +1,74 @@ + + + diff --git a/Golem/components/app-chat/settings.vue b/Golem/components/app-chat/settings.vue new file mode 100644 index 0000000..2784684 --- /dev/null +++ b/Golem/components/app-chat/settings.vue @@ -0,0 +1,48 @@ + + + diff --git a/Golem/components/app-messages-sidebar/favorite-conversations.vue b/Golem/components/app-messages-sidebar/favorite-conversations.vue new file mode 100644 index 0000000..da2500b --- /dev/null +++ b/Golem/components/app-messages-sidebar/favorite-conversations.vue @@ -0,0 +1,39 @@ + + + diff --git a/Golem/components/app-messages-sidebar/index.vue b/Golem/components/app-messages-sidebar/index.vue new file mode 100644 index 0000000..3e63551 --- /dev/null +++ b/Golem/components/app-messages-sidebar/index.vue @@ -0,0 +1,90 @@ + + + diff --git a/Golem/components/app-messages-sidebar/recent-conversations.vue b/Golem/components/app-messages-sidebar/recent-conversations.vue new file mode 100644 index 0000000..a255b9e --- /dev/null +++ b/Golem/components/app-messages-sidebar/recent-conversations.vue @@ -0,0 +1,52 @@ + + + diff --git a/Golem/components/app-navbar-mobile.vue b/Golem/components/app-navbar-mobile.vue new file mode 100644 index 0000000..7e65992 --- /dev/null +++ b/Golem/components/app-navbar-mobile.vue @@ -0,0 +1,61 @@ + + + diff --git a/Golem/components/app-navbar/index.vue b/Golem/components/app-navbar/index.vue new file mode 100644 index 0000000..2a93707 --- /dev/null +++ b/Golem/components/app-navbar/index.vue @@ -0,0 +1,114 @@ + + + diff --git a/Golem/components/app-prompt-input.vue b/Golem/components/app-prompt-input.vue new file mode 100644 index 0000000..07bc87c --- /dev/null +++ b/Golem/components/app-prompt-input.vue @@ -0,0 +1,133 @@ + + +