chore: deploy to Cloudflare Pages and update branding

- Add Cloudflare Pages deployment for landing page (snapotter.com) and
  docs (docs.snapotter.com)
- Create deploy-landing.yml and update deploy-docs.yml workflows
- Update CI to ignore apps/landing/** paths
- Fix logo transparency (remove white background) across all apps
- Recreate social-preview.png with SnapOtter branding
- Update all docs URLs from GitHub Pages to docs.snapotter.com
- Update VitePress config: light theme default, fix llms.txt paths
- Add .vitepress/cache/ and .env.* to gitignore
This commit is contained in:
SnapOtter
2026-04-24 18:06:29 +08:00
parent fbaa603d03
commit 0309e0f680
174 changed files with 970 additions and 926 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
import type { AnalyticsConfig } from "@ashim/shared";
import * as Sentry from "@sentry/react";
import type { AnalyticsConfig } from "@snapotter/shared";
import posthogJs from "posthog-js";
let posthog: import("posthog-js").PostHog | null = null;
+4 -4
View File
@@ -46,7 +46,7 @@ export function parseApiError(
function getToken(): string {
try {
return localStorage.getItem("ashim-token") || "";
return localStorage.getItem("snapotter-token") || "";
} catch {
return "";
}
@@ -62,7 +62,7 @@ export function formatHeaders(init?: HeadersInit): Headers {
}
if (!token) {
try {
const consent = localStorage.getItem("ashim-analytics-consent");
const consent = localStorage.getItem("snapotter-analytics-consent");
if (consent === "true" || consent === "false") {
headers.set("X-Analytics-Consent", consent);
}
@@ -157,11 +157,11 @@ export async function apiDelete<T>(path: string): Promise<T> {
}
export function setToken(token: string) {
localStorage.setItem("ashim-token", token);
localStorage.setItem("snapotter-token", token);
}
export function clearToken() {
localStorage.removeItem("ashim-token");
localStorage.removeItem("snapotter-token");
}
// ── File Upload / Download ──────────────────────────────────────
+1 -1
View File
@@ -49,7 +49,7 @@ import {
ZoomIn,
} from "lucide-react";
// Only the icons actually used by tool definitions in @ashim/shared constants.
// Only the icons actually used by tool definitions in @snapotter/shared constants.
// Avoids `import * as icons from "lucide-react"` which pulls the entire 1000+ icon library.
export const ICON_MAP: Record<string, LucideIcon> = {
CheckCircle2,