Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion apps/web/content/legal/terms.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ You may opt out of marketing communications at any time by clicking the "unsubsc

## 9. Privacy and Third-Party Services

Your use of the Service is also governed by our [Privacy Policy](/legal/privacy). Please review it to understand our practices.
Your use of the Service is also governed by our [Privacy Policy](/privacy). Please review it to understand our practices.

The Service may integrate with third-party services to provide certain features, including cloud-based transcription, AI-powered summarization, payment processing, and analytics. When you enable cloud-based features, your data may be processed by our sub-processors. You acknowledge and agree that your use of these features is subject to the terms and privacy practices of such third-party services.

Expand Down
38 changes: 34 additions & 4 deletions apps/web/netlify.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ force = true

[[redirects]]
from = "https://hyprnote.com/legal/*"
to = "https://char.com/legal/:splat"
to = "https://anarlog.so/:splat"
status = 301
force = true

Expand Down Expand Up @@ -203,7 +203,7 @@ status = 301
force = true

# Domain migration: char.com -> anarlog.so (301 for SEO)
# Char is shut down except for /blog/* and /legal/* which redirect to anarlog.so
# Char is shut down except for /blog/* and root legal pages which redirect to anarlog.so

[[redirects]]
from = "https://char.com/blog/*"
Expand All @@ -217,14 +217,44 @@ to = "https://anarlog.so/blog/:splat"
status = 301
force = true

[[redirects]]
from = "/legal/*"
to = "/:splat"
status = 301
force = true

[[redirects]]
from = "https://char.com/legal/*"
to = "https://anarlog.so/legal/:splat"
to = "https://anarlog.so/:splat"
status = 301
force = true

[[redirects]]
from = "https://www.char.com/legal/*"
to = "https://anarlog.so/legal/:splat"
to = "https://anarlog.so/:splat"
status = 301
force = true

[[redirects]]
from = "https://char.com/privacy"
to = "https://anarlog.so/privacy"
status = 301
force = true

[[redirects]]
from = "https://www.char.com/privacy"
to = "https://anarlog.so/privacy"
status = 301
force = true

[[redirects]]
from = "https://char.com/terms"
to = "https://anarlog.so/terms"
status = 301
force = true

[[redirects]]
from = "https://www.char.com/terms"
to = "https://anarlog.so/terms"
Comment thread
cursor[bot] marked this conversation as resolved.
status = 301
force = true
3 changes: 2 additions & 1 deletion apps/web/public/robots.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ Allow: /docs
Allow: /changelog
Allow: /pricing
Allow: /enterprise
Allow: /legal/
Allow: /privacy
Allow: /terms
Allow: /download
Allow: /faq
Allow: /about
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,27 @@
import { MDXContent } from "@content-collections/mdx/react";
import { createFileRoute, Link, notFound } from "@tanstack/react-router";
import { allLegals } from "content-collections";
import { Link } from "@tanstack/react-router";
import type { Legal } from "content-collections";

import { mdxComponents } from "@/components/mdx-components";
import { ANARLOG_SITE_URL } from "@/lib/seo";

export const Route = createFileRoute("/legal/$slug")({
component: Component,
loader: async ({ params }) => {
const doc = allLegals.find((d) => d.slug === params.slug);
if (!doc) {
throw notFound();
}
return { doc };
},
head: ({ loaderData }) => {
const doc = loaderData?.doc;
if (!doc) return {};
const url = `${ANARLOG_SITE_URL}/legal/${doc.slug}`;
return {
links: [{ rel: "canonical", href: url }],
meta: [
{ title: `${doc.title} — Anarlog` },
{ name: "description", content: doc.summary || doc.title },
{ property: "og:title", content: doc.title },
{ property: "og:description", content: doc.summary || doc.title },
{ property: "og:url", content: url },
],
};
},
});
import { mdxComponents } from "./mdx-components";

