Initial commit

This commit is contained in:
SauceyRed 2025-04-29 00:47:06 +02:00
commit e4785522f5
Signed by: sauceyred
GPG key ID: 270B096EF6E9A462
19 changed files with 9648 additions and 0 deletions

24
.gitignore vendored Normal file
View file

@ -0,0 +1,24 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"editor.insertSpaces": false
}

75
README.md Normal file
View file

@ -0,0 +1,75 @@
# Nuxt Minimal Starter
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.

15
app.vue Normal file
View file

@ -0,0 +1,15 @@
<template>
<NuxtPage />
</template>
<style>
html,
body {
font-family: Arial, Helvetica, sans-serif;
box-sizing: border-box;
color: whitesmoke;
background-color: rgb(30, 30, 30);
height: 100%;
margin: 0;
}
</style>

1
assets/img/envelope.svg Normal file
View file

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M0 0h512v512H0z" fill="#000" fill-opacity="1"></path><g class="" style="" transform="translate(0,0)"><path d="M182.78 80.125c3.367 19.498 10.608 52.67 19.126 84.813 8.126 30.663 17.73 60.122 25.063 75.062 57.968-.962 148.212-16.707 252.343-46.344-91.756-70.023-188.486-99.376-296.532-113.53zM164.657 85c-65.62 51.243-106.43 120.106-138.5 196.25 54.866-38.51 111.644-60.42 169.313-70.906-3.995-12.636-7.88-26.486-11.626-40.625-8.425-31.79-15.554-64.12-19.188-84.72zm322.281 125.906c-74.123 21.218-141.43 35.68-196.25 42.813 24.018 51.794 36.448 106.688 43.688 160.936 70.634-58.76 125.36-118.495 152.563-203.75zM201.53 228.28c-56.563 9.917-111.78 30.946-165.56 68.907 89.478 61.396 189.91 97.037 279.874 119.844-7.362-55.057-20.104-109.997-44.75-161.03-18.39 1.897-35.134 2.875-49.938 2.875h-5.344l-2.718-4.625c-3.898-6.69-7.77-15.598-11.563-25.97z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 1,003 B

1
assets/img/house.svg Normal file
View file

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M0 0h512v512H0z" fill="#000" fill-opacity="1"></path><g class="" style="" transform="translate(0,0)"><path d="M256 19.27L25.637 249.638 19.27 256 32 268.73l6.363-6.367L256 44.727l217.637 217.636L480 268.73 492.73 256l-6.367-6.363zM96 48v107.273l64-64.002V48zm160 20.727l-192 192V486h64V320h96v166h224V260.727zM288 320h96v80h-96z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 484 B

1
assets/img/server.svg Normal file
View file

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M0 0h512v512H0z" fill="#000" fill-opacity="1"></path><g class="" style="" transform="translate(0,0)"><path d="M41 25v78h430V25H41zm254 23h18v32h-18V48zm121 0a16 16 0 0 1 16 16 16 16 0 0 1-16 16 16 16 0 0 1-16-16 16 16 0 0 1 16-16zM64 55h48v18H64V55zm80 0h48v18h-48V55zm80 0h48v18h-48V55zm-119 66v30h302v-30H105zm-64 48v78h430v-78H41zm254 23h18v32h-18v-32zm121 0a16 16 0 0 1 16 16 16 16 0 0 1-16 16 16 16 0 0 1-16-16 16 16 0 0 1 16-16zm-352 7h48v18H64v-18zm80 0h48v18h-48v-18zm80 0h48v18h-48v-18zm-119 66v30h302v-30H105zm-64 48v78h430v-78H41zm254 23h18v32h-18v-32zm121 0a16 16 0 0 1 16 16 16 16 0 0 1-16 16 16 16 0 0 1-16-16 16 16 0 0 1 16-16zm-352 7h48v18H64v-18zm80 0h48v18h-48v-18zm80 0h48v18h-48v-18zm13 66v30h38v-30h-38zM25 457v30h130.2l20-30H25zm171.8 0l-20 30h158.4l-20-30H196.8zm140 0l20 30H487v-30H336.8z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 968 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

6
eslint.config.mjs Normal file
View file

@ -0,0 +1,6 @@
// @ts-check
import withNuxt from './.nuxt/eslint.config.mjs'
export default withNuxt(
// custom rules
)

6
nuxt.config.ts Normal file
View file

@ -0,0 +1,6 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: '2024-11-01',
devtools: { enabled: true },
modules: ['@nuxt/eslint']
})

