Compare commits

...

18 commits
v1.0 ... main

Author SHA1 Message Date
3b95c16280 ci: remove leftover ssh command
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-30 18:46:13 +02:00
eac11f06da feat: add .well-known/gorb.txt
All checks were successful
ci/woodpecker/push/build Pipeline was successful
Used by frontend to locate the API when its not on /api
2025-05-30 18:43:07 +02:00
99f3d569f7 ci: only include needed public folder
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-30 18:29:35 +02:00
f874f3db79 ci: prerender site
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-30 18:27:23 +02:00
14f4ee86e5 feat: source page
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-28 07:13:40 +02:00
ed076c3edc feat: update navbar and add footer, we have global css files now 2025-05-28 07:13:06 +02:00
45c7311621 chore: ignore vscode settings 2025-05-28 07:12:27 +02:00
246acb5f28 chore: update embed colour
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-27 21:02:28 +02:00
b77d2a7970 try this?
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-26 21:07:36 +02:00
41ea0663d0 add beavers to embed
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-26 21:05:11 +02:00
e81c3a729d
feat: separate header into header and subheader
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-11 16:40:18 +02:00
577835d855
docs: remove head tags from index page 2025-05-11 16:39:42 +02:00
fedb1fa8de
docs: update head and meta tags 2025-05-11 16:38:35 +02:00
1e261d1a1b
feat: set custom title and description for homepage
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-05 11:18:09 +02:00
f6047894e0
feat: add Discord embed color meta tag 2025-05-05 11:16:24 +02:00
1f7ec956ca ci: add when to build step
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-05 03:13:09 +02:00
eb467e3255 ci: add ci to automatically publish new versions
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-05 03:08:31 +02:00
044b714295 feat: include data for other platforms to generate embeds 2025-05-02 02:57:46 +02:00
13 changed files with 300 additions and 44 deletions

3
.gitignore vendored
View file

@ -22,3 +22,6 @@ logs
.env .env
.env.* .env.*
!.env.example !.env.example
# Local settings
.vscode/

23
.woodpecker/build.yml Normal file
View file

@ -0,0 +1,23 @@
steps:
- name: build
image: node:alpine
commands:
- npm install -g pnpm
- pnpm install
- pnpm build --prerender
when:
- event: push
- event: pull_request
- name: publish
image: debian:12
commands:
- apt update -y && apt install -y rsync openssh-client
- printf "Host *\n StrictHostKeyChecking no" >> /etc/ssh/ssh_config
- ssh-agent bash -c "ssh-add <(echo '$KEY' | base64 -d) && rsync --archive --verbose --compress --hard-links --delete-during --partial --progress ./.output/public/ root@gorb.app:/var/www/gorb.app"
environment:
KEY:
from_secret: ssh_key
when:
- branch: main
event: push

50
app.vue
View file

@ -1,14 +1,9 @@
<template> <template>
<nav id="navbar"> <div id="app">
<div id="navbar-left"> <Header />
<a href="/">Home</a>
</div>
<div id="navbar-right">
<NuxtLink href="/"><s>Register</s></NuxtLink>
<NuxtLink href="/"><s>Login</s></NuxtLink>
</div>
</nav>
<NuxtPage /> <NuxtPage />
<Footer />
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@ -18,42 +13,27 @@ const gorbBase = ref<string>(useAppConfig().gorbClientBaseURL);
</script> </script>
<style> <style>
html, html, body {
body {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
box-sizing: border-box; box-sizing: border-box;
color: whitesmoke; color: var(--text-colour);
background-color: rgb(30, 30, 30); background-color: var(--background-colour);
height: 100%; height: 100%;
margin: 0; margin: 0;
} }
#app {
display: flex;
flex-direction: column;
min-height: 100vh;
}
#main { #main {
text-align: center; text-align: center;
margin-bottom: 32px;
} }
#navbar { .link, a {
display: flex;
justify-content: space-between;
margin-left: 3dvw;
margin-right: 3dvw;
margin-top: 2dvh;
padding-bottom: 2dvh;
border-bottom: 1px solid orange;
}
#navbar a {
text-decoration: none;
color: inherit;
}
#navbar-left,
#navbar-right {
display: flex;
gap: 2dvw;
}
.link {
color: inherit; color: inherit;
} }
</style> </style>

