mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2026-07-30 15:28:30 -04:00
Update documentation and enhance installation options
- Reorganized the documentation homepage layout, adding a new hero section and installation options. - Updated installation instructions to emphasize the All-in-One Docker setup as the default choice. - Improved the Quick Start Installer description to clarify its role as a guided setup for AIO. - Enhanced SEO metadata for better visibility and searchability of the documentation. - Added new Vue components for improved user experience in the installation section. - Refined installation paths and descriptions for clarity and ease of use.
This commit is contained in:
@@ -104,7 +104,7 @@ export default defineConfig({
|
||||
"https://github.com/seanmorley15/adventurelog/blob/main/LICENSE",
|
||||
screenshot,
|
||||
downloadUrl: "https://github.com/seanmorley15/adventurelog",
|
||||
installUrl: `${siteUrl}/docs/install/quick_start.html`,
|
||||
installUrl: `${siteUrl}/docs/install/aio.html`,
|
||||
sameAs: ["https://github.com/seanmorley15/adventurelog"],
|
||||
keywords: (seo.keywords ?? []).join(", "),
|
||||
},
|
||||
@@ -125,7 +125,7 @@ export default defineConfig({
|
||||
name: "How do I install AdventureLog?",
|
||||
acceptedAnswer: {
|
||||
"@type": "Answer",
|
||||
text: "Run curl -sSL https://get.adventurelog.app | bash to install with the official one-line Docker installer. It defaults to the All-in-One setup on port 8015.",
|
||||
text: "Most installs use All-in-One (AIO) Docker — one container on port 8015 with minimal configuration. Deploy with docker-compose.aio.yml and .env.aio, or use the optional Quick Start installer for a guided setup.",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -212,8 +212,8 @@ export default defineConfig({
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "Getting Started", link: "/docs/install/getting_started" },
|
||||
{ text: "Quick Start Installer", link: "/docs/install/quick_start" },
|
||||
{ text: "All-in-One Docker (AIO)", link: "/docs/install/aio" },
|
||||
{ text: "Quick Start Installer", link: "/docs/install/quick_start" },
|
||||
{ text: "Standard Docker", link: "/docs/install/docker" },
|
||||
{
|
||||
text: "Development Setup",
|
||||
|
||||
@@ -33,18 +33,18 @@ export const pageSeo: Record<string, PageSeo> = {
|
||||
},
|
||||
"docs/install/getting_started.md": {
|
||||
description:
|
||||
"Choose the right AdventureLog installation path: quick-start installer, All-in-One Docker, standard Docker, Kubernetes, or platform-specific guides.",
|
||||
keywords: ["AdventureLog install", "self-hosted travel app setup"],
|
||||
"Install AdventureLog with All-in-One Docker — the default for most setups — plus optional guided installer, standard Docker, Kubernetes, and platform guides.",
|
||||
keywords: ["AdventureLog install", "AIO docker", "self-hosted travel app setup"],
|
||||
},
|
||||
"docs/install/quick_start.md": {
|
||||
description:
|
||||
"Install AdventureLog in seconds with the official curl installer. Defaults to All-in-One Docker with interactive configuration and a built-in management menu.",
|
||||
keywords: ["AdventureLog quick start", "one line docker install"],
|
||||
"Optional guided installer for All-in-One Docker. Interactive configuration, env file setup, and a built-in management menu for updates and backups.",
|
||||
keywords: ["AdventureLog quick start", "guided docker install", "AIO installer"],
|
||||
},
|
||||
"docs/install/aio.md": {
|
||||
description:
|
||||
"Run AdventureLog in a single Docker container on one port. Minimal .env.aio configuration with automatic URL and secret derivation for homelabs and VPS installs.",
|
||||
keywords: ["AdventureLog AIO", "all in one docker", "single container travel app"],
|
||||
"The default AdventureLog install: one Docker container on a single port. Minimal .env.aio configuration with automatic URL and secret derivation for homelabs and VPS.",
|
||||
keywords: ["AdventureLog AIO", "all in one docker", "default docker install"],
|
||||
},
|
||||
"docs/install/docker.md": {
|
||||
description:
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<a class="al-btn al-btn--brand al-btn--lg" href="https://demo.adventurelog.app" target="_blank" rel="noopener noreferrer">
|
||||
Try live demo
|
||||
</a>
|
||||
<a class="al-btn al-btn--ghost al-btn--lg" href="/docs/install/quick_start">
|
||||
<a class="al-btn al-btn--ghost al-btn--lg" href="/docs/install/aio">
|
||||
Install AdventureLog
|
||||
</a>
|
||||
<a class="al-btn al-btn--ghost al-btn--lg" href="/docs/usage/usage">
|
||||
|
||||
@@ -66,19 +66,30 @@ async function copy() {
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="al-hero__install">
|
||||
<code class="al-hero__cmd">
|
||||
<span class="al-hero__prompt" aria-hidden="true">$</span>
|
||||
{{ command }}
|
||||
</code>
|
||||
<button
|
||||
type="button"
|
||||
class="al-hero__copy-btn"
|
||||
:aria-label="copied ? 'Copied' : 'Copy install command'"
|
||||
@click="copy"
|
||||
>
|
||||
{{ copied ? "Copied" : "Copy" }}
|
||||
</button>
|
||||
<div class="al-hero__install-block">
|
||||
<p class="al-hero__install-label">
|
||||
All-in-One Docker
|
||||
<span class="al-hero__install-sep" aria-hidden="true">·</span>
|
||||
<a href="/docs/install/aio">manual setup</a>
|
||||
</p>
|
||||
<div class="al-hero__install">
|
||||
<code class="al-hero__cmd">
|
||||
<span class="al-hero__prompt" aria-hidden="true">$</span>
|
||||
{{ command }}
|
||||
</code>
|
||||
<button
|
||||
type="button"
|
||||
class="al-hero__copy-btn"
|
||||
:aria-label="copied ? 'Copied' : 'Copy guided installer command'"
|
||||
@click="copy"
|
||||
>
|
||||
{{ copied ? "Copied" : "Copy" }}
|
||||
</button>
|
||||
</div>
|
||||
<p class="al-hero__install-note">
|
||||
Guided installer — deploys AIO by default.
|
||||
<a href="/docs/install/quick_start">Details</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<ul class="al-hero__stats" aria-label="Core features">
|
||||
|
||||
@@ -1,37 +1,38 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from "vue";
|
||||
|
||||
const command = "curl -sSL https://get.adventurelog.app | bash";
|
||||
const copied = ref(false);
|
||||
|
||||
type InstallPath = {
|
||||
icon: string;
|
||||
title: string;
|
||||
desc: string;
|
||||
href: string;
|
||||
external?: boolean;
|
||||
featured?: boolean;
|
||||
};
|
||||
|
||||
type InstallPathGroup = {
|
||||
id: string;
|
||||
label: string;
|
||||
icon: string;
|
||||
paths: InstallPath[];
|
||||
};
|
||||
|
||||
const pathGroups: InstallPathGroup[] = [
|
||||
{
|
||||
id: "docker",
|
||||
label: "Docker",
|
||||
icon: "🐳",
|
||||
paths: [
|
||||
{
|
||||
icon: "⚡",
|
||||
title: "Quick Start Installer",
|
||||
desc: "Guided one-line install — AIO by default.",
|
||||
href: "/docs/install/quick_start",
|
||||
},
|
||||
{
|
||||
icon: "📦",
|
||||
title: "All-in-One Docker",
|
||||
desc: "Single container, one port, minimal config.",
|
||||
desc: "Default for most installs — one container, one port.",
|
||||
href: "/docs/install/aio",
|
||||
featured: true,
|
||||
},
|
||||
{
|
||||
icon: "⚡",
|
||||
title: "Quick Start Installer",
|
||||
desc: "Guided walkthrough that deploys AIO for you.",
|
||||
href: "/docs/install/quick_start",
|
||||
},
|
||||
{
|
||||
icon: "🐋",
|
||||
@@ -42,7 +43,9 @@ const pathGroups: InstallPathGroup[] = [
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "homelab",
|
||||
label: "Homelab & NAS",
|
||||
icon: "🏠",
|
||||
paths: [
|
||||
{
|
||||
icon: "🐧",
|
||||
@@ -63,7 +66,7 @@ const pathGroups: InstallPathGroup[] = [
|
||||
href: "/docs/install/unraid",
|
||||
},
|
||||
{
|
||||
icon: "🏠",
|
||||
icon: "🔌",
|
||||
title: "Umbrel",
|
||||
desc: "Community app for Umbrel home servers.",
|
||||
href: "https://apps.umbrel.com/app/adventurelog",
|
||||
@@ -79,99 +82,80 @@ const pathGroups: InstallPathGroup[] = [
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "kubernetes",
|
||||
label: "Kubernetes",
|
||||
icon: "☸️",
|
||||
paths: [
|
||||
{
|
||||
icon: "🌐",
|
||||
title: "Kubernetes + Kustomize",
|
||||
desc: "Deploy with manifests in `k8s/base/`.",
|
||||
desc: "Deploy with manifests in k8s/base/.",
|
||||
href: "/docs/install/kustomize",
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
async function copy() {
|
||||
try {
|
||||
await navigator.clipboard.writeText(command);
|
||||
copied.value = true;
|
||||
setTimeout(() => (copied.value = false), 2000);
|
||||
} catch {
|
||||
/* clipboard unavailable */
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section class="al-install" aria-labelledby="install-heading">
|
||||
<div class="al-install__inner">
|
||||
<div class="al-install__copy">
|
||||
<header class="al-install__head al-section-head al-section-head--center">
|
||||
<p class="al-eyebrow">Installation</p>
|
||||
<h2 id="install-heading">Choose how you run AdventureLog</h2>
|
||||
<p class="al-install__desc">
|
||||
Docker guides for most setups, plus platform-specific instructions
|
||||
for Proxmox, Synology, Unraid, Umbrel, TrueNAS, and Kubernetes.
|
||||
<p class="al-install__lead">
|
||||
Most people run All-in-One Docker — one container on a single port.
|
||||
Platform guides and Kubernetes are there when you need them.
|
||||
</p>
|
||||
<ul class="al-install__badges" aria-label="Install methods">
|
||||
<li>Docker Compose</li>
|
||||
<li>Homelab & NAS</li>
|
||||
<li>Kubernetes</li>
|
||||
<li>Reverse proxy</li>
|
||||
</ul>
|
||||
<div class="al-install__links">
|
||||
</header>
|
||||
|
||||
<div class="al-install__shell">
|
||||
<div class="al-install__bento">
|
||||
<article
|
||||
v-for="group in pathGroups"
|
||||
:key="group.id"
|
||||
class="al-install__category"
|
||||
:class="`al-install__category--${group.id}`"
|
||||
>
|
||||
<header class="al-install__category-head">
|
||||
<span class="al-install__category-icon" aria-hidden="true">{{ group.icon }}</span>
|
||||
<h3>{{ group.label }}</h3>
|
||||
</header>
|
||||
|
||||
<ul class="al-install__menu">
|
||||
<li v-for="path in group.paths" :key="path.href">
|
||||
<a
|
||||
class="al-install__menu-link"
|
||||
:href="path.href"
|
||||
:target="path.external ? '_blank' : undefined"
|
||||
:rel="path.external ? 'noopener noreferrer' : undefined"
|
||||
>
|
||||
<span class="al-install__menu-icon" aria-hidden="true">{{ path.icon }}</span>
|
||||
<span class="al-install__menu-text">
|
||||
<strong>
|
||||
{{ path.title }}
|
||||
<span v-if="path.featured" class="al-install__menu-tag">Popular</span>
|
||||
</strong>
|
||||
<small>{{ path.desc }}</small>
|
||||
</span>
|
||||
<span class="al-install__menu-arrow" aria-hidden="true">
|
||||
{{ path.external ? "↗" : "→" }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<footer class="al-install__foot">
|
||||
<a class="al-btn al-btn--brand" href="/docs/install/getting_started">
|
||||
All install options
|
||||
</a>
|
||||
<a class="al-btn al-btn--ghost" href="/docs/install/quick_start">
|
||||
Quick Start
|
||||
<a class="al-install__foot-link" href="/docs/install/traefik">
|
||||
Reverse proxy with Traefik
|
||||
<span aria-hidden="true">→</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="al-install__panel">
|
||||
<p class="al-install__panel-label">Install paths</p>
|
||||
|
||||
<div
|
||||
v-for="group in pathGroups"
|
||||
:key="group.label"
|
||||
class="al-install__group"
|
||||
>
|
||||
<p class="al-install__group-label">{{ group.label }}</p>
|
||||
<ul class="al-install__paths">
|
||||
<li v-for="path in group.paths" :key="path.href">
|
||||
<a
|
||||
class="al-install__path"
|
||||
:href="path.href"
|
||||
:target="path.external ? '_blank' : undefined"
|
||||
:rel="path.external ? 'noopener noreferrer' : undefined"
|
||||
>
|
||||
<span class="al-install__path-icon" aria-hidden="true">{{ path.icon }}</span>
|
||||
<span class="al-install__path-text">
|
||||
<strong>{{ path.title }}</strong>
|
||||
<small>{{ path.desc }}</small>
|
||||
</span>
|
||||
<span class="al-install__path-arrow" aria-hidden="true">→</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="al-install__quick" role="group" aria-label="Quick Start command">
|
||||
<div class="al-install__quick-head">
|
||||
<span>Fastest path</span>
|
||||
<button
|
||||
type="button"
|
||||
class="al-install__quick-copy"
|
||||
:aria-label="copied ? 'Copied' : 'Copy install command'"
|
||||
@click="copy"
|
||||
>
|
||||
{{ copied ? "Copied" : "Copy" }}
|
||||
</button>
|
||||
</div>
|
||||
<code class="al-install__quick-cmd">
|
||||
<span class="al-prompt" aria-hidden="true">$</span> {{ command }}
|
||||
</code>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -53,7 +53,7 @@ const current = () => tabs.find((t) => t.id === active.value) ?? tabs[0];
|
||||
|
||||
<template>
|
||||
<section class="al-showcase" aria-labelledby="showcase-heading">
|
||||
<div class="al-section-head">
|
||||
<div class="al-section-head al-section-head--center">
|
||||
<p class="al-eyebrow">See it in action</p>
|
||||
<h2 id="showcase-heading">Built for travelers who want more than a pin on a map</h2>
|
||||
<p class="al-section-lead">
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
.al-hero {
|
||||
position: relative;
|
||||
padding: 48px 24px 56px;
|
||||
padding: 48px 24px 40px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -238,18 +238,63 @@
|
||||
background: var(--vp-c-bg-soft);
|
||||
}
|
||||
|
||||
.al-hero__install-block {
|
||||
width: 100%;
|
||||
max-width: 520px;
|
||||
margin-bottom: 28px;
|
||||
}
|
||||
|
||||
.al-hero__install-label {
|
||||
margin: 0 0 8px;
|
||||
font-size: 0.78rem;
|
||||
font-weight: 700;
|
||||
color: var(--vp-c-text-2);
|
||||
}
|
||||
|
||||
.al-hero__install-label a {
|
||||
font-weight: 600;
|
||||
color: var(--vp-c-brand-1) !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.al-hero__install-label a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
.al-hero__install-sep {
|
||||
margin: 0 6px;
|
||||
color: var(--vp-c-text-3);
|
||||
}
|
||||
|
||||
.al-hero__install {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
max-width: 100%;
|
||||
margin-bottom: 28px;
|
||||
margin-bottom: 8px;
|
||||
padding: 4px 4px 4px 14px;
|
||||
border-radius: 10px;
|
||||
background: var(--vp-c-bg-soft);
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
}
|
||||
|
||||
.al-hero__install-note {
|
||||
margin: 0;
|
||||
font-size: 0.74rem;
|
||||
color: var(--vp-c-text-3);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.al-hero__install-note a {
|
||||
font-weight: 600;
|
||||
color: var(--vp-c-brand-1) !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.al-hero__install-note a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
.al-hero__cmd {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
@@ -652,223 +697,239 @@
|
||||
/* ─── Install section ───────────────────────────────────────────── */
|
||||
|
||||
.al-install {
|
||||
padding: 80px 24px;
|
||||
position: relative;
|
||||
padding: 56px 24px 72px;
|
||||
overflow: hidden;
|
||||
border-top: 1px solid var(--vp-c-divider);
|
||||
background: linear-gradient(180deg, var(--vp-c-bg) 0%, var(--vp-c-bg-soft) 100%);
|
||||
}
|
||||
|
||||
.al-install::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 52%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: min(920px, 96%);
|
||||
height: 520px;
|
||||
background: radial-gradient(
|
||||
ellipse 62% 52% at 50% 50%,
|
||||
rgba(28, 145, 63, 0.09),
|
||||
transparent 72%
|
||||
);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.dark .al-install {
|
||||
background: linear-gradient(180deg, var(--vp-c-bg) 0%, var(--vp-c-bg-soft) 100%);
|
||||
}
|
||||
|
||||
.dark .al-install::before {
|
||||
background: radial-gradient(
|
||||
ellipse 62% 52% at 50% 50%,
|
||||
rgba(28, 145, 63, 0.06),
|
||||
transparent 72%
|
||||
);
|
||||
}
|
||||
|
||||
.al-install__inner {
|
||||
max-width: 1180px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
max-width: 1080px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
||||
gap: 56px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.al-install__copy {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 20px;
|
||||
.al-install__head {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.al-install__copy .al-eyebrow {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.al-install__copy h2 {
|
||||
margin: 0;
|
||||
font-size: clamp(1.5rem, 2.5vw, 2rem);
|
||||
line-height: 1.2;
|
||||
font-weight: 800;
|
||||
border: none;
|
||||
padding: 0;
|
||||
color: var(--vp-c-text-1);
|
||||
}
|
||||
|
||||
.al-install__desc {
|
||||
margin: 0;
|
||||
max-width: 42ch;
|
||||
.al-install__lead {
|
||||
margin: 0 auto;
|
||||
max-width: 52ch;
|
||||
color: var(--vp-c-text-2);
|
||||
line-height: 1.65;
|
||||
font-size: 1rem;
|
||||
font-size: 1.05rem;
|
||||
}
|
||||
|
||||
.al-install__badges {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
.al-install__shell {
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
border-radius: 24px;
|
||||
background: var(--vp-c-bg);
|
||||
box-shadow:
|
||||
0 1px 2px rgba(0, 0, 0, 0.04),
|
||||
0 16px 48px rgba(0, 0, 0, 0.06);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.al-install__badges li {
|
||||
margin: 0;
|
||||
padding: 8px 14px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.82rem;
|
||||
font-weight: 600;
|
||||
line-height: 1.2;
|
||||
white-space: nowrap;
|
||||
background: var(--vp-c-brand-soft);
|
||||
color: var(--vp-c-brand-1);
|
||||
border: 1px solid transparent;
|
||||
.dark .al-install__shell {
|
||||
box-shadow:
|
||||
0 1px 2px rgba(0, 0, 0, 0.2),
|
||||
0 16px 48px rgba(0, 0, 0, 0.28);
|
||||
}
|
||||
|
||||
.al-install__links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
margin-top: 4px;
|
||||
/* Category bento */
|
||||
.al-install__bento {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 1px;
|
||||
background: var(--vp-c-divider);
|
||||
}
|
||||
|
||||
/* Install paths panel */
|
||||
.al-install__panel {
|
||||
.al-install__category {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
min-width: 0;
|
||||
background: var(--vp-c-bg);
|
||||
}
|
||||
|
||||
.al-install__panel-label {
|
||||
margin: 0;
|
||||
font-size: 0.78rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
color: var(--vp-c-text-3);
|
||||
}
|
||||
|
||||
.al-install__group + .al-install__group {
|
||||
margin-top: 18px;
|
||||
}
|
||||
|
||||
.al-install__group-label {
|
||||
margin: 0 0 8px;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
color: var(--vp-c-text-3);
|
||||
}
|
||||
|
||||
.al-install__paths {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.al-install__paths li {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.al-install__path {
|
||||
.al-install__category-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 14px;
|
||||
padding: 14px 16px;
|
||||
border-radius: 14px;
|
||||
gap: 10px;
|
||||
padding: 18px 20px 14px;
|
||||
border-bottom: 1px solid var(--vp-c-divider);
|
||||
}
|
||||
|
||||
.al-install__category-icon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 10px;
|
||||
font-size: 1.1rem;
|
||||
background: var(--vp-c-bg-soft);
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
background: var(--vp-c-bg);
|
||||
}
|
||||
|
||||
.al-install__category-head h3 {
|
||||
margin: 0;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.01em;
|
||||
color: var(--vp-c-text-1);
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.al-install__menu {
|
||||
margin: 0;
|
||||
padding: 8px;
|
||||
list-style: none;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.al-install__menu li {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.al-install__menu-link {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
padding: 10px 12px;
|
||||
border-radius: 12px;
|
||||
text-decoration: none !important;
|
||||
transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
|
||||
transition: background 0.15s ease;
|
||||
}
|
||||
|
||||
.al-install__path:hover {
|
||||
border-color: var(--vp-c-brand-1);
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
|
||||
transform: translateY(-1px);
|
||||
.al-install__menu-link:hover {
|
||||
background: var(--vp-c-bg-soft);
|
||||
}
|
||||
|
||||
.al-install__path-icon {
|
||||
.al-install__menu-icon {
|
||||
flex-shrink: 0;
|
||||
font-size: 1.25rem;
|
||||
line-height: 1;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 8px;
|
||||
font-size: 0.95rem;
|
||||
background: var(--vp-c-bg-soft);
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
}
|
||||
|
||||
.al-install__path-text {
|
||||
.al-install__menu-text {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 3px;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.al-install__path-text strong {
|
||||
font-size: 0.95rem;
|
||||
.al-install__menu-text strong {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
font-size: 0.86rem;
|
||||
font-weight: 700;
|
||||
line-height: 1.3;
|
||||
color: var(--vp-c-text-1);
|
||||
}
|
||||
|
||||
.al-install__path-text small {
|
||||
font-size: 0.82rem;
|
||||
.al-install__menu-tag {
|
||||
padding: 2px 7px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.62rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
color: var(--vp-c-brand-1);
|
||||
background: var(--vp-c-brand-soft);
|
||||
}
|
||||
|
||||
.al-install__menu-text small {
|
||||
font-size: 0.78rem;
|
||||
line-height: 1.45;
|
||||
color: var(--vp-c-text-2);
|
||||
}
|
||||
|
||||
.al-install__path-arrow {
|
||||
.al-install__menu-arrow {
|
||||
flex-shrink: 0;
|
||||
font-size: 1rem;
|
||||
margin-top: 2px;
|
||||
font-size: 0.9rem;
|
||||
color: var(--vp-c-text-3);
|
||||
transition: color 0.15s ease, transform 0.15s ease;
|
||||
}
|
||||
|
||||
.al-install__path:hover .al-install__path-arrow {
|
||||
.al-install__menu-link:hover .al-install__menu-arrow {
|
||||
color: var(--vp-c-brand-1);
|
||||
transform: translateX(2px);
|
||||
}
|
||||
|
||||
.al-install__quick {
|
||||
padding: 14px 16px;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
.al-install__foot {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
padding: 20px 24px;
|
||||
border-top: 1px solid var(--vp-c-divider);
|
||||
background: var(--vp-c-bg-soft);
|
||||
}
|
||||
|
||||
.al-install__quick-head {
|
||||
display: flex;
|
||||
.al-install__foot-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
font-size: 0.78rem;
|
||||
gap: 6px;
|
||||
font-size: 0.88rem;
|
||||
font-weight: 600;
|
||||
color: var(--vp-c-text-3);
|
||||
color: var(--vp-c-text-2) !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.al-install__quick-copy {
|
||||
padding: 4px 10px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
background: var(--vp-c-bg);
|
||||
color: var(--vp-c-text-2);
|
||||
font-size: 0.72rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
.al-install__foot-link:hover {
|
||||
color: var(--vp-c-brand-1) !important;
|
||||
}
|
||||
|
||||
.al-install__quick-copy:hover {
|
||||
border-color: var(--vp-c-brand-1);
|
||||
color: var(--vp-c-brand-1);
|
||||
.al-install__foot-link:hover span {
|
||||
transform: translateX(2px);
|
||||
}
|
||||
|
||||
.al-install__quick-cmd {
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 12px 14px;
|
||||
border-radius: 10px;
|
||||
font-size: 0.8rem;
|
||||
line-height: 1.5;
|
||||
overflow-x: auto;
|
||||
white-space: nowrap;
|
||||
color: var(--vp-c-text-2);
|
||||
background: #0d1117;
|
||||
}
|
||||
|
||||
.dark .al-install__quick-cmd {
|
||||
background: #161b22;
|
||||
.al-install__foot-link span {
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.al-prompt {
|
||||
@@ -879,7 +940,46 @@
|
||||
/* ─── Showcase ────────────────────────────────────────────────────── */
|
||||
|
||||
.al-showcase {
|
||||
padding: 80px 24px;
|
||||
position: relative;
|
||||
padding: 48px 24px 64px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.al-showcase::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0 0 auto;
|
||||
height: min(440px, 75%);
|
||||
background: radial-gradient(
|
||||
ellipse 78% 58% at 50% 0%,
|
||||
rgba(28, 145, 63, 0.09),
|
||||
transparent 72%
|
||||
);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.dark .al-showcase::before {
|
||||
background: radial-gradient(
|
||||
ellipse 78% 58% at 50% 0%,
|
||||
rgba(28, 145, 63, 0.055),
|
||||
transparent 72%
|
||||
);
|
||||
}
|
||||
|
||||
.al-showcase .al-section-head {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
max-width: 720px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.al-showcase__tabs,
|
||||
.al-showcase__panel {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.al-showcase__tabs {
|
||||
@@ -942,7 +1042,18 @@
|
||||
border-radius: 14px;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.12);
|
||||
background: var(--vp-c-bg);
|
||||
box-shadow:
|
||||
0 0 0 1px rgba(255, 255, 255, 0.05) inset,
|
||||
0 20px 40px -12px rgba(0, 0, 0, 0.14),
|
||||
0 40px 80px -24px rgba(28, 145, 63, 0.1);
|
||||
}
|
||||
|
||||
.dark .al-showcase__frame {
|
||||
box-shadow:
|
||||
0 0 0 1px rgba(255, 255, 255, 0.06) inset,
|
||||
0 20px 40px -12px rgba(0, 0, 0, 0.45),
|
||||
0 40px 80px -24px rgba(28, 145, 63, 0.08);
|
||||
}
|
||||
|
||||
.al-showcase__frame img {
|
||||
@@ -954,9 +1065,8 @@
|
||||
/* ─── Pillars ─────────────────────────────────────────────────────── */
|
||||
|
||||
.al-pillars {
|
||||
padding: 80px 24px;
|
||||
padding: 72px 24px 80px;
|
||||
background: var(--vp-c-bg-soft);
|
||||
border-top: 1px solid var(--vp-c-divider);
|
||||
border-bottom: 1px solid var(--vp-c-divider);
|
||||
}
|
||||
|
||||
@@ -1236,31 +1346,28 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
.al-install__inner,
|
||||
.al-showcase__panel {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 40px;
|
||||
}
|
||||
|
||||
.al-install__copy {
|
||||
.al-install__bento {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.al-install__foot {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
text-align: left;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.al-install__desc {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.al-install__links .al-btn {
|
||||
flex: 1 1 auto;
|
||||
justify-content: center;
|
||||
min-width: 160px;
|
||||
}
|
||||
|
||||
.al-install__panel {
|
||||
max-width: 560px;
|
||||
margin: 0 auto;
|
||||
.al-install__foot .al-btn {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.al-install__foot-link {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.al-pillars__grid {
|
||||
@@ -1268,7 +1375,38 @@
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.al-install__bento {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.al-install__category--homelab {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.al-install {
|
||||
padding: 56px 16px;
|
||||
}
|
||||
|
||||
.al-install__shell {
|
||||
border-radius: 18px;
|
||||
}
|
||||
|
||||
.al-install__bento {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.al-install__category--homelab {
|
||||
grid-column: auto;
|
||||
}
|
||||
|
||||
.al-install__menu-link {
|
||||
min-height: 48px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.al-hero {
|
||||
padding-top: 32px;
|
||||
}
|
||||
|
||||
@@ -137,3 +137,256 @@
|
||||
.DocSearch {
|
||||
--docsearch-primary-color: var(--vp-c-brand-1) !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recommended install badge (docs tables)
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
.al-rec-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
margin-right: 10px;
|
||||
padding: 4px 10px 4px 8px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.68rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.07em;
|
||||
text-transform: uppercase;
|
||||
line-height: 1;
|
||||
color: var(--vp-c-brand-1);
|
||||
background: var(--vp-c-brand-soft);
|
||||
border: 1px solid color-mix(in srgb, var(--vp-c-brand-1) 28%, transparent);
|
||||
vertical-align: middle;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.al-rec-badge::before {
|
||||
content: "";
|
||||
flex-shrink: 0;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
border-radius: 50%;
|
||||
background: var(--vp-c-brand-1);
|
||||
box-shadow: 0 0 0 2px color-mix(in srgb, var(--vp-c-brand-1) 18%, transparent);
|
||||
}
|
||||
|
||||
.vp-doc table tr:has(.al-rec-badge) td {
|
||||
background: color-mix(in srgb, var(--vp-c-brand-soft) 55%, transparent);
|
||||
border-color: color-mix(in srgb, var(--vp-c-brand-1) 12%, var(--vp-c-divider));
|
||||
}
|
||||
|
||||
.vp-doc table tr:has(.al-rec-badge) td:first-child {
|
||||
font-weight: 600;
|
||||
color: var(--vp-c-text-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* About / overview page
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
.al-overview-hero {
|
||||
margin: 0 0 40px;
|
||||
padding: 32px 28px 28px;
|
||||
border-radius: 20px;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
background:
|
||||
radial-gradient(ellipse 80% 60% at 50% 0%, color-mix(in srgb, var(--vp-c-brand-1) 10%, transparent), transparent 70%),
|
||||
var(--vp-c-bg-soft);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.al-overview-hero h1 {
|
||||
margin: 0 0 14px;
|
||||
font-size: clamp(1.9rem, 4vw, 2.6rem);
|
||||
line-height: 1.15;
|
||||
letter-spacing: -0.03em;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.al-overview-lead {
|
||||
margin: 0 auto 20px;
|
||||
max-width: 52ch;
|
||||
font-size: 1.08rem;
|
||||
line-height: 1.65;
|
||||
color: var(--vp-c-text-2);
|
||||
}
|
||||
|
||||
.al-overview-pills {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
|
||||
.al-overview-pills span {
|
||||
padding: 6px 12px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.78rem;
|
||||
font-weight: 600;
|
||||
color: var(--vp-c-brand-1);
|
||||
background: var(--vp-c-bg);
|
||||
border: 1px solid color-mix(in srgb, var(--vp-c-brand-1) 22%, var(--vp-c-divider));
|
||||
}
|
||||
|
||||
.al-overview-actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.al-overview-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 40px;
|
||||
padding: 8px 16px;
|
||||
border-radius: 10px;
|
||||
font-size: 0.88rem;
|
||||
font-weight: 700;
|
||||
text-decoration: none !important;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
color: var(--vp-c-text-1) !important;
|
||||
background: var(--vp-c-bg);
|
||||
transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease;
|
||||
}
|
||||
|
||||
.al-overview-btn:hover {
|
||||
border-color: var(--vp-c-brand-1);
|
||||
color: var(--vp-c-brand-1) !important;
|
||||
}
|
||||
|
||||
.al-overview-btn--primary {
|
||||
border-color: transparent;
|
||||
color: #fff !important;
|
||||
background: var(--vp-c-brand-3);
|
||||
box-shadow: 0 4px 14px color-mix(in srgb, var(--vp-c-brand-3) 35%, transparent);
|
||||
}
|
||||
|
||||
.al-overview-btn--primary:hover {
|
||||
background: var(--vp-c-brand-2);
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.al-overview-features {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 12px;
|
||||
margin: 20px 0 8px;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
scrollbar-width: thin;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.al-overview-feature {
|
||||
display: flex;
|
||||
flex: 1 1 0;
|
||||
align-items: flex-start;
|
||||
gap: 14px;
|
||||
min-width: 220px;
|
||||
padding: 18px 16px;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
background: var(--vp-c-bg-soft);
|
||||
}
|
||||
|
||||
.al-overview-feature__icon {
|
||||
flex-shrink: 0;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
border-radius: 12px;
|
||||
font-size: 1.25rem;
|
||||
background: var(--vp-c-bg);
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
}
|
||||
|
||||
.al-overview-feature__body {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.al-overview-feature__body h3 {
|
||||
margin: 0 0 6px;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.01em;
|
||||
line-height: 1.25;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.al-overview-feature__body p {
|
||||
margin: 0;
|
||||
font-size: 0.84rem;
|
||||
line-height: 1.5;
|
||||
color: var(--vp-c-text-2);
|
||||
}
|
||||
|
||||
.al-overview-shots {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 20px;
|
||||
margin: 20px 0 8px;
|
||||
}
|
||||
|
||||
.al-overview-shots figure {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--vp-c-divider);
|
||||
background: var(--vp-c-bg-soft);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.al-overview-shots img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.al-overview-shots figcaption {
|
||||
padding: 12px 14px;
|
||||
font-size: 0.82rem;
|
||||
line-height: 1.45;
|
||||
color: var(--vp-c-text-2);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
.al-overview-hero {
|
||||
padding: 24px 18px 22px;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.al-overview-features {
|
||||
margin-left: -8px;
|
||||
margin-right: -8px;
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
.al-overview-feature {
|
||||
flex: 0 0 min(78vw, 280px);
|
||||
}
|
||||
|
||||
.al-overview-shots {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.al-overview-actions {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.al-overview-btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ Day-to-day tasks for a self-hosted AdventureLog instance: updates, backups, vali
|
||||
|
||||
## Management menu
|
||||
|
||||
Re-run the installer to open the interactive management menu:
|
||||
If you installed via the [Quick Start Installer](../install/quick_start.md), re-run it to open the interactive management menu:
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.adventurelog.app | bash
|
||||
|
||||
@@ -2,15 +2,7 @@
|
||||
|
||||
Keep your self-hosted instance current with the latest images and database migrations. **Always back up before updating.**
|
||||
|
||||
## Option 1: Installer management menu
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.adventurelog.app | bash
|
||||
```
|
||||
|
||||
Choose **Update to latest images** (with optional backup).
|
||||
|
||||
## Option 2: deploy.sh (recommended)
|
||||
## Option 1: deploy.sh (recommended)
|
||||
|
||||
From your install directory (where `deploy.sh` and your compose file live):
|
||||
|
||||
@@ -29,7 +21,7 @@ COMPOSE_FILE=docker-compose.aio.yml bash deploy.sh --backup
|
||||
|
||||
See [Operations & Maintenance](operations.md) for compose auto-detection details.
|
||||
|
||||
## Option 3: Manual compose
|
||||
## Option 2: Manual compose
|
||||
|
||||
```bash
|
||||
bash scripts/backup.sh
|
||||
@@ -43,6 +35,16 @@ docker compose --env-file .env.aio -f docker-compose.aio.yml pull
|
||||
docker compose --env-file .env.aio -f docker-compose.aio.yml up -d --wait
|
||||
```
|
||||
|
||||
## Option 3: Guided installer menu
|
||||
|
||||
If you used the [Quick Start Installer](../install/quick_start.md), re-run it to open the management menu:
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.adventurelog.app | bash
|
||||
```
|
||||
|
||||
Choose **Update to latest images** (with optional backup).
|
||||
|
||||
## Restore from backup
|
||||
|
||||
```bash
|
||||
|
||||
@@ -14,21 +14,24 @@ The standard [multi-container Docker setup](docker.md) remains available for use
|
||||
|
||||
## Quick start
|
||||
|
||||
**Recommended:** use the [quick start installer](quick_start.md):
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.adventurelog.app | bash
|
||||
```
|
||||
|
||||
Or manually:
|
||||
Most installs use Docker Compose directly:
|
||||
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/seanmorley15/AdventureLog/main/docker-compose.aio.yml
|
||||
wget https://raw.githubusercontent.com/seanmorley15/AdventureLog/main/.env.aio.example
|
||||
cp .env.aio.example .env.aio
|
||||
# Edit .env.aio — set POSTGRES_PASSWORD, then:
|
||||
docker compose --env-file .env.aio -f docker-compose.aio.yml up -d
|
||||
```
|
||||
|
||||
### Guided installer (optional)
|
||||
|
||||
Prefer a walkthrough? The [Quick Start Installer](quick_start.md) deploys this same AIO stack interactively:
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.adventurelog.app | bash
|
||||
```
|
||||
|
||||
Open **http://localhost:8015** (or your configured `SITE_URL`).
|
||||
|
||||
**Memory:** allocate at least **2 GB RAM** on first boot; about **1 GB** is usually enough afterward. See [`docker-compose.override.example.yml`](https://github.com/seanmorley15/AdventureLog/blob/main/docker-compose.override.example.yml) for optional resource limits.
|
||||
@@ -66,24 +69,6 @@ HOST_PORT=443
|
||||
|
||||
When using HTTPS behind an external reverse proxy, set `SITE_URL` to your public HTTPS URL and proxy traffic to the AIO container port.
|
||||
|
||||
## How it works
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Browser -->|":8015"| Gateway[nginx :80]
|
||||
Gateway -->|"/ pages /api /auth"| Frontend[node :3000]
|
||||
Gateway -->|"/media /admin /accounts"| Gunicorn[:8000]
|
||||
Frontend -->|SSR internal| Gunicorn
|
||||
Gunicorn --> DB[(PostGIS)]
|
||||
```
|
||||
|
||||
Inside the AIO container, nginx routes browser traffic:
|
||||
|
||||
- **Frontend** (SvelteKit): all app pages, `/api`, `/auth`, `/health`
|
||||
- **Backend** (Gunicorn): `/media`, `/admin`, `/accounts`, `/static`
|
||||
|
||||
The database runs in a separate container (same as the standard setup).
|
||||
|
||||
## Updating
|
||||
|
||||
```bash
|
||||
|
||||
@@ -1,16 +1,6 @@
|
||||
# Install AdventureLog
|
||||
|
||||
AdventureLog runs on Docker in most setups. Pick the guide that matches your environment — from a one-line installer to platform-specific homelab and NAS instructions.
|
||||
|
||||
## Quick start
|
||||
|
||||
::: tip Fastest install
|
||||
```bash
|
||||
curl -sSL https://get.adventurelog.app | bash
|
||||
```
|
||||
:::
|
||||
|
||||
The [Quick Start Installer](quick_start.md) walks you through setup (AIO by default), writes your env files, and starts AdventureLog. Re-run the same command for updates, backups, and configuration changes.
|
||||
AdventureLog runs on Docker in most setups. Pick the guide that matches your environment — from All-in-One Docker to platform-specific homelab and NAS instructions.
|
||||
|
||||
## Choose your setup
|
||||
|
||||
@@ -18,8 +8,8 @@ The [Quick Start Installer](quick_start.md) walks you through setup (AIO by defa
|
||||
|
||||
| I want to… | Guide |
|
||||
| ---------- | ----- |
|
||||
| Guided install on a VPS or homelab | [Quick Start Installer](quick_start.md) |
|
||||
| One container, one port, minimal config | [All-in-One Docker (AIO)](aio.md) |
|
||||
| One container, one port | <span class="al-rec-badge">Recommended</span> [All-in-One Docker (AIO)](aio.md) |
|
||||
| Interactive walkthrough that deploys AIO | [Quick Start Installer](quick_start.md) |
|
||||
| Separate frontend, backend, and database | [Standard Docker](docker.md) |
|
||||
| HTTPS on a custom domain | [Reverse proxy guides](#reverse-proxy) |
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Quick Start Installer
|
||||
|
||||
Install AdventureLog in seconds with the official curl installer. It defaults to the **All-in-One (AIO)** layout — one URL, one port, minimal configuration — and includes a management menu for updates and backups.
|
||||
The guided installer is an optional way to deploy **All-in-One (AIO) Docker** — the setup most people use. It walks you through configuration interactively, writes your env files, and includes a management menu for updates and backups.
|
||||
|
||||
For manual AIO setup with Docker Compose, see [All-in-One Docker](aio.md).
|
||||
|
||||
## One-line install
|
||||
|
||||
|
||||
@@ -1,35 +1,147 @@
|
||||
---
|
||||
title: About AdventureLog
|
||||
description: AdventureLog is a self-hosted, open-source travel companion for logging locations, planning trips, and tracking your world travel on an interactive map.
|
||||
---
|
||||
|
||||
<div class="al-overview-hero">
|
||||
|
||||
# About AdventureLog
|
||||
|
||||
AdventureLog is a self-hosted, open-source travel companion for tracking where you have been, planning where you are going, and sharing trips with the people you travel with.
|
||||
<p class="al-overview-lead">
|
||||
Everything travel, united in one place — log where you've been, plan what's ahead,
|
||||
and see your whole travel story on one map.
|
||||
</p>
|
||||
|
||||
<div class="al-overview-pills">
|
||||
<span>Self-hosted</span>
|
||||
<span>Open source</span>
|
||||
<span>GPL-3.0</span>
|
||||
<span>Docker-ready</span>
|
||||
</div>
|
||||
|
||||
<div class="al-overview-actions">
|
||||
<a class="al-overview-btn al-overview-btn--primary" href="https://demo.adventurelog.app" target="_blank" rel="noopener noreferrer">Live demo</a>
|
||||
<a class="al-overview-btn" href="/docs/install/getting_started">Get started</a>
|
||||
<a class="al-overview-btn" href="/docs/usage/usage">Usage guide</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
AdventureLog is a modern travel companion you run yourself. Track locations and visits, build trip itineraries, mark countries and regions on a world map, and share plans with the people you travel with — without handing your memories to a closed platform.
|
||||
|
||||
## Core features
|
||||
|
||||
- **Track Your Adventures** 🌍: Log your adventures and keep track of where you've been on the world map.
|
||||
- Locations can store a variety of information, including the location, date, and description.
|
||||
- Locations can be sorted into custom categories for easy organization.
|
||||
- Locations can be marked as private or public, allowing you to share your adventures with friends and family.
|
||||
- Keep track of the countries and regions you've visited with the world travel book.
|
||||
- Upload trails and activities to your locations to remember your experiences with detailed maps and stats.
|
||||
- **Plan Your Next Trip** 📃: Take the guesswork out of planning your next adventure with an easy-to-use itinerary planner.
|
||||
- Itineraries can be created for any number of days and can include multiple destinations.
|
||||
- Itineraries include many planning features like flight information, notes, checklists, and links to external resources.
|
||||
- Itineraries can be shared with friends and family for collaborative planning.
|
||||
- **Share Your Experiences** 📸: Share your adventures with friends and family and collaborate on trips together.
|
||||
- Locations and itineraries can be shared via a public link or directly with other AdventureLog users.
|
||||
- Collaborators can view and edit shared itineraries (collections), making planning a breeze.
|
||||
<div class="al-overview-features">
|
||||
|
||||
<div class="al-overview-feature">
|
||||
<span class="al-overview-feature__icon" aria-hidden="true">📍</span>
|
||||
<div class="al-overview-feature__body">
|
||||
<h3>Log locations & visits</h3>
|
||||
<p>More than a pin on a map — dates, notes, photos, categories, trails, and visit history.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="al-overview-feature">
|
||||
<span class="al-overview-feature__icon" aria-hidden="true">✈️</span>
|
||||
<div class="al-overview-feature__body">
|
||||
<h3>Plan trips & itineraries</h3>
|
||||
<p>Multi-day collections with flights, lodging, checklists, calendar views, and shared planning.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="al-overview-feature">
|
||||
<span class="al-overview-feature__icon" aria-hidden="true">🌍</span>
|
||||
<div class="al-overview-feature__body">
|
||||
<h3>Track your world travel</h3>
|
||||
<p>Countries, regions, and cities on an interactive map — stats, milestones, and bucket lists.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
## See it in action
|
||||
|
||||
<div class="al-overview-shots">
|
||||
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/seanmorley15/AdventureLog/refs/heads/main/brand/screenshots/adventures.png" alt="AdventureLog location list with map, filters, and categories" loading="lazy" />
|
||||
<figcaption>Locations — browse, filter, and organize every place</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/seanmorley15/AdventureLog/refs/heads/main/brand/screenshots/map.png" alt="AdventureLog interactive world map with location pins" loading="lazy" />
|
||||
<figcaption>World map — pins, filters, and visit status at a glance</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/seanmorley15/AdventureLog/refs/heads/main/brand/screenshots/itinerary.png" alt="AdventureLog trip itinerary planner" loading="lazy" />
|
||||
<figcaption>Trip planning — itineraries, notes, and daily activities</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/seanmorley15/AdventureLog/refs/heads/main/brand/screenshots/dashboard.png" alt="AdventureLog travel statistics dashboard" loading="lazy" />
|
||||
<figcaption>Dashboard — travel stats and progress overview</figcaption>
|
||||
</figure>
|
||||
|
||||
</div>
|
||||
|
||||
## Why AdventureLog?
|
||||
|
||||
AdventureLog was created to solve a problem: the lack of a modern, open-source, user-friendly travel companion. Many existing travel apps are either too complex, too expensive, or too closed-off to be useful for the average traveler. AdventureLog aims to be the opposite: simple, beautiful, and open to everyone.
|
||||
| | AdventureLog | Typical closed travel apps |
|
||||
| --- | --- | --- |
|
||||
| **Ownership** | Your data on your server | Locked in a vendor cloud |
|
||||
| **Cost** | Free to self-host (GPL-3.0) | Subscriptions and upsells |
|
||||
| **Privacy** | You control access and sharing | Opaque data policies |
|
||||
| **Customization** | Open source — extend and integrate | Fixed feature set |
|
||||
| **Scope** | Locations, itineraries, and world travel in one app | Often split across multiple tools |
|
||||
|
||||
### Open Source (GPL-3.0)
|
||||
::: tip Built for real travelers
|
||||
AdventureLog started as a simple idea — track where you've been — and grew into a full travel companion. The goal is the opposite of bloated, expensive, closed apps: **simple, beautiful, and open to everyone**.
|
||||
:::
|
||||
|
||||
AdventureLog is open-source software, licensed under the GPL-3.0 license. This means that you are free to use, modify, and distribute AdventureLog as you see fit. The source code is available on GitHub, and contributions are welcome from anyone who wants to help improve the project.
|
||||
## Tech stack
|
||||
|
||||
## About the Maintainer
|
||||
| Layer | Technologies |
|
||||
| ----- | ------------ |
|
||||
| **Frontend** | SvelteKit, Tailwind CSS, DaisyUI, MapLibre GL |
|
||||
| **Backend** | Django, Django REST Framework, PostGIS |
|
||||
| **Database** | PostgreSQL with PostGIS |
|
||||
| **Deployment** | Docker, Docker Compose, Kubernetes |
|
||||
|
||||
Hi, I'm [Sean Morley](https://seanmorley.com), the creator of AdventureLog. I'm an Electrical Engineering student at the University of Connecticut, and I'm passionate about open-source software and building modern tools that help people solve real-world problems. I created AdventureLog to solve a problem: the lack of a modern, open-source, user-friendly travel companion. Many existing travel apps are either too complex, too expensive, or too closed-off to be useful for the average traveler. AdventureLog aims to be the opposite: simple, beautiful, and open to everyone.
|
||||
## Open source
|
||||
|
||||
I hope you enjoy using AdventureLog as much as I enjoy creating it! If you have any questions, feedback, or suggestions, feel free to reach out to me via the email address listed on my website. I'm always happy to hear from users and help in any way I can. Thank you for using AdventureLog, and happy travels! 🌍
|
||||
AdventureLog is licensed under **GPL-3.0**. Use it, modify it, and share it freely.
|
||||
|
||||
If you want to check out the origins of AdventureLog and the timeline, process, and story of its development, check out the [Development Timeline](../changelogs/development_timeline.md).
|
||||
| Resource | Link |
|
||||
| -------- | ---- |
|
||||
| Source code | [github.com/seanmorley15/AdventureLog](https://github.com/seanmorley15/AdventureLog) |
|
||||
| Report issues | [GitHub Issues](https://github.com/seanmorley15/AdventureLog/issues) |
|
||||
| Contribute | [Contributing guide](https://github.com/seanmorley15/AdventureLog/blob/main/CONTRIBUTING.md) |
|
||||
| License | [GPL-3.0](https://github.com/seanmorley15/AdventureLog/blob/main/LICENSE) |
|
||||
|
||||
## Get started
|
||||
|
||||
| I want to… | Go to |
|
||||
| ---------- | ----- |
|
||||
| Install AdventureLog | [Getting Started](/docs/install/getting_started) |
|
||||
| Run All-in-One Docker (recommended) | [AIO Docker](/docs/install/aio) |
|
||||
| Learn how to use the app | [Usage guide](/docs/usage/usage) |
|
||||
| Configure integrations & env vars | [Environment Variables](/docs/configuration/environment_variables) |
|
||||
| Try before installing | [Live demo](https://demo.adventurelog.app) |
|
||||
|
||||
## About the creator
|
||||
|
||||
Hi, I'm **[Sean Morley](https://seanmorley.com)** — an Electrical Engineering student at the University of Connecticut and the creator of AdventureLog. I'm passionate about open-source software and building tools that solve real problems for real people.
|
||||
|
||||
If you want the story behind the project — timeline, milestones, and how it evolved — read the [Development Timeline](../changelogs/development_timeline.md).
|
||||
|
||||
## Community
|
||||
|
||||
| Channel | Link |
|
||||
| ------- | ---- |
|
||||
| Discord | [discord.gg/wRbQ9Egr8C](https://discord.gg/wRbQ9Egr8C) |
|
||||
| GitHub | [seanmorley15/AdventureLog](https://github.com/seanmorley15/AdventureLog) |
|
||||
| Website | [seanmorley.com](https://seanmorley.com) |
|
||||
| Support | [Sponsor / support](https://seanmorley.com/sponsor) |
|
||||
|
||||
Thank you for using AdventureLog — happy travels!
|
||||
|
||||
@@ -5,10 +5,10 @@ title: AdventureLog — Self-Hosted Travel Log & Trip Planner
|
||||
description: Log locations with photos and notes, plan multi-day itineraries, and track countries on an interactive world map. AdventureLog is the open-source travel companion for remembering every trip.
|
||||
---
|
||||
|
||||
<HomeInstall />
|
||||
|
||||
<HomeShowcase />
|
||||
|
||||
<HomeInstall />
|
||||
|
||||
<HomePillars />
|
||||
|
||||
<HomeSocialProof />
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.6.4"
|
||||
"@braintree/sanitize-url": "^7.1.2",
|
||||
"cytoscape": "^3.34.0",
|
||||
"cytoscape-cose-bilkent": "^4.1.0",
|
||||
"dayjs": "^1.11.21",
|
||||
"debug": "^4.4.3",
|
||||
"mermaid": "^11.15.0",
|
||||
"vitepress": "^1.6.4",
|
||||
"vitepress-plugin-mermaid": "^2.0.17"
|
||||
},
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
|
||||
902
documentation/pnpm-lock.yaml
generated
902
documentation/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user