Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
44ff1f1
add folders for vps documentation
halfcyan Jun 22, 2026
caefc26
add networking article
halfcyan Jun 22, 2026
c704878
add placeholder page.svx files
halfcyan Jun 22, 2026
ae007ac
working on more doc stuff
halfcyan Jun 22, 2026
5623777
Merge branch 'main' into cypress/add-vps-docs
halfcyan Jun 22, 2026
24ce698
add headers and ssh documentation
halfcyan Jun 22, 2026
a21c739
VPS docs are mostly done
halfcyan Jun 22, 2026
41ff715
add networking documentation
halfcyan Jun 22, 2026
84955bc
add vps docs layout
halfcyan Jun 22, 2026
5409b52
update article titles
halfcyan Jun 22, 2026
7076385
i forgot to update titles in one spot
halfcyan Jun 23, 2026
49030e5
update reference
halfcyan Jun 23, 2026
3ba8d5f
update order of docs
halfcyan Jun 23, 2026
e09bad8
clarify configuration order
halfcyan Jun 23, 2026
05211fe
update firewall documentation
halfcyan Jun 23, 2026
13bee77
update formatting
halfcyan Jun 23, 2026
ce0005d
spelling and grammar pass
halfcyan Jun 23, 2026
69e7503
fuck those windows chuds lmaoooooo
halfcyan Jun 23, 2026
168dd56
formatting i think
halfcyan Jun 23, 2026
26ccb5c
fix articles section
halfcyan Jun 23, 2026
f12ec73
fix order
halfcyan Jun 23, 2026
6f94404
separate updating permissions
halfcyan Jun 23, 2026
88366db
update header sizes
halfcyan Jun 23, 2026
387023b
fix code blocks because i was pissed off
halfcyan Jun 23, 2026
1897bff
set up syntax highlighting
halfcyan Jun 23, 2026
9b2b651
aaaaaaaaa
halfcyan Jun 23, 2026
96edad6
revert adding networking
halfcyan Jun 23, 2026
c8dbbe1
forgot to remove comma
halfcyan Jun 23, 2026
aba9b35
added that using a source ip that you're not assigned will get you bl…
halfcyan Jun 23, 2026
142ab69
remove conflicting change
halfcyan Jun 23, 2026
29a4f69
formatting fixes
halfcyan Jun 23, 2026
83399c7
clarify restart command for fedora vs. debian
halfcyan Jun 23, 2026
eefa3a3
change for consistency
halfcyan Jun 23, 2026
fd552d8
update directions to allow for sshd_config.d configs
halfcyan Jun 23, 2026
9e4758c
update for consistency and accuracy
halfcyan Jun 24, 2026
9b6ee75
update wording and format
halfcyan Jun 24, 2026
5bad70a
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
b871aca
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
1031279
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
b8937ef
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
61bee14
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
05f77db
Update src/routes/docs/vps/user-setup/+page.svx
halfcyan Jun 24, 2026
50c8560
Update src/routes/docs/vps/user-setup/+page.svx
halfcyan Jun 24, 2026
e05750c
Update src/routes/docs/+page.svelte
halfcyan Jun 24, 2026
ebe3c2e
Update src/routes/docs/vps/user-setup/+page.svx
halfcyan Jun 24, 2026
fefdb25
Update src/routes/docs/+page.svelte
halfcyan Jun 24, 2026
faaacac
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
5a33849
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
1e59f47
Update src/routes/docs/vps/hardening/+page.svx
halfcyan Jun 24, 2026
3250f13
Update src/routes/docs/vps/networking/+page.svx
halfcyan Jun 24, 2026
f6f48c6
Update src/routes/docs/vps/networking/+page.svx
halfcyan Jun 24, 2026
5a34f0a
Update src/routes/docs/vps/ssh/+page.svx
halfcyan Jun 24, 2026
1ddd031
Update src/routes/docs/vps/ssh/+page.svx
halfcyan Jun 24, 2026
eb4b2a7
Apply suggestions from code review
halfcyan Jun 24, 2026
cdc4685
rebase because i forgot to pull
halfcyan Jun 24, 2026
bd16e77
move docs prose to external file.
TheHeroBrine422 Jun 24, 2026
b3f697c
Merge branch 'cypress/add-vps-docs' of github.com:FyraStack/homepage …
TheHeroBrine422 Jun 24, 2026
e67e617
Merge branch 'main' into cypress/add-vps-docs
TheHeroBrine422 Jun 24, 2026
d5b0bbf
clarify instructions on adding ssh key
halfcyan Jun 27, 2026
e994e1b
add placeholder option instead of just soon
halfcyan Jun 30, 2026
fb7d41e
this should be soon still
halfcyan Jun 30, 2026
291ac4a
info on how to exit nano
halfcyan Jun 30, 2026
41409c0
add nixos
halfcyan Jun 30, 2026
e15007d
reference to nano
halfcyan Jun 30, 2026
e24c836
add support page
halfcyan Jun 30, 2026
0511c76
fix breadcumbs
halfcyan Jun 30, 2026
01751fe
missed a spot
halfcyan Jun 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
node_modules
package-lock.json