77
components/Footer.vue Normal file
View file

@ -0,0 +1,77 @@
<template>
<nav id="footer">
<div id="content">
<div id="source">
<a href="/source">SOURCE CODE</a>
</div>
<div id="socials">
<a href="https://docs.gorb.app" title="API Documentation">
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="currentColor" class="bi bi-book" viewBox="0 0 16 16">
<path d="M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783"/>
</svg>
</a>
<a href="https://git.gorb.app/gorb" title="Gorb's Forgejo">
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 24 24">
<path fill="currentColor" d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422a2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24A2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.389Z"/>
</svg>
</a>
</div>
</div>
</nav>
</template>
<script>
export default {
name: 'Header'
}
</script>
<style scoped>
#footer {
margin-top: auto;
padding: 2dvh 3.5dvh;
background-color: var(--background-secondary-colour);
border-top: 1px solid var(--secondary-colour);
color: var(--secondary-colour)
}
#content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
#footer a {
text-decoration: none;
color: var(--secondary-colour)
}
#source {
display: flex;
font-weight: 300;
font-size: 90%;
margin-right: 4dvh;
}
#source a {
color: var(--accent-colour);
}
#socials {
display: flex;
gap: 2dvh;
margin-bottom: -1dvh;
}
svg {
width: 1.5em;
height: 1.5em;
shape-rendering: auto;
transition: filter 0.15s ease-in-out;
}
a:hover svg {
filter: brightness(140%);
}
</style>

47
components/Header.vue Normal file
View file

@ -0,0 +1,47 @@
<template>
<nav id="header">
<div id="header-left">
<a href="/">Home</a>
</div>
<div id="header-right">
<NuxtLink href="/"><s>Register</s></NuxtLink>
<NuxtLink href="/"><s>Login</s></NuxtLink>
</div>
</nav>
</template>
<script>
export default {
name: 'Header'
}
</script>
<style scoped>
#header {
--horizontal-padding: 25%;
padding: 2dvh var(--horizontal-padding);
display: flex;
justify-content: space-between;
position: sticky;
background-color: var(--background-secondary-colour);
color: var(--text-colour);
border-bottom: 1px solid var(--secondary-colour);
}
@media screen and (max-width: 1000px) {
#header {
--horizontal-padding: 5%;
}
}
#header a {
text-decoration: none;
color: inherit;
}
#header-left, #header-right {
display: flex;
gap: 2dvw;
}
</style>

View file

@ -2,5 +2,28 @@
export default defineNuxtConfig({ export default defineNuxtConfig({
compatibilityDate: '2024-11-01', compatibilityDate: '2024-11-01',
devtools: { enabled: true }, devtools: { enabled: true },
modules: ['@nuxt/fonts', '@nuxt/image'] modules: ['@nuxt/fonts', '@nuxt/image'],
css: [
'@/public/variables.css',
'@/public/global.css'
],
app: {
head: {
title: 'Gorb - Open-Source Chat Platform',
// this is purely used to embed in that other chat app, and similar stuff
meta: [
{ property: 'og:title', content: 'Gorb - Open-Source Chat Platform' },
{ property: 'og:description', content: 'Gorb is an open-source (and eventually federated) chat platform where you\'ll be able to join and chat in servers, chat privately in DMs, and more.' },
{ property: 'og:image', content: '//public/beaver_1.jpg' },
{ property: 'og:url', content: 'https://gorb.app' },
{ property: 'og:type', content: 'website' },
{ property: 'og:site_name', content: 'Gorb' },
{ property: 'theme-color', content: "#df5f0b" }
],
link: [
{ rel: "canonical", href: "https://gorb.app" },
{ rel: "icon", href: "//public/beaver_2.png", type: "image/png" }
]
}
}
}) })

