-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathastro.config.mjs
More file actions
141 lines (140 loc) · 5.45 KB
/
Copy pathastro.config.mjs
File metadata and controls
141 lines (140 loc) · 5.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// @ts-check
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://vectismail.com',
// CF Pages enforces trailing-slash with a 308 redirect. Match that
// here so the build emits trailing-slash canonicals and the dev
// server's behaviour matches prod. Internal href="" links across
// src/ must use the trailing-slash form to avoid the 308 round-trip
// (PSI mobile penalty ~750ms per click before this was set).
trailingSlash: 'always',
integrations: [
// Explicit sitemap so we can filter out non-indexable pages
// (e.g. /account/billing/done/ — the post-Stripe-portal landing
// page is already noindex but should also be excluded from the
// sitemap submitted to Search Console). Starlight pulls
// @astrojs/sitemap as a transitive dep; declaring it here lets
// us pass a filter.
sitemap({
// Exclude noindex utility/landing pages from the submitted sitemap
// (Search Console flags "submitted URL marked noindex" otherwise).
filter: (page) =>
!page.includes('/account/billing/done') &&
!page.includes('/feedback/thanks') &&
!page.includes('/newsletter/confirmed') &&
!page.includes('/newsletter/unsubscribed'),
}),
starlight({
title: 'Vectis Mail',
description: 'Self-hosted email platform with declarative config, sending API, and enterprise features.',
lastUpdated: true,
favicon: '/favicon.svg',
// Starlight 0.41 ships its own built-in /404 route, which collides
// with our branded src/pages/404.astro (SiteNav/SiteFooter, noindex).
// Disable Starlight's so ours wins — without this Astro 7 warns on the
// static-route collision (and future majors hard-error on it).
disable404Route: true,
// The newer Shiki bundled by Starlight 0.41 dropped the `dns` grammar,
// so our ```dns zone-record fences fall back to txt and spam build
// warnings. Alias `dns` to plaintext to render cleanly and silence them.
expressiveCode: { shiki: { langAlias: { dns: 'plaintext' } } },
head: [
{
tag: 'link',
attrs: { rel: 'icon', href: '/favicon.ico', sizes: '32x32' },
},
// Preload the brand font so LCP text paints with Inter without
// waiting for CSS parse to discover the @font-face. crossorigin is
// REQUIRED even same-origin — fonts fetch in CORS mode, so omitting
// it triggers a duplicate (uncredited) fetch.
{
tag: 'link',
attrs: {
rel: 'preload',
href: '/brand/fonts/Inter-VariableFont_opsz_wght.woff2',
as: 'font',
type: 'font/woff2',
crossorigin: true,
},
},
],
logo: {
src: './public/brand/logos/vectis-mail-wings.png',
alt: 'Vectis Mail',
},
social: [
{ icon: 'github', label: 'GitHub', href: 'https://github.com/Veltara-Works/vectis' },
],
customCss: ['./src/styles/custom.css'],
components: {
Head: './src/components/Head.astro',
Header: './src/components/Header.astro',
Footer: './src/components/Footer.astro',
},
sidebar: [
{
label: 'Getting Started',
items: [
{ label: 'Introduction', slug: 'getting-started' },
{ label: 'Installation', slug: 'getting-started/installation' },
{ label: 'Your First Domain', slug: 'getting-started/first-domain' },
{ label: 'DNS Setup', slug: 'getting-started/dns-setup' },
{ label: 'Activating Pro', slug: 'getting-started/pro-activation' },
],
},
{
label: 'Guides',
items: [
{ label: 'Should You Self-Host Email?', slug: 'guides/self-host-email-2026' },
{ label: 'Self-Hosted Email for Small Business', slug: 'guides/self-hosted-email-for-small-business' },
{ label: 'Best Self-Hosted Email Servers 2026', slug: 'guides/best-self-hosted-email-servers-2026' },
{ label: 'Self-Hosted Email vs Google Workspace & Microsoft 365', slug: 'guides/self-hosted-email-vs-google-workspace-microsoft-365' },
{ label: 'SPF, DKIM & DMARC', slug: 'guides/dkim-spf-dmarc' },
{ label: 'Mailcow DKIM Keys: Find, Back Up & Fix', slug: 'guides/mailcow-dkim-keys' },
{ label: 'Migrate to Self-Hosted Email (No Downtime)', slug: 'guides/migrate-to-self-hosted-email' },
{ label: 'TLS Certificates', slug: 'guides/tls-certificates' },
{ label: 'IP Warmup', slug: 'guides/ip-warmup' },
{ label: 'Deliverability', slug: 'guides/deliverability' },
{ label: 'Cloudflare Integration', slug: 'guides/cloudflare' },
{ label: 'Troubleshooting', slug: 'guides/troubleshooting' },
],
},
{
label: 'API Reference',
items: [
{ label: 'Overview & Auth', slug: 'api' },
{ label: 'Domains', slug: 'api/domains' },
{ label: 'Mailboxes', slug: 'api/mailboxes' },
{ label: 'Aliases', slug: 'api/aliases' },
{ label: 'Sending Email', slug: 'api/sending' },
{ label: 'Webhooks', slug: 'api/webhooks' },
{ label: 'Messages & Storage', slug: 'api/messages' },
{ label: 'Analytics', slug: 'api/analytics' },
{ label: 'Admin & RBAC', slug: 'api/admin' },
],
},
{
label: 'CLI Reference',
items: [
{ label: 'Overview', slug: 'cli' },
{ label: 'Commands', slug: 'cli/commands' },
],
},
{
label: 'Architecture',
items: [
{ label: 'Overview', slug: 'architecture/overview' },
],
},
{
label: 'Release Notes',
items: [
{ label: 'Release Highlights', slug: 'release-notes' },
],
},
],
}),
],
});