# Output
.output
Expand Down Expand Up @@ -27,4 +28,4 @@ vite.config.ts.timestamp-*
.dev.vars*
!.dev.vars.example

.idea
.idea
83 changes: 83 additions & 0 deletions src/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,89 @@
--font-sans: 'Satoshi-Variable', 'Satoshi-Regular', sans-serif;
}

/* Prism syntax highlighting theme */
pre[class*='language-'],
code[class*='language-'] {
color: #e4e4e7;
/* fyra-gray-200 */
}

.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: #53535a;
/* fyra-gray-600 */
font-style: italic;
}

.token.punctuation {
color: #727279;
/* fyra-gray-500 */
}

.token.namespace {
opacity: 0.7;
}

.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #e8c98a;
}

.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #87c3a0;
}

.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #a2a2a9;
/* fyra-gray-400 */
}

.token.keyword {
color: #d89894;
/* fyra-red-400 */
}

.token.atrule,
.token.attr-value {
color: #87c3a0;
}

.token.function,
.token.class-name {
color: #a5c8e8;
}

.token.regex,
.token.important,
.token.variable {
color: #e8c98a;
}

.token.important,
.token.bold {
font-weight: bold;
}

.token.italic {
font-style: italic;
}

html {
@apply w-screen overflow-x-clip bg-fyra-gray-900 text-fyra-gray-50;
}
Expand Down
15 changes: 15 additions & 0 deletions src/lib/docs-prose-class.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export const docsProseClass = [
'prose max-w-2xl prose-invert',
'prose-headings:font-semibold prose-headings:tracking-tight',
'prose-h1:mb-4 prose-h1:text-4xl prose-h1:text-fyra-gray-50',
'prose-h2:mt-10 prose-h2:mb-3 prose-h2:text-xl prose-h2:text-fyra-gray-50',
'prose-h3:mt-6 prose-h3:mb-1 prose-h3:text-lg prose-h3:font-semibold prose-h3:text-fyra-gray-200',
'prose-h4:mt-4 prose-h4:mb-1 prose-h4:text-base prose-h4:font-semibold prose-h4:text-fyra-gray-300',
'prose-p:text-sm prose-p:leading-relaxed prose-p:text-fyra-gray-400',
'prose-a:font-medium prose-a:text-fyra-red-400 prose-a:no-underline prose-a:hover:text-fyra-red-300',
'prose-strong:text-fyra-gray-200',
'prose-code:rounded prose-code:bg-fyra-gray-800 prose-code:px-1.5 prose-code:py-0.5 prose-code:text-sm prose-code:font-normal prose-code:text-fyra-red-300 prose-code:before:content-none prose-code:after:content-none',
'prose-pre:my-4 prose-pre:overflow-x-auto prose-pre:rounded-none prose-pre:border prose-pre:border-fyra-gray-700 prose-pre:bg-fyra-gray-950 prose-pre:px-4 prose-pre:py-3 prose-pre:text-fyra-gray-200',
'[&_pre_code]:block [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit [&_pre_code]:before:content-none [&_pre_code]:after:content-none',
'prose-li:text-sm prose-li:text-fyra-gray-400 prose-hr:my-8 prose-hr:border-fyra-gray-800'
].join(' ');
50 changes: 40 additions & 10 deletions src/routes/docs/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,31 @@
}
];