View file

@ -1,20 +1,21 @@
<template> <template>
<div id="main"> <div id="main">
<h1>Welcome to <span id="gorb"> <h1>
<span>G</span><span>O</span><span>R</span><span>B</span> Welcome to <span id="gorb">
</span>, the <span id="open-source">Open-Source</span> and <span id="federated">Federated</span> <span>G</span><span>O</span><span>R</span><span>B</span></span>!</h1>
Chat App!</h1> <h2>
The <span class="pansexual-gradient">Open-Source</span> and <span id="federated">Federated</span>
Chat Platform!
</h2>
<NuxtLink class="link" href="/"><s>Go to web client</s></NuxtLink> <NuxtLink class="link" href="/"><s>Go to web client</s></NuxtLink>
<p id="not-exist">IT DOESN'T EXIST YET</p> <p id="not-exist">IT DOESN'T EXIST YET</p>
<p> <p>
BUT! Check out our <NuxtLink id="git-link" href="https://git.gorb.app/gorb">Git</NuxtLink> to check on our BUT! Check out our <NuxtLink id="git-link" href="https://git.gorb.app/gorb">Git</NuxtLink> to check on our progress!
progress!
</p> </p>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
</script> </script>
<style scoped> <style scoped>

64
pages/source.vue Normal file
View file

@ -0,0 +1,64 @@
<template>
<div id="main">
<h2>
<span class="pansexual-gradient">Source Code</span>
</h2>
<div id="card-container">
<div class="card">
<a href="https://git.gorb.app/gorb/backend">
<h3>Backend</h3>
<p>Gorb's official backend</p>
</a>
</div>
<div class="card">
<a href="https://git.gorb.app/gorb/frontend">
<h3>Frontend</h3>
<p>Gorb's official frontend</p>
</a>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
</script>
<style scoped>
#card-container {
--flex-direction: row;
display: flex;
flex-direction: var(--flex-direction);
justify-content: space-between;
gap: 48px;
width: fit-content;
max-width: 60vw;
margin: 48px auto;
}
@media screen and (max-width: 1000px) {
#card-container {
--flex-direction: column;
}
}
.card {
flex: 1;
padding: 32px;
border: 1px solid var(--accent-colour);
background-color: var(--primary-colour);
border-radius: 8px;
box-shadow: 0 8px 14px rgba(0, 0, 0, 0.15);
transition: background-color 0.3s ease-in-out;
cursor: pointer;
}
.card a {
text-decoration: none;
}
.card:hover {
background-color: var(--secondary-colour);
}
</style>

View file

@ -0,0 +1 @@
ApiBaseUrl: https://api.gorb.app

BIN
public/beaver_1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
public/beaver_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 KiB

6
public/global.css Normal file
View file

@ -0,0 +1,6 @@
.pansexual-gradient {
background: linear-gradient(to right, #FE218C, #FED84E, #1CB3F7);
background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-background-clip: text;
}

31
public/variables.css Normal file
View file

@ -0,0 +1,31 @@
/* this file may want to be moved to a /styles folder, or /assets folder, or smth */
:root {
--text-colour: #141210;
--background-colour: #f4ebe0;
--background-secondary-colour: #efe4db;
--primary-colour: #f97635;
--secondary-colour: #cab39b;
--tertiary-colour: #e8ac84;
--accent-colour: #ed7a41;
}
@media (prefers-color-scheme: dark) {
:root {
--text-colour: #efedec;
--background-colour: #201d19;
--background-secondary-colour: #1d1915;
--primary-colour: #f97635;
--secondary-colour: #b35618;
--tertiary-colour: #7c4018;
--accent-colour: #cc764a;
}
}
/* unchanging no matter the theme */
:root {
--text-on-primary-colour: #fff;
--text-on-secondary-colour: #fff;
--text-on-accent-colour: #fff;
}