function Component() {
const { doc } = Route.useLoaderData();
export function legalHead(doc: Legal, path: "/privacy" | "/terms") {
const url = `${ANARLOG_SITE_URL}${path}`;

return {
links: [{ rel: "canonical", href: url }],
meta: [
{ title: `${doc.title} — Anarlog` },
{ name: "description", content: doc.summary || doc.title },
{ property: "og:title", content: doc.title },
{ property: "og:description", content: doc.summary || doc.title },
{ property: "og:url", content: url },
],
};
}

export function LegalDocument({ doc }: { doc: Legal }) {
return (
<main className="mx-auto max-w-3xl px-6 py-16">
<Link
Expand Down
12 changes: 2 additions & 10 deletions apps/web/src/components/site-footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,10 @@ export function SiteFooter() {
<Link to="/changelog/" className="hover:text-[#181613]">
Changelog
</Link>
<Link
to="/legal/$slug/"
params={{ slug: "privacy" }}
className="hover:text-[#181613]"
>
<Link to="/privacy/" className="hover:text-[#181613]">
Privacy
</Link>
<Link
to="/legal/$slug/"
params={{ slug: "terms" }}
className="hover:text-[#181613]"
>
<Link to="/terms/" className="hover:text-[#181613]">
Terms
</Link>
</nav>
Expand Down
63 changes: 42 additions & 21 deletions apps/web/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@

import { Route as rootRouteImport } from './routes/__root'
import { Route as UpdatePasswordRouteImport } from './routes/update-password'
import { Route as TermsRouteImport } from './routes/terms'
import { Route as ResetPasswordRouteImport } from './routes/reset-password'
import { Route as PrivacyRouteImport } from './routes/privacy'
import { Route as FoundersRouteImport } from './routes/founders'
import { Route as AuthRouteImport } from './routes/auth'
import { Route as ViewRouteRouteImport } from './routes/_view/route'
import { Route as IndexRouteImport } from './routes/index'
import { Route as ChangelogIndexRouteImport } from './routes/changelog/index'
import { Route as BlogIndexRouteImport } from './routes/blog/index'
import { Route as LegalSlugRouteImport } from './routes/legal/$slug'
import { Route as ChangelogVersionRouteImport } from './routes/changelog/$version'
import { Route as BlogSlugRouteImport } from './routes/blog/$slug'
import { Route as ApiTemplatesRouteImport } from './routes/api/templates'
Expand Down Expand Up @@ -80,11 +81,21 @@ const UpdatePasswordRoute = UpdatePasswordRouteImport.update({
path: '/update-password',
getParentRoute: () => rootRouteImport,
} as any)
const TermsRoute = TermsRouteImport.update({
id: '/terms',
path: '/terms',
getParentRoute: () => rootRouteImport,
} as any)
const ResetPasswordRoute = ResetPasswordRouteImport.update({
id: '/reset-password',
path: '/reset-password',
getParentRoute: () => rootRouteImport,
} as any)
const PrivacyRoute = PrivacyRouteImport.update({
id: '/privacy',
path: '/privacy',
getParentRoute: () => rootRouteImport,
} as any)
const FoundersRoute = FoundersRouteImport.update({
id: '/founders',
path: '/founders',
Expand Down Expand Up @@ -114,11 +125,6 @@ const BlogIndexRoute = BlogIndexRouteImport.update({
path: '/blog/',
getParentRoute: () => rootRouteImport,
} as any)
const LegalSlugRoute = LegalSlugRouteImport.update({
id: '/legal/$slug',
path: '/legal/$slug',
getParentRoute: () => rootRouteImport,
} as any)
const ChangelogVersionRoute = ChangelogVersionRouteImport.update({
id: '/changelog/$version',
path: '/changelog/$version',
Expand Down Expand Up @@ -412,7 +418,9 @@ export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/auth': typeof AuthRoute
'/founders': typeof FoundersRoute
'/privacy': typeof PrivacyRoute
'/reset-password': typeof ResetPasswordRoute
'/terms': typeof TermsRoute
'/update-password': typeof UpdatePasswordRoute
'/app': typeof ViewAppRouteRouteWithChildren
'/pricing': typeof ViewPricingRoute
Expand All @@ -421,7 +429,6 @@ export interface FileRoutesByFullPath {
'/api/templates': typeof ApiTemplatesRoute
'/blog/$slug': typeof BlogSlugRoute
'/changelog/$version': typeof ChangelogVersionRoute
'/legal/$slug': typeof LegalSlugRoute
'/blog/': typeof BlogIndexRoute
'/changelog/': typeof ChangelogIndexRoute
'/app/account': typeof ViewAppAccountRoute
Expand Down Expand Up @@ -478,15 +485,16 @@ export interface FileRoutesByTo {
'/': typeof IndexRoute
'/auth': typeof AuthRoute
'/founders': typeof FoundersRoute
'/privacy': typeof PrivacyRoute
'/reset-password': typeof ResetPasswordRoute
'/terms': typeof TermsRoute
'/update-password': typeof UpdatePasswordRoute
'/pricing': typeof ViewPricingRoute
'/api/media-upload': typeof ApiMediaUploadRoute
'/api/shortcuts': typeof ApiShortcutsRoute
'/api/templates': typeof ApiTemplatesRoute
'/blog/$slug': typeof BlogSlugRoute
'/changelog/$version': typeof ChangelogVersionRoute
'/legal/$slug': typeof LegalSlugRoute
'/blog': typeof BlogIndexRoute
'/changelog': typeof ChangelogIndexRoute
'/app/account': typeof ViewAppAccountRoute
Expand Down Expand Up @@ -545,7 +553,9 @@ export interface FileRoutesById {
'/_view': typeof ViewRouteRouteWithChildren
'/auth': typeof AuthRoute
'/founders': typeof FoundersRoute
'/privacy': typeof PrivacyRoute
'/reset-password': typeof ResetPasswordRoute
'/terms': typeof TermsRoute
'/update-password': typeof UpdatePasswordRoute
'/_view/app': typeof ViewAppRouteRouteWithChildren
'/_view/pricing': typeof ViewPricingRoute
Expand All @@ -554,7 +564,6 @@ export interface FileRoutesById {
'/api/templates': typeof ApiTemplatesRoute
'/blog/$slug': typeof BlogSlugRoute
'/changelog/$version': typeof ChangelogVersionRoute
'/legal/$slug': typeof LegalSlugRoute
'/blog/': typeof BlogIndexRoute
'/changelog/': typeof ChangelogIndexRoute
'/_view/app/account': typeof ViewAppAccountRoute
Expand Down Expand Up @@ -613,7 +622,9 @@ export interface FileRouteTypes {
| '/'
| '/auth'
| '/founders'
| '/privacy'
| '/reset-password'
| '/terms'
| '/update-password'
| '/app'
| '/pricing'
Expand All @@ -622,7 +633,6 @@ export interface FileRouteTypes {
| '/api/templates'
| '/blog/$slug'
| '/changelog/$version'
| '/legal/$slug'
| '/blog/'
| '/changelog/'
| '/app/account'
Expand Down Expand Up @@ -679,15 +689,16 @@ export interface FileRouteTypes {
| '/'
| '/auth'
| '/founders'
| '/privacy'
| '/reset-password'
| '/terms'
| '/update-password'
| '/pricing'
| '/api/media-upload'
| '/api/shortcuts'
| '/api/templates'
| '/blog/$slug'
| '/changelog/$version'
| '/legal/$slug'
| '/blog'
| '/changelog'
| '/app/account'
Expand Down Expand Up @@ -745,7 +756,9 @@ export interface FileRouteTypes {
| '/_view'
| '/auth'
| '/founders'
| '/privacy'
| '/reset-password'
| '/terms'
| '/update-password'
| '/_view/app'
| '/_view/pricing'
Expand All @@ -754,7 +767,6 @@ export interface FileRouteTypes {
| '/api/templates'
| '/blog/$slug'
| '/changelog/$version'
| '/legal/$slug'
| '/blog/'
| '/changelog/'
| '/_view/app/account'
Expand Down Expand Up @@ -813,14 +825,15 @@ export interface RootRouteChildren {
ViewRouteRoute: typeof ViewRouteRouteWithChildren
AuthRoute: typeof AuthRoute
FoundersRoute: typeof FoundersRoute
PrivacyRoute: typeof PrivacyRoute
ResetPasswordRoute: typeof ResetPasswordRoute
TermsRoute: typeof TermsRoute
UpdatePasswordRoute: typeof UpdatePasswordRoute
ApiMediaUploadRoute: typeof ApiMediaUploadRoute
ApiShortcutsRoute: typeof ApiShortcutsRoute
ApiTemplatesRoute: typeof ApiTemplatesRoute
BlogSlugRoute: typeof BlogSlugRoute
ChangelogVersionRoute: typeof ChangelogVersionRoute
LegalSlugRoute: typeof LegalSlugRoute
BlogIndexRoute: typeof BlogIndexRoute
ChangelogIndexRoute: typeof ChangelogIndexRoute
ApiAssetsSplatRoute: typeof ApiAssetsSplatRoute
Expand Down Expand Up @@ -867,13 +880,27 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof UpdatePasswordRouteImport
parentRoute: typeof rootRouteImport
}
'/terms': {
id: '/terms'
path: '/terms'
fullPath: '/terms'
preLoaderRoute: typeof TermsRouteImport
parentRoute: typeof rootRouteImport
}
'/reset-password': {
id: '/reset-password'
path: '/reset-password'
fullPath: '/reset-password'
preLoaderRoute: typeof ResetPasswordRouteImport
parentRoute: typeof rootRouteImport
}
'/privacy': {
id: '/privacy'
path: '/privacy'
fullPath: '/privacy'
preLoaderRoute: typeof PrivacyRouteImport
parentRoute: typeof rootRouteImport
}
'/founders': {
id: '/founders'
path: '/founders'
Expand Down Expand Up @@ -916,13 +943,6 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof BlogIndexRouteImport
parentRoute: typeof rootRouteImport
}
'/legal/$slug': {
id: '/legal/$slug'
path: '/legal/$slug'
fullPath: '/legal/$slug'
preLoaderRoute: typeof LegalSlugRouteImport
parentRoute: typeof rootRouteImport
}
'/changelog/$version': {
id: '/changelog/$version'
path: '/changelog/$version'
Expand Down Expand Up @@ -1379,14 +1399,15 @@ const rootRouteChildren: RootRouteChildren = {
ViewRouteRoute: ViewRouteRouteWithChildren,
AuthRoute: AuthRoute,
FoundersRoute: FoundersRoute,
PrivacyRoute: PrivacyRoute,
ResetPasswordRoute: ResetPasswordRoute,
TermsRoute: TermsRoute,
UpdatePasswordRoute: UpdatePasswordRoute,
ApiMediaUploadRoute: ApiMediaUploadRoute,
ApiShortcutsRoute: ApiShortcutsRoute,
ApiTemplatesRoute: ApiTemplatesRoute,
BlogSlugRoute: BlogSlugRoute,
ChangelogVersionRoute: ChangelogVersionRoute,
LegalSlugRoute: LegalSlugRoute,
BlogIndexRoute: BlogIndexRoute,
ChangelogIndexRoute: ChangelogIndexRoute,
ApiAssetsSplatRoute: ApiAssetsSplatRoute,
Expand Down
Loading
Loading