const guides = [
type InternalHref =
| '/services/colocation'
| '/docs/colocation/shipping-hardware'
| '/docs/colocation/ipmi'
| '/docs/colocation/remote-hands'
| '/docs/colocation/power-budgets'
| '/docs/vps/ssh'
| '/docs/vps/user-setup'
| '/docs/vps/hardening'
| '/docs/vps/networking';

type GuideArticle = {
label: string;
href?: InternalHref;
soon?: boolean;
placeholder?: boolean;
};

type Guide = {
category: string;
description: string;
articles: GuideArticle[];
};

const guides: Guide[] = [
{
category: 'Colocation',
description: 'IPMI access, power specs, and getting your hardware online.',
Expand All @@ -49,19 +73,23 @@
category: 'VPS',
description: 'First login, initial hardening, and setting up your environment.',
articles: [
{ label: 'Connecting via SSH', soon: true },
{ label: 'Initial server hardening', soon: true },
{ label: 'Adding a non-root user', soon: true },
{ label: 'Connecting via SSH', soon: false, href: '/docs/vps/ssh' },
{ label: 'Adding a Non-Root User', soon: false, href: '/docs/vps/user-setup' },
{ label: 'Initial Server Hardening', soon: false, href: '/docs/vps/hardening' },
{ label: 'VPS Networking', soon: false, href: '/docs/vps/networking' },
{ label: 'Choosing a Linux distro', soon: true }
]
},
{
category: 'Linux & Distros',
description: 'Supported operating systems and distro-specific notes.',
articles: [
{ label: 'Ultramarine Linux', soon: false },
{ label: 'Debian / Ubuntu', soon: true },
{ label: 'Arch', soon: true },
{ label: 'Ultramarine Server', soon: true },
{ label: 'Fedora Server', placeholder: true },
{ label: 'Alma Linux', placeholder: true },
{ label: 'Debian', placeholder: true },
{ label: 'Ubuntu Server', placeholder: true },
{ label: 'Alpine', placeholder: true },
{ label: 'NixOS', soon: true }
]
},
Expand All @@ -72,7 +100,7 @@
{ label: 'Upgrading your plan', soon: true },
{ label: 'Reading your invoice', soon: true },
{ label: 'Cancelling a plan', soon: true },
{ label: 'Contacting support', soon: true }
{ label: 'Contacting support', soon: false, href: '/docs/account-billing/support' }
]
}
];
Expand Down Expand Up @@ -240,7 +268,7 @@
{/if}
{#if step.cta}
<a
href={resolve(step.cta.href)}
href={resolve(step.cta.href as InternalHref, {})}
class="mt-4 inline-block text-sm font-medium text-fyra-red-400 transition-colors duration-100 hover:text-fyra-red-300"
>{step.cta.label}</a
>
Expand Down Expand Up @@ -277,9 +305,11 @@
class="shrink-0 text-[10px] font-medium tracking-widest text-fyra-gray-400 uppercase"
>Soon</span
>
{:else if article.placeholder}
<span class="text-sm text-fyra-gray-400">{article.label}</span>
{:else}
<a
href={article.href ? resolve(article.href) : '#'}
href={article.href ? resolve(article.href as InternalHref, {}) : '#'}
class="text-sm text-fyra-gray-300 transition-colors duration-100 hover:text-fyra-gray-50"
>{article.label}</a
>
Expand Down
79 changes: 79 additions & 0 deletions src/routes/docs/account-billing/+layout.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<script lang="ts">
import { resolve } from '$app/paths';
import { page } from '$app/stores';
import { Icon } from '@steeze-ui/svelte-icon';
import { ArrowLeft } from '@steeze-ui/carbon-icons';
import { docsProseClass } from '$lib/docs-prose-class';

const { children } = $props();

const nav = [{ label: 'Contacting Support', href: '/docs/account-billing/support' }];
</script>

<div class="border-b border-fyra-gray-800 px-6 py-3 lg:px-8">
<nav class="flex items-center gap-2 text-xs text-fyra-gray-500">
<a href={resolve('/docs')} class="transition-colors hover:text-fyra-gray-300">Docs</a>
<span>/</span>
<span class="text-fyra-gray-400">Account & Billing</span>
</nav>
</div>

<div class="flex min-h-screen divide-x divide-fyra-gray-800">
<!-- Sidebar -->
<aside class="hidden w-56 shrink-0 lg:block">
<div class="sticky top-0 px-6 py-8">
<p class="mb-3 text-[10px] font-medium tracking-widest text-fyra-gray-500 uppercase">
Account & Billing
</p>
<nav class="flex flex-col gap-0.5">
{#each nav as item (item.href)}
<a
href={resolve(item.href)}
class="rounded-sm px-2 py-1.5 text-sm transition-colors {$page.url.pathname ===
item.href
? 'bg-fyra-gray-800 font-medium text-fyra-gray-50'
: 'text-fyra-gray-400 hover:text-fyra-gray-200'}"
>
{item.label}
</a>
{/each}
</nav>

<div class="mt-8 border-t border-fyra-gray-800 pt-6">
<a
href={resolve('/docs')}
class="flex items-center gap-1.5 text-xs text-fyra-gray-500 transition-colors hover:text-fyra-gray-300"
>
<Icon src={ArrowLeft} class="h-3 w-3" aria-hidden="true" />
All docs
</a>
</div>
</div>
</aside>

<!-- Content -->
<main class="min-w-0 flex-1 px-6 py-12 lg:px-12">
<!-- Mobile nav -->
<div class="mb-8 lg:hidden">
<p class="mb-2 text-[10px] font-medium tracking-widest text-fyra-gray-500 uppercase">
Account & Billing
</p>
<nav class="flex flex-wrap gap-2">
{#each nav as item (item.href)}
<a
href={resolve(item.href)}
class="border px-3 py-1 text-xs transition-colors {$page.url.pathname === item.href
? 'border-fyra-red-500 text-fyra-gray-50'
: 'border-fyra-gray-700 text-fyra-gray-400 hover:border-fyra-gray-500 hover:text-fyra-gray-200'}"
>
{item.label}
</a>
{/each}
</nav>
</div>

<div class={docsProseClass}>
{@render children()}
</div>
</main>
</div>
20 changes: 20 additions & 0 deletions src/routes/docs/account-billing/support/+page.svx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<svelte:head>
<title>Contacting Support | Fyra Stack Docs</title>
<meta name="description" content="Contact Fyra Stack support for any questions or issues with your account billing." />
<link rel="canonical" href="https://fyrastack.com/docs/account-billing/support" />
<meta property="og:title" content="Contacting Support | Fyra Stack Docs" />
<meta property="og:description" content="Contact Fyra Stack support for any questions or issues with your account billing." />
<meta property="og:image" content="https://fyrastack.com/logo.png" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://fyrastack.com/docs/account-billing/support" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Contacting Support | Fyra Stack Docs" />
<meta name="twitter:description" content="Contact Fyra Stack support for any questions or issues with your account billing." />
<meta name="twitter:image" content="https://fyrastack.com/logo.png" />
</svelte:head>

# Contacting Support

Thanks for using Fyra Stack!

Currently, you can contact support by emailing [support@fyrastack.com](mailto:support@fyrastack.com).
16 changes: 2 additions & 14 deletions src/routes/docs/colocation/+layout.svelte
Comment thread
halfcyan marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import { page } from '$app/stores';
import { Icon } from '@steeze-ui/svelte-icon';
import { ArrowLeft } from '@steeze-ui/carbon-icons';
import { docsProseClass } from '$lib/docs-prose-class';

const { children } = $props();

Expand Down Expand Up @@ -76,20 +77,7 @@
</nav>
</div>

<div
class="prose max-w-2xl prose-invert
prose-headings:font-semibold prose-headings:tracking-tight
prose-h1:mb-4 prose-h1:text-4xl prose-h1:text-fyra-gray-50
prose-h2:mt-10 prose-h2:mb-3 prose-h2:text-xl prose-h2:text-fyra-gray-50
prose-h3:mt-6 prose-h3:mb-1 prose-h3:text-sm prose-h3:font-semibold prose-h3:text-fyra-gray-200
prose-p:text-sm prose-p:leading-relaxed prose-p:text-fyra-gray-400
prose-a:font-medium prose-a:text-fyra-red-400
prose-a:no-underline prose-a:hover:text-fyra-red-300 prose-strong:text-fyra-gray-200 prose-code:rounded
prose-code:bg-fyra-gray-800 prose-code:px-1.5
prose-code:py-0.5
prose-code:text-sm prose-code:font-normal prose-code:text-fyra-red-300 prose-code:before:content-none prose-code:after:content-none prose-pre:border prose-pre:border-fyra-gray-700 prose-pre:bg-fyra-gray-950 prose-pre:text-fyra-gray-200
prose-li:text-sm prose-li:text-fyra-gray-400 prose-hr:my-8 prose-hr:border-fyra-gray-800"
>
<div class={docsProseClass}>
{@render children()}
</div>
</main>
Expand Down
Loading