24
package.json Normal file
View file

@ -0,0 +1,24 @@
{
"name": "frontend",
"private": true,
"type": "module",
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"@nuxt/eslint": "^1.3.0",
"nuxt": "^3.17.0",
"vue": "^3.5.13",
"vue-router": "^4.5.1"
},
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39",
"license": "MIT",
"devDependencies": {
"eslint-config-prettier": "^10.1.2",
"eslint-plugin-prettier": "^5.2.6"
}
}

16
pages/index.vue Normal file
View file

@ -0,0 +1,16 @@
<template>
<div id="main">
<h1 class="center">Welcome to Gorb, the best chat app in the WORLD!!!</h1>
<a href="/web" class="center">Go to web client</a>
</div>
</template>
<script lang="ts" setup>
</script>
<style>
#main {
text-align: center;
}
</style>

184
pages/web/index.vue Normal file
View file

@ -0,0 +1,184 @@
<template>
<div id="client-root">
<div id="grid-container">
<div id="left-sidebar-container" class="grid-column right-border">
<div id="home" class="bottom-border">
<NuxtLink href="web">
<img src="~/assets/img/house.svg" alt="Home" width="70%">
</NuxtLink>
</div>
<div id="servers-list" v-for="server of servers">
<NuxtLink :href="'web' + server.url">
<img src="~/assets/img/server.svg" :alt="server.name" width="70%">
</NuxtLink>
</div>
</div>
<div id="main-content" class="grid-column">
<div id="main-bar" class="main-grid-row">
main bar
</div>
<div id="message-history-container" class="main-grid-row">
message history
</div>
<div id="message-box" class="main-grid-row">
<input type="text" name="message-box-input" id="message-box-input">
</div>
</div>
<div id="right-sidebar-container" class="grid-column left-border">
<div id="utilities" class="bottom-border">
<div>
<NuxtLink>
<img src="~/assets/img/envelope.svg" alt="Inbox" width="30dvw">
</NuxtLink>
</div>
</div>
<div id="members-list">
<div class="member-item" v-for="member of members">
<img src="~/assets/img/tiger-head.svg" :alt="member.displayName" width="30dvw">
<span class="member-display-name">{{ member.displayName }}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
const servers = [
{
name: "Test",
url: "/servers/284103257435"
},
{
name: "Test",
url: "/servers/284103257435"
},
{
name: "Test",
url: "/servers/284103257435"
}
];
const members = [
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
},
{
id: "3287484395",
displayName: "SauceyRed"
}
];
</script>
<style>
#client-root {
/* border: 1px solid white; */
height: 100%;
}
#client-root div {
/* border: 1px solid cyan; */
}
#__nuxt {
display: flex;
flex-flow: column;
height: 100%;
}
#grid-container {
display: grid;
grid-template-columns: 1fr 18fr 4fr;
height: 100%;
}
.grid-column {
padding-top: 1dvh;
}
#home {
margin-bottom: 3dvh;
}
#utilities {
display: flex;
flex-direction: row;
margin-bottom: 3dvh;
justify-content: center;
}
#left-sidebar-container,
#right-sidebar-container {
text-align: center;
}
.member-item {
display: flex;
justify-content: center;
align-items: center;
}
.bottom-border {
border-bottom: 1px solid rgb(70, 70, 70);
}
.left-border {
border-left: 1px solid rgb(70, 70, 70);
}
.right-border {
border-right: 1px solid rgb(70, 70, 70);
}
#main-content {
display: grid;
grid-template-rows: 1fr 15fr 1fr;
text-align: center;
}
#message-box {
border: 1px solid rgb(70, 70, 70);
width: 100%;
margin-bottom: 1dvh;
}
#message-box-input {
width: 80%;
height: 100%;
}
.main-grid-row {
border: 1px solid cyan;
}
</style>

9278
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load diff

4
pnpm-workspace.yaml Normal file
View file

@ -0,0 +1,4 @@
onlyBuiltDependencies:
- '@parcel/watcher'
- esbuild
- unrs-resolver

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

2
public/robots.txt Normal file
View file

@ -0,0 +1,2 @@
User-Agent: *
Disallow:

3
server/tsconfig.json Normal file
View file

@ -0,0 +1,3 @@
{
"extends": "../.nuxt/tsconfig.server.json"
}

4
tsconfig.json Normal file
View file

@ -0,0 +1,4 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"extends": "./.nuxt/tsconfig.json"
}