serve static assets from local public/ instead of static.officer.dev, simplify gmail history 404/410 handling

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 17:07:55 +00:00
co-authored by Claude Opus 4.7
parent 3540d53a00
commit e0bfc3d961
16 changed files with 38 additions and 36 deletions
+2 -2
View File
@@ -2,8 +2,8 @@ import { PixelGrid } from '../../workspaces/components/PixelGrid';
import { DuckAvatar } from './DuckAvatar';
import { WaitlistForm } from './WaitlistForm';
const landscapeBg = 'https://static.officer.dev/landscape1.webp';
const logoSrc = 'https://static.officer.dev/officer-logo.svg';
const landscapeBg = '/landscape1.webp';
const logoSrc = '/officer-logo.svg';
export const App = () => {
return (
+2 -2
View File
@@ -3,8 +3,8 @@ import { OrbitControls, useGLTF, useAnimations } from '@react-three/drei';
import { useEffect, useState, useRef } from 'react';
function DuckModel({ onLoaded }: { onLoaded: () => void }) {
const character = useGLTF('https://static.officer.dev/duck3D/Character_output.glb');
const animations = useGLTF('https://static.officer.dev/duck3D/Meshy_Merged_Animations.glb');
const character = useGLTF('/duck3D/Character_output.glb');
const animations = useGLTF('/duck3D/Meshy_Merged_Animations.glb');
const meshRef = useRef<any>(null);
const { actions } = useAnimations(animations.animations, meshRef);
+5 -5
View File
@@ -11,7 +11,7 @@
<meta property="og:title" content="Officer Dev (Alpha)" />
<meta property="og:description" content="Your all-purpose AI operating system. Personal AI assistant, terminal, file browser, code editor, and customizable dashboards — all self-hosted." />
<meta property="og:image" content="https://officer.dev/og-image-v3.jpg" />
<meta property="og:image:secure_url" content="https://static.officer.dev/og-image-v3.jpg" />
<meta property="og:image:secure_url" content="https://officer.dev/og-image-v3.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:type" content="image/jpeg" />
@@ -25,10 +25,10 @@
<meta name="twitter:image" content="https://officer.dev/og-image-v3.jpg" />
<!-- Favicons & App Icons -->
<link rel="icon" type="image/x-icon" href="https://static.officer.dev/favicon.ico" />
<link rel="icon" type="image/png" sizes="96x96" href="https://static.officer.dev/favicon-96x96.png" />
<link rel="apple-touch-icon" sizes="180x180" href="https://static.officer.dev/apple-touch-icon.png" />
<link rel="manifest" href="https://static.officer.dev/site.webmanifest" />
<link rel="icon" type="image/x-icon" href="https://officer.dev/favicon.ico" />
<link rel="icon" type="image/png" sizes="96x96" href="https://officer.dev/favicon-96x96.png" />
<link rel="apple-touch-icon" sizes="180x180" href="https://officer.dev/apple-touch-icon.png" />
<link rel="manifest" href="https://officer.dev/site.webmanifest" />
<meta name="theme-color" content="#1F2620" />
<script type="module" src="./main.tsx" async></script>
@@ -1,7 +1,7 @@
import { DuckAvatar } from "./DuckAvatar";
import { PixelGrid } from "@/components/PixelGrid";
import { useGlobal } from 'hooks/useGlobal';
const landscapebg = 'https://static.officer.dev/landscape1.webp';
const landscapebg = '/landscape1.webp';
export function Background() {
const [duckHidden] = useGlobal('DUCK_HIDDEN', false);
@@ -8,8 +8,8 @@ type DuckModelProps = {
};
export function DuckModel({ onUpdate, onAssetsLoaded, currentSection }: DuckModelProps) {
const character = useGLTF('https://static.officer.dev/duck3D/Character_output.glb');
const animations = useGLTF('https://static.officer.dev/duck3D/Meshy_Merged_Animations.glb');
const character = useGLTF('/duck3D/Character_output.glb');
const animations = useGLTF('/duck3D/Meshy_Merged_Animations.glb');
const meshRef = useRef<any>(null);
const { actions } = useAnimations(animations.animations, meshRef);
@@ -1,5 +1,5 @@
import { PixelGrid } from "@/components/PixelGrid";
const landscapebg = 'https://static.officer.dev/landscape1.webp';
const landscapebg = '/landscape1.webp';
export function Background() {
return (
@@ -32,7 +32,7 @@ export function Header({ dockItems }: HeaderProps) {
)}
<Link to="/">
<img
src="https://static.officer.dev/officer-logo.svg"
src="/officer-logo.svg"
alt="Officer"
className="h-8 md:h-12 w-auto"
style={{ transform: 'skew(-15deg, -2deg)' }}
@@ -85,7 +85,7 @@ export const BrowserRelay = () => {
Download and unzip the extension, then load it in Chrome:
</p>
<a
href="https://static.officer.dev/browser-relay-extension.zip"
href="/browser-relay-extension.zip"
download
className="flex items-center justify-center gap-2 w-full h-11 rounded-md border border-duck-dark/15 dark:border-foreground/15 text-sm font-medium hover:bg-duck-dark/5 dark:hover:bg-foreground/5 transition-colors"
>
+5 -5
View File
@@ -11,7 +11,7 @@
<meta property="og:title" content="Officer Dev (Alpha)" />
<meta property="og:description" content="Your all-purpose AI operating system. Personal AI assistant, terminal, file browser, code editor, and customizable dashboards — all self-hosted." />
<meta property="og:image" content="https://alpha.officer.dev/og-image-v3.jpg" />
<meta property="og:image:secure_url" content="https://static.officer.dev/og-image-v3.jpg" />
<meta property="og:image:secure_url" content="https://alpha.officer.dev/og-image-v3.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:type" content="image/jpeg" />
@@ -25,10 +25,10 @@
<meta name="twitter:image" content="https://alpha.officer.dev/og-image-v3.jpg" />
<!-- Favicons & App Icons -->
<link rel="icon" type="image/x-icon" href="https://static.officer.dev/favicon.ico" />
<link rel="icon" type="image/png" sizes="96x96" href="https://static.officer.dev/favicon-96x96.png" />
<link rel="apple-touch-icon" sizes="180x180" href="https://static.officer.dev/apple-touch-icon.png" />
<link rel="manifest" href="https://static.officer.dev/site.webmanifest" />
<link rel="icon" type="image/x-icon" href="https://alpha.officer.dev/favicon.ico" />
<link rel="icon" type="image/png" sizes="96x96" href="https://alpha.officer.dev/favicon-96x96.png" />
<link rel="apple-touch-icon" sizes="180x180" href="https://alpha.officer.dev/apple-touch-icon.png" />
<link rel="manifest" href="https://alpha.officer.dev/site.webmanifest" />
<meta name="theme-color" content="#1F2620" />
<script src="https://cdn.jsdelivr.net/npm/eruda"></script>