diff --git a/ui/src/routes/+layout.server.ts b/ui/src/routes/+layout.server.ts
index ad666f9..4c6e93b 100644
--- a/ui/src/routes/+layout.server.ts
+++ b/ui/src/routes/+layout.server.ts
@@ -4,7 +4,7 @@ import { getSettings } from '$lib/server/pocketbase';
import { log } from '$lib/server/logger';
// Routes that are accessible without being logged in
-const PUBLIC_ROUTES = new Set(['/login', '/disclaimer', '/privacy', '/dmca']);
+const PUBLIC_ROUTES = new Set(['/login', '/disclaimer', '/privacy', '/dmca', '/terms']);
export const load: LayoutServerLoad = async ({ locals, url }) => {
// Allow /auth/* (OAuth initiation + callbacks) without login
diff --git a/ui/src/routes/terms/+page.svelte b/ui/src/routes/terms/+page.svelte
new file mode 100644
index 0000000..24d62c4
--- /dev/null
+++ b/ui/src/routes/terms/+page.svelte
@@ -0,0 +1,51 @@
+
+ By using libnovel you agree to these terms. If you do not agree, please do not use the service. +
+ ++ libnovel aggregates publicly available web novel content from third-party sources for + personal reading convenience. We do not claim ownership of any novel content displayed on + the site. If you are a rights holder and wish to have content removed, please see our + DMCA policy. +
+ ++ You are responsible for maintaining the security of your account. libnovel is not liable + for any loss or damage resulting from unauthorised access to your account. +
+ ++ The service is provided "as is" without warranty of any kind. We do not guarantee + availability, accuracy, or completeness of any content. See our full + disclaimer + for details. +
+ ++ We may update these terms at any time. Continued use of the service after changes are + posted constitutes acceptance of the revised terms. +
+ +Last updated: {new Date().getFullYear()}
+